Cuprins:

Suport Arduino: 4 pași
Suport Arduino: 4 pași

Video: Suport Arduino: 4 pași

Video: Suport Arduino: 4 pași
Video: Cum se utilizează tastatura Arduino 4x4 descărcați codul 2024, Noiembrie
Anonim
Soneria Arduino
Soneria Arduino

Astăzi, îți voi arăta cum să faci o sonerie folosind un Arduino. Această sonerie redă o melodie aleatorie dintr-o bibliotecă de melodii. Puteți să vă personalizați soneria și să adăugați și mai multe melodii. Instalați-l în afara dormitorului, clasei, biroului sau chiar ușii din față!

Provizii:

  • Arduino Uno (majoritatea celorlalte tipuri o vor face)
  • Computer cu Arduino IDE pentru programare
  • Cablu USB-A la USB-B pentru programarea Arduino
  • Pană de pâine
  • 4x fire jumper
  • Buton sau alt comutator
  • Rezistor de 10 kOhm
  • Buzzer pasiv (adică difuzor piezoelectric)
  • Pentru instalare permanentă:

    • Sursă de alimentare de 9V DC sau baterie de 9V pentru a alimenta Arduino
    • 2 fire lungi pentru butonul de cablare de la ușă

Pasul 1: Configurare hardware

Configurare hardware
Configurare hardware
Configurare hardware
Configurare hardware
Configurare hardware
Configurare hardware

În primul rând, vom configura hardware-ul. Vom începe cu buzzerul pasiv (adică difuzorul). Vrem să conectăm capătul pozitiv al buzzerului pasiv (notat cu semnul „+”) la pinul digital 8 de pe Arduino. Vom conecta celălalt capăt al sonorizatorului de pasă la masă.

Apoi, vom instala butonul pentru sonerie. Vom folosi un rezistor extern de 10 kOhm pentru comutator, deci nu există tensiune plutitoare sau stare instabilă pe intrarea în Arduino. Prin utilizarea rezistorului derulant, Arduino citește tensiunea ca 0V când butonul nu este apăsat și 5V când butonul este apăsat. Pentru mai multe informații despre rezistențele de tip pullup sau derulant, puteți citi acest articol:

Vom conecta o parte a butonului la 5V. Cealaltă parte a butonului va fi conectată la masă printr-un rezistor de 10 kOhm. Nu uitați: butoanele sunt conectate orizontal intern. Acestea sunt conectate vertical numai atunci când sunt apăsate. Mai multe informații sunt furnizate în acest articol:

Pasul 2: Configurare software

Tot codul este atașat. Mai jos sunt descrierile fiecărei funcții cu instantanee ale codului.

înființat:

În funcția setup (), dorim să configurăm pinii digitali pentru butonul și difuzorul nostru. Vrem să configurăm pinul 2 ca intrare pentru butonul nostru și vrem să configurăm pinul 8 ca ieșire pentru difuzorul nostru.

De asemenea, dorim să „semănăm” generatorul nostru de numere aleatorii pentru selectarea aleatorie a unui ton atunci când cineva ne sună la sonerie. Semănarea generatorului nostru de numere aleatorii înseamnă alimentarea acestuia cu o intrare aleatorie. Vom însămânța generatorul nostru de numere aleatorii cu valoarea de tensiune pe intrarea analogică 0. Deoarece nimic nu este conectat la această intrare, va exista o tensiune fluctuantă "aleatorie" pe acest pin, oferind generatorului nostru de numere aleatorii multe valori diferite. Acest lucru ne asigură că vom avea o ordine diferită de selecții de melodii pentru soneria noastră. Pentru mai multe informații despre funcția Arduino random (), accesați aici:

#include "pitches.h"

#include "melodii.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 / * set up function * / void setup () {// activate pins / output pins pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // funcția seed random () astfel încât să obținem o ordine diferită randomSeed (analogRead (0)); }

buclă:

În funcția noastră buclă (), vom verifica continuu dacă butonul este apăsat (pinul digital 2 este ridicat). Dacă pinul este ridicat, așteptăm 50 ms și verificăm din nou pentru a ne asigura că este încă ridicat. Acest lucru asigură faptul că butonul este apăsat și nu a fost zgomot rătăcit pe pinul de intrare digital, provocând un fals pozitiv.

Odată ce am confirmat că butonul a fost apăsat, folosim generatorul nostru de numere aleatorii pentru a selecta una dintre cele 5 melodii folosind o declarație de comutare. Datele pentru aceste melodii sunt stocate în „songs.h”, iar informațiile despre pitch sunt stocate în „pitchs.h”. Odată ce alegem o melodie, trecem aceste informații în funcția play_song ().

/ * funcția principală în timp ce bucla * /

void loop () {// verificați dacă butonul este apăsat dacă (digitalRead (BUTTON_PIN) == HIGH) {// întârziere 50 ms pentru a vă asigura că este încă apăsat // evită orice întârziere de citire greșită (50); if (digitalRead (BUTTON_PIN) == HIGH) {// alegeți aleatoriu o melodie int song_choice = random (5); // selectați ce melodie să redați comutatorul (song_choice) {caz 0: play_song (tunsoareLungime, tunsoare, tunsoareDurări, tunsoareTempo); pauză; cazul 1: play_song (marioLength, mario, marioDurations, marioTempo); pauză; caz 2: play_song (miiLength, mii, miiDurations, miiTempo); pauză; cazul 3: play_song (hpLength, hp, hpDurations, hpTempo); pauză; cazul 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); pauză; implicit: play_song (miiLength, mii, miiDurations, miiTempo); pauză; }}}}

play_song:

play_song () ia 4 argumente: un număr întreg de note în melodie, o matrice întreagă a tonurilor din melodie, o matrice întreagă a duratei și un tempo întreg pentru acea melodie. Trebuie să specificați fiecare dintre acestea pentru fiecare melodie pe care doriți să o redați. Pentru mai multe informații despre modul de utilizare a funcțiilor de ton Arduino, puteți consulta acest tutorial: https://www.arduino.cc/en/Tutorial/ToneMelody. Am adăugat câteva funcționalități deasupra acestui tutorial pentru note punctate. Dacă o valoare din matricea duratei notei este negativă, înseamnă că este o notă punctată (lungimea este de 1,5 ori mai mare).

/ * redă melodia * /

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// pasează și redă toate notele pentru (int i = 0; i 0) {durata = tempo / noteDurations ; } // dacă este un număr negativ, înseamnă nota punctată // mărește durata la jumătate pentru notele punctate altfel dacă (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1,5; } ton (SPEAKER_PIN, melodie , durată); // pentru a distinge notele, setați un timp minim între ele. // durata notei + 30% pare să funcționeze bine: int pauseBetweenNotes = durata * 1,30; delay (pauseBetweenNotes); // opriți redarea tonului: noTone (SPEAKER_PIN); }}

Mostră de cântece.h:

Mai jos este o mostră a uneia dintre melodiile din „melodii.h”. Notele sunt macro-uri definite în „pitchs.h”. Numerele corespund frecvențelor notelor în hertz (Hz). Durata notelor este definită ca: 1 = nota întreagă, 2 = jumătate de notă, 4 = notă de sfert, 8 = nota a opta, -4 = notă de sfert punctată etc. Lungimea este numărul total de note din melodie. Tempo-ul este un despărțitor pentru viteza melodiei (un număr mai mare înseamnă un tempo mai lent). Va trebui să jucați cu acest număr până când veți obține un tempo care vă place.

/ * 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;

Pasul 3: Tweaks

Adauga mai multe cantece! Urmați formatul afișat în „melodii.h” și folosiți tutorialul pentru ajutor: https://www.arduino.cc/en/Tutorial/ToneMelody. Pentru fiecare melodie nouă pe care o adăugați, nu uitați să adăugați un caz nou la instrucțiunea switch și să măriți numărul maxim care poate fi generat de funcția dvs. random (). Codificare fericită!

Pasul 4: mai multe proiecte

Pentru mai multe proiecte, vizitați paginile mele:

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

Recomandat: