Inhoudsopgave:

Arduino-deurbel: 4 stappen
Arduino-deurbel: 4 stappen

Video: Arduino-deurbel: 4 stappen

Video: Arduino-deurbel: 4 stappen
Video: 🇳🇱 LED VERKEERSLICHT / STOPLICHT - Arduino les #27 2024, November
Anonim
Arduino Deurbel
Arduino Deurbel

Vandaag laat ik je zien hoe je een deurbel maakt met een Arduino. Deze deurbel speelt een willekeurig deuntje uit een bibliotheek met liedjes. Je kunt je deurbel aanpassen en nog meer nummers toevoegen. Installeer het buiten uw slaapkamer, klaslokaal, kantoor of zelfs uw voordeur!

Benodigdheden:

  • Arduino Uno (de meeste andere typen zullen doen)
  • Computer met Arduino IDE voor programmeren
  • USB-A naar USB-B kabel voor het programmeren van Arduino
  • Breadboard
  • 4x jumperdraden
  • Drukknop of andere schakelaar:
  • 10 kOhm Weerstand
  • Passieve zoemer (d.w.z. piëzo-elektrische luidspreker)
  • Voor permanente installatie:

    • 9V DC-voeding of 9V-batterij om Arduino van stroom te voorzien
    • 2x lange draden voor bedrading knop buitendeur

Stap 1: Hardware-installatie

apparatuur installatie
apparatuur installatie
apparatuur installatie
apparatuur installatie
apparatuur installatie
apparatuur installatie

Eerst stellen we de hardware in. We beginnen met de passieve zoemer (d.w.z. luidspreker). We willen het positieve uiteinde van de passieve zoemer (aangegeven met "+" teken) verbinden met digitale pin 8 op de Arduino. We zullen het andere uiteinde van de passize-zoemer met aarde verbinden.

Vervolgens installeren we de drukknop voor de deurbel. We zullen een externe pulldown-weerstand van 10 kOhm gebruiken voor de schakelaar, dus er is geen zwevende spanning of onstabiele toestand op de ingang naar de Arduino. Door de pulldown-weerstand te gebruiken, leest de Arduino de spanning als 0V wanneer de knop niet wordt ingedrukt en 5V wanneer de knop wordt ingedrukt. Voor meer informatie over pullup- of pulldown-weerstanden kunt u dit artikel lezen:

We zullen een kant van de drukknop aansluiten op 5V. De andere kant van de drukknop wordt via een pulldown-weerstand van 10 kOhm met massa verbonden. Let op: drukknoppen zijn intern horizontaal verbonden. Ze zijn alleen verticaal verbonden als ze worden ingedrukt. Meer informatie vindt u in dit artikel:

Stap 2: Software-installatie

Alle code is bijgevoegd. Hieronder staan de beschrijvingen van elk van de functies met snapshots van de code.

opstelling:

In de setup()-functie willen we de digitale pinnen voor onze knop en onze luidspreker configureren. We willen pin 2 configureren als ingang voor onze knop en we willen pin 8 configureren als uitgang voor onze luidspreker.

We willen ook onze generator voor willekeurige getallen "seeden" voor het willekeurig selecteren van een deuntje wanneer iemand aanbelt. Het zaaien van onze generator voor willekeurige getallen betekent het een willekeurige invoer geven. We zullen onze generator voor willekeurige getallen zaaien met de spanningswaarde op analoge ingang 0. Aangezien er niets op deze ingang is aangesloten, zal er een "willekeurige", fluctuerende spanning op deze pin zijn, waardoor onze generator voor willekeurige getallen veel verschillende waarden krijgt. Dit zorgt ervoor dat we een andere volgorde van nummerselecties voor onze deurbel hebben. Ga voor meer informatie over de Arduino random()-functie hier:

#include "pitches.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 /* set-up functie */ void setup() { // enable input/output pinnen pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, UITGANG); // seed random() functie zodat we een andere volgorde krijgen randomSeed(analogRead(0)); }

lus:

In onze loop()-functie zullen we continu controleren of de knop is ingedrukt (digitale pin 2 is hoog). Als de pin hoog is, wachten we 50 ms en controleren we opnieuw of deze nog steeds hoog is. Dit zorgt ervoor dat de knop wordt ingedrukt en dat er geen verdwaalde ruis op de digitale ingangspin was die een vals positief resultaat veroorzaakte.

Zodra we hebben bevestigd dat de knop is ingedrukt, gebruiken we onze generator voor willekeurige getallen om een van de 5 nummers te selecteren met behulp van een switch-instructie. De gegevens voor deze nummers worden opgeslagen in "songs.h" en de toonhoogte-informatie wordt opgeslagen in "pitches.h". Zodra we een nummer hebben gekozen, geven we deze informatie door aan de functie play_song().

/* belangrijkste while-lusfunctie */

void loop () {// controleer of de knop is ingedrukt if (digitalRead (BUTTON_PIN) == HIGH) { // vertraag 50 ms om er zeker van te zijn dat deze nog steeds wordt ingedrukt // vermijdt eventuele verdwaalde verkeerde aflezingen vertraging (50); if (digitalRead (BUTTON_PIN) == HOOG) {// kies willekeurig een nummer int song_choice = willekeurig (5); // selecteer welk nummer je wilt spelen switch (song_choice) { case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); pauze; geval 1: play_song (marioLength, mario, marioDurations, marioTempo); pauze; geval 2: play_song (miiLength, mii, miiDurations, miiTempo); pauze; geval 3: play_song (hpLength, hp, hpDurations, hpTempo); pauze; geval 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); pauze; standaard: play_song (miiLength, mii, miiDurations, miiTempo); pauze; } } } }

speel liedje:

play_song() heeft 4 argumenten: een geheel aantal noten in de song, een integer array van de toonhoogtes in de melodie, een integer array van de duur en een integer tempo voor dat specifieke nummer. U moet elk van deze specificeren voor elk nummer dat u wilt spelen. Voor meer informatie over het gebruik van de Arduino-toonfuncties, kunt u deze tutorial bekijken: https://www.arduino.cc/en/Tutorial/ToneMelody. Ik heb wat functionaliteit toegevoegd aan deze tutorial voor gestippelde notities. Als een waarde in de array van de nootduur negatief is, betekent dit dat het een gestippelde noot is (de lengte is 1,5 keer groter).

/* speelt het nummer af */

void play_song (int num_notes, int melody , int noteDurations , int tempo) { // stap door en speel alle noten voor (int i = 0; i 0) { duration = tempo / noteDurations ; } // als het een negatief getal is, betekent gestippelde noot // verlengt de duur met de helft voor gestippelde noten else if (noteDurations < 0) { duration = tempo / abs(noteDurations) * 1.5; } toon (SPEAKER_PIN, melodie , duur); // om de noten te onderscheiden, stel een minimum tijd tussen hen in. // de duur van de notitie + 30% lijkt goed te werken: int pauseBetweenNotes = duur * 1.30; vertraging (pauzeTussenNotes); // stop het afspelen van de toon: noTone (SPEAKER_PIN); } }

Voorbeeld van songs.h:

Hieronder is een voorbeeld van een van de nummers in "songs.h". De noten zijn macro's gedefinieerd in "pitches.h". De nummers komen overeen met de frequenties van de noten in hertz (Hz). De duur van de noten wordt gedefinieerd als: 1 = hele noot, 2 = halve noot, 4 = kwartnoot, 8 = achtste noot, -4 = gestippelde kwartnoot, enz. De lengte is het totale aantal noten in de song. Het tempo is een deler voor de snelheid van het nummer (een hoger getal betekent een langzamer tempo). Je zult met dit nummer moeten spelen totdat je een tempo krijgt dat je leuk vindt.

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

Stap 3: Aanpassingen

Voeg meer liedjes toe! Volg het formaat dat wordt weergegeven in "songs.h" en gebruik de tutorial voor hulp: https://www.arduino.cc/en/Tutorial/ToneMelody. Voor elk nieuw nummer dat je toevoegt, denk eraan om een nieuwe case toe te voegen aan de switch-instructie en het maximale aantal te verhogen dat kan worden gegenereerd door je random()-functie. Veel plezier met coderen!

Stap 4: Meer projecten

Bezoek mijn pagina's voor meer projecten:

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

Aanbevolen: