Innholdsfortegnelse:

Arduino dørklokke: 4 trinn
Arduino dørklokke: 4 trinn

Video: Arduino dørklokke: 4 trinn

Video: Arduino dørklokke: 4 trinn
Video: 🔮 Illuminate your Space: Transforming Your Home with the Brilliant Smart Home for Lights | Review! 2024, Juli
Anonim
Arduino dørklokke
Arduino dørklokke

I dag skal jeg vise deg hvordan du lager en dørklokke med en Arduino. Denne dørklokken spiller en tilfeldig melodi fra et bibliotek med sanger. Du kan tilpasse dørklokken og legge til enda flere sanger. Installer den utenfor soverommet, klasserommet, kontoret eller til og med inngangsdøren din!

Rekvisita:

  • Arduino Uno (de fleste andre typer vil gjøre)
  • Datamaskin med Arduino IDE for programmering
  • USB-A til USB-B-kabel for programmering av Arduino
  • Brødbrett
  • 4x jumper ledninger
  • Trykknapp eller annen bryter
  • 10 kOhm motstand
  • Passiv summer (dvs. piezoelektrisk høyttaler)
  • For permanent installasjon:

    • 9V DC strømforsyning eller 9V batteri for å drive Arduino
    • 2x lange ledninger for ledningsknapp utenfor døren

Trinn 1: Maskinvareoppsett

Maskinvareoppsett
Maskinvareoppsett
Maskinvareoppsett
Maskinvareoppsett
Maskinvareoppsett
Maskinvareoppsett

Først skal vi sette opp maskinvaren. Vi starter med den passive summeren (dvs. høyttaleren). Vi ønsker å koble den positive enden av den passive summeren (angitt med "+" -tegn) til digital pin 8 på Arduino. Vi kobler den andre enden av passize -summeren til bakken.

Deretter installerer vi trykknappen for dørklokken. Vi vil bruke en 10 kOhm ekstern nedtrekksmotstand for bryteren, så det er ingen flytende spenning eller ustabil tilstand på inngangen til Arduino. Ved å bruke nedtrekksmotstanden leser Arduino spenningen som 0V når knappen ikke trykkes og 5V når knappen trykkes. For mer informasjon om pullup- eller pulldown-motstander, kan du lese denne artikkelen:

Vi kobler den ene siden av trykknappen til 5V. Den andre siden av trykknappen blir koblet til jord gjennom en 10 kOhm nedtrekksmotstand. Husk: Trykknapper er koblet horisontalt internt. De er bare koblet vertikalt når de trykkes. Mer informasjon er gitt i denne artikkelen:

Trinn 2: Programvareoppsett

Hele koden er vedlagt. Nedenfor er beskrivelsene av hver av funksjonene med øyeblikksbilder av koden.

oppsett:

I oppsett () -funksjonen ønsker vi å konfigurere de digitale pinnene for knappen og høyttaleren vår. Vi ønsker å konfigurere pin 2 som inngang for knappen vår, og vi vil konfigurere pin 8 som en utgang for høyttaleren vår.

Vi ønsker også å "seed" vår tilfeldige tallgenerator for tilfeldig å velge en melodi når noen ringer på døren vår. Å se vår tilfeldige tallgenerator betyr å mate den med en tilfeldig inngang. Vi vil seed vår tilfeldige tallgenerator med spenningsverdien på analog inngang 0. Siden ingenting er koblet til denne inngangen, vil det være en "tilfeldig", svingende spenning på denne pinnen som gir vår tilfeldige tallgenerator mange forskjellige verdier. Dette sikrer at vi vil ha en annen rekkefølge av sangvalg for dørklokken vår. For mer informasjon om Arduino random () -funksjonen, gå her:

#inkludere "pitches.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * set up function */void setup () {// enable input/output pins pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // seed random () funksjon slik at vi får en annen rekkefølge randomSeed (analogRead (0)); }

Løkke:

I vår loop () -funksjon vil vi kontinuerlig sjekke om knappen er trykket (digital pin 2 er høy). Hvis pinnen er høy, venter vi 50 ms og sjekker igjen for å sikre at den fortsatt er høy. Dette sikrer at knappen trykkes ned, og at det ikke var avvikende støy på den digitale inngangspinnen som forårsaket en falsk positiv.

Når vi har bekreftet at knappen ble trykket, bruker vi vår tilfeldige tallgenerator til å velge en av de 5 sangene ved hjelp av en switch -setning. Dataene for disse sangene er lagret i "songs.h" og tonehøydeinformasjonen er lagret i "pitches.h". Når vi har valgt en sang, sender vi denne informasjonen til funksjonen play_song ().

/ * main while loop -funksjon */

void loop () {// sjekk for å se om knappen er trykket hvis (digitalRead (BUTTON_PIN) == HIGH) {// forsink 50 ms for å sikre at den fortsatt er trykket // unngår enhver forsinket feillesingsforsinkelse (50); hvis (digitalRead (BUTTON_PIN) == HIGH) {// tilfeldig velg en sang int song_choice = random (5); // velg hvilken sang du vil spille switch (song_choice) {case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); gå i stykker; sak 1: play_song (marioLength, mario, marioDurations, marioTempo); gå i stykker; sak 2: play_song (miiLength, mii, miiDurations, miiTempo); gå i stykker; case 3: play_song (hpLength, hp, hpDurations, hpTempo); gå i stykker; case 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); gå i stykker; standard: play_song (miiLength, mii, miiDurations, miiTempo); gå i stykker; }}}}

play_song:

play_song () tar 4 argumenter: et heltall notater i sangen, et heltallsmateriale av tonehøyder i melodien, et heltallsarray av varigheten og et heltallstempo for den aktuelle sangen. Du må spesifisere hver av disse for hver sang du ønsker å spille. For mer informasjon om hvordan du bruker Arduino -tonefunksjonene, kan du se på denne opplæringen: https://www.arduino.cc/en/Tutorial/ToneMelody. Jeg la til litt funksjonalitet på toppen av denne opplæringen for prikkete notater. Hvis en verdi i notenes varighet er negativ, betyr det at den er en stiplet note (lengden er 1,5 ganger større).

/ * spiller sangen */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// gå gjennom og spill alle notene for (int i = 0; i 0) {varighet = tempo / noteDurations ; } // hvis det er et negativt tall, betyr stiplet note // øker varigheten med det halve for stiplete notater ellers hvis (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } tone (SPEAKER_PIN, melodi , varighet); // for å skille notatene, sett en minimumstid mellom dem. // notatets varighet + 30% ser ut til å fungere godt: int pauseBetweenNotes = varighet * 1,30; forsinkelse (pauseBetweenNotes); // stopp tonespillingen: noTone (SPEAKER_PIN); }}

Eksempel på sanger. H:

Nedenfor er et eksempel på en av sangene i "songs.h". Notatene er makroer definert i "pitches.h". Tallene tilsvarer frekvensene til notene i hertz (Hz). Notenes varighet er definert som: 1 = hel tone, 2 = halv tone, 4 = kvartnote, 8 = åttende note, -4 = stiplet kvartnote, etc. Lengden er det totale antallet noter i sangen. Tempoet er en skillelinje for hastigheten på sangen (et høyere tall betyr et lavere tempo). Du må leke med dette nummeret til du får et tempo du liker.

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

Trinn 3: Tilpasninger

Legg til flere sanger! Følg formatet som vises i "songs.h" og bruk veiledningen for å få hjelp: https://www.arduino.cc/en/Tutorial/ToneMelody. For hver nye sang du legger til, må du huske å legge til en ny sak i switch -setningen og øke det maksimale antallet som kan genereres av din tilfeldige () -funksjon. God koding!

Trinn 4: Flere prosjekter

For flere prosjekter, besøk sidene mine:

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

Anbefalt: