Laut Wikipedia ist Metronom ein mechanisches oder elektronisches Gerät, das durch akustische Impulse in gleichmäßigen Zeitintervallen ein konstantes Tempo vorgibt. Es wird in der Musik verwendet, um den Takt zu halten. Das können wir doch super mit Arduino nachbauen!
Bauteile
- 1x
- 2 x Widerstand 220 Ohm
- 1 x LED Grün
- 2 x Potentiometer 100kOhm
- 1 x Relais-Platine
- 1 x Zwei-Zeilen-Display 20×2, blau/weiß
Schaltplan
Der Schaltplan besteht aus einem LCD-Display, einem Potentiometer und einer Relais-Platine. Hier kann ich nur raten, die als fertiges Modul zu kaufen. Es ist super günstig und man spart sich Schaltungen mit verstärkendem Transistor und Diode.
Funktionsweise
Dreht man das Potentiometer nach rechts, wird die BPM-Rate, also die Beats per Minute (oder auch die Geschwindigkeit) erhöht. Das Relais klickt im Takt, die grüne LED blitzt bei jedem Takt auf. Dreht man das Potentiometer ganz nach links, schaltet man das Metronom aus.
Code für das Metronom mit Arduino
#include <LiquidCrystal.h> // Einbinden der LCD Library LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Anlegen des LCD-Objektes int potPin = A0; // analoger Pin des Potentiometers int relaisPin = 7; // Pin, an dem ein Relais angeschlossen ist int ledPin = 8; // Pin, an dem eine LED angeschlossen ist int maxBPM = 200; // maximale beats per minute int minBPM = 60; // minimale beats per minute int theBPM = 0; // aktuelle beats per minute int pendulumDirection = 1; // Richtung, in die das Pendel ausschlägt int pendulumPosition = 0; // Position des Pendels void setup() { Serial.begin(115200); lcd.begin(16, 2); // Start des LCD mit 16 Zeichen und 2 Zeilen pinMode(relaisPin, OUTPUT); // relaisPin als OUTPUT deklariert pinMode(ledPin, OUTPUT); // ledPin als OUTPUT deklariert } void showPendulum(long myBPM){ // Methode für optische Ausgabe des Metronoms lcd.setCursor(pendulumPosition,1); // Verschiebe LCD Cursor auf letzte Position des Pendels lcd.print(" "); // Lösche letzte Pendel-Position pendulumPosition = pendulumPosition+pendulumDirection; // Verändere Pendel Position (+1 oder -1) digitalWrite(ledPin, LOW); // schalte Feedback-LED aus if ((pendulumPosition>14)||(pendulumPosition<0)){ // falls Pendel ganz rechts pendulumDirection*=-1; // ändere Pendelrichtung if (pendulumDirection>0) digitalWrite(relaisPin, HIGH); // falls Pendel-Richtung nach rechts, schalte das Relais ein else digitalWrite(relaisPin, LOW); // sonst schalte das Relais aus digitalWrite(ledPin, HIGH); // schalte die LED ein } lcd.setCursor(pendulumPosition,1); // Verschiebe LCD Cursor lcd.print("O"); // Schreibe Pendel-Zeichen auf LCD delay(int(60/float(float((myBPM)/4)/16))); // Berechne Wartezeit in Abhängigkeit der BPM } void loop() { if (analogRead(potPin)!=0){ // wenn Poti nicht auf 0 theBPM = map(analogRead(potPin), 1, 1023, minBPM, maxBPM); // berechne BPM von minBPM bis maxBPM showPendulum(theBPM); // zeige Pendel an } else { // sonst (wenn Poti auf 0) theBPM = 0; // setze BPM auf 0 und zeige das Pendel nicht an } lcd.setCursor(8, 0); // Verschiebe LCD Cursor lcd.print("BPM"); // LCD-Ausgabe lcd.setCursor(0, 0); // Verschiebe LCD Cursor lcd.print(theBPM); // LCD-Ausgabe lcd.print(" "); // Lösche mögliche weitere Stellen beim Wechsel von 3-stellig auf 2-stellig }
Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!
- Die beliebtesten Arduino-Projekte von StartHardware
- Inklusive Schaltplan, Beschreibung und Code
- Arduino-Schnellstart-Kapitel
- Kompakter Programmierkurs