So baust du ein Metronom mit Arduino und LCD

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

Schaltplan

Arduino Metronom mit LCD

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
}

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Du willst noch tiefer in die Materie einsteigen? Dann präsentiere ich dir die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.