Mündəricat:
Video: Arduino qapı zəngi: 4 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:42
Bu gün sizə bir Arduino istifadə edərək qapı zəngi necə edəcəyinizi göstərəcəyəm. Bu qapı zəngi mahnılar kitabxanasından təsadüfi bir melodiya çalır. Qapı zənginizi fərdiləşdirə və daha çox mahnı əlavə edə bilərsiniz. Yataq otağınızın, sinifinizin, ofisinizin və ya hətta ön qapınızın xaricində quraşdırın!
Təchizat:
- Arduino Uno (digər növlərin çoxu edəcək)
- Proqramlaşdırma üçün Arduino IDE ilə kompüter
- Arduino proqramlaşdırma üçün USB-A-USB-B kabeli
- Çörək lövhəsi
- 4x keçid telləri
- Düymə və ya digər düymə
- 10 kOhm rezistor
- Passiv səs siqnalı (yəni piezoelektrik dinamik)
-
Daimi quraşdırma üçün:
- Arduino'yu gücləndirmək üçün 9V DC Güc Təchizatı və ya 9V batareya
- Qapının kənarındakı düyməni bağlamaq üçün 2x uzun tel
Addım 1: Hardware Setup
Əvvəlcə cihazı quracağıq. Passiv səs siqnalı (yəni dinamik) ilə başlayacağıq. Passiv səs siqnalının müsbət ucunu ("+" işarəsi ilə işarələnir) Arduino üzərindəki rəqəmsal pin 8 -ə bağlamaq istəyirik. Passize siqnalının digər ucunu yerə bağlayacağıq.
Sonra qapı zəngi üçün düyməni quraşdıracağıq. Açar üçün 10 kOhm xarici açılan müqavimət istifadə edəcəyik, buna görə Arduino girişində heç bir üzən gərginlik və ya qeyri -sabit vəziyyət yoxdur. Arduino, açılan rezistordan istifadə edərək düyməni basılmadıqda 0V, düyməni basıldıqda isə 5V olaraq oxuyur. Çəkmə və ya açılan rezistorlar haqqında daha çox məlumat üçün bu yazını oxuya bilərsiniz:
Düymənin bir tərəfini 5V -ə bağlayacağıq. Düymənin digər tərəfi 10 kOhm açılan rezistor vasitəsilə yerə bağlanacaq. Unutmayın: düymələr daxili üfüqi olaraq bağlanır. Yalnız basıldıqda şaquli olaraq bağlanırlar. Daha çox məlumat bu yazıda verilmişdir:
Addım 2: Proqram Quraşdırması
Bütün kod əlavə olunur. Aşağıda kodun anları olan hər bir funksiyanın təsviri verilmişdir.
qurmaq:
Setup () funksiyasında düyməmiz və dinamikimiz üçün rəqəmsal pinləri konfiqurasiya etmək istəyirik. Pin 2 -ni düyməmiz üçün giriş olaraq konfiqurasiya etmək istəyirik və pin 8 -i dinamikimiz üçün çıxış olaraq konfiqurasiya etmək istəyirik.
Kimsə qapımıza zəng vuranda təsadüfi bir melodiyanı seçmək üçün təsadüfi say generatorumuzu "toxumlamaq" istəyirik. Təsadüfi ədəd generatorumuzun əkilməsi, təsadüfi bir girişin verilməsi deməkdir. Təsadüfi say generatorumuzu 0 analoq girişdəki gərginlik dəyəri ilə toxumlayacağıq. Bu girişə heç bir şey bağlı olmadığı üçün təsadüfi ədəd generatorumuza bir çox fərqli dəyər verən "təsadüfi" dalğalanan bir gərginlik olacaq. Bu, qapımızın zəngi üçün fərqli bir mahnı seçimi sırasına sahib olmağımızı təmin edir. Arduino random () funksiyası haqqında daha çox məlumat üçün bura daxil olun:
#"meydançalar.h" daxil edin
#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * qurma funksiyası */void setup () {// giriş/çıxış pinlərini pinMode (BUTTON_PIN, INPUT) aktivləşdirmək; pinMode (SPEAKER_PIN, ÇIXIŞ); // toxum təsadüfi () funksiyası ilə fərqli bir sifariş əldə edirik randomSeed (analogRead (0)); }
döngə:
Loop () funksiyamızda, düymənin basıldığını yoxlamaq üçün davamlı olaraq yoxlayacağıq (rəqəmsal pin 2 yüksəkdir). Pin yüksəkdirsə, 50 ms gözləyin və yenə də yüksək olduğundan əmin olmaq üçün yenidən yoxlayın. Bu, düyməni basıldığını və rəqəmsal giriş pinində yanlış pozitivliyə səbəb olan səs -küy olmadığını təmin edir.
Düymənin basıldığını təsdiqlədikdən sonra, təsadüfi say generatorumuzdan istifadə edərək bir keçid ifadəsi istifadə edərək 5 mahnıdan birini seçirik. Bu mahnıların məlumatları "songs.h" də, sahə məlumatları isə "pitches.h" də saxlanılır. Bir mahnı seçdikdən sonra bu məlumatı play_song () funksiyasına ötürürük.
/ * main while loop funksiyası */
void loop () {// (digitalRead (BUTTON_PIN) == YÜKSEK) {// düyməsinin basıldığını yoxlayın, hələ də basıldığından əmin olmaq üçün 50 ms gecikdirin // hər hansı bir səhv oxunma gecikməsinin qarşısını alır (50); if (digitalRead (BUTTON_PIN) == YÜKSEK) {// təsadüfi olaraq mahnı seç int int_choice = təsadüfi (5); // hansı mahnının çalınacağını seçin (mahnı_sayısı) {hal 0: play_song (saç düzümüLength, haircut, haircutDurations, haircutTempo); fasilə; hal 1: play_song (marioLength, mario, marioDurations, marioTempo); fasilə; hal 2: play_song (miiLength, mii, miiDurations, miiTempo); fasilə; hal 3: play_song (hpLength, hp, hPDurations, hpTempo); fasilə; hal 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); fasilə; default: play_song (miiLength, mii, miiDurations, miiTempo); fasilə; }}}}
play_song:
play_song () 4 arqument götürür: mahnıdakı notların tam sayı, melodiyadakı səslərin tam sayı, müddəti tam bir sıra və bu mahnının tam tempi. Çalmaq istədiyiniz hər mahnı üçün bunların hər birini təyin etməlisiniz. Arduino ton funksiyalarından istifadə haqqında daha çox məlumat üçün bu təlimata baxa bilərsiniz: https://www.arduino.cc/en/Tutorial/ToneMelody. Nöqtəli qeydlər üçün bu təlimatın üstünə bəzi funksiyalar əlavə etdim. Qeyd müddəti sırasındakı bir dəyər mənfi olarsa, bu, nöqtəli bir qeyddir (uzunluq 1,5 dəfə böyükdür).
/ * mahnını ifa edir */
void play_song (int num_notes, int melodiya , int noteDurations , int temp) {// (int i = 0; i 0) {duration = temp / noteDurations ; } // mənfi bir rəqəmdirsə, nöqtəli qeyd deməkdir // başqa nöqtəli qeydlər üçün müddəti yarı artırır, əgər (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } ton (SPEAKER_PIN, melodiya , müddəti); // notları ayırmaq üçün aralarında minimum vaxt təyin edin. // notun müddəti + 30% yaxşı işləyir: int pauseBetweenNotes = müddəti * 1.30; gecikmə (pauseBetweenNotes); // ton çalmağı dayandırın: noTone (SPEAKER_PIN); }}
Mahnı nümunəsi.h:
Aşağıda "songs.h" dəki mahnılardan birinin nümunəsi verilmişdir. Qeydlər "pitches.h" də təyin olunan makrolardır. Nömrələr hertzdəki (Hz) notların tezliyinə uyğundur. Notların müddəti aşağıdakı kimi müəyyən edilir: 1 = bütün not, 2 = yarım not, 4 = dörddəbir not, 8 = səkkizinci not, -4 = nöqtəli dörddəbir notu və s. Uzunluq mahnıdakı notların ümumi sayıdır. Temp, mahnının sürəti üçün bir bölücüdür (daha yüksək rəqəm daha yavaş temp deməkdir). İstədiyiniz tempi alana qədər bu nömrə ilə oynamalı olacaqsınız.
/* 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;
Addım 3: Tweaks
Daha çox mahnı əlavə edin! "Songs.h" də göstərilən formatı izləyin və kömək üçün dərsdən istifadə edin: https://www.arduino.cc/en/Tutorial/ToneMelody. Əlavə etdiyiniz hər yeni mahnı üçün switch ifadəsinə yeni bir hal əlavə etməyi və təsadüfi () funksiyanız tərəfindən yaradıla bilən maksimum sayını artırmağı unutmayın. Xoşbəxt kodlaşdırma!
Addım 4: Daha çox layihə
Daha çox layihə üçün səhifələrimə daxil olun:
- https://dargen.io/
- https://github.com/mjdargen
- https://www.instructables.com/member/mjdargen/
Tövsiyə:
Toxunmayan qapı zəngi, bədən istiliyinin aşkarlanması, Arduino istifadə edərək GY-906, 433MHz necə edilir: 3 addım
Toxunmayan Qapı Zəngi, Bədən İstiliyi Algılama, GY-906, 433MHz Arduino istifadə edərək: Bu gün toxunulmaz bir qapı zəngi hazırlayacağıq, bədən istiliyinizi aşkar edəcək. İndiki vəziyyətdə, kiminsə vurduğu zaman, bədən istiliyinin normaldan daha yüksək olub olmadığını bilmək çox vacibdir
Xüsusi Qapı Mat Tetikli Qapı Zəngi.: 6 Addım
Xüsusi Qapı Mat Tetikli Qapı Zəngi.: Salam! Adım Justin, mən liseydə kiçikəm və bu Təlimat sizə qapı döşəyinizə basanda işə salınan və istədiyiniz melodiya və ya mahnıya çevrilə bilən bir qapı zəngi necə edəcəyinizi göstərəcək! Qapı matı qapını tətiklədiyi üçün
Arduino olmadan DIY Toxunmaz Qapı Zəngi!: 7 addım
Arduino olmadan DIY Dokunmaz Qapı Zəngi! Covid 19 pandemiyası ciddi bir problemə çevrildikdə, bu günlərdə yaxşı gigiyenaya riayət etmək ən vacib məsələlərdən birinə çevrildi. Beləliklə, bu təlimatda sizə sadə bir yol göstərəcəyəm
Arduino Coronavirus qapı zəngi: 6 addım
Arduino Coronavirus Qapı Zəngi: Qlobal koronavirus pandemiyası səbəbiylə, içəridə olan insanlara burda olduğunuza dair heç bir siqnal basdırmanız lazım olmayan bir qapı zəngi etmək istəyirəm və onlar qapını açmalıdırlar. Bu şey digər insanların qapı zənginə toxunaraq virusa yoluxdura bilər
Arduino qapı zəngi: 5 addım
Arduino Qapı Zəngi: SUPPLIES-2 çörək lövhəsi-səs siqnalı-tullanan tellər-2 arduino/genuino elektrik kabelləri-rf ötürücü və qəbuledici düymə-100 ohm müqavimət