Inhaltsverzeichnis:

Arduino Türklingel - Gunook
Arduino Türklingel - Gunook

Video: Arduino Türklingel - Gunook

Video: Arduino Türklingel - Gunook
Video: How to build an arduino based doorbell alarm system | Learn Coding and Electronics now ‎@EduroSom  2024, Juli
Anonim
Arduino-Türklingel
Arduino-Türklingel

Heute zeige ich Ihnen, wie Sie mit einem Arduino eine Türklingel herstellen. Diese Türklingel spielt eine zufällige Melodie aus einer Bibliothek von Songs. Sie können Ihre Türklingel anpassen und noch mehr Songs hinzufügen. Installieren Sie es außerhalb Ihres Schlafzimmers, Klassenzimmers, Büros oder sogar Ihrer Haustür!

Lieferungen:

  • Arduino Uno (die meisten anderen Typen reichen)
  • Computer mit Arduino IDE zum Programmieren
  • USB-A-zu-USB-B-Kabel zum Programmieren von Arduino
  • Steckbrett
  • 4x Überbrückungsdrähte
  • Taster oder anderer Schalter
  • 10 kOhm Widerstand
  • Passiver Summer (d. h. piezoelektrischer Lautsprecher)
  • Für Festinstallation:

    • 9-V-DC-Netzteil oder 9-V-Batterie zur Stromversorgung von Arduino
    • 2x lange Drähte für Verdrahtung Taster Außentür

Schritt 1: Hardware-Setup

Hardware-Setup
Hardware-Setup
Hardware-Setup
Hardware-Setup
Hardware-Setup
Hardware-Setup

Zuerst richten wir die Hardware ein. Wir beginnen mit dem passiven Summer (d. h. Lautsprecher). Wir möchten das positive Ende des passiven Summers (gekennzeichnet durch "+" -Zeichen) mit dem digitalen Pin 8 des Arduino verbinden. Wir werden das andere Ende des Passize-Summers mit Masse verbinden.

Als nächstes installieren wir den Taster für die Türklingel. Wir verwenden einen externen 10-kOhm-Pulldown-Widerstand für den Schalter, sodass am Eingang des Arduino keine schwebende Spannung oder kein instabiler Zustand vorliegt. Durch die Verwendung des Pulldown-Widerstands liest der Arduino die Spannung als 0 V, wenn die Taste nicht gedrückt wird, und als 5 V, wenn die Taste gedrückt wird. Weitere Informationen zu Pullup- oder Pulldown-Widerständen finden Sie in diesem Artikel:

Wir werden eine Seite des Tasters an 5V anschließen. Die andere Seite des Tasters wird über einen 10 kOhm Pulldown-Widerstand mit Masse verbunden. Denken Sie daran: Taster sind intern horizontal angeschlossen. Sie werden nur beim Drücken vertikal verbunden. Weitere Informationen finden Sie in diesem Artikel:

Schritt 2: Software-Setup

Der gesamte Code ist beigefügt. Nachfolgend finden Sie die Beschreibungen der einzelnen Funktionen mit Schnappschüssen des Codes.

erstellen:

In der Funktion setup() wollen wir die digitalen Pins für unsere Taste und unseren Lautsprecher konfigurieren. Wir möchten Pin 2 als Eingang für unsere Taste konfigurieren und wir möchten Pin 8 als Ausgang für unseren Lautsprecher konfigurieren.

Wir möchten auch unseren Zufallszahlengenerator "sähen", um zufällig eine Melodie auszuwählen, wenn jemand an unserer Tür klingelt. Das Seeding unseres Zufallszahlengenerators bedeutet, ihm eine zufällige Eingabe zuzuführen. Wir werden unseren Zufallszahlengenerator mit dem Spannungswert am Analogeingang 0 aussäen. Da an diesem Eingang nichts angeschlossen ist, wird an diesem Pin eine "zufällige", schwankende Spannung anliegen, die unserem Zufallsgenerator viele verschiedene Werte liefert. Dies stellt sicher, dass wir eine andere Reihenfolge der Songauswahl für unsere Türklingel haben. Weitere Informationen zur Arduino random()-Funktion finden Sie hier:

#include "Stellplätze.h"

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 /* Funktion einrichten */ Void setup () { // Eingabe-/Ausgabepins aktivieren PinMode (BUTTON_PIN, INPUT); pinMode (LAUTSPRECHER_PIN, AUSGANG); // Seed random() Funktion, damit wir eine andere Reihenfolge erhalten randomSeed(analogRead(0)); }

Schleife:

In unserer loop()-Funktion prüfen wir ständig, ob die Taste gedrückt ist (digitaler Pin 2 ist High). Wenn der Pin hoch ist, warten wir 50 ms und prüfen erneut, ob er noch hoch ist. Dadurch wird sichergestellt, dass die Taste gedrückt wird und kein Streurauschen am digitalen Eingangspin zu einem falsch positiven Ergebnis führt.

Nachdem wir bestätigt haben, dass der Button gedrückt wurde, wählen wir mit unserem Zufallsgenerator einen der 5 Songs per switch-Anweisung aus. Die Daten für diese Lieder werden in "songs.h" gespeichert und die Tonhöheninformationen werden in "pitches.h" gespeichert. Sobald wir einen Song ausgewählt haben, übergeben wir diese Informationen an die Funktion play_song().

/* Haupt-While-Funktion */

Void loop () {// prüfen, ob die Taste gedrückt ist if (digitalRead (BUTTON_PIN) == HIGH) {// 50 ms verzögern, um sicherzustellen, dass sie noch gedrückt ist // vermeidet Streufehler Verzögerung (50); if (digitalRead (BUTTON_PIN) == HIGH) {// Zufällig ein Lied auswählen Int song_choice = random (5); // Wählen Sie aus, welches Lied gespielt werden soll Schalter (song_choice) { case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); brechen; Fall 1: play_song(marioLength, mario, marioDurations, marioTempo); brechen; Fall 2: play_song(miiLength, mii, miiDurations, miiTempo); brechen; Fall 3: play_song(hpLength, hp, hpDurations, hpTempo); brechen; Fall 4: play_song(takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); brechen; Standard: play_song(miiLength, mii, miiDurations, miiTempo); brechen; } } } }

Spiellied:

play_song() nimmt 4 Argumente an: eine ganzzahlige Anzahl von Noten im Song, ein ganzzahliges Array der Tonhöhen in der Melodie, ein ganzzahliges Array der Dauer und ein ganzzahliges Tempo für diesen bestimmten Song. Sie müssen diese für jeden Song angeben, den Sie abspielen möchten. Weitere Informationen zur Verwendung der Arduino-Tonfunktionen finden Sie in diesem Tutorial: https://www.arduino.cc/en/Tutorial/ToneMelody. Ich habe diesem Tutorial einige Funktionen für gepunktete Notizen hinzugefügt. Wenn ein Wert im Notendauer-Array negativ ist, bedeutet dies, dass es sich um eine punktierte Note handelt (die Länge ist 1,5-mal größer).

/* spielt das Lied */

void play_song(int num_notes, int melody, int noteDurations, int tempo) { // Durchgehen und alle Noten spielen für (int i=0; i 0) { Dauer = tempo / noteDurations; } // wenn es eine negative Zahl ist, bedeutet eine punktierte Note // erhöht die Dauer für punktierte Noten um die Hälfte else if (noteDurations < 0) { Duration = tempo / abs(noteDurations) * 1.5; } Ton (SPEAKER_PIN, Melodie, Dauer); // Um die Noten zu unterscheiden, legen Sie eine Mindestzeit zwischen ihnen fest. // die Dauer der Notiz + 30% scheint gut zu funktionieren: int pauseBetweenNotes = Dauer * 1.30; Verzögerung (pauseBetweenNotes); // Stoppen Sie die Tonwiedergabe: noTone (SPEAKER_PIN); } }

Beispiel von Liedern.h:

Unten ist ein Beispiel für eines der Lieder in "songs.h". Die Noten sind Makros, die in "pitches.h" definiert sind. Die Zahlen entsprechen den Frequenzen der Töne in Hertz (Hz). Die Notendauer ist wie folgt definiert: 1 = ganze Note, 2 = halbe Note, 4 = Viertelnote, 8 = Achtelnote, -4 = punktierte Viertelnote usw. Die Länge ist die Gesamtzahl der Noten im Song. Das Tempo ist ein Teiler für die Geschwindigkeit des Songs (eine höhere Zahl bedeutet ein langsameres Tempo). Sie müssen mit dieser Zahl herumspielen, bis Sie ein Tempo erreicht haben, das Ihnen gefällt.

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

Schritt 3: Optimierungen

Füge mehr Lieder hinzu! Folgen Sie dem in "songs.h" gezeigten Format und verwenden Sie das Tutorial, um Hilfe zu erhalten: https://www.arduino.cc/en/Tutorial/ToneMelody. Denken Sie daran, für jeden neuen Song, den Sie hinzufügen, einen neuen Fall zur switch-Anweisung hinzuzufügen und die maximale Anzahl zu erhöhen, die von Ihrer random()-Funktion generiert werden kann. Viel Spaß beim Codieren!

Schritt 4: Weitere Projekte

Weitere Projekte finden Sie auf meinen Seiten:

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

Empfohlen: