Sisukord:

Superlihtne Raspberry Pi 433 MHz koduautomaatika: 7 sammu
Superlihtne Raspberry Pi 433 MHz koduautomaatika: 7 sammu

Video: Superlihtne Raspberry Pi 433 MHz koduautomaatika: 7 sammu

Video: Superlihtne Raspberry Pi 433 MHz koduautomaatika: 7 sammu
Video: Testing the PiBox mini 2, a Raspberry Pi MicroK8s server 2024, November
Anonim
Superlihtne Raspberry Pi 433 MHz koduautomaatika
Superlihtne Raspberry Pi 433 MHz koduautomaatika

See õpetus on üks paljudest, kui tegemist on Raspberry Pi kasutamisega juhtmeta seadmete juhtimiseks kodus. Nagu paljud teisedki, näitab see teile, kuidas kasutada Pi -ga ühendatud odavat saatja/vastuvõtja paari, et suhelda seadmetega, mis töötavad tavaliselt kasutataval 433 MHz raadiosagedusribal. See näitab teile konkreetselt, kuidas mis tahes elektriseadet oma Pi abil sisse või välja lülitada, edastades käske 433MHz kaugjuhtimisega pistikupesadesse.

Miks ma selle õpetuse lõin, kui nii palju on juba olemas? Peamiselt seetõttu, et peaaegu kõik muud õpetused, millega ma kokku puutusin, tundusid olevat liiga keerulised, eriti tarkvara poolel. Märkasin, et nad toetusid kogu töö tegemisel suuresti kolmandate osapoolte raamatukogudele, skriptidele või koodijuppidele. Paljud isegi ei selgitaks, mida aluseks olev kood tegi - nad paluksid teil lihtsalt oma Pi -le kaks või kolm tarkvara installida ja hunniku käske täita, küsimusi ei esitata. Tahtsin tõesti proovida oma Pi abil oma kodu ümber elektriseadmeid sisse ja välja lülitada, kasutades 433MHz kaugjuhtimisega pistikupesasid, kuid tahtsin luua oma süsteemi versiooni, millest saaksin aru, loodetavasti kaotades vajaduse kasutada kellegi teise raamatukogusid või skripte.

See on see õpetus. Selle süsteemi tarkvarapool koosneb kahest väga lihtsast Pythoni skriptist - üks signaalide vastuvõtmiseks ja salvestamiseks ning teine nende signaalide juhtmeta pistikupesadesse edastamiseks. Signaali tegelik vastuvõtt/edastamine sõltub ainult hõlpsasti kasutatavast RPi. GPIO teegist, mis vähemalt minu jaoks oli Raspbianiga eelinstallitud. Seda raamatukogu saab importida ka otse Pythoni.

Selle projekti jaoks vajate:

Vaarika Pi. Iga mudel peaks toimima, ma kasutasin kõik-ühes stardikomplekti, kuid võib-olla vajate ainult keskseadet

433MHz saatja/vastuvõtja paar. Seda tüüpi projektides kõige sagedamini kasutatavad näivad olevat need. Viie pakendi ostmine, nagu lingitud, tagab mõne varuosa olemasolu

433MHz kaugjuhtimisega pistikupesade komplekt. Ma kasutasin neid, mida ma väga soovitaksin, kuid saadaval on lugematuid mudeleid. Lihtsalt veenduge, et nad töötaksid sellel sagedusel

Mõned ahelate ehitamise tarvikud. Ahela loomise protsessi võimalikult lihtsaks tegemiseks soovitaksin kasutada leivaplaati ja mõnda hüppajakaablit.

[Kui otsustate mõnda neist toodetest osta, oleksin väga tänulik, kui pääsete loeteludele juurde ülaltoodud linkide abil - nii saan väikese osa kasumist ilma lisakuludeta!]

1. samm: vastuvõtuseadme seadistamine

Vastuvõtja seadistamine
Vastuvõtja seadistamine

Enne kui saate oma Pi abil käsklusi kaugjuhtimisega pistikupesadesse saata, peate teadma, millistele konkreetsetele signaalidele nad reageerivad. Enamik kaugjuhtimisega pistikupesasid on varustatud telefonitoruga, mida saab kasutada teatud üksuste sisse- ja väljalülitamiseks. Ostetud telefonide puhul on telefonitorul neli rida paaristatud ON/OFF nuppe, millest igaüks saadab konkreetsele pistikupesale ON või OFF signaali.

See tekitab küsimuse - kuidas me teame, millised nupud vastavad mõnele pistikupesale? See sõltub tegelikult teie mudelist. Üks peamisi põhjuseid, miks ma oma konkreetse pistikupesa stiili valisin (sissejuhatuses lingitud), on see, et seadmeid saab konfigureerida füüsilise lülitiga, et panna konkreetne pistikupesa reageerima telefonitoru kindlale ON/OFF nuppude komplektile. See tähendab ka seda, et saate pistikupesad majast lahti ühendada ja teisaldada, teades, et iga seade reageerib alati samadele ON/OFF signaalidele.

Kui olete aru saanud, kuidas teie pistikupesad telefonitoruga suhtlevad, peate telefonitoruga saadetavate koodide "nuusutamiseks" kasutama oma 433MHz vastuvõtuseadet (pildil ülal). Kui olete nende koodide lainekujud salvestanud, saate neid Pythoni abil kopeerida ja saatja abil välja saata.

Esimene asi, mida siin teha, on ühendada oma vastuvõtja tihvtid õigete GPIO -kontaktidega Pi -l. Vastuvõtuseadmel on neli tihvti, kuid neid on vaja ainult kolme. Ma arvan, et mõlemad kesknööbid annavad sama väljundi, seega peate ühendama ainult ühega neist (kui te ei soovi vastuvõetud signaale voogesitada kahele eraldi GPIO -kontaktile).

Ülaltoodud pilt võtab juhtmestiku peaaegu kokku. Vastuvõtja iga tihvti saab ühendada otse Pi vastava tihvtiga. Ma kasutan leivaplaati ja hüppajakaableid, et muuta protsess natuke elegantsemaks. Pange tähele, et saate valida ükskõik millise GPIO andmestiku, et ühendada ükskõik millise keskse vastuvõtja kontaktiga. Ma kasutasin oma Pi päises märget, mis on tähistatud kui „23”.

TÄHTIS: Kui ühendate ülaltoodud pildil märgitud tihvti 3v3 pi kõrgema pingega tihvtiga (nt 5v), kahjustate tõenäoliselt pi, kuna GPIO tihvtid ei talu üle 3v3 pingeid. Teise võimalusena saate selle toiteallikaks kasutada 5 V pinget ja seadistada pingejaguri, et saata DATA kontaktile ohutu pinge.

Vastuvõtja tööulatus ei ole selle pinge juures eriti suur, eriti kui antenn pole ühendatud. Siin pole aga vaja suurt kaugust - seni, kuni vastuvõtja suudab torust toru signaale üles võtta, kui neid hoitakse üksteise kõrval, on see kõik, mida vajame.

2. samm: telefonitoru koodide nuusutamine

Telefonitoru koodide nuusutamine
Telefonitoru koodide nuusutamine

Nüüd, kui teie vastuvõtja on Pi -ga ühendatud, võite alustada selle projekti esimest põnevat etappi - nuusutamist. See hõlmab lisatud Pythoni skripti kasutamist telefonitoruga edastatava signaali salvestamiseks iga nupu vajutamisel. Skript on väga lihtne ja soovitan soojalt enne selle käivitamist vaadata - lõppude lõpuks on selle projekti mõte see, et te ei käivita lihtsalt pimesi kellegi teise koodi!

Enne selle protsessi alustamist peate veenduma, et teil on nuusutaja skripti käivitamiseks vajalikud Pythoni teegid. Need on loetletud skripti ülaosas:

kuupäevast importimise kuupäev

importige matplotlib.pyplot püplotina importige RPi. GPIO GPIO -na

RPi. GPIO ja kuupäevateegid olid minu Raspbiani levitamisega kaasas, kuid ma pidin matplotlib raamatukogu installima järgmiselt:

sudo apt-get install python-matplotlib

See raamatukogu on tavaliselt kasutatav graafikute joonistamise kogu, mis on väga kasulik isegi väljaspool seda projekti, nii et selle installimine ei saa kindlasti haiget teha! Kui teie raamatukogud on ajakohased, olete valmis andmete salvestamist alustama. Skript töötab järgmiselt.

Kui see käivitatakse (kasutades käsku 'python ReceiveRF.py'), konfigureerib see määratletud GPIO pin andmesisendiks (vaikimisi tihvt 23). Seejärel proovib ta pidevalt tihvti ja logib, kas see saab digitaalset 1 või 0. See jätkub määratud aja jooksul (vaikimisi 5 sekundit). Kui see tähtaeg on täis, lõpetab skript andmete salvestamise ja sulgeb GPIO sisendi. Seejärel teostab see veidi järeltöötlust ja joonistab saadud sisendväärtuse aja suhtes. Jällegi, kui teil on küsimusi selle kohta, mida skript teeb, saate tõenäoliselt neile ise vastata pärast selle toimimise vaatamist. Olen proovinud muuta koodi võimalikult loetavaks ja lihtsaks.

Peate ootama, kui skript näitab, et see on ** Alustanud salvestamist **. Kui see teade ilmub, peaksite vajutama ja hoidma umbes ühe sekundi jooksul telefonitoru ühte nuppu. Hoidke seda kindlasti vastuvõtja lähedal. Kui skript on salvestamise lõpetanud, kasutab see matplotlibi abil salvestusintervalli jooksul saadud signaali graafilist lainekuju. Pange tähele, et kui olete oma Pi -ga ühendatud SSH -kliendi (nt PuTTY) abil, peate lainekuju kuvamiseks avama ka rakenduse X11. Ma kasutan selleks xMingi (ja muude asjade jaoks, näiteks kaugtöölauale oma Pi-sse). Joonise kuvamise lubamiseks käivitage enne skripti käivitamist lihtsalt xMing ja oodake tulemuste ilmumist.

Kui teie matplotlibi aken ilmub, peaks maatükk huvipakkuv ala olema üsna ilmne. Saate akna allservas olevaid juhtnuppe kasutada suumimiseks seni, kuni saate nupu allhoidmise ajal valida telefonitoruga edastatava signaali kõrgeimaid ja madalamaid tasemeid. Täieliku koodi näite leiate ülaltoodud pildilt. Signaal koosneb tõenäoliselt väga lühikestest impulssidest, mis on eraldatud sarnaste ajavahemikega, kui signaali ei võeta vastu. Sellele lühikeste impulsside plokile järgneb tõenäoliselt pikem periood, kus midagi ei võeta vastu, pärast mida muster kordub. Kui olete tuvastanud koodi, mis kuulub koodi ühte eksemplari, tehke selle lehe ülaosas selline ekraanipilt ja jätkake järgmise tõlgendamisega.

Samm: tulemussignaali transkribeerimine

Saadud signaali transkribeerimine
Saadud signaali transkribeerimine

Nüüd, kui olete tuvastanud konkreetse nupu signaalile vastavate perioodiliste tõusude ja mõõnade ploki, vajate selle salvestamise ja tõlgendamise viisi. Ülaltoodud signaalinäites märkate, et kogu signaaliploki moodustavad ainult kaks ainulaadset mustrit. Mõnikord näete lühikest kõrget, millele järgneb pikk madal, ja mõnikord on see vastupidi - pikk kõrge, millele järgneb lühike madal. Kui ma oma signaale transkribeerisin, otsustasin kasutada järgmist nimetamisviisi:

1 = lühike_on + pikk_välja0 = pikk_seis + lühike_väljas

Vaadake uuesti märgistatud lainekuju ja näete, mida ma mõtlen. Kui olete oma signaalis samaväärsed mustrid tuvastanud, peate järjestuse ülesehitamiseks loendama ainult 1 ja 0. Ümberkirjutamisel saab ülaltoodud signaali kirjutada järgmiselt:

1111111111111010101011101

Nüüd peate lihtsalt seda protsessi korrata, et salvestada ja transkribeerida oma telefonitoru teistele nuppudele vastavad signaalid, ja olete protsessi esimese osa lõpetanud!

Enne kui saate signaale saatja abil uuesti saata, tuleb veel natuke tööd teha. 1 või 0 vastavate tõusude ja mõõnade vaheline ajastus on väga oluline ning peate veenduma, et teate, kui kaua „lühike_väärtus“või „pikk_väärtus“tegelikult kestab. Minu koodide jaoks oli signaalide kopeerimiseks vaja hankida kolm ajastusteavet:

  • „Lühikese” intervalli kestus, st 1 algus või 0 lõpp.
  • Pika intervalli kestus, st 1 lõpp või 0 algus.
  • Pikendatud intervalli kestus. Märkasin, et kui hoidsin telefonitoru nuppu all, oli iga korduva signaaliploki esinemise vahel pikendatud väljalülitusperiood. Seda viivitust kasutatakse sünkroonimiseks ja sellel on kindel kestus.

Nende ajastamisväärtuste määramiseks saate matplotlibi akna suumimisfunktsiooni abil suumida lõpuni ja asetada kursori signaali asjakohaste osade kohale. Kursori asukoha näit akna allosas peaks võimaldama teil määrata, kui lai on iga signaali osa, mis vastab pikale, lühikesele või pikemale intervallile. Pange tähele, et graafiku x-telg tähistab aega ja kursori näidu x komponent on sekundiühikutes. Minu jaoks olid laiused järgmised (sekundites):

  • lühike viivitus = 0,00045
  • long_delay = 0,00090 (kaks korda pikem kui lühike)
  • pikendatud viivitus = 0,0096

4. samm: saatja seadistamine

Saatja seadistamine
Saatja seadistamine

Kui olete oma koodid ja ajaandmed kogunud, saate vastuvõtja lahti ühendada, kuna te seda enam ei vaja. Seejärel saate saatja ühendada otse vastavate Pi GPIO kontaktidega, nagu on näidatud ülaltoodud pildil. Olen avastanud, et saatjaüksuste tihvtid on märgistatud, mis muudab protsessi lihtsamaks.

Sel juhul on seadme toiteallikaks toiteallika toiteallikaks 5 V toide, kuna DATA -pin ei saada Pi -le signaale, vaid võtab neid vastu. Samuti pakub 5v toiteallikas suuremat edastusulatust kui 3v3 toiteallika kasutamine. Jällegi saate ühendada DATA -tihvti Pi mis tahes sobiva tihvtiga. Kasutasin tihvti 23 (sama mis vastuvõtja puhul).

Teine asi, mida ma soovitaksin teha, on antenni lisamine saatja paremas ülanurgas asuvasse väikesesse auku. Kasutasin 17 cm pikkust sirget traati. Mõned allikad soovitavad sarnase pikkusega keerdtraati. Ma pole kindel, kumb on parem, kuid sirge juhe pakub mulle piisavalt ruumi, et lülitada pistikupesad sisse või välja oma väikese korteri mis tahes kohast. Parim on antenni jootmine, kuid ma lihtsalt eemaldasin osa plastikust traadist ja keerasin vase läbi augu.

Kui saatja on ühendatud, on riistvara kõik seadistatud! Nüüd jääb üle vaid pistikupesad maja ümber sättida ja saatjaprogrammi vaadata.

Samm: signaalide edastamine Pi abil

Siit tuleb teine Pythoni skript. See on loodud olema sama lihtne kui esimene, kui mitte veelgi lihtsam. Jällegi, laadige see alla ja vaadake kood üle. Peate skripti redigeerima, et edastada õiged signaalid vastavalt 3. sammus salvestatud andmetele, nii et nüüd on õige aeg sellele kiire pilk heita.

Selle skripti käivitamiseks vajalikud teegid olid kõik minu Pi-le eelinstallitud, nii et täiendavat installimist polnud vaja. Need on loetletud skripti ülaosas:

impordi aeg

import sys import RPi. GPIO GPIO -na

Kogu importimise all on teave, mida peate muutma. See näeb vaikimisi välja (see on teave, mis vastab minu pistikupesadele, nagu on määratud 3. sammuga):

a_on = '1111111111111010101011101'

a_off = '1111111111111010101010111' b_on = '1111111111101110101011101' b_off = '1111111111101110101010111' c_on = '1111111111101011101011101' c_off = '1111111111101011101010111' d_on = '1111111111101010111011101' d_off = '1111111111101010111010111' short_delay = 0,00045 long_delay = 0,00090 extended_delay = 0,0096

Siin on meil kaheksa koodistringi (kaks minu telefonitoru iga sisse- ja väljalülitusnupu paari kohta - teil võib olla rohkem või vähem koode), millele järgneb kolm ajastusteavet, mis on samuti kindlaks määratud sammus 3. Võtke aega ja veenduge, et teil on sisestas selle teabe õigesti.

Kui olete skripti sisestatud koodide/viivitustega rahul (kui soovite, võite koodistringi muutujad ümber nimetada), olete üsna valmis süsteemi proovima! Enne seda vaadake skripti funktsiooni transfer_code (). Siin toimub tegelik suhtlus saatjaga. See funktsioon eeldab, et üks koodistringidest saadetakse argumendina. Seejärel avab see määratletud tihvti GPIO väljundina ja vaatab läbi kõik koodistringi tähemärgid. Seejärel lülitab saatja vastavalt teie sisestatud ajastusteabele sisse või välja, et luua koodistringile vastav lainekuju. See saadab iga koodi mitu korda (vaikimisi 10), et vähendada selle vahelejäämise võimalust, ja jätab iga koodiploki vahele pikema viivituse, nagu ka telefonitoru.

Skripti käivitamiseks võite kasutada järgmist käsu süntaksi:

python TransmitRF.py code_1 code_2…

Skripti ühe käiguga saate edastada mitu koodistringi. Näiteks pistikupesade (a) ja (b) sisselülitamiseks ja pesa (c) väljalülitamiseks käivitage skript järgmise käsuga:

python TransmitRF.py a_on b_on c_off

Samm 6: Märkus ajastuse täpsuse kohta

Nagu mainitud, on edastatud sisse- ja väljalülitusimpulsside vaheline ajastus üsna oluline. TransmitRF.py skript kasutab pythoni funktsiooni time.sleep (), et luua lainekuju õigete impulsside intervallidega, kuid tuleb märkida, et see funktsioon ei ole täiesti täpne. Pikkus, mille jooksul see skripti ootab enne järgmise toimingu sooritamist, võib sõltuda protsessori koormusest antud hetkel. See on veel üks põhjus, miks TransmitRF.py saadab iga koodi mitu korda - juhuks, kui funktsioon time.sleep () ei suuda koodi antud eksemplari õigesti konstrueerida.

Koodide saatmisel ei ole mul isiklikult kunagi probleeme ajaga.sleep (). Kuid ma tean, et minu time.sleep () viga on umbes 0,1 ms. Ma määrasin selle, kasutades lisatud skripti SleepTest.py, mida saab kasutada, et anda hinnang selle kohta, kui täpne on teie Pi time.sleep () funktsioon. Minu konkreetsete kaugjuhtimisega pistikupesade puhul oli lühim viivitus, mis mul oli vaja rakendada, 0,45 ms. Nagu ma ütlesin, pole mul probleeme mittereageerivate pistikupesadega, nii et tundub, et 0,45 ± 0,1 ms on piisavalt hea.

Viivituse täpsuse tagamiseks on ka teisi meetodeid; näiteks võite koodide genereerimiseks kasutada spetsiaalset PIC -kiipi, kuid sellised asjad jäävad selle õpetuse raamest välja.

Samm 7: Järeldus

Järeldus
Järeldus

See projekt on esitanud meetodi mis tahes elektriseadme juhtimiseks, kasutades Raspberry Pi ja 433MHz kaugjuhtimisega pistikupesade komplekti, keskendudes lihtsusele ja läbipaistvusele. See on kõige põnevam ja paindlikum projekt, mille jaoks olen oma Pi -d kasutanud ning selle jaoks on piiramatu arv rakendusi. Siin on mõned asjad, mida saan nüüd teha tänu oma Pi -le:

  • Lülita pool tundi enne äratuse sisselülitamist sisse elektrikeris minu voodi kõrval.
  • Lülitage kütteseade välja tund pärast magamaminekut.
  • Lülitage minu öölamp sisse, kui äratus hakkab tööle, et mitte uuesti magama jääda.
  • ja paljud teised…

Enamiku nende ülesannete jaoks kasutan Linuxis crontab -funktsiooni. See võimaldab seadistada automaatseid ajastatud ülesandeid, et käivitada skript TransmitRF.py kindlatel kellaaegadel. Samuti saate käsku Linux kasutada ühekordsete ülesannete täitmiseks (mis minu jaoks oli vaja eraldi installida, kasutades käsku „sudo apt-get install at”). Näiteks selleks, et lülitada kütteseade sisse pool tundi enne äratuse järgmisel hommikul helisemist, pean vaid sisestama:

kell 05:30

python TransmitRF.py c_on

Saate seda projekti kasutada ka koos minu Dropboxi koduseiresüsteemiga seadmete juhtimiseks Interneti kaudu! Täname lugemise eest ja kui soovite midagi täpsustada või oma arvamust jagada, postitage kommentaar!

Soovitan: