Sadržaj:

Arduino zvono na vratima: 4 koraka
Arduino zvono na vratima: 4 koraka

Video: Arduino zvono na vratima: 4 koraka

Video: Arduino zvono na vratima: 4 koraka
Video: BEŽIČNO ZVONO ZA VRATA SUPERKLIK 2024, Studeni
Anonim
Arduino zvono na vratima
Arduino zvono na vratima

Danas ću vam pokazati kako napraviti zvono na vratima pomoću Arduina. Ovo zvono na vratima svira nasumičnu melodiju iz biblioteke pjesama. Možete prilagoditi zvono na vratima i dodati još više pjesama. Instalirajte ga izvan svoje spavaće sobe, učionice, ureda ili čak ulaznih vrata!

Pribor:

  • Arduino Uno (većina drugih vrsta će to učiniti)
  • Računalo s Arduino IDE za programiranje
  • Kabel USB-A do USB-B za programiranje Arduina
  • Oglasna ploča
  • 4x kratkospojne žice
  • Gumb ili drugi prekidač
  • 10 kOhm otpornik
  • Pasivni zujalica (tj. Piezoelektrični zvučnik)
  • Za trajnu ugradnju:

    • 9V DC napajanje ili 9V baterija za napajanje Arduina
    • 2x duge žice za ožičenje gumba izvan vrata

Korak 1: Postavljanje hardvera

Postavljanje hardvera
Postavljanje hardvera
Postavljanje hardvera
Postavljanje hardvera
Postavljanje hardvera
Postavljanje hardvera

Prvo ćemo postaviti hardver. Počet ćemo s pasivnim zujalicom (tj. Zvučnikom). Želimo spojiti pozitivni kraj pasivnog zujalice (označen znakom "+") na digitalni pin 8 na Arduinu. Drugi kraj pasivne sirene spojit ćemo na masu.

Zatim ćemo instalirati gumb za zvono na vratima. Za prekidač ćemo koristiti vanjski otporni otpornik od 10 kOhm, tako da na ulazu u Arduino nema plutajućeg napona ili nestabilnog stanja. Koristeći padajući otpornik, Arduino očitava napon kao 0V kada se gumb ne pritisne i 5V kada se pritisne gumb. Za više informacija o pullup ili pulldown otpornicima možete pročitati ovaj članak:

Spojit ćemo jednu stranu tipke na 5V. Druga strana tipke bit će spojena na masu preko otpornog otpornika od 10 kOhm. Zapamtite: tipke su vodoravno spojene iznutra. Okomito su spojeni samo pritiskom. Više informacija nalazi se u ovom članku:

Korak 2: Postavljanje softvera

Sav kôd je u prilogu. Ispod su opisi svake od funkcija sa snimkama koda.

postaviti:

U funkciji setup () želimo konfigurirati digitalne pinove za naš gumb i zvučnik. Želimo konfigurirati pin 2 kao ulaz za naš gumb, a pin 8 želimo postaviti kao izlaz za naš zvučnik.

Također želimo "zasijati" naš generator slučajnih brojeva za nasumičan odabir melodije kada nam netko pozvoni na vrata. Postavljanje našeg generatora slučajnih brojeva znači unošenje nasumičnog unosa. Naš generator slučajnih brojeva posijat ćemo s vrijednošću napona na analognom ulazu 0. Budući da ništa nije povezano s ovim ulazom, na ovom pinu će biti "slučajni", fluktuirajući napon koji našem generatoru slučajnih brojeva daje mnogo različitih vrijednosti. To osigurava da ćemo za zvono na vratima imati drugačiji redoslijed odabira pjesama. Za više informacija o funkciji Arduino random () idite ovdje:

#include "parcele.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * set up function */void setup () {// omogući ulazne/izlazne pinove pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // funkcija random () sjemena tako da dobijemo drugačiji redoslijed randomSeed (analogRead (0)); }

petlja:

U našoj funkciji loop () neprestano ćemo provjeravati je li tipka pritisnuta (digitalni pin 2 je visok). Ako je pin visok, čekamo 50 ms i ponovno provjeravamo je li još uvijek visok. Time se osigurava da je gumb pritisnut i da nije buka zalutala na pinu digitalnog ulaza uzrokovala lažno pozitivno.

Nakon što smo potvrdili da je gumb pritisnut, pomoću generatora slučajnih brojeva odabiremo jednu od 5 pjesama koristeći naredbu switch. Podaci za ove pjesme pohranjeni su u "songs.h", a podaci o visini tona pohranjeni su u "pitch.h". Nakon što odaberemo pjesmu, prosljeđujemo te podatke u funkciju play_song ().

/ * glavna funkcija petlje */

void loop () {// provjerite je li pritisnut gumb if (digitalRead (BUTTON_PIN) == HIGH) {// odgodite 50 ms kako biste bili sigurni da je još uvijek pritisnut // izbjegava bilo kakvo zaostalo pogrešno čitanje (50); if (digitalRead (BUTTON_PIN) == HIGH) {// nasumičnim odabirom pjesme int song_choice = random (5); // odaberite koju ćete pjesmu svirati prekidač (song_choice) {slučaj 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); pauza; slučaj 1: play_song (marioLength, mario, marioDurations, marioTempo); pauza; slučaj 2: play_song (miiLength, mii, miiDurations, miiTempo); pauza; slučaj 3: play_song (hpLength, hp, hpDurations, hpTempo); pauza; slučaj 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); pauza; zadano: play_song (miiLength, mii, miiDurations, miiTempo); pauza; }}}}

play_song:

play_song () uzima 4 argumenta: cijeli broj nota u pjesmi, cjelobrojni niz tonova u melodiji, cjelobrojni niz trajanja i cjelobrojni tempo za tu pjesmu. Morate navesti svaku od ovih za svaku pjesmu koju želite svirati. Za više informacija o tome kako koristiti Arduino tonske funkcije, možete pogledati ovaj vodič: https://www.arduino.cc/en/Tutorial/ToneMelody. Dodao sam neke funkcije povrh ovog vodiča za bilješke s točkama. Ako je vrijednost u nizu trajanja bilješke negativna, to znači da je to točkasta nota (duljina je 1,5 puta veća).

/ * pušta pjesmu */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// korak kroz i sviranje svih nota za (int i = 0; i 0) {duration = tempo / noteDurations ; } // ako je to negativan broj, znači točkasta nota // povećava trajanje napola za točkaste bilješke else if (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1,5; } ton (SPEAKER_PIN, melodija , trajanje); // za razlikovanje bilješki, postavite minimalno vrijeme između njih. // čini se da trajanje bilješke + 30% dobro radi: int pauseBetweenNotes = trajanje * 1,30; kašnjenje (pauseBetweenNotes); // zaustavljanje sviranja tona: noTone (SPEAKER_PIN); }}

Uzorak pjesama.h:

Ispod je uzorak jedne od pjesama u "songs.h". Bilješke su makronaredbe definirane u "visinama.h". Brojevi odgovaraju frekvencijama nota u hercima (Hz). Trajanje nota definirano je kao: 1 = cijela nota, 2 = polovica note, 4 = nota četvrtine, 8 = osma nota, -4 = točka četvrtine, itd. Dužina je ukupan broj nota u pjesmi. Tempo je razdjelnik brzine pjesme (veći broj znači sporiji tempo). Morat ćete se igrati s ovim brojem dok ne dobijete tempo koji vam se sviđa.

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

Korak 3: Ugađanje

Dodajte još pjesama! Slijedite format prikazan u "songs.h" i upotrijebite vodič za pomoć: https://www.arduino.cc/en/Tutorial/ToneMelody. Za svaku novu pjesmu koju dodate, ne zaboravite dodati novo slovo u izraz switch i povećati maksimalni broj koji može generirati vaša funkcija random (). Sretno kodiranje!

Korak 4: Više projekata

Za više projekata posjetite moje stranice:

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

Preporučeni: