Arduino Licht & Geluid Display: VS Volkslied
Onderdelen en Benodigdheden
| Arduino Nano R3 (ATmega328P, old bootloader) | 1 |
| Buzzer (16Ω) | 1 |
| Drukknoppen (6×6×6 mm) | 2 |
| Kipschakelaar (voeding) | 1 |
| Weerstand 330Ω | 3 |
| LED's (2× rood 2.2V, 2× wit 3.2V, 2× blauw 3.2V) | 6 |
| Soldeerbaar Experimenteerprintje (mini) | 1 |
| 9V Blokbatterij (met houder) | 1 |
Benodigde Tools
- Solderbout
Over Dit Project
Dit project speelt twee melodieën met gesynchroniseerde LED-animaties: de US Volkslied (The Star-Spangled Banner) en een Charge-fanfare. Tussen de liedjes door geeft een "twinkle" effect willekeurige lichtflitsen.
De code maakt zwaar gebruik van functies om de noten en LED-sturing modulair te houden. Doel: delen van ontwerp/coderingslessen voor soortgelijke projecten.
Hardware Ontwerp
- LED's: 3 kanalen (Rood/Wit/Blauw), elk met 2 LED's parallel + 330Ω weerstand. Max stroom ~20 mA per kanaal (veilig voor Nano pinnen).
- Knoppen: Start-knop (pin D5), Charge-knop (pin D3, interrupt-capable).
- Buzzer: Pin D9 (PWM).
- Voeding: 9V blokbatterij met kipschakelaar.
Code Structuur
Constanten & Variabelen
Frequenties voor noten (Bb3 tot F5), timing variabelen (n = basisduur), staccato factoren (x=0.92, y=0.08), en knop statussen.
Hoofdfuncties
- Charge() – speelt de korte fanfare met LED-sequentie.
- SingleDWwithNote(hz, pin, duur, staccato) – speelt één toon met bijbehorende LED, optioneel staccato.
- USNationalAnthem() – speelt het complete volkslied (34 measures) met gedetailleerde noten/LED mapping. Inclusief tempo-veranderingen (ritardando) en toonhoogte-verschuiving (+3 halftonen) na afloop.
- Twinkle() – willekeurige LED flitsen tijdens wachten op knopindruk.
Setup & Loop
Pinnen configureren (INPUT_PULLUP voor knoppen, OUTPUT voor LED's/buzzer). In loop() worden knoppen uitgelezen: Start → volkslied, Charge → fanfare, anders → twinkle.
Code (Volledig)
/* Star Spangled Banner met LEDs
Gemaakt door Ryan Aebi, juni 2018 */
const int ChargeButton = 3;
const int StartButton = 5;
const int BuzzerPin = 9;
const int RedLED = 6;
const int WhiteLED = 7;
const int BlueLED = 8;
int n = 1000;
int DurationOn = n, DurationRest = n;
float x = 0.66, y = 0.34;
int Twinkle_Rate = 250;
int StartButtonState, ChargeButtonState;
// Noten frequenties (Hz)
int Note1 = 233, Note2 = 294, Note3 = 330, Note4 = 349;
int Note5 = 392, Note6 = 440, Note7 = 466, Note8 = 523;
int Note9 = 587, Note10 = 622, Note11 = 698;
void Charge() { /* ... */ }
void SingleDWwithNote(int HZ, int TurnOn, int Duration, int Staccato) { /* ... */ }
void USNationalAnthem() { /* ... 300+ regels noten ... */ }
void Twinkle(int Twinkle_Time) { /* ... */ }
void setup() {
pinMode(ChargeButton, INPUT_PULLUP);
pinMode(StartButton, INPUT_PULLUP);
pinMode(RedLED, OUTPUT);
pinMode(WhiteLED, OUTPUT);
pinMode(BlueLED, OUTPUT);
pinMode(BuzzerPin, OUTPUT);
digitalWrite(RedLED, LOW);
digitalWrite(WhiteLED, LOW);
digitalWrite(BlueLED, LOW);
}
void loop() {
StartButtonState = digitalRead(StartButton);
ChargeButtonState = digitalRead(ChargeButton);
if (StartButtonState == LOW) USNationalAnthem();
else if (ChargeButtonState == LOW) Charge();
else Twinkle(Twinkle_Rate);
}
De volledige notensequentie van USNationalAnthem() is in de originele code te vinden.
Schema's
Zie de Fritzing schema's voor breadboard layout, soldering layout, en kostenoverzicht.
Productieproces
- De Evolutie en Vakmanschap van Kerstverlichting: Van Oude Tradities tot Moderne Techniek
- Zachtmakende Doekjes: Hoe Lotion Comfort & Prestaties Verbeteren
- Accurate temperatuurbewaking in een serverkast met Raspberry Pi
- Arduino-gebaseerd schakelaar- & LED-paneel voor Microsoft Flight Simulator 2020
- LED helderheid regelen met PWM via drukknop op Arduino Mega
- Circuit met een schakelaar: Praktische gids voor basis elektrische circuits
- MEP National Network™ Past Zich In Voor Groei Van Minderheidsfabrikanten
- Acceed IGS-9822DGP: 12-poort Gigabit-switch met 4 SFP-poorten – High-performance industriële netwerkoplossing
- C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
- Switch-Case in C Begrijpen: Syntaxis, Voorbeelden en Best Practices
- Java Switch-Case Statement Uitgelegd: Syntaxis, Voorbeelden en Best Practices