Sisukord:

Arduino uksekell: 4 sammu
Arduino uksekell: 4 sammu

Video: Arduino uksekell: 4 sammu

Video: Arduino uksekell: 4 sammu
Video: How to build an arduino based doorbell alarm system | Learn Coding and Electronics now ‎@EduroSom  2024, Juuli
Anonim
Arduino uksekell
Arduino uksekell

Täna näitan teile, kuidas Arduino abil uksekella teha. See uksekell mängib laulude raamatukogust juhuslikku viisi. Saate kohandada oma uksekella ja lisada veelgi rohkem laule. Paigaldage see oma magamistoast, klassiruumist, kontorist või isegi välisuksest väljapoole!

Tarvikud:

  • Arduino Uno (enamik teisi tüüpe teeb)
  • Programmeerimiseks Arduino IDE -ga arvuti
  • USB-A kuni USB-B kaabel Arduino programmeerimiseks
  • Leivalaud
  • 4x hüppaja juhtmed
  • Nupp või muu lüliti
  • 10 kOhm takisti
  • Passiivne helisignaal (st piesoelektriline kõlar)
  • Püsivaks paigaldamiseks:

    • 9 V alalisvoolu toiteallikas või 9 V aku Arduino toiteks
    • 2x pikad juhtmed välisukse juhtmestiku jaoks

Samm: riistvara seadistamine

Riistvara seadistamine
Riistvara seadistamine
Riistvara seadistamine
Riistvara seadistamine
Riistvara seadistamine
Riistvara seadistamine

Esiteks seadistame riistvara. Alustame passiivse helisignaaliga (st kõlariga). Me tahame ühendada passiivse sumina positiivse otsa (tähistatud "+" märgiga) Arduino digitaalse tihvtiga 8. Me ühendame passize summeri teise otsa maapinnaga.

Järgmisena paigaldame uksekella nupu. Me kasutame lüliti jaoks 10 kOhm välist väljatõmmatavat takistit, nii et Arduino sisendil pole ujuvpinget ega ebastabiilset olekut. Kasutades väljatõmmatavat takistit, loeb Arduino pingeks 0 V, kui nuppu ei vajutata, ja 5 V, kui nuppu vajutatakse. Tõmbamis- või väljatõmmatavate takistite kohta lisateabe saamiseks lugege seda artiklit:

Ühendame nupu ühe külje 5V -ga. Surunupu teine pool ühendatakse maandusega 10 kOhm väljatõmmatava takisti kaudu. Pidage meeles: nupud on sisemiselt horisontaalselt ühendatud. Vajutades on need vertikaalselt ühendatud. Lisateavet leiate sellest artiklist:

Samm 2: Tarkvara seadistamine

Kogu kood on lisatud. Allpool on toodud kõigi funktsioonide kirjeldused koos koodipiltidega.

seadistus:

Funktsioonis setup () tahame konfigureerida oma nupu ja kõlari digitaalsed tihvtid. Tahame seadistada tihvti 2 oma nupu sisendiks ja tihvti 8 oma kõlari väljundiks.

Samuti tahame "külvata" oma juhuslike numbrite generaatorit, et valida juhuslikult viis, kui keegi meie uksekella helistab. Meie juhuslike arvude generaatori külvamine tähendab juhusliku sisendi sisestamist. Me külvame oma juhuslike numbrite generaatori analoogsisendile 0 antud pinge väärtusega. Kuna selle sisendiga pole midagi ühendatud, on sellel tihvtil juhuslik kõikuv pinge, mis annab meie juhuslike arvude generaatorile palju erinevaid väärtusi. See tagab, et meil on uksekella lauluvalikute järjekord erinev. Funktsiooni Arduino random () kohta lisateabe saamiseks külastage siin:

#include "pitchid.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * häälestusfunktsioon */void setup () {// lubage sisend-/väljundnõelad pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // seemne juhuslik () funktsioon, nii et saame erineva järjekorra randomSeed (analogRead (0)); }

silmus:

Funktsioonis loop () kontrollime pidevalt, kas nuppu on vajutatud (digitaalne tihvt 2 on kõrge). Kui tihvt on kõrge, ootame 50 ms ja kontrollime uuesti, kas see on endiselt kõrge. See tagab, et nuppu vajutatakse ja digitaalsisendi tihvtil ei olnud hulkuvat müra, mis põhjustas valepositiivse tulemuse.

Kui oleme kinnitanud, et nuppu vajutati, kasutame juhusliku arvu generaatorit, et valida lülitite abil üks viiest loost. Nende lugude andmed salvestatakse kausta "songs.h" ja helikõrguse teave on salvestatud "pitches.h". Kui oleme loo valinud, edastame selle teabe funktsiooni play_song ().

/ * põhiline silmusfunktsioon */

void loop () {// kontrollige, kas nuppu on vajutatud, kui (digitalRead (BUTTON_PIN) == HIGH) {// viivitab 50 ms, veendumaks, et see on ikka veel vajutatud // väldib igasuguseid eksitavaid lugemisviivitusi (50); if (digitalRead (BUTTON_PIN) == HIGH) {// vali juhuslikult lugu int song_choice = random (5); // valige, millist laulu mängida, lüliti (laulu_valik) {juhtum 0: esituslaul (juukselõikusPikkus, soeng, soengKestused, juukselõikusTempo); murda; juhtum 1: play_song (marioLength, mario, marioDurations, marioTempo); murda; juhtum 2: esituslaul (miiPikkus, mii, miiKestused, miiTempo); murda; juhtum 3: play_song (hpPikkus, hp, hpDurations, hpTempo); murda; juhtum 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); murda; vaikimisi: play_song (miiLength, mii, miiDurations, miiTempo); murda; }}}}

play_song:

play_song () võtab 4 argumenti: täisarv noote noodis, meloodia helikõrguste täisarvuline massiiv, kestuse täisarvuline massiiv ja konkreetse laulu täisarv. Peate need esitama iga laulu jaoks, mida soovite esitada. Arduino toonifunktsioonide kasutamise kohta lisateabe saamiseks vaadake seda õpetust: https://www.arduino.cc/en/Tutorial/ToneMelody. Lisasin selle õpetuse peale punktfunktsioonide jaoks mõned funktsioonid. Kui nootide kestuse massiivi väärtus on negatiivne, tähendab see, et see on punktiirmärk (pikkus on 1,5 korda suurem).

/ * mängib laulu */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// astuge läbi ja esitage kõik noodid (int i = 0; i 0) {duration = tempo / noteDurations ; } // kui see on negatiivne arv, tähendab punktiirmärk // pikendab punktiga nootide puhul kestust poole võrra, kui if (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } toon (SPEAKER_PIN, meloodia , kestus); // märkmete eristamiseks määrake nende vahel minimaalne aeg. // noodi kestus + 30% tundub hästi toimivat: int pauseBetweenNotes = kestus * 1,30; delay (pauseBetweenNotes); // lõpetage tooni mängimine: noTone (SPEAKER_PIN); }}

Näide lauludest.h:

Allpool on näidis ühest laulust jaotises "songs.h". Märkmed on makrod, mis on määratletud jaotises "pitch". Numbrid vastavad nootide sagedustele hertsides (Hz). Nootide kestus on määratletud järgmiselt: 1 = terve noot, 2 = poolnoot, 4 = veerandnoot, 8 = kaheksas noot, -4 = punktiirveerand jne. Pikkus on laulu nootide koguarv. Tempo on jagaja laulu kiirusele (suurem number tähendab aeglasemat tempot). Selle numbriga peate mängima, kuni saate endale meelepärase tempo.

/ * 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 hpPikkus = 14; int hpTempo = 1050;

3. samm: näpistused

Lisage veel laule! Järgige jaotises "songs.h" näidatud vormingut ja kasutage abi saamiseks õpetust: https://www.arduino.cc/en/Tutorial/ToneMelody. Ärge unustage lisada iga uue loo puhul lüliti avaldusele uut tähestikku ja suurendada maksimaalset arvu, mida teie juhuslik () funktsioon saab genereerida. Head kodeerimist!

Samm: rohkem projekte

Rohkemate projektide jaoks külastage minu lehti:

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

Soovitan: