Mündəricat:

Arduino qapı zəngi: 4 addım
Arduino qapı zəngi: 4 addım

Video: Arduino qapı zəngi: 4 addım

Video: Arduino qapı zəngi: 4 addım
Video: 35 видео со страшными призраками: мегасборник 2023 года [V1] 2024, Iyul
Anonim
Arduino qapı zəngi
Arduino qapı zəngi

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

Avadanlıq Quraşdırması
Avadanlıq Quraşdırması
Avadanlıq Quraşdırması
Avadanlıq Quraşdırması
Avadanlıq Quraşdırması
Avadanlıq Quraşdırması

Ə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ə: