Viele Ereignisse in unserem Leben wurden digitalisiert. Einer davon sind Geräusche. Der Ton und die Intensität des Klangs können elektrisch verarbeitet werden. So können wir Notizen elektronisch extrahieren. Die kleinste Einheit von Klängen, aus denen Musik besteht, wird Note genannt. Jede Note hat eine Frequenz und Intensität. Mit den Codes, die wir schreiben werden, können wir durch Anwenden von Frequenz und Intensität anpassen, welche Note gespielt werden soll und wie lange sie dauern soll.
In diesem Projekt bereiten wir ein Musiksystem vor, das die Melodie eines Liedes mit dem abspielt Summer Modul und stellen Sie den Rhythmus mit dem Potentiometer-Modul mit Picobricks ein. In diesem Projekt lernen Sie auch die Verwendung von Variablen kennen, die in der Programmierterminologie einen wichtigen Platz einnehmen.
Details und Algorithmus
Mit Picobricks können Sie jedes Lied spielen, dessen Noten wir kennen. Wir werden das verwenden Taste-LED-Modul zum Starten des Liedes, das Potentiometer Modul zum Anpassen der Geschwindigkeit des Songs und das Summermodul zum Abspielen der Noten.
Potentiometer ist ein analoges Eingangsmodul. Es handelt sich um einen variablen Widerstand. Wenn die durchfließende Strommenge gedreht wird, nimmt sie zu und ab, wie beim Öffnen und Schließen eines Wasserhahns. Wir werden die Geschwindigkeit des Songs anpassen, indem wir diese Strommenge mit Codes steuern. Summer ändern die Lautstärke entsprechend der Stärke des über sie fließenden Stroms und die Töne entsprechend der Spannungsfrequenz. Mit Microblocks können wir ganz einfach die gewünschten Noten vom Summermodul codieren, indem wir deren Töne und Dauer anpassen.
Wir werden den Status des Tastendrucks im Projekt überprüfen. Wir lassen die Melodie abspielen, wenn die Taste gedrückt wird. Während des Abspielens der Melodie verwenden wir eine Variable namens Rhythmus um die Spieldauer der Noten im gleichen Tempo zu verlängern oder zu verkürzen. Nach dem Start von Picobricks ermöglichen wir dem Benutzer die Anpassung Rhythmus variabel mit dem Potentiometer, entweder während oder vor dem Abspielen der Melodie. Solange Picobricks eingeschaltet ist, teilen wir den Potentiometerwert (0-1023) durch 128 und weisen ihn dem zu Rhythmus Variable. Variablen sind Datenstrukturen, die wir verwenden, wenn wir in unseren Codes Werte verwenden möchten, die vom Benutzer oder von Sensoren geändert werden können. Wenn der Benutzer die Taste drückt, um das Lied zu starten, bereiten wir die Notencodes vor, die es ermöglichen, die Noten für die entsprechend berechnete Dauer abzuspielen Rhythmus Variable.
Komponenten
1X PicoBricks
Schaltplan
Sie können die Module von Picobricks ohne Verkabelung programmieren und betreiben. Wenn Sie die Module getrennt von der Platine verwenden möchten, sollten Sie die Modulverbindungen mit Grove-Kabeln herstellen.
MicroBlocks-Codes der PicoBricks
Sie können auf die Microblocks-Codes des Projekts zugreifen, indem Sie das Bild auf die Registerkarte „Microblocks Run“ ziehen oder auf die Schaltfläche klicken:
Registerkarte „Mikroblocks ausführen“.
MicroPython-Codes der PicoBricks
Vom Maschinenimport Pin,PWM,ADC #zum Zugriff auf die Hardware-Picobricks
Aus der utime-Bibliothek „sleep #time“ importieren
button=Pin(10,Pin.IN,Pin.PULL_DOWN)
Pot=ADC(Pin(26))
Summer=PWM(Pin(20))
#bestimmen Sie unsere Eingangs- und Ausgangspins
globaler Rhythmus
gedrückt = Falsch
Töne ={"A3":220,"D4":294,"E4":330,"F4":349}
#definiere die Töne
mysong =["A3", "E4", "E4", "E4", "E4", "E4", "E4", "F4", "E4", "D4", "F4", "E4" ]#Lassen Sie uns die für unser Lied erforderlichen Töne in der richtigen Reihenfolge in einer Sequenz definieren
noteTime =[1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1]#Definieren Sie Wartezeiten zwischen Tönen in einem Array
def Spielton (Frequenz):
Buzzer.duty_u16(6000)
Buzzer.freq(Frequenz)
#definieren Sie die Frequenzen des Summers
def Playsong(Pin):
global gedrückt
wenn nicht gedrückt:
gedrückt = True
for i inrange(len(mysong)):playtone(tones[mysong[i]])sleep(noteTime[i]/rithm+1)
Buzzer.duty_u16(0)
#spiele die Töne mit den richtigen Abklingzeiten
#Und schließlich müssen wir den Pins mitteilen, wann sie auslösen sollen, und welche Funktion sie aufrufen sollen, wenn sie ein Ereignis erkennen:
button.irq(trigger=Pin.IRQ_RISING, handler=playsong)while True:
rithm= pot.read_u16()
rithm=int(rithm/6400)+1
Arduino C-Codes der PicoBricks
#enthalten
#include „ACROBOTIC_SSD1306.h“
int Summer =20;
int pot =26;
int button=10;//Definieren Sie den Summer, den Poti und die Taste
int Re =294;
int Mi =330;
int Fa =349;
int La =440;//DEFINIEREN SIE DIE TÖNEvoidsetup(){
Wire.begin();
oled.init();
oled.clearDisplay();pinMode(buzzer,OUTPUT);pinMode(26,INPUT);pinMode(button,INPUT);//bestimmen Sie unsere Ein- und Ausgangspins}voidloop(){
int rithm =(analogRead(pot))/146;
String char_rithm =String(rithm);
oled.setTextXY(3,4);
oled.putString("Geschwindigkeit: ");
oled.setTextXY(3,10);
oled.putString(char_rithm);//print „Speed:“ und Geschwindigkeitswert auf dem OLED bei x=3 y=4delay(10);if(digitalRead(button)==1){
oled.clearDisplay();
oled.setTextXY(3,2);
oled.putString("Now playing...");//print "Speed: " und Geschwindigkeitswert auf dem OLED bei x=3 y=4tone(buzzer, La);delay(1000/(rithm+1)); Ton(Summer, Mi);Verzögerung(500/(Rhythmus+1));Ton(Summer, Mi);Verzögerung(500/(Rithm+1));Ton(Summer, Mi);Verzögerung(500/(Rithm+ 1));Ton(Summer, Mi);Verzögerung(500/(Rhythmus+1));Ton(Summer, Mi);Verzögerung(500/(Rithm+1));Ton(Summer, Mi);Verzögerung(500 /(Rithmus+1));Ton(Summer, Fa);Verzögerung(500/(Rithm+1));Ton(Summer, Mi);Verzögerung(500/(Rithm+1));Ton(Summer, Re) ;delay(500/(rithm+1));tone(summer, Fa);delay(500/(rithm+1));tone(summer, Mi);delay(1000/(rithm+1));// Spielen Sie die Noten in der richtigen Reihenfolge und zum richtigen Zeitpunkt, wenn die Taste gedrückt wird
oled.clearDisplay();//den Bildschirm löschen}noTone(buzzer);//den Summer stoppen}
Projektvorschlag
Um Ihr Projekt visueller zu gestalten, können Sie je nach gespielter Note eine LED in einer anderen Farbe zum Leuchten bringen und die Notennamen und die Spielgeschwindigkeit anzeigen OLED-Bildschirm.