Inhoudsopgave:

Raspberry Pi RF op afstand bestuurbare stopcontacten (stekkertjes) - Ajarnpa
Raspberry Pi RF op afstand bestuurbare stopcontacten (stekkertjes) - Ajarnpa

Video: Raspberry Pi RF op afstand bestuurbare stopcontacten (stekkertjes) - Ajarnpa

Video: Raspberry Pi RF op afstand bestuurbare stopcontacten (stekkertjes) - Ajarnpa
Video: Carad R73 modificatie van radio bestuurbare tape recorder. Deel 2. (Laatste) 2024, Juli-
Anonim
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)
Raspberry Pi RF Op afstand bedienbare stopcontacten (stekers)

Bedien goedkope 433MHz stopcontacten met een Raspberry Pi. De Pi kan de besturingscodes van de afstandsbediening van de sockets leren en deze onder programmabesturing gebruiken om een of alle externe sockets door het hele huis te activeren.

Het ontwerp is niet afhankelijk van externe internetconnectiviteit (dwz 'Internet of Things') en is daarom (IMHO) veel veiliger dan webgebaseerde controllers. Dat gezegd hebbende, ik heb de integratie met Google Home geprobeerd, maar verloor al snel de wil om te leven wanneer opdrachten soms enkele tientallen seconden duurden om uit te voeren of helemaal niet werden uitgevoerd.

Een voor de hand liggende toepassing rond de kersttijd is het aansturen van kerstboomverlichting en (als je zo geneigd bent) buitenverlichting. Hoewel dat een eenvoudig gebruik is, krijg je door deze Instructable te bouwen een superflexibele socket-controller die kan reageren op sensoringangen en op andere apparaten in je thuisnetwerk, zoals Raspberry Pis met Linux Motion.

Ik heb bijvoorbeeld een set keukenverlichting die aangaat wanneer een camera met 'Beweging' beweging in de keuken detecteert en deze vervolgens uitschakelt na vijf minuten zonder activiteit. Het werkt echt goed!

Met 'Tasker' en 'AutoTools SSH' uit de Google Play Store kun je allerlei mooie telefoongebaseerde afstandsbedieningen instellen.

Het project is gebaseerd op goedkope 433MHz-ontvanger- en zenderkaarten die algemeen verkrijgbaar zijn op eBay. Deze zijn compatibel met (minstens in het VK) 433 MHz externe stopcontacten die worden verkocht met afstandsbedieningen. Mijn project omvat een ontvanger, zodat nieuwe commandosets voor afstandsbedieningen gemakkelijk en snel kunnen worden ingebouwd. Een punt om op te merken - externe sockets die beschikbaar zijn in het VK lijken in twee smaken te komen - die met een ID geprogrammeerd door een schakelaar op de socket en die afhankelijk zijn van programmering vanaf de afstandsbediening. Dit project is compatibel met beide, maar de eerste verliezen hun identiteit niet bij een stroomstoring en hebben daarom de voorkeur.

Het project maakt gebruik van een oude routerbehuizing - ik heb er een paar en ze hebben heel handig de meeste van de benodigde externe connectoren, zoals stroom, ethernet, USB en antenne(s). Wat u gebruikt, hangt af van wat u beschikbaar heeft, dus deze Instructable is waarschijnlijk nuttiger als algemene gids dan als een stapsgewijze reeks instructies.

Hoewel niet strikt noodzakelijk voor dit project, heb ik ook een koelventilator en een controllerkaart toegevoegd. Zonder ventilator kan de Pi behoorlijk warm worden (circa 60°C). Details kunnen worden verstrekt in een latere Instructable.

Ik moet zeggen dat ik geen programmeur ben. De software is (meestal) in Python geschreven en de slimme dingen zijn gekopieerd van mensen die weten wat ze doen. Ik heb de bronnen vermeld waar ik kan - als ik er een heb gemist, laat het me weten en ik zal de tekst corrigeren.

De Instructable veronderstelt enig soldeervermogen en een voorbijgaande bekendheid met Python, Bash en praten met je Pi via SSH (hoewel ik zal proberen de instructies zo uitgebreid mogelijk te maken). Het is ook in Brits Engels geschreven, dus als je aan de andere kant van de vijver zit te lezen, negeer dan de extra letters in woorden en de vreemde namen voor dingen (zoals 'mains sockets', die je kent als zoiets als 'wandcontactdozen').

Eventuele opmerkingen, suggesties voor verbeteringen & toepassingen etc. zijn ook van harte welkom!

Stap 1: Voorbereiding van de zaak

Casusvoorbereiding
Casusvoorbereiding
Casusvoorbereiding
Casusvoorbereiding
Casusvoorbereiding
Casusvoorbereiding

Ik heb voor dit project een oude TP-Link TD-W8960N-router gebruikt. Het is een mooi formaat en toen ik eenmaal had uitgezocht hoe ik erin moest komen, was het vrij gemakkelijk om aan te werken.

Ik heb ook de 12v @ 1A-voeding van de router behouden, die een beetje te weinig stroom heeft, maar in de praktijk in orde is voor deze toepassing.

Het openen van de behuizing is een kwestie van twee schroeven aan de onderkant van de behuizing verwijderen en vervolgens een nieuwsgierige tool rond de rand van de behuizing gebruiken om de clips gemakkelijker te openen. De twee schroeven zitten onder de rubberen voetjes aan de achterkant van de behuizing (zie rode pijlen). De moeilijkste clips om te openen zijn die aan de voorkant, maar ik had vertrouwen en ze bogen naar mijn koevoet.

Zodra de behuizing open is, maakt u de twee moeren op de antenneconnectoren los en kan de printplaat eruit worden getild.

Omdat je later beide antennes gaat gebruiken, soldeer je de coaxkabels op de printplaat los en leg je ze opzij.

Als je je moedig voelt (zoals ik was), kun je de drukschakelaar, dc-aansluiting en RJ45-aansluitingen van de printplaat verwijderen. De beste manier die ik heb gevonden om dit te doen, is door het bord in een bankschroef te klemmen en warmte van een heteluchtpistool toe te passen terwijl ik met een geschikt gereedschap voor het openen van een dunne behuizing of een schroevendraaier wrik. De logica is dat alle soldeerverbindingen tegelijkertijd worden gesmolten, waardoor de algehele hittestress op de plastic behuizing van het onderdeel wordt verminderd in vergelijking met het gebruik van een soldeerbout op elke kruising. Dat is althans de theorie. In de praktijk komt er een beetje geluk bij kijken! Hoeveel warmte toe te passen is een kwestie van oordeel, maar wees voorzichtig en vergis je aan de kant van te weinig. Als alles goed gaat, krijg je de bruikbare componenten die op de foto worden getoond (maar let wel op de gesmolten schakelknop en de licht vervormde RJ45-stekkerstrook!).

Anders ga je naar het internet om je bits te kopen.

Stap 2: Onderdelenlijst

Raspberry Pi - Ik vermoed dat elke smaak het zal doen, maar ik heb een 3B+. gebruikt

433MHz-zenderkaart - zoek op eBay naar '433MHz RF-zender met ontvangerset voor Arduino Arm Mcu Wireless' of iets dergelijks

433MHz ontvangerbord - idem. Normaal £ 1,98 per paar

LM2596 Buck-regelaar - eBay, meestal £ 1,95. Om 12v stroom om te zetten naar 5v voor de Pi

Lichtpijp - zoek op eBay naar 'Fibre Optic Cable - 0.25 / 0.5 / 0.75 / 1 / 1.5 / 2 / 2.5 /3mm Dia - Light Guide' - Ik gebruikte 2mm pijp maar 1.5mm zou gemakkelijker zijn geweest om mee te werken (ik betaalde £ 2,95 voor 1m)

2-polige miniatuur tuimelschakelaar (leuk om te hebben maar optioneel)

USB type A 180° soldeerbare socket - via eBay betaalde ik £ 1,90 voor tien

Dubbelpolige drukschakelaar (leuk om te hebben, maar optioneel) - Ik heb de mijne van het modem/routerbord

RJ45-aansluiting(en) - hersteld van modem/routerkaart

Gelijkstroomaansluiting - via eBay (10X DC-voedingsaansluiting Vrouwelijk paneelmontageconnector 5,5 x 2,1 mm £ 0,99)

430MHz-antennes - converteer de 2GHz-antennes van de modem/router

12v dc 12W voeding (minimaal) - idealiter wordt deze geleverd met de modem/router. Als dit niet het geval is, moet u ervoor zorgen dat het bovenstaande DC-stopcontact overeenkomt met het stopcontact dat u gebruikt. De 12v vereiste wordt bepaald door de 433MHz zender

De onderdelen voor de koelventilator-mod zullen in een latere Instructable worden beschreven.

Stap 3: Verbruiksartikelen en gereedschappen

U hebt de volgende verbruiksartikelen nodig:

Soldeer (indien nodig)

Hotmeltlijm (indien nodig)

Verbindingsdraad - (bijv.) 22 & 24AWG (zoals vereist)

Krimpkous (indien nodig)

Opofferende kat. 5 ethernet-patchkabel

Opofferende USB 2 patchkabel.

Gereedschap:

Draadstrippers

Draadsnijders (bij voorkeur vlaksnijders)

Prijstool

Geschikte schroevendraaier om de koffer uit elkaar te halen.

Soldeerbout

Lijmpistool

Föhn (om de lichtpijpen te buigen en voor eventuele geïmproviseerde kappersonderbrekingen)

433 MHz FM-communicatie-ontvanger (optioneel - voor het oplossen van problemen met zenders) - (bijv. AR1000

Stap 4: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Hoe u de Pi en hulpborden monteert, hangt af van de behuizing die u gebruikt. De foto's laten zien wat ik heb gedaan.

De Pi zit ongeveer in het midden van de behuizing, waardoor er genoeg ruimte is om de verschillende connectoren te gebruiken (merk op dat de HDMI niet wordt gebruikt omdat met de Pi wordt gecommuniceerd via SSH (dwz) 'headless'.

Ik heb de Pi aan de basis bevestigd met behulp van een paar geborgen plastic bevestigingsmiddelen (zie foto). Omdat de doos niet bedoeld is voor mobiel gebruik, kun je wegkomen met slechts twee bevestigingsmiddelen. Je zou gemakkelijk 2,5 mm schroeven kunnen gebruiken met afstandhouders of zelfs smeltlijm (die ik in het verleden heb gebruikt - zorg er wel voor dat je niet te veel gebruikt en vermijd componenten voor oppervlaktemontage aan de onderkant, omdat je onvermijdelijk zult hebben om het bord op een bepaald moment te verwijderen (eerste wet van constructie - je ZAL het uit elkaar moeten halen)).

Ik heb hete lijm gebruikt om de verschillende planken aan de zijkanten van de behuizing te bevestigen. Dezelfde overwegingen als hierboven zijn van toepassing.

Als alles op zijn plek zit, kun je de boel aansluiten.

Het blokschema toont het bedradingsschema dat ik heb gebruikt. Merk op dat ik de optionele tuimelschakelaar gebruik om de stroom tussen de zender- en ontvangerkaarten af te wisselen - er is waarschijnlijk weinig risico om dit te doen, maar ik wilde de ontvanger niet bakken tijdens het zenden.

Het viel me ook op dat de drukschakelaar had kunnen worden gebruikt om de Pi gracieus uit te schakelen (er zijn een aantal ontwerpen beschikbaar op internet). Ik stoorde me niet - in dit geval fungeert het als een eenvoudige aan / uit-schakelaar. Ik moet alleen voorzichtig zijn om de Pi via SSH uit te schakelen voordat ik op de schakelaar druk.

U ziet de lichtpijpen die worden gebruikt om het licht van de twee LED's op de Pi en van de status-LED van de voeding naar de voorkant van de behuizing te kanaliseren. Ik heb warmte van een föhn gebruikt om de pijpen te buigen (je wilt absoluut GEEN heteluchtpistool gebruiken!). Het is erg vallen en opstaan, maar uiteindelijk de moeite waard, omdat je direct kunt zien wat de LED's aangeven in plaats van te vertrouwen op software en externe LED's. Het is jouw keuze natuurlijk. Het snijden van de pijpen doe je met een scherp paar draadknippers (flush cutters zijn het beste) maar je kunt ook een scherpe schaar gebruiken. Nogmaals, smeltlijm kan worden gebruikt om de leidingen op hun plaats te bevestigen, maar zorg ervoor dat u slechts een kleine hoeveelheid gebruikt - die snel afkoelt - omdat de lijm de leidingen kan vervormen.

Idealiter zou u de antennes moeten aanpassen. Ze hebben doorgaans een formaat om te werken op 2GHz en zullen zeer inefficiënte antennes maken bij gebruik op 433MHz.

Om dit te doen, moet u eerst het antennedeksel verwijderen om de antennedraad bloot te leggen. Ik denk dat ik geluk had, want het deksel kwam van elke antenne met slechts een kleine hoeveelheid prising.

Snijd waar weergegeven om de originele 2GHz-antenne te verwijderen en de coax bloot te leggen. Krijg voorzichtig toegang tot de binnenkern, verwijder de vlecht goed weg en soldeer deze aan een nieuw stuk draad zoals afgebeeld. De lengte van de nieuwe draad is ongeveer 1/4 golflengte van 433MHz (dwz) lengte = 0.25 * 3E8/433E6 = 17cm. Het onderste deel kan worden opgerold met een kleine boor of iets dergelijks, zodat de hele lengte in het antennedeksel past.

Controleer voor de hermontage of er geen kortsluiting is tussen de binnenste en buitenste antennecontacten.

Ik heb alleen de zenderantenne aangepast omdat een 'dove' ontvanger waarschijnlijk voordelig is bij het leren van de RF-afstandsbedieningscodes (zie later).

De ethernetverbinding wordt gemaakt door een opoffering Cat. 5 verbindingskabel naar de RJ45-aansluiting gered van de modem. Knip de kabel af op de afstand tussen de Pi-ethernet-aansluiting en de RJ45-behuizing en maak alle acht draden bloot. Gebruik een continuïteitstester om ervoor te zorgen dat u kabelpin 1 aansluit op pin 1 enz. Een eenvoudige manier om dit te doen, is door de connector in de aansluiting te steken waar u de bedrading op aanbrengt en deze ring tussen de contactdooscontacten en de blote kabeluiteinden. Aangezien slechts één van de vier externe RJ45-aansluitingen wordt gebruikt, markeert u de bedrade aansluiting dienovereenkomstig om later gênante fouten te voorkomen.

Evenzo is de USB-connector bedraad met behulp van een opofferende USB 2-patchkabel, bedraad van pin 1 naar pin 1 enz. De USB-connector van de buitenwereld wordt met hete lijm op zijn plaats op de behuizing gelijmd, met behulp van het gat in de behuizing dat is achtergelaten door de telefoonlijnaansluiting.

Stap 5: Zendernotities

Zender Opmerkingen
Zender Opmerkingen
Zender Opmerkingen
Zender Opmerkingen
Zender Opmerkingen
Zender Opmerkingen

De 433MHz zend- en ontvangstborden die ik gebruikte zijn alomtegenwoordig op het internet en omdat ze zo goedkoop zijn heb ik twee paar van elk besteld (om experimentele cock-ups mogelijk te maken). Ik ontdekte dat de ontvangers betrouwbaar waren, maar de zender die ik gebruikte moest worden aangepast om hem betrouwbaar te laten werken.

Het circuit van de FS1000A-zender die ik heb gekocht* wordt weergegeven in het diagram. Ik ontdekte met vallen en opstaan dat een 3pF-condensator moest worden geïnstalleerd in de C1 SoT (selecteer op test) positie om het ding te laten werken. Omdat ik een breedbandontvanger heb die 430 MHz bestrijkt, was het relatief eenvoudig om dit op te lossen. Hoe je zou kunnen testen zonder ontvanger is een interessante vraag….

*Opmerking: ik kocht een tweede partij zenders nadat ik de eerste twee niet werkend kreeg. Deze kwamen allemaal zonder de collectorspoel. Hmmm!

Ik had een condensator van 3 pF in mijn junkbox, maar dit zal voor de meeste mensen niet het geval zijn, denk ik, en in ieder geval kan de benodigde waarde hoger zijn, zeg 7pF. Een ruwe vervanging kan worden gemaakt met twee stukjes getwiste draad (twisted pair-kabel van mijn kennis heeft een capaciteit van ongeveer 100 pF per voet om u een richtlijn voor de lengte te geven), maar het wordt niet aanbevolen omdat er andere problemen kunnen optreden. Hopelijk heb je geluk en heb je zo'n probleem niet. Je zou altijd een duurdere (en dus waarschijnlijk) betere zender kunnen kopen.

Merk ook op dat de frequentie van de zender niet erg nauwkeurig of stabiel is, maar in de praktijk goed genoeg is geweest om de externe aansluitingen betrouwbaar te bedienen.

Houd er ook rekening mee dat het geplateerde gat naast het woord 'ANT' op de zender NIET de antenne-aansluiting is - het is die in de hoek zonder markering (zie foto). Dit was de eerste fout die ik maakte….

De pinverbinding die handig is gemarkeerd met 'ATAD' zou natuurlijk 'DATA' moeten lezen.

Stap 6: Software-overzicht

Software-overzicht
Software-overzicht

Houd er rekening mee dat ik geen programmeur ben. Zoals eerder vermeld, is het slimme spul de code van andere mensen, maar ik weet genoeg om het te knijpen en aan te passen om het samen te laten werken. Dit is ook de eerste Instructable die ik heb gepubliceerd met code erin, dus excuses als ik het verkeerd heb gedaan! Als je vragen hebt, houd daar dan rekening mee…

De basissoftware die ik heb gebruikt is als volgt:

  • Raspbian Stretch Lite
  • PiGPIO (een fantastische bibliotheek voor het besturen van servo's enz.)
  • _433.py-code (om RF-besturingscodes te coderen en decoderen) - gekoppeld aan de PiGPIO-website.
  • Python3 (wordt geleverd met Raspbian)

Extra software die ik gebruik:

  • pyephem (berekent zonsopgang en zonsondergang - handig voor lichtschakeling)
  • De uitstekende 'Tasker' en 'AutoTools SSH' om een afstandsbediening op mijn Android-telefoon te maken - zie foto (beide beschikbaar in de Google Play Store). [Hoe een Tasker-scène te maken valt buiten het bestek van deze Instructable omdat er een vrij steile leercurve bij komt kijken, maar ik ben blij om te bespreken wat ik deed]

Mijn eigen code (in Python). Ruw maar functioneel:

  • tx.py - menu- en/of opdrachtregelsoftware die de juiste code naar de 433MHz-zender stuurt.
  • dageraad-dusk - berekent dageraad- en schemertijden op mijn locatie en werkt de gebruikerscrontab bij (gebruikt voor kerstboomverlichting enz.)

Bovenstaande persoonlijke code is toegankelijk via GitHub:

De functionaliteit van het project wordt geleverd door de PiGPIO- en _433.py-code. De laatste heeft een ontvangstfunctie die luistert naar afstandsbedieningscommando's van uw 433MHz RF-afstandsbediening en de timingpulsen decodeert, waardoor een uitvoer wordt geproduceerd die kan worden opgeslagen voor later gebruik door de zendfunctie. Hierdoor kan het systeem elke 'normale' 433MHz RF-afstandsbediening leren. In principe kan het ook worden gebruikt om de RF-afstandsbedieningen van uw buren te leren. Ik zou dit sterk afraden, omdat buren zelden de grappige kant zien van willekeurig rinkelende deurbellen. Ik zou het niet doen.

Opstelling

Omdat de Pi in deze applicatie 'headless' (dwz) zonder monitor of toetsenbord wordt uitgevoerd, moet je ermee praten via ssh. Er zijn tal van handleidingen beschikbaar over het opzetten van een Pi zonder hoofd, maar om het simpel te houden, ga ik ervan uit dat je de Pi eerst start met een monitor en toetsenbord. Eenmaal opgestart, start u de terminal en voert u 'sudo raspi-config' in. Selecteer '5. Interfacing-opties' en vervolgens 'P2 SSH'. Schakel de ssh-server in en sluit raspi-config (wat waarschijnlijk zal eindigen in een herstart).

Daaropvolgende communicatie met de Pi kan dan worden uitgevoerd vanaf een externe terminal via ssh. Merk op dat de code geen vast LAN IP-adres voor de Pi vereist, maar het helpt zeker (en het is zeker nodig als je je verdiept in Tasker-besturing). Nogmaals, er zijn tal van tutorials online over hoe dit te doen. Met mijn thuisrouter kan ik een vast IP-adres toewijzen aan het MAC-adres van de Pi, dus ik doe het op die manier, in plaats van door de instellingen van de Pi te bewerken.

PiGPIO installeren:

ssh in de Pi en voer de volgende opdrachten in:

sudo apt update

sudo apt install pigpio python-pigpio python3-pigpio

sudo apt install git

git kloon

sudo apt install python3-RPi. GPIO

PiGPIO uitvoeren tijdens het opstarten:

crontab -e

voeg de volgende regel toe:

@reboot /usr/local/bin/pigpiod

Verkrijg de Python-code voor het verzenden en decoderen van 433MHz RF-afstandsbedieningscodes:

wget

uitpakken _433_py.zip

Verplaats de uitgepakte _433.py naar een geschikte map (bijvoorbeeld) ~/software/apps

Typen (in die map)

_433.py

plaatst de Pi in 433 rx-modus, wachtend op gedemoduleerde RF-afstandsbedieningscodes op GPIO-pin 38.

Als de 433MHz-ontvanger is aangesloten en er in de buurt een 433MHz-afstandsbediening wordt gebruikt, worden de volgende gegevens op het scherm weergegeven:

code=5330005 bits=24 (gap=12780 t0=422 t1=1236)

Deze gegevens worden in uw Python-programma gebruikt om de transmissie van de afstandsbediening opnieuw te genereren.

Om deze gegevens naar een bestand te pipen voor later gebruik, voer je uit:

_433.py > ~/software/apps/remotedata.txt

Zodra je de gegevens hebt, is de volgende stap om deze te gebruiken om de 'tx.py'-code te bewerken die je kunt kopiëren uit mijn GitHub-repository. Deze code gebruikt de gegevens om golfvormen te genereren die worden begrepen door de externe socket(s) die door de 433MHz-zender moeten worden verzonden. Hopelijk zijn de benodigde bewerkingen redelijk voor de hand liggend en de rest is aan jou…..

Aanbevolen: