Mit der Entwicklung der elektronischen Technologie wurden Musikinstrumente digitalisiert, die schwierig herzustellen und teuer sind und einen hochwertigen Klang erzeugen. Klaviere sind eines dieser Instrumente. Jede Taste eines Digitalpianos erzeugt elektrische Signale mit einer anderen Frequenz. Somit kann er über seine Lautsprecher 88 verschiedene Töne wiedergeben. Faktoren wie die Verzögerungszeit der Tasten digitaler Instrumente, die Qualität des Lautsprechers und die Auflösung des Klangs haben sich als Faktoren erwiesen, die die Qualität beeinflussen. Bei E-Gitarren werden die Schwingungen der Saiten statt der Tasten digitalisiert. Bei Blasinstrumenten hingegen können die gespielten Noten dank der an den Tonausgang angeschlossenen hochauflösenden Mikrofone in elektrische Signale umgewandelt und aufgezeichnet werden. Diese Entwicklung in der elektronischen Technologie hat den Zugang zu teuren Musikinstrumenten erleichtert, die Musikausbildung ist vielfältiger geworden und hat sich einem breiteren Publikum zugänglich gemacht.
In diesem Projekt werden wir mit PicoBricks ein einfaches Klavier bauen, das 7 Noten spielen kann. Der Lautsprecher dieses Klaviers wird der sein Summer. Der Ultraschallsensor fungiert als Tasten des Klaviers.
Details und Algorithmus
In diesem Projekt werden wir eine Klavieranwendung mit dem Ultraschall-Abstandssensor HC-SR04 und dem Summermodul auf PicoBricks erstellen. Wir lassen den Summer je nach den vom Abstandssensor kommenden Werten unterschiedliche Töne spielen und erzeugen Melodien, indem wir unsere Hand näher an den Sensor heran und von ihm weg bewegen. Darüber hinaus drucken wir sofort die Distanz und die gespielten Noteninformationen auf dem Gerät aus OLED-Bildschirm.
Komponenten
1X PicoBricks
1X HC-SR04 Ultraschallsensor
Überbrückungskabel
Einfache Verbindungskabel
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.
Bauphasen des Projekts
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 klicken Taste.
MicroPython-Codes der PicoBricks
Vom Maschinenimport Pin, PWM, I2C
aus utime import schlaf
Zeit importieren
Von Picobricks importieren Sie SSD1306_I2C
_thread importieren
# Definieren Sie die Bibliotheken
Summer = PWM(Pin(20, Pin.OUT))
Trigger = Pin(15, Pin.OUT)
echo = Pin(14, Pin.IN)
# Definieren Sie die Eingangs- und Ausgangspins
BREITE = 128
HÖHE = 64
# OLED-Bildschirmeinstellungen
sda = machine.Pin(4)
scl = machine.Pin(5)
i2c = machine.I2C(0, sda=sda, scl=scl, freq=1000000)
# Initialisieren Sie die digitalen Pins 4 und 5 als AUSGANG für die OLED-Kommunikation
oled = SSD1306_I2C(BREITE, HÖHE, i2c)
Maß = 0
def getDistance():
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(5)
trigger.low()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon – signaloff
Distanz = (verstrichene Zeit * 0,0343) / 2
Rückweg
def airPiano():
globales Maß
während True:
wenn 5 < Maß < 11:
Buzzer.duty_u16(4000)
Buzzer.freq(262)
Schlaf(0,4)
elif 10 < Takt < 16:
Buzzer.duty_u16(4000)
Buzzer.freq(294)
Schlaf(0,4)
# ... [Kodun geri kalanı bu şekilde devam ediyor]
# Spielen Sie den Ton ab, der durch den Wert des Abstandssensors bestimmt wird
während True:
Measure = int(getDistance())
oled.text("Distance " + str(measure) + " cm", 5, 30)
oled.show()
Schlaf(0,01)
oled.fill(0)
oled.show()
Arduino C-Codes der PicoBricks
#include
#include „ACROBOTIC_SSD1306.h“
#include
#define TRIGGER_PIN 15
#define ECHO_PIN 14
#define MAX_DISTANCE 400
NewPing-Sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
#define T_C 262
#define T_D 294
#define T_E 330
#define T_F 349
#define T_G 392
#define T_A 440
#define T_B 493
const int Buzzer = 20;
void setup() {
pinMode(Summer,OUTPUT);
Wire.begin();
oled.init();
oled.clearDisplay();
#if definiert(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
}
void loop() {
Verzögerung(50);
int distance = sonar.ping_cm();
if(Abstand > 5 & Abstand < 11) {
Ton (Summer, T_C);
}
// ... [Kodun geri kalanı bu şekilde devam ediyor]
oled.clearDisplay();
oled.setTextXY(2, 4);
oled.putString("Entfernung: ");
oled.setTextXY(4, 6);
String string_distance = String(distance);
oled.putString(string_distance);
oled.setTextXY(4, 8);
oled.putString("cm");
}
GitHub-Seite