Sadržaj:
- Korak 1: Postavljanje prijemne jedinice
- Korak 2: Njuškanje kodova slušalice
- Korak 3: Transkribiranje rezultirajućeg signala
- Korak 4: Postavljanje odašiljačke jedinice
- Korak 5: Prijenos signala pomoću Pi
- Korak 6: Napomena o točnosti vremena
- Korak 7: Zaključak
Video: Super jednostavna Raspberry Pi 433MHz kućna automatizacija: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Ovaj je vodič jedan od mnogih kada je u pitanju korištenje Raspberry Pi za kontrolu bežičnih uređaja po kući. Kao i mnogi drugi, pokazat će vam kako koristiti jeftin par odašiljača/prijamnika spojen na vaš Pi za interakciju s uređajima koji rade na uobičajenom radiofrekvencijskom pojasu od 433MHz. Posebno će vam pokazati kako uključiti ili isključiti bilo koji električni uređaj pomoću vašeg Pi-a odašiljanjem naredbi na set daljinski upravljanih utičnica na 433MHz.
Zašto sam stvorio ovaj vodič ako toliko već postoji? Uglavnom zato što se činilo da su svi drugi vodiči na koje sam naišao pretjerano komplicirali stvari, posebno na softverskoj strani. Primijetio sam da su se u velikoj mjeri oslanjali na knjižnice trećih strana, skripte ili isječke koda kako bi obavili sav posao. Mnogi ne bi ni objasnili što radi osnovni kôd - samo bi vas zamolili da ubacite dva ili tri komada softvera na svoj Pi i izvršite hrpu naredbi, bez postavljanja pitanja. Zaista sam želio probati upotrijebiti svoj Pi za uključivanje i isključivanje električnih uređaja po svom domu pomoću seta daljinski upravljanih utičnica od 433MHz, ali želio sam stvoriti svoju vlastitu verziju sustava koju bih mogao razumjeti, nadam se da će eliminirati potrebu za koristiti tuđe knjižnice ili skripte.
O tome govori ovaj vodič. Softverska strana ovog sustava sastoji se od dva vrlo jednostavna Python skripta - jednog za primanje i snimanje signala i drugog za prijenos tih signala natrag u bežične utičnice za napajanje. Stvarni prijem/prijenos signala oslanja se samo na biblioteku RPi. GPIO koja je jednostavna za upotrebu, koja je, barem za mene, unaprijed instalirana s Raspbian-om. Ova se knjižnica također može uvesti izravno u Python.
Za ovaj projekt trebat će vam:
Pivo od maline Pi. Bilo koji model bi trebao funkcionirati, koristio sam početni komplet sve u jednom, ali možda vam je potrebna samo središnja jedinica
Par odašiljača/prijamnika od 433 MHz. Čini se da su najčešće korišteni u ovoj vrsti projekata. Kupovinom pakiranja od pet komada poput onog povezanog osigurat ćete nekoliko rezervnih dijelova
Komplet daljinskih upravljačkih utičnica na 433MHz. Koristio sam ove koje bih toplo preporučio, ali dostupno je bezbroj modela. Samo se pobrinite da rade na ovoj frekvenciji
Neki pribor za izgradnju sklopova. Preporučio bih korištenje matične ploče i neke kratkospojne kabele kako bi proces izgradnje kruga bio što lakši.
[Ako se odlučite za kupnju bilo kojeg od ovih proizvoda, bio bih vam zahvalan ako pristupite popisima pomoću gornjih veza - na taj način dobivam mali dio dobiti bez dodatnih troškova!]
Korak 1: Postavljanje prijemne jedinice
Prije nego što možete koristiti svoj Pi za slanje naredbi u daljinski upravljane utičnice, morate znati na koje specifične signale reagiraju. Većina utičnica s daljinskim upravljanjem isporučuje se sa slušalicom koja se može koristiti za uključivanje ili isključivanje određenih jedinica. U slučaju onih koje sam kupio, slušalica ima četiri reda uparenih tipki za uključivanje/isključivanje, od kojih svaka šalje signal za uključivanje ili isključivanje na određenu utičnicu.
Ovo postavlja pitanje - kako znamo koji gumbi odgovaraju kojoj utičnici? To zapravo ovisi o modelu koji imate. Jedan od glavnih razloga zašto sam odabrao svoj stil utičnice (povezan u uvodu) je taj što se jedinice mogu konfigurirati s fizičkim prekidačem kako bi određena utičnica reagirala na određeni skup tipki za uključivanje/isključivanje na slušalici. To također znači da možete isključiti i premjestiti utičnice po kući znajući da će svaka jedinica uvijek reagirati na iste ON/OFF signale.
Nakon što ste shvatili kako vaše utičnice stupaju u interakciju sa slušalicom, morat ćete upotrijebiti svoju prijemnu jedinicu od 433MHz (na gornjoj slici) za 'njuškanje' kodova koje šalje slušalica. Nakon što snimite valne oblike ovih kodova, možete ih replicirati pomoću Pythona i poslati ih pomoću odašiljačke jedinice.
Prvo što trebate učiniti je spojiti pinove vašeg prijemnika na ispravne GPIO pinove na Pi. Prijemna jedinica ima četiri pina, ali su potrebna samo tri. Mislim da oba središnja pina daju isti izlaz, pa se trebate spojiti samo na jedan od njih (osim ako ne želite strujati primljene signale na dva odvojena GPIO pina).
Gornja slika prilično sažima ožičenje. Svaki pin na prijemniku može se spojiti izravno na odgovarajući pin na Pi. Koristim ploču za kruh i kratkospojne kabele kako bih postupak učinio elegantnijim. Imajte na umu da možete odabrati bilo koji GPIO podatkovni pin za spajanje na bilo koji od središnjih prijemnika. Koristio sam pin označen kao '23' na svom Pi zaglavlju.
VAŽNO: Ako spojite pin označen sa '3v3' na gornjoj slici na pin višeg napona na Pi (npr. 5v), vjerojatno ćete oštetiti Pi jer GPIO pinovi ne mogu tolerirati napone iznad 3v3. Alternativno, možete ga napajati s 5v i postaviti razdjelnik napona za slanje sigurnog napona na pin DATA.
Domet prijemnika neće biti velik pri ovom naponu, pogotovo ako antena nije spojena. Međutim, ovdje vam ne treba dug raspon - sve dok prijemnik može pokupiti signale sa slušalice kada se drže jedan pored drugog, to je sve što nam treba.
Korak 2: Njuškanje kodova slušalice
Sada kada je vaš prijemnik spojen na Pi, možete započeti prvu uzbudljivu fazu ovog projekta - njuškanje. To uključuje korištenje priložene Python skripte za snimanje signala koji prenosi slušalica pri pritisku svake tipke. Skripta je vrlo jednostavna i toplo bih vam preporučio da je pogledate prije nego što je pokrenete - uostalom, poanta ovog projekta je da nećete samo slijepo pokrenuti tuđi kod!
Prije nego započnete ovaj proces, morat ćete se uvjeriti da imate knjižnice Python potrebne za pokretanje skripte snifera. Navedeni su pri vrhu skripte:
from datetime import datetime
uvoz matplotlib.pyplot kao pyplot uvoz RPi. GPIO kao GPIO
Biblioteke RPi. GPIO i datetime uključene su u moju Raspbian distribuciju, ali morao sam instalirati matplotlib knjižnicu na sljedeći način:
sudo apt-get install python-matplotlib
Ova je knjižnica često korištena biblioteka za crtanje grafikona koja je vrlo korisna čak i izvan ovog projekta, pa njezina instalacija definitivno ne može naštetiti! Kad se vaše knjižnice ažuriraju, spremni ste za početak snimanja podataka. Evo kako skripta radi:
Kad se pokrene (pomoću naredbe 'python ReceiveRF.py'), konfigurirat će definirani GPIO pin kao unos podataka (pin 23 prema zadanim postavkama). Zatim će kontinuirano uzorkovati pin i evidentirati prima li digitalni 1 ili 0. To se nastavlja zadano trajanje (5 sekundi prema zadanim postavkama). Kad se dosegne ovo vremensko ograničenje, skripta će prestati snimati podatke i zatvorit će GPIO ulaz. Zatim izvodi malu naknadnu obradu i iscrtava primljenu ulaznu vrijednost u odnosu na vrijeme. Opet, ako imate pitanja o tome što skripta radi, vjerojatno možete sami odgovoriti na njih nakon što pogledate kako funkcionira. Pokušao sam učiniti kôd što čitljivijim i jednostavnijim.
Ono što trebate učiniti je paziti kada skripta pokaže da je ** započelo snimanje **. Nakon što se pojavi ova poruka, trebate pritisnuti i držati jednu od tipki na slušalici oko sekunde. Držite ga blizu prijemnika. Nakon što skripta završi snimanje, upotrijebit će matplotlib za iscrtavanje grafičkog valnog oblika signala koji je primio tijekom intervala snimanja. Imajte na umu da ako ste na svoj Pi povezani putem SSH klijenta, poput PuTTY -a, morat ćete otvoriti i aplikaciju X11 kako biste omogućili prikaz valnog oblika. Za to koristim xMing (i za druge stvari, poput udaljenog stolnog računala u svom Pi). Da biste dopustili prikaz radnje, jednostavno pokrenite xMing prije nego pokrenete skriptu i pričekajte da se rezultati pojave.
Nakon što se pojavi vaš prozor matplotlib, područje interesa unutar radnje trebalo bi biti prilično očito. Pomoću kontrola pri dnu prozora možete zumirati sve dok ne uspijete odabrati visoke i niske signale koje odašilje slušalica dok je tipka držana pritisnuta. Primjer potpunog koda pogledajte na gornjoj slici. Signal će se vjerojatno sastojati od vrlo kratkih impulsa odvojenih sličnim vremenskim razdobljima u kojima se ne prima signal. Nakon ovog bloka kratkih impulsa vjerojatno će uslijediti duže razdoblje u kojem se ništa ne prima, nakon čega će se obrazac ponoviti. Nakon što ste identificirali uzorak koji pripada jednoj instanci koda, napravite takav snimak zaslona pri vrhu ove stranice i nastavite na sljedeći korak kako biste ga protumačili.
Korak 3: Transkribiranje rezultirajućeg signala
Sada kada ste identificirali blok periodičnih uspona i padova koji odgovaraju signalu određene tipke, trebat će vam način pohranjivanja i tumačenja. U gornjem primjeru signala primijetit ćete da postoje samo dva jedinstvena uzorka koji čine cijeli signalni blok. Ponekad vidite kratki high nakon kojeg slijedi long low, a ponekad je suprotno - long high nakon kojeg slijedi short low. Kad sam prepisivao svoje signale, odlučio sam upotrijebiti sljedeću konvenciju imenovanja:
1 = kratki_na + dugi_isključak0 = dugi_na + kratki_isključak
Ponovno pogledajte označeni valni oblik i vidjet ćete na što mislim. Nakon što ste identificirali ekvivalentne obrasce u svom signalu, sve što trebate učiniti je prebrojati 1 i 0 kako biste izgradili niz. Kada se transkribira, gornji signal se može zapisati na sljedeći način:
1111111111111010101011101
Sada samo trebate ponoviti ovaj postupak za snimanje i transkribiranje signala koji odgovaraju ostalim gumbima na vašoj slušalici i završili ste prvi dio procesa!
Prije nego što možete ponovno poslati signale pomoću odašiljača, potrebno je još malo posla. Vrijeme između uspona i padova koji odgovara 1 ili 0 vrlo je važno i morate biti sigurni da znate koliko zapravo traje 'short_on' ili 'long_off'. Za moje kodove postojala su tri podatka o vremenu koje sam trebao izdvojiti kako bih replicirao signale:
- Trajanje 'kratkog' intervala, tj. Početak 1 ili kraj 0.
- Trajanje 'dugog' intervala, tj. Kraj 1 ili početak 0.
- Trajanje 'produženog' intervala. Primijetio sam da je, kad sam pritisnuo dugme na slušalici, došlo do razdoblja 'produženog_isključivanja' između svake ponovljene instance signalnog bloka. Ovo kašnjenje se koristi za sinkronizaciju i ima fiksno trajanje.
Da biste odredili ove vremenske vrijednosti, možete upotrijebiti funkciju zumiranja u prozoru matplotlib da biste do kraja zumirali i postavili kursor na relevantne dijelove signala. Očitavanje položaja kursora na dnu prozora trebalo bi vam omogućiti da odredite koliko je širok svaki dio signala koji odgovara dugom, kratkom ili produženom intervalu. Imajte na umu da os x grafikona predstavlja vrijeme, a x komponenta očitanja kursora je u jedinicama sekundi. Za mene su širine bile sljedeće (u sekundama):
- kratko_kašnjenje = 0,00045
- long_delay = 0,00090 (dva puta duže od 'short')
- produženo_kašnjenje = 0,0096
Korak 4: Postavljanje odašiljačke jedinice
Nakon što prikupite kodove i podatke o vremenu, možete odspojiti prijemnu jedinicu jer vam više neće trebati. Zatim možete spojiti odašiljač izravno na odgovarajuće Pi GPIO pinove kao što je prikazano na gornjoj slici. Otkrio sam da su pinovi na odašiljačkim jedinicama označeni, što olakšava proces.
U ovom slučaju, u redu je napajati jedinicu pomoću napajanja od 5 V iz Pi jer DATA pin neće slati signale na Pi, već ih samo primati. Također, napajanje od 5 V osigurat će veći raspon prijenosa od korištenja napajanja 3v3. Opet, možete spojiti DATA pin na bilo koji odgovarajući pin na Pi. Koristio sam pin 23 (isto kao i za prijemnik).
Još jedna stvar koju bih preporučio je dodavanje antene u malu rupu u gornjem desnom kutu odašiljača. Koristio sam komad ravne žice dugačak 17 cm. Neki izvori preporučuju namotanu žicu slične duljine. Nisam siguran što je bolje, ali ravna žica pruža mi dovoljan domet za uključivanje/isključivanje utičnica s bilo kojeg mjesta u mom malom stanu. Najbolje je lemiti antenu, ali samo sam izvadio dio plastike iz žice i omotao bakar kroz rupu.
Kad se odašiljač ožiči, to je sve što je hardversko postavljanje učinjeno! Jedino što sada trebate učiniti je postaviti utičnice po kući i pogledati program odašiljača.
Korak 5: Prijenos signala pomoću Pi
Ovdje dolazi druga Python skripta. Dizajnirana je da bude jednako jednostavna kao i prva, ako ne i više. Opet, preuzmite ga i pregledajte kôd. Morat ćete urediti skriptu za prijenos ispravnih signala u skladu s podacima koje ste snimili u koraku 3, pa je sada pravo vrijeme za brzi pogled na nju.
Knjižnice potrebne za pokretanje ove skripte sve su unaprijed instalirane na mom Pi, pa daljnja instalacija nije bila potrebna. Navedeni su pri vrhu skripte:
vrijeme uvoza
import sys uvoz RPi. GPIO kao GPIO
Ispod uvoza knjižnice nalaze se podaci koje ćete morati urediti. Evo kako to izgleda prema zadanim postavkama (ovo su podaci koji odgovaraju mojim utičnicama utvrđenim pomoću koraka 3):
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
Ovdje imamo osam nizova kodova (dva za svaki par gumba za uključivanje/isključivanje na mojoj slušalici - možda imate više ili manje kodova) nakon čega slijede tri informacije o vremenu koje su također određene u koraku 3. Odvojite vrijeme da provjerite imate li ispravno unijeli ove podatke.
Kad budete zadovoljni kodovima/kašnjenjima koje ste unijeli u skriptu (ako želite, možete preimenovati varijable nizova koda), spremni ste za isprobavanje sustava! Prije nego što to učinite, pogledajte funkciju transmit_code () u skripti. Tu dolazi do stvarne interakcije s odašiljačem. Ova funkcija očekuje da će jedan od nizova koda biti poslan kao argument. Zatim otvara definirani pin kao GPIO izlaz i petlja kroz svaki znak u nizu koda. Zatim uključuje ili isključuje odašiljač u skladu s vremenskim podacima koje ste unijeli za stvaranje valnog oblika koji odgovara kodnom nizu. Svaki kôd šalje više puta (prema zadanim postavkama 10) kako bi se smanjila mogućnost njegovog propuštanja, a između svakog bloka koda ostaje produženo_kašnjenje, baš kao i slušalica.
Da biste pokrenuli skriptu, možete koristiti sljedeću sintaksu naredbe:
python TransmitRF.py kod_1 kod_2 …
Možete prenijeti više nizova koda s jednim pokretanjem skripte. Na primjer, da biste uključili utičnice (a) i (b) i isključili utičnicu (c), pokrenite skriptu sa sljedećom naredbom:
python TransmitRF.py a_on b_on c_off
Korak 6: Napomena o točnosti vremena
Kao što je spomenuto, vrijeme između emitiranih impulsa za uključivanje/isključivanje vrlo je važno. Skripta TransmitRF.py koristi pythonovu funkciju time.sleep () za izgradnju valnih oblika s ispravnim intervalima impulsa, no valja napomenuti da ta funkcija nije posve točna. Duljina na koju skripta čeka prije izvođenja sljedeće operacije može ovisiti o opterećenju procesora u tom trenutku. To je još jedan razlog zašto TransmitRF.py šalje svaki kôd više puta - samo u slučaju da funkcija time.sleep () ne može pravilno konstruirati datu instancu koda.
Ja osobno nikad nisam imao problema s time.sleep () što se tiče slanja kodova. Ipak znam da moje vrijeme.sleep () ima grešku od oko 0,1 ms. To sam utvrdio pomoću priložene skripte SleepTest.py koja se može koristiti za procjenu koliko je točna funkcija Pi's time.sleep (). Za moje posebne utičnice na daljinsko upravljanje najkraće kašnjenje koje sam trebao implementirati bilo je 0,45 ms. Kao što sam rekao, nisam imao problema s utičnicama koje ne reagiraju, pa se čini da je 0,45 ± 0,1 ms dovoljno dobro.
Postoje i druge metode za osiguravanje točnosti kašnjenja; na primjer, mogli biste koristiti namjenski PIC čip za generiranje kodova, ali takve stvari izlaze iz okvira ovog vodiča.
Korak 7: Zaključak
Ovaj projekt je predstavio metodu upravljanja bilo kojim električnim uređajem pomoću Raspberry Pi-a i seta daljinski upravljanih utičnica od 433MHz, s naglaskom na jednostavnosti i transparentnosti. Ovo je najuzbudljiviji i najfleksibilniji projekt za koji sam koristio svoj Pi, a za to postoje neograničene aplikacije. Evo nekih stvari koje sada mogu učiniti zahvaljujući svom Pi:
- Uključi električni grijač pokraj kreveta pola sata prije nego što se oglasi alarm.
- Isključite grijač sat vremena nakon što sam zaspao.
- Uključi moje noćno svjetlo kad se alarm oglasi kako ne bih zaspao.
- i još mnogo toga…
Za većinu ovih zadataka koristim funkciju crontab unutar Linuxa. To vam omogućuje postavljanje automatskih planiranih zadataka za pokretanje skripte TransmitRF.py u određeno vrijeme. Također možete koristiti naredbu Linux at za pokretanje jednokratnih zadataka (koji su za mene morali biti instalirani zasebno pomoću 'sudo apt-get install at'). Na primjer, da bih uključio grijač pola sata prije nego što mi se sljedećeg jutra oglasi alarm, sve što trebam učiniti je upisati:
u 05:30 sati
python TransmitRF.py c_on
Ovaj projekt možete koristiti i zajedno s mojim Dropbox sustavom za nadzor doma za upravljanje uređajima preko interneta! Hvala vam na čitanju, a ako želite pojasniti ili podijeliti svoje mišljenje, postavite komentar!
Preporučeni:
NODE MCU-LED kontrola (jednostavna kućna automatizacija): 5 koraka
NODE MCU-LED kontrola (jednostavna kućna automatizacija): Zdravo dečki, U ovom Instructableu da vidimo kako kontrolirati LED žarulju pomoću vašeg pametnog telefona. Za ovaj projekt koristit ćemo Node-MCU. Pogledajte donju vezu za instaliranje Node MCU-a knjižnice (ESP knjižnice) u vašem Arduinu IDE.NODE MCU-OSNOVE {Slijedite Ste
Kućna automatizacija s Raspberry Pi pomoću relejne ploče: 7 koraka
Kućna automatizacija s Raspberry Pi pomoću relejne ploče: Veliki broj ljudi želi veliku udobnost, ali po razumnim cijenama. Lijeno nam je paliti kuće svake večeri kad zađe sunce i sljedećeg jutra, ponovo isključiti svjetla Ili uključiti/isključiti klima uređaj/ventilator/grijače kao što je bilo
Kućna automatizacija pomoću Raspberry Pi Matrix glasa i isječaka (2. dio): 8 koraka
Kućna automatizacija pomoću Raspberry Pi Matrix glasa i isječaka (2. dio): Ažuriranje kućne automatizacije pomoću Raspberry Pi Matrix glasa i isječaka. U ovom se PWM koristi za kontrolu vanjskih LED dioda i servo motora Svi detalji navedeni u dijelu 1https: //www.instructables.com/id/Controlling-Light
Jednostavna kućna automatizacija (prilagođena Bluetooth aplikacija): 6 koraka
Jednostavna kućna automatizacija (prilagođena Bluetooth aplikacija): u ovom ću vam vodiču pokazati kako izgraditi jednostavnu kućnu automatizaciju (to jest možemo kontrolirati naše kućne aplikacije pametnim telefonom)
Jednostavna kućna automatizacija pomoću Raspberry Pi3 i Android stvari: 5 koraka (sa slikama)
Jednostavna kućna automatizacija pomoću Raspberry Pi3 i Android stvari: Ideja je dizajnirati “ pametan DOM ” gdje se može kontrolirati kućanske uređaje pomoću Android stvari i Raspberry Pi. Projekt se sastoji od upravljanja kućanskim aparatima poput svjetla, ventilatora, motora itd. Potrebni materijali: Raspberry Pi 3HDMI Ca