So erstellen Sie ein einfaches Arduino-Alarmsystem
Erkennen Sie die Bewegung, und erschrecken Sie den Eindringling mit einem hohen Alarmton und blinkenden Lichtern. Klingt das nach Spaß? Natürlich tut es das. Dies ist das Ziel des heutigen Arduino-Projekts, das für Anfänger geeignet ist. Wir werden von Grund auf neu schreiben und testen, während wir weiterarbeiten, so dass Sie hoffentlich eine Vorstellung davon bekommen können, wie alles erledigt wird, anstatt einfach etwas zu installieren, das ich bereits gemacht habe.
Haftungsausschluss: Dies wird Ihr Haus nicht wirklich schützen. Es könnte Schockiere deine Schwester, wenn sie in dein Zimmer schleicht.
Du brauchst:
- Ein Arduino
- Ultraschall “Klingeln” Sensor, ich verwende HC-SR04 Ein PIR wäre besser, aber das ist teuer. Ein Ping-Sensor kann unbemerkt in einer Tür platziert werden und dient immer noch dem gleichen Grundauftrag und kostet nur 5 US-Dollar
- Ein Piezo-Summer
- LED-Streifenlicht mit der gleichen Verkabelung, die wir in diesem Projekt verwendet haben. Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media Center. Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media Center. Wenn Sie viele Filme auf Ihrem PC oder Media Center ansehen, kann ich Ich bin sicher, dass Sie sich dem Beleuchtungsdilemma gegenübersehen. Schalten Sie alle Lichter vollständig aus? Halten Sie sie auf Hochtouren? Oder… Lesen Sie weiter .
Wenn Sie dieses Projekt verkabeln, entfernen Sie nicht jedes Mal alles - bauen Sie einfach am letzten Block. Zu der Zeit kommst du an “Codierung des Alarmsystems” In diesem Abschnitt sollten Sie alle Teile verdrahtet haben und so aussehen:
Blitzende Lichter
Verwenden Sie das Verdrahtungsschema aus diesem Projekt. Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media Center. Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media Center. Wenn Sie viele Filme auf Ihrem PC oder Media Center sehen, haben Sie sich sicher Beleuchtungsdilemma; Schalten Sie alle Lichter vollständig aus? Halten Sie sie auf Hochtouren? Oder… Lesen Sie mehr, um Ihren LED-Streifen anzuschließen. Ändern Sie nicht die Pins, da wir einen PWM-Ausgang benötigen. Verwenden Sie diesen Code, um Ihre Verdrahtung schnell zu testen. Wenn alles gut geht, sollten Sie Folgendes haben:
Abstandssensor
Auf dem SR04-Modul finden Sie 4 Pins. VCC und GND Gehe zu + 5V Schiene bzw. Erde; TRIG ist der Pin, der zum Senden eines Sonarsignals verwendet wird, setzen Sie diesen auf Pin 6; ECHO wird verwendet, um das Signal zurückzulesen (und daher die Entfernung zu berechnen) - setzen Sie dieses auf 7.
Um die Dinge unglaublich einfach zu machen, gibt es eine Bibliothek, die wir als NewPing verwenden können. Laden Sie sie herunter und platzieren Sie sie in Ihrem Arduino Bibliothek Ordner und starten Sie die IDE neu, bevor Sie fortfahren. Testen Sie diesen Code. Öffnen Sie den seriellen Monitor und stellen Sie sicher, dass die Geschwindigkeit auf 115200 Baud eingestellt ist. Mit etwas Glück sollten Sie sehen, dass einige Entfernungsmessungen mit ziemlich hoher Geschwindigkeit an Sie gesendet werden. Sie können eine Abweichung von 1 oder 2 Zentimetern feststellen, aber das ist in Ordnung. Führen Sie Ihre Hand vor den Sensor und bewegen Sie ihn auf und ab, um die sich ändernden Messwerte zu beobachten.
Der Code sollte ziemlich einfach zu verstehen sein. Zu Beginn werden einige relevante Pins angegeben, einschließlich einer maximalen Entfernung. Diese kann je nach Sensor variieren. Solange Sie jedoch weniger als 1 Meter genau messen können, sollten Sie in Ordnung sein.
In der Schleife dieser Test-App verwenden wir die Klingeln() Funktion zum Senden eines Sonar-Pings, wobei ein Wert in Millisekunden zurückgegeben wird, wie lange es gedauert hat, bis der Wert zurückgegeben wurde. Um dies zu verstehen, verwenden wir die in Konstante eingebauten NewPing-Bibliotheken US_ROUNDTRIP_CM, Dies definiert, wie viele Mikrosekunden ein Zentimeter dauert. Es gibt auch eine Verzögerung von 50 ms zwischen den Pings, um eine Überlastung des Sensors zu vermeiden.
Piezo-Alarm
Der Piezo-Kristallsensor ist ein einfacher und billiger Summer, und wir können einen PWM-Pin 3 verwenden, um verschiedene Töne zu erzeugen. Verbinden Sie einen Draht mit Pin 3, einen mit der Erdungsschiene - es ist egal, welche.
Verwenden Sie diesen Code zum Testen.
Die einzige Möglichkeit, den eher abscheulichen und lauten Alarm zu töten, besteht darin, die Stecker zu ziehen. Der Code ist etwas kompliziert zu erklären, erfordert jedoch die Verwendung von Sinuswellen, um einen unverwechselbaren Klang zu erzeugen. Passen Sie die Zahlen an, um mit verschiedenen Tönen zu spielen.
Codierung des Alarmsystems
Nun, da wir alle Teile dieses Puzzles haben, kombinieren wir sie.
Machen Sie eine neue Skizze, genannt Alarm. Kombinieren Sie zunächst alle Variablen und Pin-Definitionen, die wir bisher in den Testbeispielen verwendet haben.
#umfassen // Wählen Sie aus, welche PWM-fähigen Pins verwendet werden sollen. #define RED_PIN 10 #define GREEN_PIN 11 #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino-Pin ist mit dem Triggerpin am Ultraschallsensor verbunden. #define ECHO_PIN 7 // Arduino-Pin, der an den Echo-Pin des Ultraschallsensors gebunden ist. #define MAX_DISTANCE 100 // Maximale Entfernung, für die ein Ping durchgeführt werden soll (in Zentimeter). #define ALARM 3 float sinVal; int toneVal;
Beginnen Sie mit dem Schreiben eines Basic Konfiguration() Funktion - wir beschäftigen uns erst jetzt mit den Lichtern. Ich habe eine Verzögerung von 5 Sekunden hinzugefügt, bevor die Hauptschleife gestartet wird, damit wir bei Bedarf etwas Zeit haben, um aus dem Weg zu gehen.
void setup () // setze pinModes für RGB-Streifen pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // Lichter zurücksetzen analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); Verzögerung (5000);
Wir verwenden eine Hilfsfunktion, mit der wir schnell einen einzelnen RGB-Wert in die Lichter schreiben können.
// Helfer-Funktion, die es uns ermöglicht, eine Farbe in einem Befehl zu senden. Void-Farbe (vorzeichenloses Zeichen rot, vorzeichenloses Zeichen grün, vorzeichenloses Zeichen blau) // die Farberzeugungsfunktion analogWrite (RED_PIN, rot); analogWrite (BLUE_PIN, blau); analogWrite (GREEN_PIN, grün);
Schließlich besteht unsere Schleife vorerst aus einem einfachen Farbblitz zwischen Rot und Gelb (oder was auch immer Sie möchten, dass Ihr Alarm ist - ändern Sie einfach die RGB-Werte)..
Leere Schleife () Farbe (255,0,0); // rote Verzögerung (100); Farbe (255, 255,0); // gelbe Verzögerung (100);
Laden Sie das hoch und testen Sie es, um sicherzustellen, dass Sie auf dem richtigen Weg sind.
Lassen Sie uns nun den Abstandssensor integrieren, um diese Lichter nur dann auszulösen, wenn sich etwas innerhalb von etwa 50 cm befindet (knapp unter der Breite eines Türrahmens). Wir haben bereits die richtigen Pins definiert und die Bibliothek importiert, also vor Ihrer Konfiguration() Funktion fügen Sie die folgende Zeile hinzu, um es zu instanziieren:
NewPing-Sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing-Einrichtung von Pins und maximaler Entfernung.
Fügen Sie darunter eine Variable hinzu, um den Status des Alarms zu speichern, der ausgelöst wird oder nicht, wobei der Standardwert natürlich "false" ist.
boolean ausgelöst = falsch;
Fügen Sie dem eine Zeile hinzu Konfiguration() Funktion, damit wir die Ausgabe auf seriell und debug überwachen können.
Serienbeginn (115200); // Öffnen Sie den seriellen Monitor bei 115200 Baud, um die Ping-Ergebnisse anzuzeigen.
Als Nächstes wollen wir die aktuelle Schleife in umbenennen Alarm() - Dies wird aufgerufen, wenn der Alarm ausgelöst wurde.
Alarm löschen () Farbe (255,0,0); // rote Verzögerung (100); Farbe (255, 255,0); // gelbe Verzögerung (100);
Erstellen Sie jetzt ein neues Schleife() Funktion, eine, bei der wir einen neuen Ping abrufen, die Ergebnisse lesen und den Alarm auslösen, wenn innerhalb des Messbereichs etwas erkannt wird.
void loop () if (ausgelöst == true) alarm (); else delay (50); // Warte 50ms zwischen Pings (ca. 20 Pings / Sek). 29ms sollte die kürzeste Verzögerung zwischen Pings sein. unsigned int us = sonar.ping (); // Ping senden, Pingzeit in Mikrosekunden (us) abrufen. unsigned int distance = us / US_ROUNDTRIP_CM; Serial.println (Abstand); wenn (Entfernung) < 100) triggered = true;
Lassen Sie mich den Code kurz erklären:
- Beginnen Sie mit der Prüfung, ob der Alarm ausgelöst wurde, und lösen Sie in diesem Fall die Alarmfunktion aus (blinkend blinkend)..
- Wenn es noch nicht ausgelöst wird, holen Sie den aktuellen Messwert vom Sensor ab.
- Wenn der Sensor liest <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).
Probiere es jetzt aus, bevor wir den nervigen Piezo-Summer hinzufügen.
Arbeiten? Großartig. Jetzt fügen wir den Summer wieder hinzu. Hinzufügen pinMode zum Konfiguration() Routine.
pinMode (ALARM, OUTPUT);
Fügen Sie dann die Piezo-Summer-Schleife zur Funktion alarm () hinzu:
für (int x = 0; x<180; x++) // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);
Wenn Sie versuchen, an diesem Punkt zu kompilieren, werden Sie auf einen Fehler stoßen. Ich habe dies bewusst gelassen, sodass Sie einige allgemeine Probleme sehen können. In diesem Fall verwenden sowohl die NewPing- als auch die Standard-Tonbibliothek die gleichen Interrupts - sie sind im Wesentlichen in Konflikt miteinander, und es gibt nicht viel, was Sie tun können, um das Problem zu beheben. Ach je.
Keine Sorgen. Es ist ein häufiges Problem, und jemand hat bereits eine Lösung - laden Sie dieses NewTone herunter und fügen Sie es Ihrem Arduino Libraries-Ordner hinzu. Passen Sie den Anfang Ihres Programms so an, dass dies enthalten ist:
#umfassen
Und passen Sie die Linie an:
Ton (ALARM, ToneVal);
zu
NewTone (ALARM, toneVal);
stattdessen.
Das ist es. Stellen Sie Ihren Wecker in der Tür Ihres Schlafzimmers auf, damit der nächste unglückselige Einbrecher Sie finden kann.
Oder ein blinder Hund, der von dem Alarm völlig unbeeindruckt schien.
Probleme mit dem Code? Hier ist die komplette App. Wenn du zufällige Fehler bekommst, versuche, sie unten einzufügen. Ich werde sehen, ob ich helfen kann.
Bildnachweis: Feueralarm über Flickr
Erfahren Sie mehr über: Arduino.