Turinys:

„Arduino“durų skambutis: 4 žingsniai
„Arduino“durų skambutis: 4 žingsniai

Video: „Arduino“durų skambutis: 4 žingsniai

Video: „Arduino“durų skambutis: 4 žingsniai
Video: Vartų skambutis, IP domofonas iš Dahua. Išpakavimas. 2024, Liepa
Anonim
„Arduino“durų skambutis
„Arduino“durų skambutis

Šiandien aš jums parodysiu, kaip padaryti durų skambutį naudojant „Arduino“. Šis durų skambutis groja atsitiktinę melodiją iš dainų bibliotekos. Galite pritaikyti savo durų skambutį ir pridėti dar daugiau dainų. Įdiekite jį už savo miegamojo, klasės, biuro ar net savo durų!

Priedai:

  • „Arduino Uno“(dauguma kitų tipų tai padarys)
  • Kompiuteris su „Arduino IDE“programavimui
  • USB-A į USB-B kabelis Arduino programavimui
  • Bandomoji Lenta
  • 4x jungiamieji laidai
  • Mygtukas ar kitas jungiklis
  • 10 kOhm rezistorius
  • Pasyvus garsinis signalas (t. Y. Pjezoelektrinis garsiakalbis)
  • Nuolatiniam montavimui:

    • 9 V nuolatinės srovės maitinimo šaltinis arba 9 V baterija, skirta „Arduino“maitinti
    • 2x ilgi laidai laidų jungimo mygtukui lauke

1 žingsnis: Aparatūros sąranka

Techninės įrangos sąranka
Techninės įrangos sąranka
Techninės įrangos sąranka
Techninės įrangos sąranka
Techninės įrangos sąranka
Techninės įrangos sąranka

Pirma, mes nustatysime aparatinę įrangą. Pradėsime nuo pasyvaus garso signalo (ty garsiakalbio). Mes norime prijungti teigiamą pasyvaus garso signalo galą (pažymėtą „+“ženklu) prie „Arduino“skaitmeninio 8 kaiščio. Kitą „passize“signalo galą prijungsime prie žemės.

Toliau įdiegsime durų skambučio mygtuką. Jungikliui naudosime 10 kOhm išorinį ištraukiamą rezistorių, todėl įėjime į „Arduino“nėra kintamos įtampos ar nestabilios būsenos. Naudodamas ištraukiamą rezistorių, „Arduino“nuskaito įtampą kaip 0 V, kai mygtukas nėra paspaustas, ir 5 V, kai mygtukas yra paspaustas. Norėdami gauti daugiau informacijos apie ištraukiamus arba ištraukiamus rezistorius, galite perskaityti šį straipsnį:

Vieną mygtuko pusę prijungsime prie 5V. Kita mygtuko pusė bus prijungta prie žemės per 10 kOhm ištraukiamą rezistorių. Atminkite: mygtukai yra prijungti horizontaliai viduje. Paspaudus, jie jungiami tik vertikaliai. Daugiau informacijos rasite šiame straipsnyje:

2 veiksmas: programinės įrangos sąranka

Visas kodas pridedamas. Žemiau pateikiami kiekvienos funkcijos aprašymai su kodo momentinėmis nuotraukomis.

sąranka:

Funkcijoje setup () norime sukonfigūruoti savo mygtuko ir garsiakalbio skaitmeninius kaiščius. Mes norime sukonfigūruoti 2 kaištį kaip mygtuko įvestį, o 8 kaištį kaip garsiakalbio išvestį.

Taip pat norime „pasėti“savo atsitiktinių skaičių generatorių, kad atsitiktinai pasirinktume melodiją, kai kas nors paskambina į mūsų durų skambutį. Mūsų atsitiktinių skaičių generatoriaus sėjimas reiškia atsitiktinio įvesties įvedimą. Atsitiktinių skaičių generatorių sėsime į įtampą analoginėje įvestyje 0. Kadangi niekas nėra prijungtas prie šios įvesties, šiame kaištyje bus „atsitiktinė“, kintanti įtampa, suteikianti mūsų atsitiktinių skaičių generatoriui daug skirtingų verčių. Tai užtikrina, kad mūsų durų skambutis turės skirtingą dainų pasirinkimo tvarką. Norėdami gauti daugiau informacijos apie „Arduino random“() funkciją, apsilankykite čia:

#įtraukti „pikches.h“

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * nustatymo funkcija */void setup () {// įgalinti įvesties/išvesties kaiščius pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // sėklos atsitiktinis () funkcija, kad gautume kitokią tvarką randomSeed (analogRead (0)); }

kilpa:

Naudodami savo ciklo () funkciją, mes nuolat tikrinsime, ar mygtukas yra paspaustas (2 skaitmeninis kaištis aukštas). Jei kaištis yra aukštas, laukiame 50 ms ir dar kartą patikriname, ar jis vis dar aukštas. Tai užtikrina, kad mygtukas yra paspaudžiamas ir kad skaitmeninio įvesties kaiščio skleidžiamas triukšmas nesukelia klaidingo teigiamo rezultato.

Patvirtinę, kad mygtukas buvo paspaustas, mes naudojame atsitiktinių skaičių generatorių, norėdami pasirinkti vieną iš 5 dainų naudodami jungiklio teiginį. Šių dainų duomenys saugomi „songs.h“, o pikio informacija - „pitchches.h“. Kai mes pasirenkame dainą, mes perduodame šią informaciją į funkciją play_song ().

/ * pagrindinė ciklo funkcija */

void loop () {// patikrinkite, ar mygtukas yra paspaustas, jei (digitalRead (BUTTON_PIN) == HIGH) {// uždelsite 50 ms, kad įsitikintumėte, jog jis vis dar paspaustas // išvengiama klaidingų klaidų skaitymo uždelsimo (50); if (digitalRead (BUTTON_PIN) == HIGH) {// atsitiktinai pasirinkti dainą int song_choice = random (5); // pasirinkite, kurią dainą leisti, jungiklis (dainos_pasirinkimas) {atvejis 0: grojimo_daina (kirpimasLength, haircut, haircutDurations, haircutTempo); pertrauka; 1 atvejis: play_song (marioLength, mario, marioDurations, marioTempo); pertrauka; 2 atvejis: grojimo_daina (miiLength, mii, miiDurations, miiTempo); pertrauka; 3 atvejis: play_song (hpLength, hp, hpDurations, hpTempo); pertrauka; 4 atvejis: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); pertrauka; numatytasis: play_song (miiLength, mii, miiDurations, miiTempo); pertrauka; }}}}

play_song:

„play_song“() turi 4 argumentus: sveiką dainos natų skaičių, sveiką melodijos aukščių masyvą, sveiką trukmės masyvą ir sveiką tos dainos tempą. Kiekvieną dainą, kurią norite paleisti, turite nurodyti kiekvieną iš jų. Norėdami gauti daugiau informacijos apie tai, kaip naudoti „Arduino“tonų funkcijas, galite pažvelgti į šią mokymo programą: https://www.arduino.cc/en/Tutorial/ToneMelody. Šios pamokos viršuje pridėjau punktyrinių užrašų funkcijų. Jei užrašo trukmės masyvo reikšmė yra neigiama, tai reiškia, kad ji yra punktyrinė (ilgis 1,5 karto didesnis).

/ * groja dainą */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// peržiūrėkite ir paleiskite visas natas (int i = 0; i 0) {duration = tempo / noteDurations ; } // jei tai neigiamas skaičius, reiškia punktyrinė pastaba // perpus padidina punktyrinių užrašų trukmę, jei if (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } tonas (SPEAKER_PIN, melodija , trukmė); // norėdami atskirti pastabas, nustatykite minimalų laiką tarp jų. // atrodo, kad užrašo trukmė + 30% gerai veikia: int pauseBetweenNotes = trukmė * 1.30; uždelsimas (pauseBetweenNotes); // sustabdyti tono grojimą: noTone (SPEAKER_PIN); }}

Dainų pavyzdys.h:

Žemiau pateikiamas vienos iš dainų „songs.h“pavyzdys. Pastabos yra makrokomandos, apibrėžtos „pikse.h“. Skaičiai atitinka natų dažnius hercais (Hz). Užrašų trukmė apibrėžiama taip: 1 = visa nata, 2 = pusė, 4 = ketvirčio nata, 8 = aštunta nata, -4 = punktyrinė ketvirčio nata ir tt. Ilgis yra bendras dainos skaičius. Tempas yra dainos greičio daliklis (didesnis skaičius reiškia lėtesnį tempą). Turėsite žaisti su šiuo numeriu, kol pasieksite norimą tempą.

/* Haris Poteris */

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 žingsnis: pataisymai

Pridėkite daugiau dainų! Laikykitės formato, nurodyto „songs.h“, ir pasinaudokite pamoka: https://www.arduino.cc/en/Tutorial/ToneMelody. Prie kiekvienos naujos dainos, kurią pridedate, nepamirškite prie jungiklio teiginio pridėti naujos raidės ir padidinti maksimalų skaičių, kurį gali sugeneruoti jūsų atsitiktinė () funkcija. Laimingo kodavimo!

4 žingsnis: daugiau projektų

Daugiau projektų rasite mano puslapiuose:

  • https://dargen.io/
  • https://github.com/mjdargen
  • https://www.instructables.com/member/mjdargen/

Rekomenduojamas: