# Lab: Musical Frequency Explorer
## **Objective**
Create a music player system using the TK37 passive buzzer to generate tones, play melodies, and create musical compositions with different frequencies and timing.
## **Required Components**

1. **Lonely Binary UNO R3** - Main Arduino board
2. **TinkerBlock UNO R3 Shield** - Expansion shield that plugs onto the UNO R3
3. **TinkerBlock TK37** - Passive Buzzer Module
## **Theory**
### **Passive Buzzer vs Active Buzzer**
- **Active Buzzer**: Built-in oscillator, only on/off control
- **Passive Buzzer**: No oscillator, requires frequency control
- **Frequency Control**: Can generate any frequency (20Hz - 20kHz)
- **Tone Generation**: Uses `tone()` function for precise frequency control
### **Musical Notes and Frequencies**
- **A4 (440Hz)**: Standard reference note
- **Octave Relationship**: Each octave doubles the frequency
- **Note Frequencies**: Mathematical relationship between notes
- **Tempo**: Beats per minute (BPM) for rhythm control
### **Music Theory Basics**
- **Notes**: A, B, C, D, E, F, G (with sharps/flats)
- **Octaves**: Different pitch ranges (C4, C5, C6, etc.)
- **Duration**: Whole, half, quarter, eighth notes
- **Rest**: Silence periods in music
## **Wiring Instructions**
### **TK37 Passive Buzzer Pinout**
- **GND** → Arduino GND
- **VCC** → Arduino 5V
- **NC** → No Connection
- **Signal** → Arduino Digital Pin D7
### **Connection Diagram**

```
UNO R3 + Shield
└── Digital Pin D7 ──→ TK37 Signal
```
## **Basic Tone Generation Code**
```cpp
// Basic Tone Generation with TK37 Passive Buzzer
// Pin definitions
#define BUZZER_PIN 7 // TK37 Passive Buzzer on D9
// Musical note frequencies (Hz)
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784
#define NOTE_A5 880
#define NOTE_B5 988
void setup() {
// Initialize serial communication
Serial.begin(9600);
Serial.println("TK37 Passive Buzzer Music Player");
Serial.println("=================================");
// Initialize buzzer pin
pinMode(BUZZER_PIN, OUTPUT);
delay(1000);
Serial.println("Playing basic tones...");
Serial.println();
}
void loop() {
// Play ascending scale
Serial.println("Playing ascending C major scale:");
tone(BUZZER_PIN, NOTE_C4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_D4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_E4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_F4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_G4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_A4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_B4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_C5, 500);
delay(600);
noTone(BUZZER_PIN);
delay(1000);
// Play descending scale
Serial.println("Playing descending C major scale:");
tone(BUZZER_PIN, NOTE_C5, 500);
delay(600);
tone(BUZZER_PIN, NOTE_B4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_A4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_G4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_F4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_E4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_D4, 500);
delay(600);
tone(BUZZER_PIN, NOTE_C4, 500);
delay(600);
noTone(BUZZER_PIN);
delay(2000);
Serial.println("Scale complete. Restarting...");
Serial.println();
}
```
## **Code Explanation**
### **Pin Configuration and Constants**
```cpp
#define BUZZER_PIN 7 // TK37 Passive Buzzer on D7
```
- **BUZZER_PIN**: Defines the digital pin (D7) connected to the TK37 buzzer
- **Note Definitions**: Pre-defined frequencies for musical notes in Hz
- **Frequency Range**: C4 (262Hz) to B5 (988Hz) covers two octaves
### **Setup Function**
```cpp
void setup() {
Serial.begin(9600);
pinMode(BUZZER_PIN, OUTPUT);
}
```
- **Serial Communication**: Initializes serial monitor for debugging
- **Pin Configuration**: Sets buzzer pin as OUTPUT for tone generation
- **System Initialization**: Waits 1 second for system stabilization
### **Tone Generation Function**
```cpp
tone(BUZZER_PIN, NOTE_C4, 500);
delay(600);
```
- **tone() Function**: Generates specific frequency for specified duration
- **Frequency Parameter**: Musical note frequency in Hz
- **Duration Parameter**: How long to play the note (500ms)
- **Delay Timing**: 600ms total delay ensures note completion plus pause
### **Scale Playing Logic**
```cpp
// Ascending scale: C4 → D4 → E4 → F4 → G4 → A4 → B4 → C5
// Descending scale: C5 → B4 → A4 → G4 → F4 → E4 → D4 → C4
```
- **Note Sequence**: Follows C major scale pattern
- **Octave Transition**: C4 to C5 shows octave relationship
- **Consistent Timing**: 500ms note duration with 600ms total delay
- **Scale Completion**: noTone() stops sound between scales
### **Key Programming Concepts**
#### **Frequency Control**
- **Precise Frequencies**: Each note has exact mathematical frequency
- **Octave Relationship**: Each octave doubles the frequency (C4=262Hz, C5=523Hz)
- **Musical Accuracy**: Frequencies match standard musical tuning (A4=440Hz)
#### **Timing Control**
- **Note Duration**: 500ms provides clear, audible notes
- **Pause Timing**: 100ms pause between notes for clear separation
- **Scale Rhythm**: Consistent timing creates musical rhythm
- **Loop Structure**: 2-second pause between scale repetitions
#### **Serial Output**
- **Debug Information**: Shows which scale is currently playing
- **Progress Tracking**: Displays current operation status
- **User Feedback**: Confirms system is working correctly
- **Educational Value**: Helps understand musical concepts
### **Passive Buzzer Characteristics**
- **Frequency Control**: Can generate any frequency from 20Hz to 20kHz
- **Precise Tones**: tone() function provides accurate frequency generation
- **No Built-in Oscillator**: Requires external frequency control
- **Musical Flexibility**: Can play any musical note or custom frequency
- **Volume Control**: Limited volume control through frequency adjustment
## **Expected Output**
### **Serial Monitor Output**
```
TK37 Passive Buzzer Music Player
=================================
Playing basic tones...
Playing ascending C major scale:
[Ascending musical scale plays: C4, D4, E4, F4, G4, A4, B4, C5]
Playing descending C major scale:
[Descending musical scale plays: C5, B4, A4, G4, F4, E4, D4, C4]
Scale complete. Restarting...
```
### **Audio Output**
- **Ascending Scale**: Clear, ascending musical notes from low to high pitch
- **Descending Scale**: Clear, descending musical notes from high to low pitch
- **Note Clarity**: Each note should be distinct and recognizable
- **Rhythm**: Consistent timing creates musical rhythm
- **Octave Transition**: Clear difference between C4 and C5 octaves
### **Visual Indicators**
- **No Visual Output**: This lab focuses on audio generation
- **Serial Monitor**: Shows program status and progress
- **Arduino LED**: May blink during program execution
## **Troubleshooting**
### **No sound from buzzer:**
- **Check Wiring**: Verify TK37 is connected to D7 pin
- **Power Supply**: Ensure 5V and GND connections are secure
- **Pin Configuration**: Confirm pinMode(BUZZER_PIN, OUTPUT) is set
- **Test Simple Tone**: Try tone(BUZZER_PIN, 440, 1000) for basic test
### **Distorted or weak sound:**
- **Power Supply**: Check if 5V supply is stable and sufficient
- **Wiring Quality**: Ensure all connections are secure and clean
- **Frequency Range**: Test with different frequencies (200-2000Hz)
- **Buzzer Quality**: Verify TK37 module is functioning properly
### **Incorrect note frequencies:**
- **Note Definitions**: Check that note frequencies are correctly defined
- **Mathematical Accuracy**: Verify frequencies follow musical standards
- **Octave Relationship**: Ensure C5 is exactly double C4 frequency
- **Reference Note**: Confirm A4 = 440Hz for proper tuning
### **Timing issues:**
- **Note Duration**: Adjust 500ms duration if notes are too short/long
- **Pause Timing**: Modify 100ms pause for different rhythm
- **Scale Speed**: Change delay values to adjust overall tempo
- **Loop Timing**: Adjust 2-second pause between scale repetitions
### **Serial monitor issues:**
- **Baud Rate**: Ensure Serial.begin(9600) matches monitor setting
- **USB Connection**: Check Arduino is properly connected to computer
- **Driver Issues**: Verify Arduino drivers are installed correctly
- **Port Selection**: Select correct COM port in Arduino IDE
## **Applications**
### **Educational**
- **Music Theory**: Learn about musical notes and frequencies
- **Frequency Relationships**: Understand octave and scale relationships
- **Programming**: Practice timing and control structures
- **Audio Engineering**: Introduction to digital audio generation
### **Entertainment**
- **Musical Instruments**: Create simple electronic instruments
- **Game Development**: Add sound effects and musical elements
- **Interactive Projects**: Sound feedback for user interactions
- **Performance Art**: Audio-visual installations and performances
### **Commercial**
- **Product Testing**: Audio feedback for device testing
- **Alarm Systems**: Musical alarm tones and notifications
- **User Interfaces**: Audio confirmation for button presses
- **Accessibility**: Audio cues for visually impaired users
### **Prototyping**
- **Audio Prototypes**: Quick audio feedback during development
- **Concept Testing**: Validate audio requirements early
- **User Experience**: Test audio interaction patterns
- **Integration Testing**: Verify audio system integration
## **Customization Ideas**
### **Add More Musical Features:**
- **Additional Notes**: Include sharps, flats, and more octaves
- **Different Scales**: Implement minor, pentatonic, or blues scales
- **Chords**: Play multiple notes simultaneously
- **Arpeggios**: Play notes in sequence to create chord-like effects
### **Enhance Timing Control:**
- **Variable Tempo**: Adjustable speed for different musical styles
- **Rhythm Patterns**: Implement different rhythmic patterns
- **Accent Notes**: Emphasize certain notes with longer duration
- **Syncopation**: Create off-beat rhythmic patterns
### **Add Interactive Elements:**
- **Button Control**: Use buttons to trigger different scales
- **Potentiometer Control**: Adjust tempo or note selection with analog input
- **Light Sensor**: Change scales based on light intensity
- **Motion Sensor**: Trigger music with movement detection
### **Advanced Features:**
- **Melody Storage**: Store and play complete melodies
- **Random Generation**: Create random musical sequences
- **Pattern Recognition**: Learn and repeat user input patterns
- **MIDI Integration**: Connect to MIDI devices for professional music creation
## **Next Steps**
- **Learn Music Theory**: Study musical scales, chords, and composition
- **Explore Advanced Libraries**: Investigate Arduino music libraries
- **Build Musical Instruments**: Create complete electronic instruments
- **Study Audio Processing**: Learn about digital signal processing
- **Experiment with Effects**: Add reverb, echo, or other audio effects
## **Resources**
- **Musical Frequencies**: Standard note frequency tables and calculators
- **Music Theory**: Basic music theory and composition principles
- **Arduino Tone Library**: Advanced tone generation and control
- **Audio Engineering**: Digital audio processing and synthesis concepts
- **Electronic Music**: History and techniques of electronic music creation
TinkerBlock UNO R3 Starter Kit
Dive into the world of electronics, Arduino programming, and STEM projects with the Lonely Binary TinkerBlock Series Starter Kit.
- Choosing a selection results in a full page refresh.