Мазмұны:

Super Raspberry Pi 433MHz үй автоматикасы: 7 қадам
Super Raspberry Pi 433MHz үй автоматикасы: 7 қадам

Бейне: Super Raspberry Pi 433MHz үй автоматикасы: 7 қадам

Бейне: Super Raspberry Pi 433MHz үй автоматикасы: 7 қадам
Бейне: Умный дом на ардуино 2024, Қараша
Anonim
Super Raspberry Pi 433MHz үй автоматикасы
Super Raspberry Pi 433MHz үй автоматикасы

Бұл оқулық үйдегі сымсыз құрылғыларды басқару үшін Raspberry Pi пайдалану туралы айтылған кезде көпшілікке арналған. Басқалар сияқты, бұл сізге 433 МГц жиіліктегі радио жиілік диапазонында жұмыс істейтін құрылғылармен өзара әрекеттесу үшін Пи -ге қосылған арзан таратқыш/қабылдағыш жұбын қалай пайдалану керектігін көрсетеді. Ол сізге пәрмендерді 433 МГц қашықтан басқарылатын розеткалар жиынтығына жіберу арқылы Pi көмегімен кез келген электрлік құрылғыны қалай қосу немесе өшіру керектігін көрсетеді.

Неліктен мен бұл оқулықты құрдым, егер олардың көпшілігі бұрыннан бар болса? Негізінен, мен кездестірген барлық басқа оқулықтар, әсіресе бағдарламалық қамтамасыз ету жағынан, күрделі болып көрінді. Мен олардың барлық жұмысты орындау үшін үшінші жақ кітапханаларына, сценарийлерге немесе код үзінділеріне көп сүйенгенін байқадым. Көптеген адамдар негізгі кодтың не істеп жатқанын түсіндірмейді - олар сізден Pi -ге екі немесе үш бағдарламалық жасақтаманы енгізуді және көптеген командаларды орындауды сұрайды, ешқандай сұрақтар қойылмайды. Мен 433 МГц қашықтан басқарылатын розеткалар жиынтығын қолдана отырып, үйімнің айналасында электр құрылғыларын қосу және өшіру үшін Pi-ді қолданғым келді, бірақ мен жүйенің мен түсінетін өз нұсқамды жасағым келді, бұл қажеттілікті жояды деп үміттенемін. басқа біреудің кітапханаларын немесе сценарийлерін қолданыңыз.

Бұл оқулық осы туралы. Бұл жүйенің бағдарламалық жағы екі қарапайым Python сценарийлерінен тұрады - біреуі сигналдарды қабылдауға және жазуға, екіншісі бұл сигналдарды сымсыз қуат розеткаларына жіберуге арналған. Сигналды нақты қабылдау/беру тек RPi. GPIO кітапханасына негізделген, ол мен үшін кем дегенде Raspbian-мен алдын ала орнатылған. Бұл кітапхананы Python -ға тікелей импорттауға болады.

Бұл жоба үшін сізге қажет:

Таңқурай Pi. Кез келген модель жұмыс істеуі керек, мен стартер жинағын қолдандым, бірақ сізге тек орталық қондырғы қажет болуы мүмкін

433 МГц таратқыш/қабылдағыш жұбы. Бұл типтегі жобаларда жиі қолданылатындар осылар сияқты. Байланыстырылған сияқты бес пакетті сатып алу сізге бірнеше қосалқы бөлшектердің болуын қамтамасыз етеді

433 МГц қашықтан басқарылатын розеткалардың жиынтығы. Мен ұсынатындарды қолдандым, бірақ көптеген модельдер бар. Тек олардың осы жиілікте жұмыс жасайтынына көз жеткізіңіз

Кейбір тізбектер үшін керек-жарақтар. Мен схеманы құру процесін мүмкіндігінше жеңілдету үшін тақтаны және бірнеше секіргіш кабельдерді қолдануды ұсынамын.

[Егер сіз осы өнімдердің кез келгенін сатып алуды шешсеңіз, егер сіз жоғарыда көрсетілген сілтемелерді қолдана отырып, листингке кірсеңіз, мен өте риза болар едім - осылайша мен сізге ешқандай пайдасыз пайданың аз ғана бөлігін аламын!]

1 -қадам: Қабылдағыш қондырғысын орнату

Қабылдағыш қондырғысын орнату
Қабылдағыш қондырғысын орнату

Пиді қашықтан басқарылатын ұяларға командалар жіберу үшін қолданбас бұрын, олар қандай нақты сигналдарға жауап беретінін білуіңіз керек. Қашықтан басқарылатын розеткалардың көпшілігі белгілі бір қондырғыларды қосуға немесе өшіруге болатын тұтқамен жеткізіледі. Мен сатып алғандарға келетін болсақ, телефон тұтқасында ҚОСУ/ӨШІРУ түймелерінің төрт қатары бар, олардың әрқайсысы белгілі бір розеткаға ON немесе OFF сигналын жібереді.

Бұл жерде сұрақ туындайды - қай түйме қай розеткаға сәйкес келетінін қалай білеміз? Бұл шын мәнінде сізде бар модельге байланысты. Розетка стилін таңдаудың негізгі себептерінің бірі (кіріспеде көрсетілген) - бұл қондырғыларды тұтқаның ON/OFF түймелерінің белгілі бір жиынтығына жауап беру үшін физикалық коммутатормен конфигурациялауға болады. Бұл сонымен қатар розеткаларды үйдің айналасындағы электр розеткасынан ажыратуға және жылжытуға болатынын білдіреді, өйткені әрбір қондырғы әрқашан бірдей ҚОСУ/ӨШІРУ сигналдарына жауап береді.

Розеткалар телефонмен қалай әрекеттесетінін білгеннен кейін, телефонмен жіберілетін кодтарды «иіскеу» үшін 433 МГц қабылдағыш блогын (жоғарыдағы суретте) пайдалану қажет болады. Бұл кодтардың толқындық формаларын жазып алған соң, оларды Python көмегімен қайталауға және таратқыш қондырғысы арқылы жіберуге болады.

Мұнда істеу керек бірінші нәрсе - ресивердегі түйреуіштерді ПИ -дегі дұрыс GPIO түйреуіштеріне жалғау. Қабылдау блогында төрт түйреуіш бар, бірақ олардың үшеуі ғана қажет. Менің ойымша, орталық түйреуіштердің екеуі де бірдей шығыс береді, сондықтан сіз олардың біреуіне қосылуыңыз керек (егер сіз алынған сигналдарды екі бөлек GPIO түйреуішіне жібергіңіз келмесе).

Жоғарыдағы сурет сымдарды қысқаша түрде көрсетеді. Қабылдағыштағы әрбір түйреуішті Pi -дегі сәйкес істікке тікелей қосуға болады. Процесті біршама талғампаз ету үшін мен тақта мен секіргіш кабельдерді қолданамын. Назар аударыңыз, орталық қабылдағыш түйреуіштерінің біріне қосылу үшін кез келген GPIO деректер түйреуішін таңдауға болады. Мен Pi тақырыбында '23' деп белгіленген түйреуішті қолдандым.

МАҢЫЗДЫ: Егер жоғарыдағы суреттегі '3v3' деп белгіленген түйреуішті Pi -дегі жоғары кернеу түйреуішіне (мысалы, 5в) қоссаңыз, сіз Pi зақымдайтын боларсыз, себебі GPIO түйреуіштері 3v3 жоғары кернеуге шыдай алмайды. Сонымен қатар, сіз оны 5 вольттан қуаттандырып, қауіпсіз кернеуді DATA түйреуішіне жіберу үшін кернеу бөлгішті орната аласыз.

Бұл кернеуде ресивердің диапазоны өте үлкен болмайды, әсіресе антенна қосылмаған жағдайда. Алайда, бұл жерде сізге ұзақ қашықтық қажет емес - егер қабылдағыш сигналдарды бір -бірінің қасында ұстаса, тұтқадан қабылдай алады, бұл бізге қажет.

2 -қадам: телефон тұтқасының кодтарын иіскеу

Тұтқа кодтарын иіскеу
Тұтқа кодтарын иіскеу

Енді сіздің қабылдағыш Pi -ге қосылғандықтан, сіз бұл жобаның бірінші қызықты кезеңін - иісті бастай аласыз. Бұл әр түйме басылған кезде телефон арқылы берілетін сигналды тіркеу үшін бекітілген Python сценарийін қолдануды қамтиды. Сценарий өте қарапайым, мен оны іске қоспас бұрын қарап шығуды ұсынамын - бұл жобаның мәні - сіз басқа біреудің кодын соқыр түрде іске қоспайсыз!

Бұл процесті бастамас бұрын, сізде сценарий сценарийін іске қосу үшін қажетті Python кітапханалары бар екеніне көз жеткізіңіз. Олар сценарийдің жоғарғы жағында көрсетілген:

datetime импорттау datetime

matplotlib.pyplot -ты pyplot ретінде импорттау RPi. GPIO -ны GPIO ретінде импорттау

RPi. GPIO және datetime кітапханалары менің Raspbian таратылымына қосылды, бірақ мен matplotlib кітапханасын келесідей орнатуым керек болды:

sudo apt-get python-matplotlib орнатыңыз

Бұл кітапхана - бұл жиі қолданылатын графикалық кітапхана, бұл жобаның сыртында да өте пайдалы, сондықтан оны орнату зиян тигізбейді! Кітапханалар жаңартылғаннан кейін сіз деректерді жазуды бастауға дайынсыз. Міне, сценарий қалай жұмыс істейді:

Ол іске қосылған кезде ('python ReceiveRF.py' пәрменін қолдана отырып), ол анықталған GPIO түйінін деректер кірісі ретінде конфигурациялайды (әдепкі бойынша 23 -пин). Содан кейін ол түйреуіштен үнемі үлгі алады және цифрлық 1 немесе 0 қабылдайтынын тіркейді. Бұл белгіленген уақытқа жалғасады (әдепкі бойынша 5 секунд). Осы уақытқа жеткенде, сценарий деректерді жазуды тоқтатады және GPIO кірісін жабады. Содан кейін ол сәл кейінгі өңдеуді орындайды және алынған кіріс мәнін уақытпен салыстырады. Тағы да, егер сізде сценарий не істеп жатқаны туралы сұрақтарыңыз болса, сіз олардың қалай жұмыс істейтінін қарап шыққаннан кейін оларға жауап бере аласыз. Мен кодты мүмкіндігінше оқылатын және қарапайым етуге тырыстым.

Сценарийде ** жазудың басталғанын ** көрсеткен кезде, сізге назар аудару керек. Бұл хабарлама пайда болғаннан кейін, телефон тұтқасындағы түймелердің бірін бір секундтай басып тұру керек. Оны ресиверге жақын ұстаңыз. Сценарий жазуды аяқтағаннан кейін, ол матплотлибті жазу аралығы кезінде алған сигналдың графикалық толқындық формасын құру үшін қолданады. Назар аударыңыз, егер сіз Pi -ге PuTTY сияқты SSH клиенті арқылы қосылсаңыз, толқын пішінін көрсету үшін X11 қосымшасын ашу қажет болады. Мен бұл үшін xMing қолданамын (және менің Пи-ге қашықтан жұмыс үстелі сияқты басқа нәрселер үшін). Сюжетті көрсетуге рұқсат беру үшін, сценарийді іске қоспас бұрын xMing бағдарламасын бастаңыз және нәтижелердің пайда болуын күтіңіз.

Matplotlib терезесі пайда болғаннан кейін, сюжеттің қызығушылық аймағы айқын болуы керек. Терезенің төменгі жағындағы басқару элементтерін пайдаланып, түймені басып тұрып телефон тұтқасынан берілетін сигналдың жоғары және төмен деңгейін анықтай алмайынша үлкейтуге болады. Толық кодтың мысалы үшін жоғарыдағы суретті қараңыз. Сигнал, мүмкін, сигнал қабылданбайтын ұқсас уақыт кезеңдерімен бөлінген өте қысқа импульстерден тұратын болар. Бұл қысқа импульстар блогынан кейін ештеңе алынбайтын ұзақ кезең болады, содан кейін үлгі қайталанады. Кодтың бір данасына тиесілі үлгіні анықтағаннан кейін, осы беттің жоғарғы жағындағы скриншотты алыңыз және оны түсіндіру үшін келесі қадамға өтіңіз.

3 -қадам: Нәтиже сигналын транскрипциялау

Нәтиже сигналын транскрипциялау
Нәтиже сигналын транскрипциялау

Енді сіз белгілі бір түйменің сигналына сәйкес келетін кезеңдік максимумдар мен минимумдар блогын анықтадыңыз, оны сақтау мен түсіндіру әдісі қажет болады. Жоғарыда келтірілген сигнал мысалында сіз барлық сигнал блогын құрайтын тек екі ерекше үлгі бар екенін байқайсыз. Кейде сіз қысқа биіктіктен кейін ұзын төменді көресіз, ал кейде керісінше - ұзын биіктіктен кейін қысқа төмен. Мен өз сигналдарымды транскрипциялаған кезде келесі атау конвенциясын қолдануды шештім:

1 = қысқа_ұзақ + ұзын_ұйық0 = ұзақ_қысқаша + қысқа_ұйықтау

Таңбаланған толқын пішініне қайтадан қараңыз, сонда сіз менің нені білдіретінімді түсінесіз. Сіз сигналдағы эквивалентті үлгілерді анықтағаннан кейін, реттілікті құру үшін 1 және 0 санын санау жеткілікті. Транскрипция кезінде жоғарыдағы сигналды келесі түрде жазуға болады:

1111111111111010101011101

Енді телефонның басқа түймелеріне сәйкес келетін сигналдарды жазу және транскрипциялау үшін осы процесті қайталау қажет, және сіз процестің бірінші бөлігін аяқтадыңыз!

Сигналдарды таратқыш арқылы қайта жібермес бұрын, тағы біраз жұмыс бар. 1 немесе 0 -ге сәйкес келетін ең жоғары және төмен деңгейлер арасындағы уақыт өте маңызды және сіз «қысқа_жақ» немесе «ұзақ_ұзақтығы» қанша уақытқа созылатынын білетіндігіңізге көз жеткізуіңіз керек. Менің кодтарым үшін сигналдарды қайталау үшін алуым керек үш уақыт туралы ақпарат болды:

  • «Қысқа» интервалдың ұзақтығы, яғни 1 -дің басы немесе 0 -дің соңы.
  • «Ұзын» интервалдың ұзақтығы, яғни 1 -дің соңы немесе 0 -дің басы.
  • «Ұзартылған» интервалдың ұзақтығы. Мен телефон тұтқасын басып тұрғанда, сигнал блогының қайталанатын экземплярының арасында «ұзартылған_ өшіру» кезеңі болғанын байқадым. Бұл кідіріс синхрондау үшін қолданылады және бекітілген ұзақтығы бар.

Уақыттың осы мәндерін анықтау үшін матплотлиб терезесіндегі масштабтау функциясын қолдана отырып, масштабты үлкейтуге және курсорды сигналдың тиісті бөліктерінің үстіне қоюға болады. Терезенің төменгі жағындағы курсордың орналасуын оқу сигналдың әр бөлігінің ұзындығын, қысқа немесе ұзартылған интервалға сәйкес келетінін анықтауға мүмкіндік береді. Сюжеттің х осі уақытты көрсетеді, ал курсорды оқудың x компоненті секунд бірлігінде орналасқан. Мен үшін ені келесідей болды (секундтарда):

  • short_delay = 0.00045
  • long_delay = 0.00090 («қысқа» екі есе ұзын)
  • Extended_delay = 0,0096

4 -қадам: таратқыш қондырғысын орнату

Таратқыш қондырғыны баптау
Таратқыш қондырғыны баптау

Сіз кодтар мен уақыт туралы мәліметтерді жинағаннан кейін, қабылдағышты ажыратуға болады, себебі сізге қажет болмайды. Содан кейін жоғарыдағы суретте көрсетілгендей таратқышты тікелей Pi GPIO түйреуіштеріне қосуға болады. Мен таратқыш қондырғыларындағы түйреуіштердің таңбаланғанын білдім, бұл процесті жеңілдетеді.

Бұл жағдайда қондырғыны Pi -ден 5 вольтты қоректендіру арқылы қуаттандыруға болады, себебі DATA түйреуіші Pi сигналдарын жібермейді, тек оларды қабылдайды. Сондай -ақ, 5 вольтты қуат көзі 3в3 қоректендіруге қарағанда көбірек тарату диапазонын қамтамасыз етеді. Тағы да, сіз DATA түйреуішін Pi -дегі кез келген сәйкес істікке қосуға болады. Мен 23 түйреуішті қолдандым (ресивермен бірдей).

Мен ұсынатын тағы бір нәрсе - таратқыштың жоғарғы оң жағындағы кішкене тесікке антенна қосу. Мен ұзындығы 17 см түзу сымды қолдандым. Кейбір көздер ұқсас ұзындықтағы оралған сымды ұсынады. Мен қайсысы жақсы екенін білмеймін, бірақ тікелей сым менің шағын пәтерімде кез келген жерден розеткаларды қосуға/өшіруге жеткілікті диапазон береді. Антеннаны дәнекерлеу жақсы, бірақ мен пластмассаның бір бөлігін сымнан алып тастап, мысты тесіктен орап алдым.

Таратқыш сымды қосқаннан кейін, барлық аппараттық құралдарды орнату аяқталды! Енді үйдің айналасындағы розеткаларды орнатып, таратқыш бағдарламасын қарау ғана қалды.

5 -қадам: Pi көмегімен сигналдарды беру

Бұл жерде екінші Python сценарийі пайда болады. Ол бірінші сияқты қарапайым етіп жасалған, егер олай болмаса. Тағы да, оны жүктеп алып, кодты қараңыз. 3 -қадамда жазылған деректерге сәйкес дұрыс сигналдарды беру үшін сізге сценарийді өңдеу қажет болады, сондықтан қазір оған тез қарауға жақсы уақыт.

Бұл сценарийді іске қосу үшін қажет кітапханалар менің Pi-ге алдын ала орнатылған, сондықтан қосымша орнатудың қажеті жоқ. Олар сценарийдің жоғарғы жағында көрсетілген:

импорт уақыты

импорттау sys импорт RPi. GPIO ретінде GPIO

Кітапхананың импорты астында өңдеуге болатын ақпарат бар. Бұл әдепкі бойынша қалай көрінеді (бұл 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

Мұнда бізде сегіз кодтық жол бар (телефон тұтқасындағы қосу/өшіру түймелерінің әр жұбы үшін екеуі - сізде көп немесе аз кодтар болуы мүмкін), содан кейін 3 -қадамда анықталған уақыт туралы ақпараттың үш бөлігі бар. бұл ақпаратты дұрыс енгізді.

Сіз сценарийге енгізілген кодтарға/кідірістерге риза болғаннан кейін (егер қаласаңыз, код жолының айнымалыларының атын өзгертуге болады), сіз жүйені сынап көруге дайынсыз! Мұны жасамас бұрын, сценарийдегі transmit_code () функциясын қараңыз. Бұл жерде таратқышпен нақты өзара әрекеттесу пайда болады. Бұл функция аргумент ретінде код жолдарының біреуін жіберуді күтеді. Содан кейін ол GPIO шығысы ретінде анықталған түйреуішті ашады және код жолындағы әрбір таңбаны айналдырады. Содан кейін ол код жолына сәйкес келетін толқын пішінін құру үшін енгізілген уақыт ақпаратына сәйкес таратқышты қосады немесе өшіреді. Ол әр кодты жіберіп алу мүмкіндігін азайту үшін бірнеше рет жібереді (әдепкі бойынша 10) және телефон коды сияқты әр код блогы арасында ұзартылған_кідіріс қалдырады.

Сценарийді іске қосу үшін келесі командалық синтаксисті қолдануға болады:

python TransmitRF.py коды_1 коды_2…

Сценарийдің бір жүгірісімен бірнеше код жолдарын жіберуге болады. Мысалы, (a) және (b) ұяшықтарын қосу және (c) ұяшығын өшіру үшін сценарийді келесі пәрменмен іске қосыңыз:

python TransmitRF.py a_on b_on c_off

6 -қадам: Уақыт дәлдігі туралы ескерту

Жоғарыда айтылғандай, берілген/қосылатын импульстар арасындағы уақыт өте маңызды. TransmitRF.py сценарийі дұрыс импульстік интервалмен толқын пішінін құру үшін python's time.sleep () функциясын қолданады, бірақ бұл функция толық дәл емес екенін ескеру қажет. Сценарий келесі операцияны орындағанша күтуге болатын ұзақтығы процессордың жүктелуіне байланысты болуы мүмкін. Бұл TransmitRF.py әр кодты бірнеше рет жіберудің тағы бір себебі - time.sleep () функциясы кодтың берілген данасын дұрыс құра алмайтын жағдайда.

Менде кодтарды жіберуге қатысты time.sleep () мәселесі ешқашан болған емес. Менің білуімше, менің time.sleep () шамамен 0.1 мс қате жібереді. Мен мұны Pi -дің time.sleep () функциясының қаншалықты дәл екендігін бағалау үшін қолдануға болатын SleepTest.py сценарийі арқылы анықтадым. Менің қашықтан басқарылатын розеткаларым үшін ең қысқа кідіріс 0,45 мс болды. Мен айтқанымдай, мен жауап бермейтін розеткалармен проблемалар болған жоқ, сондықтан 0,45 ± 0,1 мс жеткілікті жақсы сияқты.

Кешіктіру дәлірек болуын қамтамасыз етудің басқа әдістері бар; Мысалы, сіз кодтарды жасау үшін арнайы PIC чипін қолдана аласыз, бірақ мұндай материалдар бұл оқулықтың ауқымынан тыс.

7 -қадам: Қорытынды

Қорытынды
Қорытынды

Бұл жоба Raspberry Pi көмегімен 433 МГц қашықтан басқарылатын розеткалар жиынтығының көмегімен қарапайымдылық пен мөлдірлікке негізделген кез келген электрлік құрылғыны басқару әдісін ұсынды. Бұл менің Pi -ді қолданған ең қызықты және икемді жоба, және оған шексіз қосымшалар бар. Міне, мен Pi -дің арқасында жасай алатын кейбір нәрселер:

  • Оятқышым сөнгенге дейін жарты сағат бұрын төсегімнің жанындағы электр жылытқышты қосыңыз.
  • Мен ұйықтағаннан кейін бір сағаттан кейін жылытқышты өшіріңіз.
  • Қайтадан ұйықтап қалмас үшін дабыл сөндірілген кезде менің төсегімнің жарығын қосыңыз.
  • және тағы басқалар…

Бұл тапсырмалардың көпшілігі үшін мен Linux ішіндегі crontab функциясын қолданамын. Бұл TransmitRF.py сценарийін белгілі бір уақытта іске қосу үшін автоматты жоспарланған тапсырмаларды орнатуға мүмкіндік береді. Сондай-ақ, Linux командасын бір реттік тапсырмаларды орындау үшін пайдалануға болады (мен үшін «sudo apt-get install at» көмегімен бөлек орнату қажет болды). Мысалы, қыздырғышты келесі күні таңертең дабыл сөндірілуінен жарты сағат бұрын қосу үшін маған тек теру қажет:

сағат 05:30

python TransmitRF.py c_on

Сіз бұл жобаны интернетте құрылғыларды басқару үшін Dropbox үй бақылау жүйесімен бірге пайдалана аласыз! Оқығаныңыз үшін рахмет, және егер сіз бір нәрсені түсіндіргіңіз келсе немесе пікіріңізбен бөліскіңіз келсе, түсініктеме жазыңыз!

Ұсынылған: