İçindekiler:
Video: Arduino Kapı Zili: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:16
Bugün sizlere Arduino ile kapı zili yapmayı göstereceğim. Bu kapı zili, bir şarkı kitaplığından rastgele bir melodi çalar. Kapı zilinizi özelleştirebilir ve daha fazla şarkı ekleyebilirsiniz. Yatak odanızın, sınıfınızın, ofisinizin ve hatta ön kapınızın dışına kurun!
Gereçler:
- Arduino Uno (diğer türlerin çoğu yapacaktır)
- Programlama için Arduino IDE'li bilgisayar
- Arduino programlamak için USB-A - USB-B kablosu
- ekmek tahtası
- 4x atlama teli
- Buton veya başka bir anahtar
- 10 kOhm Direnç
- Pasif buzzer (yani piezoelektrik hoparlör)
-
Kalıcı kurulum için:
- Arduino'ya güç sağlamak için 9V DC Güç Kaynağı veya 9V pil
- Kapının dışındaki kablo düğmesi için 2 adet uzun kablo
Adım 1: Donanım Kurulumu
İlk olarak, donanımı ayarlayacağız. Pasif buzzer (yani hoparlör) ile başlayacağız. Pasif buzzer'ın pozitif ucunu ("+" işareti ile gösterilir) Arduino'daki dijital pin 8'e bağlamak istiyoruz. Passize buzzerın diğer ucunu toprağa bağlayacağız.
Ardından, kapı zili için buton takacağız. Anahtar için 10 kOhm'luk bir harici açılan direnç kullanacağız, bu nedenle Arduino'ya girişte kayan voltaj veya kararsız durum yoktur. Arduino, pulldown direncini kullanarak, butona basılmadığında voltajı 0V ve butona basıldığında 5V olarak okur. Pullup veya pulldown dirençleri hakkında daha fazla bilgi için şu makaleyi okuyabilirsiniz:
Butonun bir tarafını 5V'a bağlayacağız. Basmalı düğmenin diğer tarafı, 10 kOhm'luk bir aşağı çekme direnci aracılığıyla toprağa bağlanacaktır. Unutmayın: butonlar dahili olarak yatay olarak bağlanır. Sadece basıldığında dikey olarak bağlanırlar. Bu makalede daha fazla bilgi verilmektedir:
Adım 2: Yazılım Kurulumu
Kodun tamamı ektedir. Aşağıda, kodun anlık görüntüleriyle birlikte işlevlerin her birinin açıklamaları bulunmaktadır.
kurmak:
setup() fonksiyonunda, butonumuz ve hoparlörümüz için dijital pinleri yapılandırmak istiyoruz. Pin 2'yi butonumuz için bir giriş olarak yapılandırmak istiyoruz ve pin 8'i hoparlörümüz için bir çıkış olarak yapılandırmak istiyoruz.
Ayrıca, biri kapı zilimizi çaldığında rastgele bir melodi seçmek için rastgele sayı üretecimizi "tohumlamak" istiyoruz. Rastgele sayı üretecimizi tohumlamak, ona rastgele bir girdi beslemek anlamına gelir. Rastgele sayı üretecimizi voltaj değeri ile analog giriş 0'a ekeceğiz. Bu girişe hiçbir şey bağlı olmadığından, rastgele sayı üretecimize birçok farklı değer sağlayan bu pin üzerinde "rastgele", dalgalı bir voltaj olacaktır. Bu, kapı zilimiz için farklı bir şarkı seçimi sırasına sahip olmamızı sağlar. Arduino random() işlevi hakkında daha fazla bilgi için buraya gidin:
#include "pitch.h"
#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 /* set up function */ void setup() { // giriş/çıkış pinlerini etkinleştir pinMode(BUTTON_PIN, INPUT); pinMode(SPEAKER_PIN, OUTPUT); // farklı bir sıralama elde etmemiz için rastgele() işlevini tohumla randomSeed(analogRead(0)); }
döngü:
loop() fonksiyonumuzda, butona basılıp basılmadığını (dijital pin 2 yüksek) sürekli olarak kontrol edeceğiz. Pin yüksek ise 50 ms bekleyip yine yüksek olup olmadığını kontrol ediyoruz. Bu, düğmeye basılmasını ve dijital giriş pininde yanlış pozitife neden olan parazit gürültü olmamasını sağlar.
Düğmeye basıldığını onayladıktan sonra, bir switch ifadesi kullanarak 5 şarkıdan birini seçmek için rastgele sayı üretecimizi kullanırız. Bu şarkılar için veriler "songs.h" içinde saklanır ve perde bilgileri "pitchs.h" içinde saklanır. Bir şarkı seçtiğimizde bu bilgiyi play_song() fonksiyonuna aktarıyoruz.
/* ana while döngüsü işlevi */
void loop() { // butona basılıp basılmadığını kontrol et if (digitalRead(BUTTON_PIN) == HIGH) { // hala basılı olduğundan emin olmak için 50 ms geciktir // yanlış okumaları önler gecikme(50); if(digitalRead(BUTTON_PIN) == HIGH) { // rastgele bir şarkı seçin int song_choice = rastgele(5); // hangi şarkıyı çalacağını seç geçiş (song_choice) { case 0: play_song(haircutLength, haircut, haircutDurations, haircutTempo); kırmak; durum 1: play_song(marioLength, mario, marioDurations, marioTempo); kırmak; durum 2: play_song(miiLength, mii, miiDurations, miiTempo); kırmak; durum 3: play_song(hpLength, hp, hpDurations, hpTempo); kırmak; durum 4: play_song(alma Uzunluğu, beni al, beni Süreleri al, beniTempo al); kırmak; varsayılan: play_song(miiLength, mii, miiDurations, miiTempo); kırmak; } } } }
play_song:
play_song() 4 argüman alır: şarkıdaki notaların tamsayı sayısı, melodideki perdelerin tamsayı dizisi, sürenin tamsayı dizisi ve söz konusu şarkı için tamsayı temposu. Çalmak istediğiniz her şarkı için bunların her birini belirtmelisiniz. Arduino ton işlevlerinin nasıl kullanılacağı hakkında daha fazla bilgi için şu eğiticiye bakabilirsiniz: https://www.arduino.cc/en/Tutorial/ToneMelody. Noktalı notlar için bu öğreticinin üstüne bazı işlevler ekledim. Nota süresi dizisindeki bir değer negatifse, bu noktalı bir not olduğu anlamına gelir (uzunluk 1,5 kat daha fazladır).
/* şarkıyı çalar */
void play_song(int num_notes, int melodi, int notSüreler, int tempo) { // adım adım ilerleyin ve (int i=0; i 0) { süre = tempo / notSüreleri; } // negatif bir sayıysa, noktalı nota anlamına gelir // noktalı notalar için süreyi yarı yarıya artırır else if (noteDurations < 0) { süre = tempo / abs(noteDurations) * 1.5; } ton(SPEAKER_PIN, melodi, süre); // notları ayırt etmek için aralarında bir minimum süre ayarlayın. // notun süresi + %30 iyi çalışıyor gibi görünüyor: int duraklamaBetweenNotes = süre * 1.30; gecikme (duraklatBetweenNotes); // tonu çalmayı durdur: noTone(SPEAKER_PIN); } }
Songs.h örneği:
Aşağıda "songs.h" içindeki şarkılardan birinin bir örneği bulunmaktadır. Notlar, "pitchs.h" içinde tanımlanan makrolardır. Sayılar, hertz (Hz) cinsinden notaların frekanslarına karşılık gelir. Notaların süresi şu şekilde tanımlanır: 1 = tam nota, 2 = yarım nota, 4 = dörtlük nota, 8 = sekizlik nota, -4 = noktalı dörtlük nota, vb. Uzunluk, şarkıdaki toplam nota sayısıdır. Tempo, şarkının hızı için bir bölücüdür (daha yüksek bir sayı, daha yavaş bir tempo anlamına gelir). Beğendiğiniz bir tempo elde edene kadar bu sayı ile oynamanız gerekecek.
/* harry potter */
int hp = { NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4 }; int hpDurations = { 4, -4, 8, 4, 2, 4, -2, -2, -4, 8, 4, 2, 4, 1 }; int hpLength = 14; int hpTempo = 1050;
3. Adım: Düzeltmeler
Daha fazla şarkı ekle! "songs.h" içinde gösterilen formatı takip edin ve yardım için öğreticiyi kullanın: https://www.arduino.cc/en/Tutorial/ToneMelody. Eklediğiniz her yeni şarkı için, switch ifadesine yeni bir durum eklemeyi ve random() işleviniz tarafından üretilebilecek maksimum sayıyı artırmayı unutmayın. Mutlu kodlama!
4. Adım: Daha Fazla Proje
Daha fazla proje için sayfalarımı ziyaret edin:
- https://dargen.io/
- https://github.com/mjdargen
- https://www.instructables.com/member/mjdargen/
Önerilen:
Arduino Kullanarak Dokunmatik Olmayan Kapı Zili, Vücut Isısı Algılama, GY-906, 433MHz Nasıl Yapılır: 3 Adım
Arduino Kullanarak Dokunmatik Olmayan Kapı Zili Nasıl Yapılır, Vücut Sıcaklığı Algılama, GY-906, 433MHz: Bugün Dokunmatik olmayan bir kapı zili yapacağız, vücut sıcaklığınızı algılayacak. Şu anki durumda, birinin vücut ısısının normalden yüksek olup olmadığını, birisinin koktuğunu bilmek çok önemlidir. Bu proje, herhangi bir tespit ederse Kırmızı ışık gösterecektir
Arduino Olmadan Kendin Yap Dokunmasız Kapı Zili!: 7 Adım
Arduino Olmadan Kendin Yap Dokunmasız Kapı Zili: Kapı zili anahtarları, yabancıların en çok dokunduğu şeylerden biridir. Ve covid 19 pandemisinin ciddi bir sorun haline gelmesiyle birlikte, bugünlerde iyi bir hijyen sağlamak en önemli öncelik haline geldi. Bu derste size basit bir yol göstereceğim
Arduino Coronavirus Kapı Zili: 6 Adım
Arduino Coronavirus Kapı Zili: Küresel koronavirüs salgını nedeniyle, içerideki insanlara burada olduğunuza ve kapıyı açmaları gerektiğine dair herhangi bir sinyale basmanıza gerek olmayan bir kapı zili yapmak istiyorum. Bu şey, diğer insanların kapı ziline dokunarak virüsü kapmanıza neden olabilir
Arduino Kapı Zili: 5 Adım
Arduino Kapı Zili: MALZEMELER-2 breadboard-buzzer-jumper teller-2 arduino/genuino güç kabloları ile-rf verici ve alıcı-basma düğmesi-100 ohm direnç
Kapı Zili, Hırsız Alarmı, Duman Alarmı vb. İçin Arduino Push Uyarıları: 8 Adım
Kapı Zili, Hırsız Alarmı, Duman Alarmları vb. İçin Arduino Push Uyarıları: Bir Arduino Uno ve bir Ethernet Kalkanı kullanarak Kapı Zilinizden, Hırsız Alarmınızdan, Duman Alarmlarınızdan vb. IoT Bildirimleri. Web sitemdeki tüm ayrıntılar buradaArduino Push Alert Box Hakkında Wiznet W5100 yongasına dayalı bir Arduino Uno ve Ethernet Kalkanı kullanır