Inhaltsverzeichnis:
- Schritt 1: Sensormodule
- Schritt 2: Hardware
- Schritt 3: Software
- Schritt 4: Datenprotokollierung
- Schritt 5: Beispiel-Empfängersoftware
Video: Arduino RF-Sensor-Decoder - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Mein vorheriges Haus war mit einem vorinstallierten Sicherheitssystem ausgestattet, das Türsensoren, einen Bewegungssensor und ein Bedienfeld hatte. Alles war fest mit einer großen Elektronikbox in einem Schrank verkabelt, und es gab Anweisungen, wie man ein Festnetztelefon so verkabeln konnte, dass es im Alarmfall automatisch anwählte. Als ich versuchte, damit zu spielen, stellte ich fest, dass einer der Türsensoren unvollständig installiert war und ein anderer aufgrund einer falschen Ausrichtung unterbrochen war. Soweit die professionelle Installation, die auf der Visitenkarte des Sicherheitsunternehmens angepriesen wird. Meine damalige Lösung bestand darin, ein paar Internet-Überwachungskameras und einen billigen drahtlosen Sicherheitsalarm zu kaufen.
Schneller Vorlauf bis heute und dieser Funkalarm sitzt in einer Kiste in meinem Keller. Nach dem Erwerb eines billigen RF-Empfängers habe ich mich entschieden, zu sehen, ob ich die Nachrichten entschlüsseln kann, die von den verschiedenen Alarmsensoren und Fernbedienungen, die ich habe, gesendet werden. Ich dachte mir, da sie alle mit der billigen Alarmbox arbeiten, müssen sie alle das gleiche Nachrichtenformat mit nur einer anderen ID verwenden. Ich fand bald heraus, dass sie sich nur in der allgemeinen Struktur der Nachrichten ähneln. So wurde das Projekt schnell von trivial zu sehr interessant.
Schritt 1: Sensormodule
Wie Sie in den obigen Bildern sehen können, enthalten die Sender Türöffnungssensoren, Bewegungsmelder, Fernbedienungen zum Scharfschalten und eine drahtlose Tastatur, die zum Programmieren der Alarmbox verwendet wird. Wie sich herausstellt, verwenden keine zwei dieser Geräte die gleiche Sync-Länge oder Bit-Dauer. Die einzige Gemeinsamkeit außer der Nachrichtenlänge ist das Grundformat der Bits. Jedes Bit benötigt eine feste Zeitperiode, wobei die Differenz zwischen einer Null und einer Eins das Tastverhältnis der High/Low-Anteile ist.
Die oben gezeigte hübsche Wellenform ist NICHT das, was ich zuerst erhalten habe. Da es im 433-MHz-Frequenzband so viel Verkehr gibt, musste ich sicherstellen, dass der Sensor aktiviert wird, kurz bevor ich das Oszilloskop auf einen einzelnen Trigger eingestellt habe. Glücklicherweise geben die Sensoren bei Aktivierung mehrere Kopien der Datennachricht aus und die Fernbedienungen und die Tastatur geben weiterhin Nachrichten aus, solange eine Taste gedrückt wird. Durch die Verwendung des Oszilloskops konnte ich die Sync-Länge und die Datenbitdauer für jedes Element bestimmen. Wie bereits erwähnt, sind die Sync-Zeiten unterschiedlich und die Bit-Zeiten sind unterschiedlich, aber die Nachrichtenformate haben alle eine Low-Level-Synchronisierung, gefolgt von 24 Datenbits und einem Stoppbit. Das war genug für mich, um einen generischen Decoder in Software bauen zu können, ohne all die verschiedenen Details für jedes Gerät hart codieren zu müssen.
Schritt 2: Hardware
Ich habe ursprünglich einen Sensor-Decoder mit einem PIC-Mikrocontroller und einer Assemblersprache gebaut. Ich habe in letzter Zeit mit Arduino-Varianten gespielt, also dachte ich, ich würde sehen, ob ich es replizieren könnte. Der einfache Schaltplan ist oben gezeigt und es gibt auch ein Bild von meinem Prototyp. Alles, was ich tat, war, drei gemeinsame Überbrückungsdrähte zu verwenden, um vom Arduino Nano zur HF-Empfängerplatine zu gehen. Es werden nur Strom und eine einzige Datenleitung benötigt.
Wenn Sie mein Instructable auf der "3-in-1-Zeit- und Wetteranzeige" lesen, werden Sie sehen, dass ich einen üblichen RXB6, 433-MHz-Empfänger verwende. Möglicherweise können Sie die wirklich billigen Empfänger mit der für dieses Projekt erforderlichen kurzen Reichweite zum Laufen bringen, aber ich empfehle immer noch, einen Superheterodyn-Empfänger zu verwenden.
Schritt 3: Software
Die Software wandelt die empfangenen Bits in darstellbare ASCII-Zeichen um. Es gibt den Wert der Sync-Länge und die Längen der 1- und 0-Bits aus. Da ich die Sync-Längen und die Bit-Formate bereits kannte, hätte ich die Software speziell dafür schreiben können. Stattdessen entschied ich mich zu sehen, ob ich es schreiben könnte, um die Sync-Längen zu sortieren und die Datenbits automatisch herauszufinden. Das sollte es einfacher machen, zu ändern, falls ich versuchen möchte, zu einem bestimmten Zeitpunkt andere Formate zu erkennen. Es ist wichtig zu beachten, dass die Software nicht weiß, ob das erste Bit einer Nachricht eine 1 oder eine 0 ist. Sie geht davon aus, dass es eine 1 ist, aber wenn sie herausfindet, dass es eine Null hätte sein sollen, invertiert sie die Bits in der abgeschlossenen Nachricht, bevor Sie sie über den seriellen Port senden.
Die Zeiten des Sync-Impulses und der Datenbits werden bestimmt, indem der externe Interrupt-Eingang INT0 verwendet wird, um einen Interrupt-Handler auszulösen. INT0 kann bei steigenden, fallenden oder beiden Flanken oder bei einem konstant niedrigen Pegel triggern. Die Software wird an beiden Flanken unterbrochen und misst die Zeit, die der Puls niedrig bleibt. Das vereinfacht die Dinge, da der Nachrichtenstart/-sync ein Low-Level-Impuls ist und die Bits basierend auf ihrer Low-Level-Zeit bestimmt werden können.
Der Interrupt-Handler bestimmt zuerst, ob der erfasste Zählwert lang genug ist, um ein Start-/Sync-Impuls zu sein. Die verschiedenen Geräte, die ich habe, verwenden Sync-Impulse von 4, 9, 10 und 14 Millisekunden. Die Define-Anweisungen für die zulässigen min/max-Sync-Werte stehen in der Software im Vordergrund und sind derzeit auf 3 und 16 Millisekunden eingestellt. Die Bitzeiten variieren auch zwischen den Sensoren, daher muss der Algorithmus zum Decodieren von Bits dies berücksichtigen. Die Bitzeit des ersten Bits wird ebenso gespeichert wie die Zeit eines nachfolgenden Bits, das einen signifikanten Unterschied zum ersten Bit aufweist. Ein direkter Vergleich aufeinanderfolgender Bitzeiten ist nicht möglich, daher wird eine „Fudge Factor“-Definition („Variation“) verwendet. Die Bitdecodierung beginnt mit der Annahme, dass das erste Datenbit immer als logische 1 aufgezeichnet wird. Dieser Wert wird gespeichert und dann zum Testen nachfolgender Bits verwendet. Befindet sich eine nachfolgende Datenbitzählung innerhalb des Varianzfensters des gespeicherten Werts, wird sie ebenfalls als logische 1 aufgezeichnet. Liegt sie außerhalb des Varianzfensters des gespeicherten Werts, wird sie als logische 0 aufgezeichnet. Wenn die logische 0 Wenn die Bitzeit kürzer als die erste Bitzeit ist, wird ein Flag gesetzt, um der Software mitzuteilen, dass die Bytes vor der Anzeige invertiert werden müssen. Der einzige Fall, in dem dieser Algorithmus fehlschlägt, ist, wenn die Bits in einer Nachricht alle Nullen sind. Wir können diese Einschränkung akzeptieren, weil diese Art von Botschaft bedeutungslos ist.
Die Sensoren, die mich interessieren, haben alle eine Nachrichtenlänge von 24 Datenbits, aber die Software ist nicht auf diese Länge beschränkt. Es gibt einen Puffer für bis zu sieben Bytes (mehr könnten hinzugefügt werden) und definiert die minimale und maximale Nachrichtenlänge in Bytes. Die Software ist so eingerichtet, dass sie die Bits sammelt, in Bytes umwandelt, zwischenspeichert und dann über die serielle Schnittstelle im ASCII-Format ausgibt. Das Ereignis, das die Ausgabe der Nachricht auslöst, ist der Empfang eines neuen Start-/Sync-Impulses.
Schritt 4: Datenprotokollierung
Die Software ist so eingestellt, dass sie die konvertierten Daten als ASCII-Zeichen über den seriellen (TX) Ausgang des Arduino ausgibt. Als ich die PIC-Version erstellte, musste ich mich mit einem Terminalprogramm auf dem PC verbinden, um die Daten anzuzeigen. Ein Vorteil der Arduino IDE ist, dass sie über eine eingebaute Serial Monitor-Funktion verfügt. Ich setze die serielle Portrate auf 115.2k und setze dann das Serial Monitor-Fenster auf die gleiche Rate. Der Screenshot hier zeigt eine typische Anzeige mit Ausgängen von einer Vielzahl von Sensoren, die ich habe. Wie Sie sehen, sind die Daten manchmal nicht perfekt, aber Sie können leicht den tatsächlichen Wert jedes Sensors bestimmen.
Schritt 5: Beispiel-Empfängersoftware
Ich habe eine Beispielsoftwareliste beigefügt, die zeigt, wie Sie die gesammelten Informationen verwenden können, um einen bestimmten Codesatz für Ihre Anwendung zu erhalten. Dieses Beispiel ist so eingerichtet, dass es eine meiner Etekcity-Remote-Steckdosen emuliert. Ein Befehl schaltet die im Nano eingebaute LED (D13) ein und der andere Befehl schaltet die LED aus. Wenn Sie keine LED in Ihrem Arduino eingebaut haben, fügen Sie den Widerstand und die LED wie im Diagramm gezeigt hinzu. In einer realen Anwendung würde diese Funktion die Stromversorgung einer Steckdose ein- und ausschalten (mithilfe eines Relais oder eines Triacs). Die Synchronisationszeiten, Bitzeiten und erwarteten Datenbytes werden alle im Voraus definiert, um eine einfache Modifikation zu ermöglichen. Sie können jede der verbleibenden Datenleitungen verwenden, um Dinge für Ihre spezifische Anwendung ein- oder auszuschalten usw. Fügen Sie einfach den entsprechenden Befehlscode hinzu und ersetzen Sie die LED-Ein/Aus-Logik in „Schleife“, um Ihren Anforderungen zu entsprechen.
Empfohlen:
Einen Arduino-Gitarren-Tuner herstellen – wikiHow
So bauen Sie einen Arduino-Gitarren-Tuner: Dies sind die Anweisungen, um einen Gitarren-Tuner aus einem Arduino und mehreren anderen Komponenten zu machen. Mit Grundkenntnissen in Elektronik und Codierung können Sie dieses Gitarrenstimmgerät herstellen. Zuerst müssen Sie wissen, was die Materialien sind. Ma
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 2 - Temperatur- / Feuchtigkeitsmonitor - Rev 3: 7 Schritte
Easy Very Low Power BLE in Arduino Teil 2 – Temperatur-/Feuchtigkeitsmonitor – Rev 3: Update: 23. November 2020 – Erster Austausch von 2 x AAA-Batterien seit 15. Januar 2019 dh 22 Monate für 2x AAA AlkalineUpdate: 7. April 2019 – Rev 3 of lp_BLE_TempHumidity, fügt Datum/Uhrzeit-Plots hinzu, verwendet pfodApp V3.0.362+ und automatische Drosselung, wenn
Einführung in Arduino: 18 Schritte
Einführung in Arduino: Haben Sie sich jemals gefragt, ob Sie Ihre eigenen Geräte wie eine Wetterstation, ein Auto-Dashboard für die Überwachung von Kraftstoff, Geschwindigkeit und Standort oder die Steuerung Ihrer Haushaltsgeräte über Smartphones herstellen möchten, oder haben Sie sich jemals gefragt, ob Sie anspruchsvolle r
Arduino-Programmierung über das Handy -- Arduinodroid -- Arduino-Ide für Android -- Blinzeln: 4 Schritte
Arduino-Programmierung über das Handy || Arduinodroid || Arduino-Ide für Android || Blink: Bitte abonnieren Sie meinen Youtube-Kanal für weitere Videos…… Arduino ist ein Board, das direkt über USB programmiert werden kann. Es ist sehr einfach und günstig für College- und Schulprojekte oder sogar für Produktprototypen. Viele Produkte bauen zunächst darauf für i