Sisällysluettelo:

Arduino -ovikello: 4 vaihetta
Arduino -ovikello: 4 vaihetta

Video: Arduino -ovikello: 4 vaihetta

Video: Arduino -ovikello: 4 vaihetta
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Heinäkuu
Anonim
Arduino -ovikello
Arduino -ovikello

Tänään näytän sinulle, kuinka tehdä ovikello Arduinolla. Tämä ovikello soittaa satunnaisen sävelmän kappaleista. Voit muokata ovikelloa ja lisätä vielä enemmän kappaleita. Asenna se makuuhuoneesi, luokkahuoneesi, toimistosi tai jopa etuovesi ulkopuolelle!

Tarvikkeet:

  • Arduino Uno (useimmat muut tyypit tekevät)
  • Tietokone, jossa on Arduino IDE ohjelmointia varten
  • USB-A-USB-B-kaapeli Arduinon ohjelmointiin
  • Leipälauta
  • 4x hyppyjohdot
  • Painike tai muu kytkin
  • 10 kOhm vastus
  • Passiivinen summeri (eli pietsosähköinen kaiutin)
  • Kiinteä asennus:

    • 9 V DC -virtalähde tai 9 V -akku Arduinon virransyöttöön
    • 2x pitkät johdot johdotuspainikkeelle oven ulkopuolella

Vaihe 1: Laitteiston asennus

Laitteiston asennus
Laitteiston asennus
Laitteiston asennus
Laitteiston asennus
Laitteiston asennus
Laitteiston asennus

Ensinnäkin asennamme laitteiston. Aloitamme passiivisella summerilla (eli kaiuttimella). Haluamme liittää passiivisen summerin positiivisen pään (merkitty "+" -merkillä) Arduinon digitaaliseen nastaan 8. Yhdistämme passize -summerin toisen pään maahan.

Seuraavaksi asennamme ovikellon painikkeen. Käytämme kytkimelle 10 kOhm: n ulkoista ulosvedettävää vastusta, joten Arduinon tulossa ei ole kelluvaa jännitettä tai epävakaata tilaa. Käyttämällä alasvetovastusta Arduino lukee jännitteeksi 0 V, kun painiketta ei paineta, ja 5 V, kun painiketta painetaan. Lisätietoja pullup- tai pull-down-vastuksista voit lukea tästä artikkelista:

Yhdistämme painikkeen toisen puolen 5 volttiin. Painikkeen toinen puoli liitetään maahan 10 kOhm: n ulosvedettävän vastuksen kautta. Muista: painikkeet on liitetty vaakasuoraan sisäisesti. Ne on liitetty vain pystysuoraan, kun niitä painetaan. Lisätietoja on tässä artikkelissa:

Vaihe 2: Ohjelmiston asennus

Kaikki koodi on liitetty. Alla on kunkin toiminnon kuvaukset koodin tilannekuvilla.

perustaa:

Setup () -toiminnossa haluamme määrittää painikkeemme ja kaiuttimemme digitaaliset nastat. Haluamme määrittää nastan 2 painikkeemme tuloksi ja haluamme määrittää nastan 8 kaiuttimen ulostuloksi.

Haluamme myös "siementää" satunnaislukugeneraattorimme valitakseen sävelmän satunnaisesti, kun joku soittaa ovikellomme. Satunnaislukugeneraattorimme kylvö tarkoittaa sen syöttämistä satunnaiseen syötteeseen. Siemennemme satunnaislukugeneraattorimme jännitearvolla analogiatulossa 0. Koska tähän tuloon ei ole kytketty mitään, tässä tapissa on "satunnainen", vaihteleva jännite, joka tarjoaa satunnaislukugeneraattorillemme monia erilaisia arvoja. Näin varmistamme, että ovikellomme kappalevalinnat ovat eri järjestyksessä. Lisätietoja Arduino random () -toiminnosta on täällä:

#include "pitches.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * asetustoiminto */void setup () {// ota käyttöön tulo-/lähtönastat pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // siemenen satunnainen () -funktio niin, että saamme eri järjestyksen randomSeed (analogRead (0)); }

silmukka:

Silmukka () -toiminnossamme tarkistamme jatkuvasti, onko painiketta painettu (digitaalinen nasta 2 on korkea). Jos tappi on korkea, odotamme 50 ms ja tarkistamme uudelleen, että se on edelleen korkea. Tämä varmistaa, että painiketta painetaan, eikä digitaalitulonapissa ollut harhaääntä, joka aiheutti väärän positiivisen.

Kun olemme vahvistaneet, että painiketta painettiin, käytämme satunnaislukugeneraattoria valitaksemme yhden viidestä kappaleesta kytkinlausekkeen avulla. Näiden kappaleiden tiedot tallennetaan tiedostoon "songs.h" ja äänenkorkeustiedot "pitch". Kun olemme valinneet kappaleen, välitämme nämä tiedot toimintoon play_song ().

/ * tärkein kun silmukka -toiminto */

void loop () {// tarkista, painetaanko painiketta, jos (digitalRead (BUTTON_PIN) == HIGH) {// viivästyy 50 ms varmistaaksesi, että se on edelleen painettuna // välttää väärinkäsitysten viive (50); if (digitalRead (BUTTON_PIN) == HIGH) {// valitse kappale satunnaisesti int song_choice = random (5); // valitse toistettava kappale (kappaleen valinta) {case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); tauko; tapaus 1: play_song (marioLength, mario, marioDurations, marioTempo); tauko; tapaus 2: play_song (miiLength, mii, miiDurations, miiTempo); tauko; tapaus 3: play_song (hpLength, hp, hpDurations, hpTempo); tauko; tapaus 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); tauko; oletus: play_song (miiLength, mii, miiDurations, miiTempo); tauko; }}}}

play_song:

play_song () sisältää 4 argumenttia: kokonaisluku kappaleessa olevia nuotteja, kokonaisluku matriisin sävelkorkeuksista, kokonaisluku matriisi kestosta ja kokonaisluku tempo kyseiselle kappaleelle. Ne on määritettävä jokaiselle kappaleelle, jonka haluat toistaa. Lisätietoja Arduino -äänitoimintojen käyttämisestä on tässä opetusohjelmassa: https://www.arduino.cc/en/Tutorial/ToneMelody. Lisäsin joitain toimintoja tämän opetusohjelman päälle katkoviivoille. Jos nuotin kestotaulukon arvo on negatiivinen, se tarkoittaa, että se on pisteviiva (pituus on 1,5 kertaa suurempi).

/ * soittaa kappaleen */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// astu läpi ja toista kaikki nuotit (int i = 0; i 0) {duration = tempo / noteDurations ; } // jos se on negatiivinen luku, tarkoittaa pisteviivaa // lisää kestoa puoliksi muille pisteviivoille, jos (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } sävy (SPEAKER_PIN, melodia , kesto); // erottaaksesi muistiinpanot, aseta niiden välille vähimmäisaika. // nuotin kesto + 30% näyttää toimivan hyvin: int pauseBetweenNotes = kesto * 1,30; delay (pauseBetweenNotes); // lopeta äänen toisto: noTone (SPEAKER_PIN); }}

Esimerkki kappaleista. H:

Alla on näyte eräästä kappaleesta kappaleessa "songs.h". Muistiinpanot ovat makrot, jotka on määritetty "pitchissä. H". Numerot vastaavat nuotin taajuuksia hertseinä (Hz). Muistiinpanojen kesto määritellään seuraavasti: 1 = kokonainen nuotti, 2 = puolipainos, 4 = neljännesmuistio, 8 = kahdeksas nuotti, -4 = pisteviiva neljännes nuotti jne. Pituus on kappaleen nuottien kokonaismäärä. Tempo on jakaja kappaleen nopeudelle (suurempi luku tarkoittaa hitaampaa tempoa). Sinun täytyy leikkiä tällä numerolla, kunnes saat haluamasi tempoa.

/ * 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, -2, -4, 8, 4, 2, 4, 1}; int hpPituus = 14; int hpTempo = 1050;

Vaihe 3: Säädöt

Lisää kappaleita! Noudata kohdassa "songs.h" näytettyä muotoa ja käytä opetusohjelmaa: https://www.arduino.cc/en/Tutorial/ToneMelody. Muista lisätä jokaiselle lisäämällesi uudelle kappaleelle kytkinlauseeseen uusi kirjainkoko ja lisätä satunnaisfunktion () tuottamaa enimmäismäärää. Hyvää koodausta!

Vaihe 4: Lisää projekteja

Lisää projekteja löydät sivuiltani:

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

Suositeltava: