Muziekweergave besturen met je afstandsbediening: Een simpel Arduino-project
Onderdelen en benodigdheden
- Arduino UNO
- Afstandsbediening (infrarood)
- IR-ontvanger (generiek)
- Buzzer
- Adafruit Standard LCD - 16x2 Wit op Blauw
- Draaipotentiometer (generiek)
- Weerstand 221 ohm
Apps en online diensten
- Arduino IDE
Over dit project
Hallo Hackster-community!
Ik ben Simone Adobs en dit is mijn tweede project dat ik op deze site publiceer.
De logica achter dit project
De werking is heel eenvoudig:
- Neem je afstandsbediening en selecteer de melodie die je wilt afspelen;
- De Arduino speelt de melodie af via de buzzer;
- Op het LCD-scherm zie je de muzikale noot die wordt gespeeld.
Code-uitleg
Hieronder een voorbeeld van hoe een melodie in de code wordt gedefinieerd:
void melody_example() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Song title");
delay(1000);
lcd.clear();
nota_mi(duur,pauze); // muzikale noot
nota_do(duur,pauze); // muzikale noot
lcd.clear();
delay(100);
Reset_AVR(); // Deze commando reset de Arduino zonder knop indrukken
}
Om de Reset_AVR()-functie te gebruiken, moet je deze code bovenaan de sketch plaatsen:
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
De Arduino herkent welke melodie gespeeld moet worden aan de hand van de ontvangen IR-codes:
if (result==12495) { // Code voor knop 1
melody_1();
} else if (result==6375) { // Code voor knop 2
melody_2();
} else if (result==31365) { // Code voor knop 3
melody_3();
} else if (result==4335) { // Code voor knop 4
melody_4();
}
Elke noot wordt afgespeeld met een functie zoals deze:
void nota_example(int duur, int pauze) {
shut(); // Roept de stop-functie aan (zie hieronder)
lcd.setCursor(0, 0);
lcd.print("Example "); // Print nootnaam
NewTone(11,262,duur); // Pin 11 = buzzer, 262 = frequentie noot
delay(pauze); // Wacht enkele milliseconden
}
Wil je de melodie stoppen terwijl hij speelt?
Geen probleem! Dankzij de shut()-functie kun je de melodie op elk moment stoppen.
void shut() {
if (irrecv.decode(&results)) {
result=results.value, HEX;
Serial.println(result);
if (result==-23971) { // -23971 is de code voor de uit-knop op mijn afstandsbediening
Reset_AVR(); // Reset Arduino
}
}
irrecv.resume(); // Sta toe nieuwe code te ontvangen
}
Ik hoop dat je dit project leuk vindt. Als dat zo is, bekijk dan ook mijn eerdere project.
Een fijne dag!
Simone uit Italië <3
Code
De complete code is beschikbaar in de originele projectpagina. Hier is een overzicht van de belangrijkste functies:
- Afspelen van vier vooraf gedefinieerde melodieën: "Ode to Joy", "London Bridge", "Für Elise", "He's a Pirate"
- IR-ontvangst en decodering
- LCD-weergave van nootnamen
- Buzzer-aansturing via NewTone-bibliotheek
- Softwarematige reset via watchdog-timer
De code gebruikt de bibliotheken LiquidCrystal.h, IRremote.h, NewTone.h en AVR-specifieke headers voor de reset-functie.
Schema
Het schakelschema is beschikbaar als Fritzing-bestand (canzoni_con_tastiera_fQS3978roa.fzz) en als afbeelding.
Productieproces
- IR-afstandsbediening-commando's vastleggen op Raspberry Pi zonder LIRC: Een Python UART-benadering
- Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
- ESP32-CAM bewegingdetecterende beveiligingscamera voor Discord
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
- Zelfgemaakte Arduino TV-afstandsbediening – Batterij, 3D-geprinte behuizing
- Monitor Je Huistemperatuur Overal met Arduino Cloud Integratie
- ATtiny85 Mini Arcade: Snake – Bouw een Handheld OLED Game Console
- Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
- Een Arduino LED besturen met Cortana via Bluetooth op Windows 10
- Geavanceerde Remote-gecontrolleerde Gripper Robot voor Precisiehantering