Der Ohrenschmaus

Vor einigen Wochen bestellte ich mir einen Arduino Leonardo. Ich suchte eine günstigere Alternative zu den aktuell von mir genutzten Raspberry Pi's. Diese sind für viele Projekte oft sehr übertrieben und die Ansteuerung der GPIO's ist kompliziert. Mikrocontroller, die mit der Arduinoplattform kompatibel sind, gibt es schon ab wenigen Euros und lassen sich dank der IDE wunderbar programmieren.

Was macht man nun mit einem Arduino zu Beginn?

Das blinkende Lämpchen Beispiel ist definitiv zu langweilig, da muss was cooleres her.

Mir ist schon länger bekannt, dass der Raspberry Pi bestimmte Pin's besitzt, über die analoge Signale ausgegeben werden und sogar Funkverbindungen hergestellt werden können. Ein Arduino muss das doch auch können? Ja, kann er.
Also ran an die Restekiste und die Schachtel mit den Piezos her. Auf der Arduino Seite findet sich auch ein Beispiel Code. Piezo zwischen Pin 9 und Ground, Code hochladen. Funktioniert - so halb.

Erste Melodie

Das "programmieren" eines ersten Stückes gestaltete sich zwar etwas aufwändig, aber mit etwas Hilfe kam am Ende dann doch die Melodie von Alle meine Entchen bei raus.

Werde besser

Weil es sich als nicht praktikabel erwies, eine Stunden zu prgrammieren für 15 sek Lied, muss was besseres her. Was wäre, wenn der Arduino selber Melodien generiert?

Ein bisschen Code später - fertig ist der Ohrenschmaus. Tonlage und -länge wird kurz vor dem Abspielen zufällig bestimmt und bildet somit ein unendlich langes Musikwerk.

Das Ende (vom Lied)

Jetzt hat man eine nettes, kleines Maschinchen gebastelt, dass zufällige Töne von sich gibt und einem nach einer gewissen Zeit extrem auf den Keks geht. Da ist es nahezu Pflicht das ganze mit etwas Isolierband auf eine Powerbank zu montieren und seine Schwester damit zu ärgern. Hübscher Nebeneffekt, das Case der Powerbank ist ein wunderbarer Resonanzkörper für den Piezo.

Leider verlief meine Nerv-Aktion nicht nach Plan. Weil der Arduino zu wenig Leistung benötigt, erkennt die Powerbank diesen nicht als Verbraucher und schaltet ab. Das generve wird also immer nach ca. 30 sek beendet. Leider.

Code

int speakerOut = 9;

void setup() {
  pinMode(speakerOut, OUTPUT);
  
  randomSeed(analogRead(0));
}

long tempo = 10000;
int pause = 1000;
int rest_count = 100;

int tone_ = 0;
int beat = 0;
long duration  = 0;

void playTone() {
  long elapsed_time = 0;
  while (elapsed_time < duration) {
    digitalWrite(speakerOut,HIGH);
    delayMicroseconds(tone_ / 2);
    digitalWrite(speakerOut, LOW);
    delayMicroseconds(tone_ / 2);
    elapsed_time += (tone_);
  }                         
}

void loop() {
  tone_ = (int) random(1000, 5000);
  beat = (int) random(16, 128);

  duration = beat * tempo;

  playTone();
  
  delayMicroseconds(pause);
}

Basierend auf PlayMelody

Kommentare anzeigen