İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
IanCumming tarafındanYazarın daha fazlasını izleyin:
Hakkında: Roketlerden elektroniğe bir şeyler yapmayı seviyorum. IanCumming Hakkında Daha Fazlası »
Herkese Hoş Geldiniz
Neredeyse bayram mevsimi ve çok sayıda dükkan bayram dekorasyonlarını yapmaya başladı, bazı müzikal peri ışıkları yapmanın tam zamanı olduğunu düşündüm!
Adım 1: Kullanılan Parçalar
Aşağıdakileri kullanacağım:
- 12 LED
- 12 Akım sınırlayıcı Dirençler
- 1 ULN 2803 Darlington Transistör Dizisi
- Bazı Jumper Telleri
- Piezo Hoparlör
- Bir Breadboard ve
- bir Arduino
- Peri ışıkları dizisini yapmak için bir Ethernet kablosundan 5 tel kullandım
2. Adım: Kod
//GLOBAL VARS int barTime = 1200; // 8/8 = 1000ms bayt nrLEDS = 4; // 4 Base LED, Paralel bayt ledler ekleyebilirsiniz = { 3, 4, 5, 6}; bayt konuşmacı = 11; bayt desenUzunluğu = 64; // kalıp Uzunluğu bayt şarkı Uzunluğu = 51; const bayt şarkı = { // Jingle Bells Verileri 29, 2, 29, 2, 29, 4, 29, 2, 29, 2, 29, 4, 29, 2, 32, 2, 25, 3, 27, 1, 29, 8, 30, 2, 30, 2, 30, 3, 30, 1, 30, 2, 29, 2, 29, 2, 29, 1, 29, 1, 29, 2, 27, 2, 27, 2, 29, 2, 27, 4, 32, 4, 29, 2, 29, 2, 29, 4, 29, 2, 29, 2, 29, 4, 29, 2, 32, 2, 25, 3, 27, 1, 29, 8, 30, 2, 30, 2, 30, 2, 30, 2, 30, 2, 29, 2, 29, 2, 29, 1, 29, 1, 32, 2, 32, 2, 30, 2, 27, 2, 25, 8 }; // Yapı Not Numarasıdır, sonra // 8.'nin sabit bayt modelinde NoteLength = { //Pattern Data 0b0001, 0b0010, 0b0100, 0b1000, //Bitler 0b0001, 0b0010, 0b0100, 0b1000, 0b0001, Dizideki Ledlere karşılık gelir 0b0010, 0b0100, 0b1000, 0b0001, 0b0010, 0b0100, 0b1000, 0b1000, 0b1100, 0b0100, 0b0110, 0b0010, 0b0011, 0b0001, 0b1001, 0b1000, 0b1100, 0b0100, 0b0110, 0b0010, 0b0011, 0b000010, 0b0011, 0b000011, 0b0011, 0b000010, 0b0010, 0b0011, 0b0001, 0b0010, 0b1010, 0b0101, 0b1010, 0b0101, 0b1010, 0b0101, 0b1010, 0b0101, 0b1010, 0b0101, 0b1010, 0b0101, 0b1010, 0b0101, 0b1100, 0b0011, 0b1100, 0b0011, 0b1100b1100, 0b0011, 0b1100b1100b0011, 0b1100b1100b0011, 0b1010, 0b0101, 0b1010 0b0011, 0b1100, 0b0011, 0b1100, 0b0011, };
İlk önce değişkenlerimi ilan ediyorum, ilginç olanlar Song ve Pattern.
- Şarkı melodiyi saklar; bu durumda Jingle bells'dir.
- Model, dizideki değerlerin bitlerinde açık ve kapalı konumları saklar.
Özel İşlevler
//FUNCTIONS int noteToHz(int not) { // Not No'yu Dönüştür. to Frekans kayan nokta frekansı = 440 * (pow(1.059463094359, not-21)); // -21 size C3'te not 1'i verir (Sanırım) return int(freq); // Sonuçlar 1hz kadar doğrudur } void lightLEDs(byte PORT_X) { // Kontrol LED'inin Durumu (int q = 0;q
Sahip olduğum iki işlev aşağıdakileri yapacak:
- Döngüdeki ton işlevi için frekansı hesaplayın
- fonksiyona geçen değere bağlı olarak LED'leri açar veya kapatır
Kurulum İşlevi
void setup() { //kurulum OUTPUT pinleri pinMode(hoparlör, OUTPUT); for(int t = 0; t < nrLEDS; t++){ pinMode(ledler[t], ÇIKIŞ); } }
Setup fonksiyonunda gerekli pinleri OUTPUT olarak ayarladım.
Döngü İşlevi
void loop() { // Music Loop for (int t = 0; t < şarkıLength; t++) { // Notalar, Uzunluk ve melodiyi çal int nota = notToHz(şarkı[t * 2]); int uzunluk = ((şarkı[(t * 2)+1] * barTime) / 8); ton(hoparlör, nota, uzunluk - 50); // Yanıp sönen ışıklar! lightLED'ler(desen[t % desenUzunluğu]); gecikme(uzunluk); } // Sessiz Döngü int rastgeleSilence = rastgele(1000, 5000); for (int t = 0;t
Ana Döngü işlevinde 2 döngüm var. Bir şarkı döngüsü ve bir sessizlik döngüsü
Şarkı döngüsü, şarkı dizisindeki verileri okuyacak, ton işlevini kullanarak notayı çalacaktır.
Şarkı döngüsü olacak,
- Şarkı dizisindeki verileri okuyun,
- Ton işlevini kullanarak notayı çalın, ardından
- LED'leri aydınlatın, desen dizisini okuyun.
Sessizlik döngüsünde
sadece LED'ler yanıyor
Arduino'yu takın ve kodu yükleyin. (Sonra fişini çekin)
Adım 3: Devrenin Başlatılması
Işık dizisiyle başlayacağım
- Bir Ethernet kablosundan tel kullandım ve 3 LED'i dört kez paralel olarak lehimledim, LED'leri yaklaşık 2 metreden eşit aralıklarla yerleştirdiğimden emin oldum.
- Her bir ledin Anotunu tek bir kabloya lehimledim.
- Daha sonra her bir LED'in Katotu 4 ayrı kabloya. Tabii ki bir dirençle
- 12 LED'li bir dizi elde etmek için bu işlemi 3 kez tekrarladım ve 5 telin ucuna başlık pinleri koydum
Pozitif ve toprak raylarını breadboard'a bağlayın
Adım 4: ULN2803
ULN2308 Chip'i devre tahtasına yerleştirin
ULN2308, bir transistör dizisi yongasıdır; veri sayfasından görebiliyorum
- Bu pin 1, pin 18'i "AÇIK" duruma getiren bir giriştir.
- Pin 2, 17'yi açar. Vesaire.
- Pim 9 topraklanmış
- Çipin Pin 9'unu toprak rayına bağlayın
- Pozitif rayı pim 18'in üzerinde bir şerit olacak şekilde bir terminal şeridine bağlayın. (Nedenini bir dakika içinde göreceksiniz)
- Çipin 1 numaralı pinini Arduino'nun 3 numaralı pinine bağlayın
- 2 4'e gider
- çipin 3'ü 5'e gidiyor ve
- 4, Arduino'nun 6 numaralı pinine gider
- LED dizisini breadboard üzerine yerleştirin. Ortak anot telinin bağlandığı şerit 5 volta bağlanır. Peri ışığı pimlerinin geri kalanı çipin 18, 17, 16 ve 15 numaralı pimlerine gitmelidir.
Adım 5: Ses Ekleme
- Piezo Hoparlörü 2 terminal şeridi arasına bağlayın
- Piezo elemanının negatif kutbunu toprağa bağlayın ve
- Hoparlörün diğer ucu pin 11'e
6. Adım: Sonuç
Bana bayram mevsimi olduğunu hatırlatmak için rastgele jingle bells çalacak bir dizi ışık var.