Werbung
Erkennen Sie Bewegungen und erschrecken Sie einen Eindringling mit einem hohen Alarmton und blinkenden Lichtern. Klingt das lustig? Natürlich tut es das. Das ist das Ziel des heutigen Arduino-Projekts, das für Anfänger geeignet ist. Wir werden im Laufe der Zeit komplett von Grund auf neu schreiben und testen, damit Sie hoffentlich eine Vorstellung davon bekommen, wie das alles gemacht wird, anstatt einfach etwas zu installieren, das ich bereits gemacht habe.
Haftungsausschluss: Dies wird Ihr Haus nicht wirklich schützen. Es könnte Gib deiner Schwester einen bösen Schock, wenn sie sich in dein Zimmer schleicht.
Du brauchst:
- Ein Arduino
- Ich verwende einen Ultraschall-Ping-Sensor HC-SR04 Ein PIR wäre besser, aber die sind teuer. Ein Ping-Sensor kann verstohlen in einer Tür platziert werden und erfüllt dennoch die gleiche Grundaufgabe. Er kostet nur 5 US-Dollar
- Ein Piezo-Summer
- LED-Lichtleiste mit der gleichen Verkabelung wie wir zurück in diesem Projekt Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media Center Wenn Sie viele Filme auf Ihrem PC oder Media Center ansehen, sind Sie sicher mit dem Beleuchtungsdilemma konfrontiert. Schalten Sie alle Lichter vollständig aus? Halten Sie sie auf Hochtouren? Oder... Weiterlesen .
Entfernen Sie beim Verkabeln dieses Projekts nicht jedes Mal alles - bauen Sie einfach weiter auf dem letzten Block auf. Bis Sie zum Abschnitt „Codierung des Alarmsystems“ gelangen, sollten alle Teile verdrahtet sein und ungefähr so aussehen:
Blitzende Lichter
Verwenden Sie den Schaltplan von diesem Projekt Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media CenterWenn Sie viele Filme auf Ihrem PC oder Media Center ansehen, sind Sie sicher mit dem Beleuchtungsdilemma konfrontiert. Schalten Sie alle Lichter vollständig aus? Halten Sie sie auf Hochtouren? Oder... Weiterlesen um Ihren LED-Streifen anzuschließen; Wechseln Sie nicht die Pins, da wir einen PWM-Ausgang benötigen. Benutzen dieser Code um Ihre Verkabelung schnell zu testen. Wenn alles gut geht, sollten Sie Folgendes haben:
Abstandssensor
Auf dem SR04-Modul befinden sich 4 Pins. VCC und GND Gehe zu + 5V Schiene bzw. Boden; TRIG Wird der Pin zum Senden eines Sonarsignals verwendet, setzen Sie diesen auf Pin 6; ECHO wird verwendet, um das Signal zurückzulesen (und daher die Entfernung zu berechnen) - setzen Sie dies auf 7.
Um die Dinge unglaublich einfach zu machen, gibt es eine Bibliothek, die wir verwenden können NewPing. Laden Sie es herunter und platzieren Sie es in Ihrem Arduino Bibliothek Ordner und starten Sie die IDE neu, bevor Sie fortfahren. Testen Sie mit dieser 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 zurückgesendet werden. Sie können eine Abweichung von 1 oder 2 Zentimetern finden, 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 gibt es einige Deklarationen relevanter Stifte, einschließlich eines maximalen Abstands - dies kann je nach variieren den genauen Sensor, den Sie haben, aber solange Sie weniger als 1 Meter genau messen können, sollten Sie es sein fein.
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 NewPing-Bibliotheken, die in der Konstante von eingebaut sind US_ROUNDTRIP_CMHiermit wird festgelegt, wie viele Mikrosekunden ein Zentimeter benötigt. Zwischen den Pings liegt eine Verzögerung von 50 ms, um eine Überlastung des Sensors zu vermeiden.
Piezo Alarm
Der Piezokristallsensor 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 - egal welcher.
Benutzen dieser Code zu testen.
Die einzige Möglichkeit, den ziemlich unangenehmen und lauten Alarm zu beenden, besteht darin, die Stecker zu ziehen. Der Code ist etwas komplex zu erklären, beinhaltet 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
Nachdem wir alle Teile dieses Puzzles haben, kombinieren wir sie miteinander.
Machen Sie eine neue Skizze mit dem Namen 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, der mit dem Trigger-Pin am Ultraschallsensor verbunden ist. #define ECHO_PIN 7 // Arduino-Pin mit Echo-Pin am Ultraschallsensor verbunden. #define MAX_DISTANCE 100 // Maximale Entfernung, für die wir pingen möchten (in Zentimetern). #define ALARM 3 float sinVal; int tonVal;
Beginnen Sie mit dem Schreiben eines Basic Konfiguration() Funktion - wir werden uns vorerst nur mit den Lichtern befassen. 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 () {// set pinModes für RGB-Strip 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); }
Verwenden wir eine Hilfsfunktion, mit der wir schnell einen einzelnen RGB-Wert in die Lichter schreiben können.
// Hilfsfunktion, mit der wir eine Farbe in einem Befehl senden können. void color (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 wird unsere Schleife vorerst aus einem einfachen Farbblitz zwischen Rot und Gelb bestehen (oder, was auch immer Ihr Alarm sein soll - ändern Sie einfach die RGB-Werte).
void loop () {color (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 beispielsweise 50 cm befindet (nur weniger als die Breite eines Türrahmens). Wir haben bereits die richtigen Pins definiert und die Bibliothek importiert Konfiguration() Funktion Fügen Sie die folgende Zeile hinzu, um sie zu instanziieren:
NewPing-Sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing Setup von Pins und maximalem Abstand.
Fügen Sie darunter eine Variable hinzu, um den Status des ausgelösten oder nicht ausgelösten Alarms zu speichern. Der Standardwert ist natürlich false.
Boolescher Wert ausgelöst = falsch;
Fügen Sie dem eine Zeile hinzu Konfiguration() Funktion, damit wir die Ausgabe auf serielle und Debug überwachen können.
Serial.begin (115200); // Öffnen Sie den seriellen Monitor bei 115200 Baud, um die Ping-Ergebnisse anzuzeigen.
Als nächstes benennen wir die aktuelle Schleife in um Alarm() - Dies wird aufgerufen, wenn der Alarm ausgelöst wurde.
void alarm () {color (255,0,0); // rote Verzögerung (100); Farbe (255, 255, 0); // gelbe Verzögerung (100); }
Erstellen Sie jetzt eine neue Schleife() Funktion, 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 50 ms zwischen den Pings (ca. 20 Pings / Sek.). 29 ms sollten die kürzeste Verzögerung zwischen den Pings sein. unsigned int uS = sonar.ping (); // Ping senden, Ping-Zeit in Mikrosekunden (US) abrufen. unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (Entfernung); if (Entfernung <100) {ausgelöst = wahr; } } }
Lassen Sie mich den Code kurz erklären:
- Überprüfen Sie zunächst, ob der Alarm ausgelöst wurde, und schalten Sie in diesem Fall die Alarmfunktion aus (im Moment blinken nur die Lichter).
- Wenn es noch nicht ausgelöst wurde, erhalten Sie den aktuellen Messwert vom Sensor.
- Wenn der Sensor <100 cm anzeigt, hat etwas den Strahl aufgefüllt (passen Sie diesen Wert an, wenn er offensichtlich zu früh für Sie ausgelöst wird).
Probieren Sie es jetzt aus, bevor wir den nervigen Piezo-Summer hinzufügen.
Arbeiten? Groß. Fügen wir nun diesen 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 ++) {// Grad in Bogenmaß umwandeln und dann den Sinuswert sinVal = (sin (x * (3.1412 / 180))) erhalten; // eine Frequenz aus dem Sinuswert erzeugen tonVal = 2000+ (int (sinVal * 1000)); Ton (ALARM, Tonwert); }
Wenn Sie zu diesem Zeitpunkt versuchen, zu kompilieren, tritt ein Fehler auf. Ich habe dies absichtlich beibehalten, damit Sie einige häufig auftretende Probleme sehen können. In diesem Fall verwenden sowohl die NewPing- als auch die Standard-Tonbibliothek dieselben Interrupts - sie stehen grundsätzlich in Konflikt, und Sie können nicht viel tun, um das Problem zu beheben. Ach je.
Keine Sorge. Es ist ein häufiges Problem, und jemand hat bereits eine Lösung - laden Sie diese herunter und fügen Sie sie hinzu NewTone in Ihren Arduino Libraries Ordner. Passen Sie den Beginn Ihres Programms so an, dass er Folgendes enthält:
#umfassen
Und passen Sie die Linie an:
Ton (ALARM, Tonwert);
zu
NewTone (ALARM, ToneVal);
stattdessen.
Das ist es. Stellen Sie Ihren Wecker in der Tür Ihres Schlafzimmers für den nächsten unglücklichen Einbrecher auf.
Oder ein blöder Hund, der von dem Alarm völlig unbeeindruckt zu sein schien.
Haben Sie Probleme mit dem Code? Hier ist die komplette App. Wenn Sie zufällige Fehler erhalten, versuchen Sie, diese unten einzufügen, und ich werde sehen, ob ich Ihnen helfen kann.
Bildnachweis: Feueralarm über Flickr
James hat einen BSc in künstlicher Intelligenz und ist CompTIA A + und Network + zertifiziert. Er ist der Hauptentwickler von MakeUseOf und verbringt seine Freizeit mit VR-Paintball und Brettspielen. Er baut seit seiner Kindheit PCs.