Përmbajtje:

Super Simple Raspberry Pi 433MHz Automatizimi në shtëpi: 7 hapa
Super Simple Raspberry Pi 433MHz Automatizimi në shtëpi: 7 hapa

Video: Super Simple Raspberry Pi 433MHz Automatizimi në shtëpi: 7 hapa

Video: Super Simple Raspberry Pi 433MHz Automatizimi në shtëpi: 7 hapa
Video: IOT HOME AUTOMATION SYSTEM USING NODEMCU AND BLYNK APP 2024, Nëntor
Anonim
Super Simple Raspberry Pi 433MHz Automatizimi i Shtëpisë
Super Simple Raspberry Pi 433MHz Automatizimi i Shtëpisë

Ky tutorial është një nga shumë kur bëhet fjalë për përdorimin e një Raspberry Pi për të kontrolluar pajisjet pa tel në shtëpi. Ashtu si shumë të tjerë, do t'ju tregojë se si të përdorni një palë transmetues/marrës të lirë të lidhur me Pi tuaj për të bashkëvepruar me pajisjet që veprojnë në brezin e frekuencës së radios 433MHz të përdorur zakonisht. Do t'ju tregojë në mënyrë specifike se si të aktivizoni ose fikni çdo pajisje elektrike duke përdorur Pi tuaj duke transmetuar komanda në një grup të prizave të energjisë me telekomandë 433MHz.

Pse e krijova këtë tutorial nëse kaq shumë tashmë ekzistojnë? Kryesisht sepse pothuajse të gjitha mësimet e tjera që hasa dukeshin se i ndërlikonin gjërat, veçanërisht në anën e softuerit. Vura re se ata u mbështetën shumë në bibliotekat e palëve të treta, skriptet ose copëzat e kodit për të bërë të gjithë punën. Shumë as nuk do të shpjegonin se çfarë po bënte kodi themelor - ata thjesht do t'ju kërkonin të fusni dy ose tre pjesë të softuerit në Pi tuaj dhe të ekzekutoni një mori komandash, pa bërë pyetje. Unë me të vërtetë doja të provoja dhe të përdor Pi tim për të ndezur dhe fikur pajisjet elektrike rreth shtëpisë sime duke përdorur një sërë prizash të telekomanduara 433MHz, por doja të krijoja versionin tim të sistemit që mund ta kuptoja, me shpresë duke eleminuar nevojën për përdorni bibliotekat ose skriptet e dikujt tjetër.

Për këtë bëhet fjalë ky tutorial. Ana softuerike e këtij sistemi përbëhet nga dy skripte shumë të thjeshta Python - një për marrjen dhe regjistrimin e sinjaleve, dhe një për transmetimin e këtyre sinjaleve përsëri në prizat e energjisë pa tel. Pranimi/transmetimi aktual i sinjalit mbështetet vetëm në bibliotekën e lehtë për t’u përdorur RPi. GPIO e cila, të paktën për mua, u para-instalua me Raspbian. Kjo bibliotekë gjithashtu mund të importohet drejtpërdrejt në Python.

Për këtë projekt do t'ju duhet:

Një mjedër Pi. Çdo model duhet të funksionojë, unë kam përdorur një çantë fillestare të gjitha-në-një, por ndoshta ju keni nevojë vetëm për njësinë qendrore

Një çift transmetues/marrës 433MHz. Ato që përdoren më së shpeshti në këtë lloj projekti duket se janë këto. Blerja e një pakete prej pesë si ajo e lidhur siguron që të keni disa pjesë rezervë

Një sërë prizash të energjisë me telekomandë 433MHz. Kam përdorur këto që do të rekomandoja shumë, por ka modele të panumërta në dispozicion. Vetëm sigurohuni që ata të veprojnë në këtë frekuencë

Disa pajisje për ndërtimin e qarkut. Unë do të rekomandoja të përdorni një dërrasë buke dhe disa kabllo kërcyes për ta bërë procesin e ndërtimit të qarkut sa më të lehtë të jetë e mundur.

[Nëse vendosni të blini ndonjë nga këto produkte, do ta vlerësoja shumë nëse i qaseni listimeve duke përdorur lidhjet e mësipërme - në atë mënyrë, unë marr një pjesë të vogël të fitimeve pa asnjë kosto shtesë për ju!]

Hapi 1: Vendosja e Njësisë së Marrësit

Vendosja e Njësisë së Marrësit
Vendosja e Njësisë së Marrësit

Para se të përdorni Pi-në tuaj për të dërguar komanda në prizat me telekomandë, duhet të dini se ndaj sinjaleve të veçanta që i përgjigjen. Shumica e prizave të telekomanduara transportohen me një aparat celular që mund të përdoret për të ndezur ose fikur njësi të veçanta. Në rastin e atyre që kam blerë, celulari ka katër rreshta të butonave të çiftuar ON/OFF, secila prej të cilave dërgon një sinjal ON ose OFF në një njësi të veçantë prizë.

Kjo ngre një pyetje - si e dimë se cilat butona i përgjigjen cilës prizë? Kjo në fakt varet nga modeli që keni. Një nga arsyet kryesore që zgjodha stilin tim të veçantë të prizës (e lidhur në hyrje) është se njësitë mund të konfigurohen me një ndërprerës fizik për të bërë që një prizë e veçantë t'i përgjigjet një grupi të veçantë butonash ON/OFF në celularin. Kjo gjithashtu do të thotë që ju mund të shkëputni dhe lëvizni prizat nëpër shtëpi duke e ditur se çdo njësi gjithmonë do t'i përgjigjet të njëjtave sinjale ON/OFF.

Pasi të keni kuptuar se si prizat tuaja ndërveprojnë me celularin, do t'ju duhet të përdorni njësinë tuaj të marrësit 433MHz (foto më sipër) për të 'nuhatur' kodet që dërgohen nga celulari. Pasi të keni regjistruar format e valëve të këtyre kodeve, mund t'i përsëritni ato duke përdorur Python dhe t'i dërgoni duke përdorur njësinë transmetuese.

Gjëja e parë që duhet të bëni këtu është lidhni kunjat në marrësin tuaj në kunjat e sakta GPIO në Pi. Njësia e marrësit ka katër kunja, por nevojiten vetëm tre prej tyre. Unë mendoj se të dy kunjat qendrore japin të njëjtën dalje, kështu që ju duhet vetëm të lidheni me njërën prej tyre (përveç nëse doni të transmetoni sinjalet e marra në dy kunja të veçanta GPIO).

Imazhi i mësipërm përmbledh shumë instalime elektrike. Çdo kunj në marrës mund të lidhet drejtpërdrejt me kunjin përkatës në Pi. Unë përdor një dërrasë buke dhe kabllo kërcyes për ta bërë procesin pak më elegant. Vini re se ju mund të zgjidhni çdo pin të të dhënave GPIO për t'u lidhur me njërën nga kunjat e marrësit qendror. Kam përdorur kunjin e shënuar si '23' në kokën time Pi.

E RORTNDSISHME: Nëse lidhni kunjin e shënuar '3v3' në imazhin e mësipërm me një kunj të tensionit më të lartë në Pi (p.sh. 5v), ndoshta do ta dëmtoni Pi pasi kunjat GPIO nuk mund të tolerojnë tensione mbi 3v3. Përndryshe, mund ta fuqizoni me 5v dhe të vendosni një ndarës të tensionit për të dërguar një tension të sigurt në kunjin e të dhënave.

Gama e marrësit nuk do të jetë shumë e madhe në këtë tension, veçanërisht nëse një antenë nuk është e lidhur. Sidoqoftë, nuk keni nevojë për një distancë të gjatë këtu - për sa kohë që marrësi mund të marrë sinjalet nga celulari kur ato mbahen pranë njëri -tjetrit, kjo është gjithçka që na nevojitet.

Hapi 2: Duke nuhatur kodet e celularëve

Duke nuhatur kodet e celularëve
Duke nuhatur kodet e celularëve

Tani që marrësi juaj është lidhur me Pi, mund të filloni fazën e parë emocionuese të këtij projekti - nuhatjen. Kjo përfshin përdorimin e shkrimit Python të bashkangjitur për të regjistruar sinjalin e transmetuar nga celulari kur shtypet çdo buton. Skenari është shumë i thjeshtë, dhe unë do të rekomandoja që ta hidhni një sy para se ta përdorni - në fund të fundit, qëllimi i këtij projekti është se ju nuk do të drejtoni vetëm verbërisht kodin e dikujt tjetër!

Para se të filloni këtë proces, do t'ju duhet të siguroheni që keni bibliotekat Python të nevojshme për të ekzekutuar shkrimin sniffer. Ato janë të shënuara në krye të skenarit:

nga dataetime import datetime

import matplotlib.pyplot si pyplot import RPi. GPIO si GPIO

Bibliotekat RPi. GPIO dhe koha e të dhënave u përfshinë me shpërndarjen time Raspbian, por më duhej të instaloja bibliotekën matplotlib si më poshtë:

sudo apt-get install python-matplotlib

Kjo bibliotekë është një bibliotekë grafike që përdoret zakonisht dhe është shumë e dobishme edhe jashtë këtij projekti, kështu që instalimi i saj definitivisht nuk mund të dëmtojë! Pasi bibliotekat tuaja të jenë të azhurnuara, ju jeni gati për të filluar regjistrimin e të dhënave. Ja se si funksionon skenari:

Kur ekzekutohet (duke përdorur komandën 'python ReceiveRF.py'), ai do të konfigurojë pinin e përcaktuar GPIO si një hyrje të të dhënave (pin 23 si parazgjedhje). Pastaj do të mostrojë vazhdimisht pinin dhe do të regjistrojë nëse po merr një dixhital 1 ose 0. Kjo vazhdon për një kohëzgjatje të caktuar (5 sekonda si parazgjedhje). Kur të arrihet ky afat kohor, skripti do të ndalojë regjistrimin e të dhënave dhe do të mbyllë hyrjen GPIO. Pastaj kryen një pak përpunim dhe vizaton vlerën hyrëse të marrë me kohën. Përsëri, nëse keni pyetje në lidhje me atë që po bën skenari, ndoshta mund t'i përgjigjeni vetë pasi të shikoni se si funksionon. Unë jam përpjekur ta bëj kodin sa më të lexueshëm dhe të thjeshtë.

Ajo që duhet të bëni është të shikoni kur skripti tregon se ka ** Filluar regjistrimin **. Pasi të shfaqet ky mesazh, duhet të shtypni dhe mbani një nga butonat në celular për rreth një sekondë. Sigurohuni që ta mbani pranë marrësit. Pasi skenari të ketë përfunduar regjistrimin, ai do të përdorë matplotlib për të vizatuar një formë valore grafike të sinjalit që ka marrë gjatë intervalit të regjistrimit. Ju lutemi vini re, nëse jeni të lidhur me Pi tuaj duke përdorur një klient SSH siç është PuTTY, do t'ju duhet gjithashtu të hapni një aplikacion X11 për të lejuar shfaqjen e formës së valës. Unë përdor xMing për këtë (dhe për gjëra të tjera të tilla si desktop-distanca në Pi tim). Për të lejuar shfaqjen e komplotit, thjesht filloni xMing para se të ekzekutoni skriptin dhe prisni që rezultatet të shfaqen.

Pasi të shfaqet dritarja juaj matplotlib, zona e interesit brenda komplotit duhet të jetë mjaft e qartë. Ju mund të përdorni kontrollet në fund të dritares për të zmadhuar derisa të jeni në gjendje të zgjidhni nivelet e larta dhe të ulëta të sinjalit të transmetuar nga celulari ndërsa butoni po mbahej i shtypur. Shikoni imazhin e mësipërm për një shembull të një kodi të plotë. Sinjali ndoshta do të përbëhet nga impulse shumë të shkurtra të ndara nga periudha të ngjashme kohore ku nuk merret asnjë sinjal. Ky bllok i impulseve të shkurtra ndoshta do të pasohet nga një periudhë më e gjatë ku asgjë nuk merret, pas së cilës modeli do të përsëritet. Pasi të keni identifikuar modelin që i përket një shembulli të vetëm të kodit, merrni një pamje të ekranit si ajo në krye të kësaj faqe dhe vazhdoni në hapin tjetër për ta interpretuar atë.

Hapi 3: Transkriptimi i sinjalit që rezulton

Transkriptimi i sinjalit që rezulton
Transkriptimi i sinjalit që rezulton

Tani që keni identifikuar bllokun e lartësive dhe uljeve periodike që korrespondojnë me sinjalin e një butoni të veçantë, do t'ju duhet një mënyrë për ruajtjen dhe interpretimin e tij. Në shembullin e mësipërm të sinjalit, do të vini re se ekzistojnë vetëm dy modele unike që përbëjnë të gjithë bllokun e sinjalit. Ndonjëherë shihni një lartësi të shkurtër të ndjekur nga një ulët të gjatë, dhe nganjëherë është e kundërta - një lartësi e gjatë e ndjekur nga një ulët e shkurtër. Kur po transkriptoja sinjalet e mia, vendosa të përdor konventën e mëposhtme të emërtimit:

1 = shkurt_on + largim të gjatë0 = kohë të gjatë + mbyllje të shkurtër

Shikoni përsëri formën e etiketuar të valës dhe do të shihni se çfarë dua të them. Pasi të keni identifikuar modelet ekuivalente në sinjalin tuaj, gjithçka që duhet të bëni është të numëroni 1 dhe 0 për të ndërtuar sekuencën. Kur transkriptohet, sinjali i mësipërm mund të shkruhet si më poshtë:

1111111111111010101011101

Tani ju vetëm duhet të përsërisni këtë proces për të regjistruar dhe transkriptuar sinjalet që korrespondojnë me butonat e tjerë në celularin tuaj dhe keni përfunduar pjesën e parë të procesit!

Para se të ri-dërgoni sinjalet duke përdorur transmetuesin, ka pak më shumë punë për të bërë. Koha midis niveleve të larta dhe të ulëta që korrespondojnë me 1 ose 0 është shumë e rëndësishme, dhe ju duhet të siguroheni që e dini se sa gjatë zgjat një 'short_on' ose 'long_off'. Për kodet e mia, kishte tre pjesë të informacionit të kohës që duhej të nxirrja në mënyrë që të përsërisja sinjalet:

  • Kohëzgjatja e një intervali 'të shkurtër', domethënë fillimi i një 1 ose fundi i një 0.
  • Kohëzgjatja e një intervali 'të gjatë', domethënë fundi i një 1 ose fillimi i një 0.
  • Kohëzgjatja e një intervali 'të zgjatur'. Unë vura re se kur mbaja një buton poshtë në celular, kishte një periudhë 'zgjatje të mbylljes' midis secilës shembull të përsëritur të bllokut të sinjalit. Kjo vonesë përdoret për sinkronizim dhe ka një kohëzgjatje fikse.

Për të përcaktuar këto vlera të kohës, mund të përdorni funksionin e zmadhimit në dritaren matplotlib për të zmadhuar deri në fund dhe për të vendosur kursorin mbi pjesët përkatëse të sinjalit. Leximi i vendndodhjes së kursorit në fund të dritares duhet t'ju lejojë të përcaktoni se sa e gjerë është secila pjesë e sinjalit që korrespondon me një interval të gjatë, të shkurtër ose të zgjatur. Vini re se boshti x i komplotit përfaqëson kohën, dhe përbërësi x i leximit të kursorit është në njësi sekondash. Për mua, gjerësitë ishin si më poshtë (në sekonda):

  • vonesë e shkurtër = 0.00045
  • vonesa e gjatë = 0.00090 (dy herë më e gjatë se një 'e shkurtër')
  • vonesa e zgjatur = 0.0096

Hapi 4: Vendosja e Njësisë së Transmetuesit

Ngritja e Njësisë së Transmetuesit
Ngritja e Njësisë së Transmetuesit

Pasi të keni mbledhur kodet dhe të dhënat e kohës, mund të shkëputni njësinë tuaj të marrësit pasi nuk do të keni më nevojë për të. Pastaj mund ta lidhni transmetuesin drejtpërdrejt në kunjat përkatëse Pi GPIO siç tregohet në imazhin e mësipërm. Kam gjetur se kunjat në njësitë e transmetuesit janë etiketuar, gjë që e bën procesin më të lehtë.

Në këtë rast, është në rregull të fuqizoni njësinë duke përdorur furnizimin 5v nga Pi pasi kunja DATA nuk do të dërgojë sinjale në Pi, vetëm duke i marrë ato. Gjithashtu, një furnizim me energji 5v do të sigurojë më shumë rreze transmetimi sesa përdorimi i furnizimit me 3v3. Përsëri, ju mund të lidhni pinin DATA me çdo pin të përshtatshëm në Pi. Kam përdorur pin 23 (njësoj si për marrësin).

Një gjë tjetër që do të rekomandoja të bëni është shtimi i një antene në vrimën e vogël në pjesën e sipërme të djathtë të transmetuesit. Kam përdorur një copë teli të drejtë 17 cm të gjatë. Disa burime rekomandojnë një tel të mbështjellë me gjatësi të ngjashme. Nuk jam i sigurt se cila është më mirë, por tela e drejtë siguron një gamë të mjaftueshme për mua për të ndezur/fikur prizat nga çdo vendndodhje në banesën time të vogël. Bestshtë më mirë të lidhësh antenën, por unë vetëm hoqa një pjesë të plastikës nga tela dhe e mbështolla bakrin përmes vrimës.

Pasi transmetuesi të jetë lidhur, kjo është e gjitha konfigurimi i harduerit i bërë! E vetmja gjë që mbetet për të bërë tani është të vendosni bazat tuaja rreth shtëpisë dhe të shikoni programin e transmetuesit.

Hapi 5: Transmetimi i sinjaleve duke përdorur Pi

Këtu hyn shkrimi i dytë Python. Isshtë projektuar të jetë po aq i thjeshtë sa i pari, nëse jo më shumë. Përsëri, ju lutemi shkarkoni dhe shikoni kodin. Ju do të duhet të redaktoni skriptin për të transmetuar sinjalet e sakta sipas të dhënave që keni regjistruar në hapin 3, kështu që tani është një kohë e mirë për të parë një shikim të shpejtë në të.

Bibliotekat e nevojshme për të ekzekutuar këtë skript ishin të gjitha të para-instaluara në Pi tim, kështu që nuk ishte i nevojshëm instalimi. Ato janë të shënuara në krye të skenarit:

koha e importit

import sys import RPi. GPIO si GPIO

Nën importet e bibliotekës është informacioni që do të keni për të redaktuar. Ja se si duket si parazgjedhje (ky është informacioni që korrespondon me bazat e mia siç përcaktohet duke përdorur hapin 3):

a_on = '111111111111101010101011101'

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

Këtu kemi tetë vargje kodesh (dy për secilën palë butona ndezje/fikje në celularin tim - mund të keni më shumë ose më pak kode) të ndjekura nga tre pjesët e informacionit të kohës të përcaktuara gjithashtu në hapin 3. Merrni kohë për t'u siguruar që keni e ka futur këtë informacion në mënyrë korrekte.

Pasi të jeni të kënaqur me kodet/vonesat që keni futur në skenar (mund t'i riemërtoni variablat e vargut të kodit nëse dëshironi), jeni gati gati të provoni sistemin! Para se ta bëni këtë, hidhini një sy funksionit transmit_code () në skript. Këtu ndodh ndërveprimi aktual me transmetuesin. Ky funksion pret që një nga vargjet e kodit të dërgohet si argument. Pastaj hap pinin e përcaktuar si dalje GPIO dhe kalon nëpër çdo karakter në vargun e kodit. Pastaj aktivizon ose çaktivizon transmetuesin sipas informacionit të kohës që keni futur për të krijuar një formë vale që përputhet me vargun e kodit. Ai dërgon secilin kod shumë herë (10 si parazgjedhje) për të zvogëluar mundësinë e humbjes së tij, dhe lë një vonesë të zgjatur midis secilit bllok kodesh, ashtu si celulari.

Për të ekzekutuar skriptin, mund të përdorni sintaksën e mëposhtme të komandës:

python TransmitRF.py code_1 code_2…

Mund të transmetoni vargje të shumta kodesh me një ekzekutim të vetëm të skriptit. Për shembull, për të aktivizuar bazat (a) dhe (b) dhe prizën (c), ekzekutoni skriptin me komandën e mëposhtme:

python TransmitRF.py a_on b_on c_off

Hapi 6: Një shënim mbi saktësinë e kohës

Siç u përmend, koha midis impulseve të transmetimit të ndezjes/fikjes është mjaft e rëndësishme. Skripti TransmitRF.py përdor funksionin python time.sleep () për të ndërtuar format e valëve me intervalet e sakta të pulsit, por duhet theksuar se ky funksion nuk është plotësisht i saktë. Gjatësia për të cilën e bën skriptin të presë para se të ekzekutojë operacionin tjetër mund të varet nga ngarkesa e procesorit në atë moment të caktuar. Kjo është një arsye tjetër pse TransmitRF.py dërgon secilin kod shumë herë - vetëm në rast se funksioni time.sleep () nuk është në gjendje të ndërtojë siç duhet një shembull të caktuar të kodit.

Unë personalisht kurrë nuk kam pasur probleme me time.sleep () kur bëhet fjalë për dërgimin e kodeve. Unë megjithatë e di se time.sleep () ka tendencë të ketë një gabim prej rreth 0.1ms. Unë e përcaktova këtë duke përdorur skriptin e bashkangjitur SleepTest.py i cili mund të përdoret për të dhënë një vlerësim se sa i saktë është funksioni i kohës Pi. Për bazat e mia të veçanta me telekomandë, vonesa më e shkurtër që më duhej të zbatoja ishte 0.45ms. Siç thashë, nuk kam pasur probleme me prizat që nuk përgjigjen, kështu që duket se 0.45 ± 0.1ms është mjaft e mirë.

Ka metoda të tjera për të siguruar që vonesa të jetë më e saktë; për shembull, mund të përdorni një çip të dedikuar PIC për të gjeneruar kodet, por gjëra të tilla janë përtej fushëveprimit të këtij tutoriali.

Hapi 7: Përfundimi

Përfundim
Përfundim

Ky projekt ka paraqitur një metodë për kontrollin e çdo pajisje elektrike duke përdorur një Raspberry Pi dhe një sërë bazash të telekomanduara 433MHz, me një fokus në thjeshtësinë dhe transparencën. Ky është projekti më emocionues dhe fleksibël për të cilin kam përdorur Pi tim, dhe ka aplikime të pakufizuara për të. Këtu janë disa gjëra që tani mund të bëj falë Pi tim:

  • Ndizni një ngrohës elektrik pranë shtratit tim gjysmë ore para se të bjerë alarmi.
  • Fikeni ngrohësin një orë pasi kam fjetur.
  • Ndizeni dritën e shtratit kur bie alarmi në mënyrë që të mos më zërë gjumi.
  • dhe shume te tjera…

Për shumicën e këtyre detyrave, unë përdor funksionin crontab brenda Linux. Kjo ju lejon të vendosni detyra automatike të planifikuara për të ekzekutuar skriptin TransmitRF.py në kohë të veçanta. Ju gjithashtu mund të përdorni Linux-in me komandë për të ekzekutuar detyra të njëhershme (të cilat, për mua, duheshin instaluar veçmas duke përdorur 'sudo apt-get install at'). Për shembull, për të ndezur ngrohësin tim gjysmë ore para se të bjerë alarmi në mëngjesin tjetër, gjithçka që duhet të bëj është të shkruaj:

në 05:30

python TransmitRF.py c_on

Ju gjithashtu mund ta përdorni këtë projekt në lidhje me sistemin tim të monitorimit të shtëpisë Dropbox për të kontrolluar pajisjet në internet! Faleminderit për leximin, dhe nëse dëshironi të sqaroni diçka ose të ndani mendimin tuaj, ju lutemi postoni një koment!

Recommended: