Inhoudsopgave:
- Stap 1: Sensormodules
- Stap 2: Hardware
- Stap 3: Software
- Stap 4: Gegevensregistratie
- Stap 5: voorbeeldontvangersoftware
Video: Arduino RF-sensordecoder - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Mijn vorige huis werd geleverd met een vooraf geïnstalleerd beveiligingssysteem met deursensoren, een bewegingssensor en een bedieningspaneel. Alles was vast aangesloten op een grote elektronicadoos in een kast en er waren instructies voor het bedraden van een vaste telefoon om automatisch uit te bellen in geval van een alarm. Toen ik ermee probeerde te spelen, ontdekte ik dat een van de deursensoren niet volledig was geïnstalleerd en een andere af en toe was vanwege onjuiste uitlijning. Tot zover de professionele installatie die wordt aangeprezen op het visitekaartje van het beveiligingsbedrijf. Mijn oplossing destijds was om een paar internetbeveiligingscamera's en een goedkoop draadloos beveiligingsalarm te kopen.
Snel vooruit naar vandaag en dat draadloze alarm zit in een doos in mijn kelder. Na mijn aanschaf van een goedkope RF-ontvanger besloot ik te kijken of ik de berichten kon decoderen die werden verzonden door de verscheidenheid aan alarmsensoren en afstandsbedieningen die ik heb. Ik dacht dat, aangezien ze allemaal met de goedkope alarmbox werkten, ze allemaal hetzelfde berichtformaat moesten gebruiken met alleen een andere ID. Ik kwam er al snel achter dat ze alleen vergelijkbaar zijn in de algemene structuur van de berichten. Zo ging het project al snel van triviaal naar heel interessant.
Stap 1: Sensormodules
Zoals u op de bovenstaande afbeeldingen kunt zien, bevatten de zenders deuropensensoren, bewegingsdetectoren, afstandsbedieningen voor inschakelen en een draadloos toetsenbord dat wordt gebruikt voor het programmeren van de alarmbox. Het blijkt dat geen twee van deze apparaten dezelfde synchronisatielengte of bitduur gebruiken. De enige overeenkomst, behalve de berichtlengte, is het basisformaat van de bits. Elke bit neemt een vaste tijdsperiode in beslag, waarbij het verschil tussen een nul en een één de werkcyclus van de hoge/lage delen is.
De mooie golfvorm die hierboven wordt getoond, is NIET wat ik voor het eerst ontving. Omdat er zoveel verkeer is in de 433 MHz-frequentieband, moest ik ervoor zorgen dat ik de sensor activeerde net voordat ik de scope instelde om een enkele trigger uit te voeren. Gelukkig geven de sensoren meerdere kopieën van het databericht wanneer ze worden geactiveerd en blijven de afstandsbedieningen en het toetsenbord berichten uitvoeren zolang een toets wordt ingedrukt. Door de scope te gebruiken, kon ik de synchronisatielengte en de databitduur voor elk item bepalen. Zoals eerder vermeld, zijn de synchronisatietijden verschillend en zijn de bittijden verschillend, maar de berichtformaten hebben allemaal een synchronisatie op laag niveau, gevolgd door 24 databits en één stopbit. Dat was genoeg voor mij om een generieke decoder in software te kunnen bouwen zonder alle verschillende details voor elk apparaat hard te moeten coderen.
Stap 2: Hardware
Ik heb oorspronkelijk een sensordecoder gebouwd met behulp van een PIC-microcontroller en assembleertaal. Ik heb onlangs met Arduino-varianten gespeeld, dus ik dacht dat ik zou kijken of ik het kon repliceren. Het eenvoudige schema is hierboven weergegeven en er is ook een foto van mijn prototype. Het enige wat ik deed was om drie gemeenschappelijke jumperdraden te gebruiken om van de Arduino Nano naar het RF-ontvangerbord te gaan. Stroom en een enkele datalijn zijn alles wat nodig is.
Als je mijn Instructable op de "3-in-1 tijd- en weerweergave" leest, zul je zien dat ik een gewone RXB6, 433-MHz-ontvanger gebruik. Je kunt misschien de echt goedkope ontvangers aan het werk krijgen op het korte bereik dat nodig is voor dit project, maar ik raad toch aan om een super-heterodyne ontvanger te gebruiken.
Stap 3: Software
De software zet de ontvangen bits om in weer te geven ASCII-tekens. Het geeft de waarde van de synchronisatielengte en de lengtes van de 1 en 0 bits weer. Omdat ik de synchronisatielengtes en de bitformaten al kende, had ik de software speciaal voor hen kunnen schrijven. In plaats daarvan besloot ik te kijken of ik het kon schrijven om de synchronisatielengtes te sorteren en automatisch de databits te achterhalen. Dat zou het gemakkelijker moeten maken om te wijzigen voor het geval ik op een bepaald moment andere formaten wil proberen te detecteren. Het is belangrijk op te merken dat de software niet weet of het eerste bit van een bericht een 1 of een 0 is. Het gaat ervan uit dat het een 1 is, maar als het erachter komt dat het een nul had moeten zijn, zal het de bits in het voltooide bericht voordat het de seriële poort wordt verzonden.
De tijden van de sync-puls en de databits worden bepaald door gebruik te maken van de INT0 externe interrupt-ingang om een interrupt-handler te triggeren. INT0 kan worden geactiveerd bij stijgende, dalende of beide flanken, of op een stabiel laag niveau. De software wordt aan beide kanten onderbroken en meet hoe lang de puls laag blijft. Dat vereenvoudigt de zaken omdat het bericht start/sync een low-level puls is en de bits kunnen worden bepaald op basis van hun low-level tijd.
De interrupt-handler bepaalt eerst of de vastgelegde telling lang genoeg is om een start/sync-puls te zijn. De verschillende apparaten die ik heb gebruiken synchronisatiepulsen van 4, 9, 10 en 14 milliseconden. De definitie-instructies voor de min/max toegestane synchronisatiewaarden staan vooraan in de software en zijn momenteel ingesteld op 3 en 16 milliseconden. De bittijden variëren ook tussen de sensoren, dus het algoritme voor het decoderen van bits moet daar rekening mee houden. De bittijd van de eerste bit wordt opgeslagen, evenals de tijd van een volgende bit die een significant verschil heeft met de eerste bit. Een directe vergelijking van opeenvolgende bittijden is niet mogelijk, daarom wordt een "fudge-factor"-definitie ("Variation") gebruikt. De bitdecodering begint door aan te nemen dat de eerste databit altijd wordt geregistreerd als een logische 1. Die waarde wordt opgeslagen en vervolgens gebruikt om de volgende bits te testen. Als een volgende databittelling binnen het variantievenster van de opgeslagen waarde valt, wordt het ook geregistreerd als een logische 1. Als het buiten het variantievenster van de opgeslagen waarde ligt, wordt het geregistreerd als een logische 0. Als de logische 0 bittijd korter is dan de eerste bittijd, dan wordt er een vlag ingesteld om de software te vertellen dat de bytes moeten worden omgekeerd voordat ze worden weergegeven. Het enige geval waarin dit algoritme faalt, is wanneer de bits in een bericht allemaal nullen zijn. We kunnen die beperking accepteren omdat zo'n bericht zinloos is.
De sensoren waarin ik geïnteresseerd ben, hebben allemaal een berichtlengte van 24 databits, maar de software is niet beperkt tot die lengte. Er is een buffer voor maximaal zeven bytes (er kunnen meer worden toegevoegd) en definieert de minimale en maximale berichtlengte in bytes. De software is ingesteld om de bits te verzamelen, ze om te zetten in bytes, ze tijdelijk op te slaan en ze vervolgens via de seriële poort in ASCII-formaat uit te voeren. De gebeurtenis die de uitvoer van het bericht activeert, is de ontvangst van een nieuwe start-/synchronisatiepuls.
Stap 4: Gegevensregistratie
De software is ingesteld om de geconverteerde gegevens als ASCII-tekens uit te voeren via de seriële (TX) uitvoer van de Arduino. Toen ik de PIC-versie maakte, moest ik verbinding maken met een terminalprogramma op de pc om de gegevens weer te geven. Een voordeel van de Arduino IDE is dat deze een ingebouwde seriële monitorfunctie heeft. Ik stel de seriële poortsnelheid in op 115,2k en stel vervolgens het seriële monitorvenster in op dezelfde snelheid. De schermafbeelding hier toont een typisch display met uitgangen van verschillende sensoren die ik heb. Zoals je kunt zien, zijn de gegevens soms niet perfect, maar je kunt gemakkelijk bepalen wat de echte waarde van elke sensor zou moeten zijn.
Stap 5: voorbeeldontvangersoftware
Ik heb een voorbeeldsoftwarelijst toegevoegd die laat zien hoe u de verzamelde informatie kunt gebruiken om een specifieke set codes voor uw toepassing te ontvangen. Dit voorbeeld is ingesteld om een van mijn externe Etekcity-stopcontacten te emuleren. Met één commando wordt de LED ingeschakeld die in de Nano (D13) is ingebouwd en met het andere commando wordt de LED uitgeschakeld. Als je geen LED hebt ingebouwd in je Arduino, voeg dan de weerstand en LED toe zoals weergegeven in het diagram. In een echte toepassing zou deze functie de stroom aan/uit zetten voor een stopcontact (met behulp van een relais of een triac). De synchronisatietijden, bittijden en verwachte databytes zijn allemaal vooraf gedefinieerd voor eenvoudige wijziging. U kunt elk van de resterende datalijnen gebruiken om dingen aan/uit te zetten, enz. voor uw specifieke toepassing. Voeg gewoon de toepasselijke commandocode toe die definieert en vervang de LED aan/uit-logica in "lus" om aan uw behoeften te voldoen.
Aanbevolen:
Hoe maak je RADAR met behulp van Arduino voor Science Project - Beste Arduino-projecten: 5 stappen
Hoe maak je RADAR met behulp van Arduino voor Science Project | Beste Arduino-projecten: Hallo vrienden, in deze instructable laat ik je zien hoe je een geweldig radarsysteem kunt maken dat is gebouwd met behulp van Arduino nano. Dit project is ideaal voor wetenschappelijke projecten en je kunt dit gemakkelijk doen met heel minder investeringen en kansen als het winnen van een prijs geweldig is om
Arduino als ISP -- Hex-bestand branden in AVR -- Zekering in AVR -- Arduino als programmeur: 10 stappen
Arduino als ISP || Hex-bestand branden in AVR || Zekering in AVR || Arduino als programmeur:…………………….. ABONNEER aub op mijn YouTube-kanaal voor meer video's…….. Dit artikel gaat helemaal over arduino als isp. Als u een hex-bestand wilt uploaden of als u uw zekering in AVR wilt plaatsen, hoeft u geen programmeur te kopen, u kunt dit doen
Arduino tekst-naar-spraak-converter met LM386 - Pratend Arduino-project - Talkie Arduino-bibliotheek: 5 stappen
Arduino tekst-naar-spraak-converter met LM386 | Pratend Arduino-project | Talkie Arduino-bibliotheek: Hallo allemaal, in veel projecten hebben we arduino nodig om zoiets als een pratende klok te spreken of wat gegevens te vertellen, dus in deze instructables zullen we tekst omzetten in spraak met behulp van Arduino
Pratende Arduino - Een MP3 afspelen met Arduino zonder enige module - Mp3-bestand afspelen vanaf Arduino met PCM: 6 stappen
Pratende Arduino | Een MP3 afspelen met Arduino zonder enige module | Mp3-bestand van Arduino afspelen met PCM: in deze instructie leren we hoe we een mp3-bestand met arduino kunnen spelen zonder een audiomodule te gebruiken, hier gaan we de PCM-bibliotheek voor Arduino gebruiken die 16 bit PCM van 8 kHz-frequentie speelt, dus laten we dit doen
Goedkoopste Arduino -- Kleinste Arduino -- Arduino Pro Mini -- Programmeren -- Arduino Neno: 6 stappen (met afbeeldingen)
Goedkoopste Arduino || Kleinste Arduino || Arduino Pro Mini || Programmeren || Arduino Neno:…………………………….. ABONNEER aub op mijn YouTube-kanaal voor meer video's……. Dit project gaat over hoe je een kleinste en goedkoopste arduino ooit kunt aansluiten. De kleinste en goedkoopste arduino is arduino pro mini. Het lijkt op arduino