İçeriğe Geç
Favoriler Sepet
0 eşyalar

#23 PicoBricks ile Hava Piyano Projesi

02 Nov 2023
#23 Air Piano Project With PicoBricks

Elektronik teknolojisinin gelişmesiyle birlikte üretimi zor, pahalı ve kaliteli ses üreten müzik aletleri dijital ortama taşınmıştır. Piyanolar da bu enstrümanlardan biridir. Dijital piyanoların her tuşu farklı frekansta elektrik sinyalleri üretir. Böylece hoparlörlerinden 88 farklı nota çalabilmektedir. Dijital enstrümanların tuşlarının gecikme süresi, hoparlörün kalitesi, sesin çözünürlüğü gibi faktörler kaliteyi etkileyen faktörler olarak karşımıza çıkmıştır. Elektro gitarlarda tuşlar yerine tellerdeki titreşimler dijitalleştirilir. Nefesli çalgılarda ise ses çıkışına takılan yüksek çözünürlüklü mikrofonlar sayesinde çalınan notalar elektrik sinyallerine dönüştürülerek kaydedilebilmektedir. Elektronik teknolojisindeki bu gelişme, yüksek maliyetli müzik aletlerine erişimi kolaylaştırmış, müzik eğitimi daha geniş bir çeşitlilik kazanmış ve daha geniş kitlelere yayılmıştır.

Bu projemizde PicoBricks ile 7 nota çalabilen basit bir piyano yapacağız. Bu piyanonun hoparlörü zil. Ultrasonik sensör piyanonun tuşları görevi görecektir.

Ayrıntılar ve Algoritma

Bu projemizde PicoBricks üzerinde bulunan HC-SR04 Ultrasonik mesafe sensörü ve buzzer modülünü kullanarak piyano uygulaması yapacağız. Mesafe sensöründen gelen değerlere göre zilin farklı notalar çalmasını sağlayacağız ve elimizi sensöre yaklaştırıp uzaklaştırarak melodiler oluşturacağız. Ayrıca mesafe ve çalınan nota bilgilerini de anlık olarak ekrana yazdıracağız. OLED ekran.

Bileşenler

1X PicoBrick
1X HC-SR04 Ultrasonik Sensör
Atlama Kabloları
Kolay Bağlantı Kabloları

Bağlantı şeması

Picobricks modüllerini kablolama olmadan kodlayabilir ve çalıştırabilirsiniz. Modülleri panodan ayırarak kullanacaksanız modül bağlantılarını grove kablolarla yapmalısınız.

Projenin İnşaat Aşamaları

PicoBricks'in MicroBlock Kodları

Projenin Microblocks kodlarına görseli Microblocks Run sekmesine sürükleyerek veya butonuna tıklayarak ulaşabilirsiniz. düğme.

Mikrobloklar Çalıştırma TabI

PicoBricks'in MicroPython Kodları

 


makineden içe aktarma Pin, PWM, I2C
utime içe aktarma uykusundan
kullanım süresini içe aktar
picobricks'ten SSD1306_I2C'yi içe aktar
_thread'i içe aktar

# Kütüphaneleri tanımlayın
buzzer = PWM(Pin(20, Pin.OUT))
tetikleyici = Pin(15, Pin.OUT)
echo = Pin(14, Pin.IN)

# Giriş ve Çıkış pinlerini tanımlayın
GENİŞLİK = 128
YÜKSEKLİK = 64

# OLED ekran ayarları
sda = makine.Pin(4)
scl = makine.Pin(5)
i2c = makine.I2C(0, sda=sda, scl=scl, frek=1000000)

# OLED iletişimi için dijital pin 4 ve 5'i ÇIKIŞ olarak başlatın
oled = SSD1306_I2C(GENİŞLİK, YÜKSEKLİK, i2c)
ölçü = 0

def getDistance():
    tetikleyici.düşük()
    utime.sleep_us(2)
    tetikleyici.yüksek()
    utime.sleep_us(5)
    tetikleyici.düşük()
    while echo.value() == 0:
        signaloff = utime.ticks_us()
    while echo.value() == 1:
        signalon = utime.ticks_us()
    geçen süre = sinyal açık - sinyal kapalı
    mesafe = (geçen süre * 0,0343) / 2
    dönüş mesafesi

def airPiano():
    küresel ölçü
    Doğru iken:
        eğer 5 < ölçü < 11 ise:
            buzzer.duty_u16(4000)
            buzzer.freq(262)
            uyku(0,4)
        elif 10 < ölçü < 16:
            buzzer.duty_u16(4000)
            buzzer.freq(294)
            uyku(0,4)
        # ... [Kodun geri kalanı bu şekilde devam ediyor]

# Mesafe sensörünün değerine göre belirlenen tonu çalın
Doğru iken:
    ölçü = int(getDistance())
    oled.text("Mesafe " + str(ölçü) + " cm", 5, 30)
    oled.show()
    uyku(0,01)
    oled.fill(0)
    oled.show()

PicoBricks'in Arduino C Kodları

 


#include 
#include "ACROBOTIC_SSD1306.h"
#include 
#define TRIGGER_PIN 15
#define ECHO_PIN 14
#define MAX_DISTANCE 400
YeniPing sonarı(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
#define T_C 262
#tanımla T_D 294
#define T_E 330
#tanımla T_F 349
#tanımla T_G 392
#tanımla T_A 440
#tanımla T_B 493
const int Buzzer = 20;

geçersiz kurulum() {
    pinMode(Buzzer,OUTPUT);
    Wire.begin();
    oled.init();
    oled.clearDisplay();
    #if tanımlanmış(__AVR_ATtiny85__) && (F_CPU == 16000000)
    watch_prescale_set(clock_div_1);
    #endif
}

geçersiz döngü () {
    gecikme(50);
    int mesafe = sonar.ping_cm();
    if(mesafe > 5 & mesafe < 11) {
        tone(Buzzer, T_C);
    }
    // ... [Kodun geri kalanı bu şekilde devam ediyor]
    oled.clearDisplay();
    oled.setTextXY(2, 4);
    oled.putString("Mesafe: ");
    oled.setTextXY(4, 6);
    String string_distance = String(mesafe);
    oled.putString(string_distance);
    oled.setTextXY(4, 8);
    oled.putString("cm");
}

GitHub Sayfası
Önceki Gönderi
Sıradaki Gönderi

Abone olduğun için teşekkürler!

Bu e-posta kaydedildi!

Görünümü satın alın
Seçenekleri Seçin

Seçeneği Düzenle

Aklında bir soru mu var?

Stok Bildirimi

Karşılaştır

Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
this is just a warning
Giriş Yap
Alışveriş Sepeti
0 Ürünler
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment