Orodha ya maudhui:

Rahisi ya Raspberry Pi 433MHz ya Utengenezaji wa Nyumbani: Hatua 7
Rahisi ya Raspberry Pi 433MHz ya Utengenezaji wa Nyumbani: Hatua 7

Video: Rahisi ya Raspberry Pi 433MHz ya Utengenezaji wa Nyumbani: Hatua 7

Video: Rahisi ya Raspberry Pi 433MHz ya Utengenezaji wa Nyumbani: Hatua 7
Video: Урок 68. Домашняя автоматизация: как управлять 16-канальным релейным модулем с помощью Arduino, управляя 16 нагрузками переменного тока. 2024, Novemba
Anonim
Rahisi ya Raspberry Pi 433MHz ya Utengenezaji wa Nyumbani
Rahisi ya Raspberry Pi 433MHz ya Utengenezaji wa Nyumbani

Mafunzo haya ni moja kati ya mengi linapokuja suala la kutumia Raspberry Pi kudhibiti vifaa visivyo na waya karibu na nyumba. Kama wengine wengi, itakuonyesha jinsi ya kutumia jozi rahisi ya mpitishaji / mpokeaji iliyounganishwa na Pi yako kuingiliana na vifaa vinavyofanya kazi kwenye bendi ya masafa ya redio ya 433MHz. Itakuonyesha haswa jinsi ya kuwasha au kuzima kifaa chochote cha umeme ukitumia Pi yako kwa kupeleka amri kwa seti ya soketi za nguvu zinazodhibitiwa kijijini za 433MHz.

Kwa nini niliunda mafunzo haya ikiwa mengi tayari yapo? Hasa kwa sababu mafunzo mengine yote niliyoyapata yalionekana kuzidisha mambo, haswa kwa upande wa programu. Niligundua kuwa walitegemea sana maktaba za watu wa tatu, maandishi au vijikaratasi vya kificho kufanya kazi yote. Wengi hawangeelezea hata nambari ya msingi ilikuwa ikifanya nini - wangekuuliza usukume vipande viwili au vitatu vya programu kwenye Pi yako na kutekeleza amri nyingi, hakuna maswali yaliyoulizwa. Nilitaka kujaribu kutumia Pi yangu kuwasha na kuzima vifaa vya umeme kuzunguka nyumba yangu kwa kutumia seti ya soketi zilizodhibitiwa kijijini, lakini nilitaka kuunda toleo langu mwenyewe la mfumo ambao ningeweza kuelewa, kwa matumaini nikiondoa hitaji la tumia maktaba au hati za mtu mwingine.

Hiyo ndivyo mafunzo haya yanavyohusu. Upande wa programu ya mfumo huu una maandishi mawili rahisi ya chatu - moja ya kupokea na kurekodi ishara, na moja ya kupeleka ishara hizi kwenye soketi za umeme zisizo na waya. Upokeaji / usafirishaji halisi wa ishara unategemea tu maktaba rahisi ya RPi. GPIO ambayo, angalau kwangu, ilikuja kusanikishwa mapema na Raspbian. Maktaba hii pia inaweza kuingizwa moja kwa moja kwenye Python.

Kwa mradi huu utahitaji:

Pi ya Raspberry. Mfano wowote unapaswa kufanya kazi, nilitumia kitanzi cha kila mmoja, lakini labda unahitaji kitengo cha kati tu

Jozi ya mpitishaji / mpokeaji wa 433MHz. Zinazotumiwa sana katika aina hii ya mradi zinaonekana kuwa hizi. Kununua pakiti ya tano kama ile iliyounganishwa inahakikisha una vipuri vichache

Seti ya soketi za umeme zinazodhibitiwa kijijini 433MHz. Nilitumia hizi ambazo ningependekeza sana, lakini kuna mifano isitoshe inapatikana. Hakikisha tu wanafanya kazi kwenye masafa haya

Vifaa vingine vya ujenzi wa mzunguko. Napenda kupendekeza kutumia ubao wa mkate na nyaya zingine za kuruka ili kufanya mchakato wa ujenzi wa mzunguko iwe rahisi iwezekanavyo.

[Ukiamua kununua yoyote ya bidhaa hizi, ningeithamini sana ikiwa utafikia orodha ukitumia viungo hapo juu - kwa njia hiyo, nitapata sehemu ndogo ya faida bila gharama zaidi kwako!]

Hatua ya 1: Kuanzisha Kitengo cha Mpokeaji

Kuanzisha Kitengo cha Mpokeaji
Kuanzisha Kitengo cha Mpokeaji

Kabla ya kutumia Pi yako kutuma maagizo kwenye soketi zinazodhibitiwa na kijijini, unahitaji kujua ni ishara zipi wanazojibu. Soketi nyingi zinazodhibitiwa na kijijini husafirisha kwa simu ambayo inaweza kutumika kuwasha au kuzima vitengo maalum. Katika kesi ya zile nilizonunua, simu ya mkononi ina safu nne za vifungo vya ON / OFF vilivyounganishwa, ambayo kila moja hutuma ishara ya ON au OFF kwa kitengo fulani cha tundu.

Hii inaleta swali - tunawezaje kujua ni vifungo gani vinavyolingana na tundu gani? Hii kwa kweli inategemea mfano ulio nao. Moja ya sababu kuu nilichagua mtindo wangu maalum wa tundu (iliyounganishwa katika utangulizi) ni kwamba vitengo vinaweza kusanidiwa na swichi ya mwili ili kufanya tundu fulani lijibu kwa seti fulani ya vifungo vya ON / OFF kwenye simu. Hii inamaanisha pia kuwa unaweza kufungua na kusogeza soketi kuzunguka nyumba ukijua kuwa kila kitengo kitajibu kila siku ishara sawa za ON / OFF.

Mara tu unapogundua jinsi soketi zako zinaingiliana na simu, utahitaji kutumia kitengo chako cha mpokeaji cha 433MHz (pichani hapo juu) 'kunusa' nambari zinazotumwa na simu. Mara tu unaporekodi fomati za mawimbi ya nambari hizi, unaweza kuziiga kwa kutumia Python na kuzituma kwa kutumia kitengo cha mpitishaji.

Jambo la kwanza kufanya hapa ni kuweka pini kwenye kipokezi chako kwa pini sahihi za GPIO kwenye Pi. Kitengo cha mpokeaji kina pini nne, lakini ni tatu tu zinahitajika. Nadhani pini zote mbili za kati hutoa pato sawa, kwa hivyo unahitaji tu kuungana na moja yao (isipokuwa ikiwa unataka kusambaza ishara zilizopokelewa kwa pini mbili tofauti za GPIO).

Picha hapo juu inafupisha wiring. Kila pini kwenye mpokeaji inaweza kushonwa moja kwa moja kwa pini inayolingana kwenye Pi. Ninatumia kebo ya mkate na sketi za kuruka ili kufanya mchakato kuwa wa kifahari zaidi. Kumbuka kuwa unaweza kuchagua pini yoyote ya data ya GPIO kuungana na yoyote ya pini za mpokeaji wa kati. Nilitumia pini iliyowekwa alama kama '23' kwenye kichwa changu cha Pi.

MUHIMU: Ukiunganisha pini iliyowekwa alama '3v3' kwenye picha hapo juu na pini ya voltage ya juu kwenye Pi (k. 5v), labda utaharibu Pi kwani pini za GPIO haziwezi kuvumilia voltages zilizo juu ya 3v3. Vinginevyo, unaweza kuiweka nguvu na 5v na usanidi mgawanyiko wa voltage ili kutuma voltage salama kwenye pini ya DATA.

Masafa ya mpokeaji hayatakuwa makubwa sana katika voltage hii, haswa ikiwa antena haijaunganishwa. Walakini, hauitaji masafa marefu hapa - maadamu mpokeaji anaweza kuchukua ishara kutoka kwa kifaa cha mkono wakati zinashikiliwa karibu na kila mmoja, ndio tu tunahitaji.

Hatua ya 2: Kunusa Nambari za Mikono

Kunusa Nambari za Mikono
Kunusa Nambari za Mikono

Sasa kwa kuwa mpokeaji wako ameunganishwa kwa waya, unaweza kuanza hatua ya kwanza ya kusisimua ya mradi huu - kunusa. Hii inajumuisha kutumia hati iliyowekwa ya Python kurekodi ishara inayosambazwa kwa simu wakati kila kitufe kinabanwa. Hati ni rahisi sana, na ningependekeza sana uiangalie kabla ya kuiendesha - baada ya yote, ukweli wa mradi huu ni kwamba hautaendesha tu nambari ya mtu mwingine!

Kabla ya kuanza mchakato huu, utahitaji kuhakikisha kuwa una maktaba za Python zinahitajika kuendesha hati ya kunusa. Zimeorodheshwa juu ya hati:

kutoka wakati wa kuingiza wakati wa kuingiza

kuagiza matplotlib.pyplot kama pyplot kuagiza RPi. GPIO kama GPIO

Maktaba ya RPi. GPIO na wakati wa kujumuishwa zilijumuishwa na usambazaji wangu wa Raspbian, lakini ilibidi niweke maktaba ya matplotlib kama ifuatavyo:

Sudo apt-get kufunga python-matplotlib

Maktaba hii ni maktaba ya upangaji wa grafu inayotumika sana ambayo ni muhimu sana hata nje ya mradi huu, kwa hivyo kuisakinisha haiwezi kuumiza! Mara tu maktaba zako zimesasishwa, uko tayari kuanza kurekodi data. Hivi ndivyo hati inavyofanya kazi:

Inapoendeshwa (kwa kutumia amri 'python ReceiveRF.py'), itasanidi pini ya GPIO iliyoelezewa kama uingizaji wa data (pini 23 kwa chaguo-msingi). Kisha itaendelea kubonyeza pini na kuingia ikiwa inapokea dijiti 1 au 0. Hii inaendelea kwa muda uliowekwa (sekunde 5 kwa chaguo-msingi). Wakati huu wa kikomo utakapofikiwa, hati itaacha kurekodi data na itazima uingizaji wa GPIO. Halafu inafanya usindikaji mdogo wa baada ya muda na inaandaa nambari ya pembejeo iliyopokelewa dhidi ya wakati. Tena, ikiwa una maswali juu ya kile maandishi yanafanya, labda unaweza kujibu mwenyewe baada ya kuangalia jinsi inavyofanya kazi. Nimejaribu kufanya nambari iweze kusomeka na rahisi iwezekanavyo.

Unachohitaji kufanya ni kuangalia wakati hati inaonyesha kwamba ** Imeanza kurekodi **. Mara tu ujumbe huu unapoonekana, unapaswa kubonyeza na kushikilia moja ya vifungo kwenye simu kwa karibu sekunde. Hakikisha kuishikilia karibu na mpokeaji. Hati baada ya kumaliza kurekodi, itatumia matplotlib kupanga muundo wa mawimbi ya ishara ambayo imepokea wakati wa kipindi cha kurekodi. Tafadhali kumbuka, ikiwa umeunganishwa na Pi yako ukitumia mteja wa SSH kama vile PuTTY, utahitaji pia kufungua programu ya X11 ili kuruhusu muundo wa wimbi uonyeshwe. Ninatumia xMing kwa hii (na kwa vitu vingine kama vile kusanidi-kijijini kwenye Pi yangu). Kuruhusu njama kuonyeshwa, anza tu xMing kabla ya kutumia hati na subiri matokeo yatokee.

Mara tu dirisha lako la matplotlib linapoonekana, eneo la kupendeza ndani ya njama hiyo linapaswa kuwa dhahiri sana. Unaweza kutumia vidhibiti chini ya dirisha kuvuta hadi uweze kuchagua kilele na chini ya ishara inayosambazwa kwa simu wakati kitufe kilikuwa kimeshikiliwa chini. Tazama picha hapo juu kwa mfano wa nambari kamili. Ishara labda itakuwa na kunde fupi sana zilizotengwa na vipindi sawa vya wakati ambapo hakuna ishara inayopokelewa. Kizuizi hiki cha kunde fupi labda kitafuatwa na kipindi kirefu zaidi ambapo hakuna kitu kinachopokelewa, baada ya hapo muundo utarudia. Mara tu unapogundua muundo wa mfano mmoja wa nambari, chukua picha ya skrini kama hiyo juu ya ukurasa huu, na uendelee hatua inayofuata kuifasiri.

Hatua ya 3: Kuandika Ishara inayosababisha

Kuandika Ishara inayosababisha
Kuandika Ishara inayosababisha

Sasa kwa kuwa umetambua kizuizi cha urefu wa juu na urefu unaolingana na ishara ya kitufe fulani, utahitaji njia ya kuhifadhi na kutafsiri. Katika mfano wa ishara hapo juu, utaona kuwa kuna mifumo miwili tu ya kipekee ambayo hufanya kizuizi cha ishara nzima. Wakati mwingine unaona ya juu fupi ikifuatiwa na ya chini ndefu, na wakati mwingine ni kinyume - ndefu ndefu ikifuatiwa na chini fupi. Wakati nilikuwa ninaandika ishara zangu, niliamua kutumia mkutano ufuatao wa kutaja majina:

1 = fupi_kwa + muda mrefu_off0 = ndefu_kwa + muda mfupi

Angalia tena muundo wa mawimbi ulioitwa, na utaona ninachomaanisha. Mara tu unapogundua mifumo sawa katika ishara yako, unachohitajika kufanya ni kuhesabu 1 na 0 ili kujenga mlolongo. Wakati unasajiliwa, ishara hapo juu inaweza kuandikwa kama ifuatavyo:

1111111111111010101011101

Sasa unahitaji tu kurudia mchakato huu kurekodi na kunakili ishara zinazoambatana na vifungo vingine kwenye simu yako, na umekamilisha sehemu ya kwanza ya mchakato!

Kabla ya kutuma tena ishara kwa kutumia mtumaji, kuna kazi zaidi ya kufanya. Muda kati ya viwango vya juu na chini unaolingana na 1 au 0 ni muhimu sana, na unahitaji kuhakikisha kuwa unajua ni muda gani 'short_on' au 'long_off' inadumu. Kwa nambari zangu, kulikuwa na vipande vitatu vya habari ya muda nilihitaji kuchimba ili kuiga ishara:

  • Muda wa muda 'mfupi', i.e. mwanzo wa 1 au mwisho wa 0.
  • Muda wa muda "mrefu", yaani mwisho wa 1 au mwanzo wa 0.
  • Muda wa muda wa 'kupanuliwa'. Niligundua kuwa wakati nilishikilia kitufe chini kwenye kifaa cha mkono, kulikuwa na kipindi cha 'kupanuliwa "kati ya kila mfano wa mara kwa mara wa kizuizi cha ishara. Ucheleweshaji huu hutumiwa kwa usawazishaji na una muda uliowekwa.

Kuamua maadili haya ya muda, unaweza kutumia kazi ya kuvuta kwenye dirisha la matplotlib ili kuvuta njia yote na uweke mshale juu ya sehemu husika za ishara. Usomaji wa eneo la kielekezi chini ya dirisha inapaswa kukuwezesha kuamua ni kiasi gani kila sehemu ya ishara hiyo inalingana na muda mrefu, mfupi au mrefu. Kumbuka kuwa mhimili wa x wa kiwanja unawakilisha wakati, na sehemu ya x ya kusoma mshale iko katika vitengo vya sekunde. Kwangu, upana ulikuwa kama ifuatavyo (kwa sekunde):

  • kuchelewa_kucheleweshwa = 0.00045
  • kuchelewa_kucheleweshwa = 0.00090 (mara mbili ndefu kama 'fupi')
  • kupanuliwa_kucheleweshwa = 0.0096

Hatua ya 4: Kuanzisha Kitengo cha Mpitishaji

Kuanzisha Kitengo cha Kusambaza
Kuanzisha Kitengo cha Kusambaza

Mara tu unapokusanya nambari zako za data na muda, unaweza kukata kitengo chako cha mpokeaji kwani hautahitaji tena. Kisha unaweza kuweka waya moja kwa moja kwenye pini za Pi GPIO kama inavyoonekana kwenye picha hapo juu. Nimegundua kuwa pini kwenye vitengo vya transmitter zimeandikwa, ambayo inafanya mchakato kuwa rahisi.

Katika kesi hii, ni sawa kuwezesha kitengo kutumia usambazaji wa 5v kutoka kwa Pi kwani pini ya DATA haitatuma ishara kwa Pi, ikiwapokea tu. Pia, usambazaji wa umeme wa 5v utatoa anuwai zaidi ya usambazaji kuliko kutumia usambazaji wa 3v3. Tena, unaweza kuunganisha pini ya DATA kwa pini yoyote inayofaa kwenye Pi. Nilitumia pin 23 (sawa na ya mpokeaji).

Kitu kingine ninachopendekeza kufanya ni kuongeza antena kwenye shimo dogo upande wa kulia wa mtoaji. Nilitumia kipande cha waya moja kwa moja urefu wa 17cm. Vyanzo vingine vinapendekeza waya iliyofungwa ya urefu sawa. Sina hakika ni ipi bora, lakini waya iliyonyooka hutoa anuwai ya kutosha kuniwasha / kuzima soketi kutoka eneo lolote kwenye gorofa yangu ndogo. Ni bora kugeuza antena, lakini niliondoa tu plastiki kutoka kwa waya na kufunga shaba kupitia shimo.

Mara tu mtumaji anapo waya, hiyo ndio usanidi wa vifaa umefanywa! Kitu pekee kilichobaki kufanya sasa ni kuweka soketi zako kuzunguka nyumba na uangalie programu ya kusambaza.

Hatua ya 5: Kusambaza Ishara Kutumia Pi

Hapa ndipo hati ya pili ya Python inakuja. Imeundwa kuwa rahisi kama ya kwanza, ikiwa sio zaidi. Tena, tafadhali pakua na uangalie juu ya nambari. Utahitaji kuhariri hati ili kupitisha ishara sahihi kulingana na data uliyorekodi katika hatua ya 3, kwa hivyo sasa ni wakati mzuri wa kuiangalia haraka.

Maktaba zinahitajika kuendesha hati hii zote zilikuwa zimesanikishwa mapema kwenye Pi yangu, kwa hivyo hakuna usanikishaji zaidi ulihitajika. Zimeorodheshwa juu ya hati:

muda wa kuagiza

kuagiza sys kuagiza RPi. GPIO kama GPIO

Chini ya uagizaji wa maktaba kuna habari ambayo utahitaji kuhariri. Hivi ndivyo inavyoonekana kwa chaguo-msingi (hii ndio habari inayolingana na soketi zangu kama ilivyoamua kutumia hatua ya 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

Hapa tuna kamba nane za nambari (mbili kwa kila jozi ya vifungo vya kuwasha / kuzima kwenye kifaa changu cha mkono - unaweza kuwa na nambari zaidi au chache) ikifuatiwa na vipande vitatu vya habari vya muda pia vilivyoamuliwa katika hatua ya 3. Chukua muda kuhakikisha una aliingiza habari hii kwa usahihi.

Mara tu unapofurahi na nambari / ucheleweshaji ulioingia kwenye hati (unaweza kutaja vigeuzi vya msimbo ukipenda), uko tayari sana kujaribu mfumo! Kabla ya kufanya, angalia transmit_code () kazi kwenye hati. Hapa ndipo mwingiliano halisi na mtoaji hutokea. Kazi hii inatarajia moja ya kamba za kificho kutumwa kama hoja. Halafu inafungua pini iliyofafanuliwa kama pato la GPIO na vitanzi kupitia kila tabia kwenye kamba ya nambari. Halafu inageuza au kuzima mtumaji kulingana na habari ya muda uliyoingiza ili kuunda muundo wa wimbi unaofanana na kamba ya nambari. Inatuma kila nambari mara kadhaa (10 kwa chaguo-msingi) ili kupunguza nafasi ya kukosa, na huacha kuchelewesha kati ya kila kizuizi cha nambari, kama simu ya mkono.

Ili kuendesha hati, unaweza kutumia sintaksia ya amri ifuatayo:

chatu TransmitRF.py code_1 code_2…

Unaweza kusambaza kamba nyingi za msimbo na kukimbia moja kwa hati. Kwa mfano, kuzima soketi (a) na (b) na tundu (c) mbali, endesha hati na amri ifuatayo:

chatu TransmitRF.py a_on b_on c_off

Hatua ya 6: Ujumbe juu ya Usahihi wa Wakati

Kama ilivyoelezwa, muda kati ya kunde zinazosambazwa / za kuzima ni muhimu sana. Hati ya TransmitRF.py hutumia kazi ya chatu.sleep () kujenga muundo wa mawimbi na vipindi sahihi vya kunde, lakini ikumbukwe kwamba kazi hii sio sahihi kabisa. Urefu ambao husababisha hati kusubiri kabla ya kutekeleza operesheni inayofuata inaweza kutegemea mzigo wa processor kwa papo hapo. Hiyo ni sababu nyingine kwa nini TransmitRF.py hutuma kila nambari mara kadhaa - ikiwa kesi ya saa.sleep () haiwezi kuunda vizuri mfano wa nambari.

Binafsi sijawahi kuwa na shida na time.sleep () linapokuja suala la kutuma nambari. Ninajua hata hivyo kuwa time.sleep () yangu huwa na kosa la karibu 0.1ms. Niliamua hii kwa kutumia hati iliyoambatanishwa ya SleepTest.py ambayo inaweza kutumika kutoa makadirio ya wakati sahihi wa kazi ya Pi yako. Kwa soketi zangu zinazodhibitiwa kijijini, ucheleweshaji mfupi zaidi nilihitaji kutekeleza ulikuwa 0.45ms. Kama nilivyosema, sikuwa na shida na soketi zisizosikika, kwa hivyo inaonekana kama 0.45 ± 0.1ms inatosha.

Kuna njia zingine za kuhakikisha kuwa ucheleweshaji ni sahihi zaidi; kwa mfano, unaweza kutumia Chip ya kujitolea ya PIC kutoa nambari, lakini vitu kama hivyo viko nje ya wigo wa mafunzo haya.

Hatua ya 7: Hitimisho

Hitimisho
Hitimisho

Mradi huu umewasilisha njia ya kudhibiti kifaa chochote cha umeme kwa kutumia Raspberry Pi na seti ya soketi zinazodhibitiwa kijijini za 433MHz, kwa kuzingatia unyenyekevu na uwazi. Huu ni mradi wa kusisimua na rahisi sana ambao nimetumia Pi yangu, na kuna matumizi yasiyo na kikomo kwa hiyo. Hapa kuna mambo kadhaa ambayo ninaweza sasa kufanya shukrani kwa Pi yangu:

  • Washa hita ya umeme karibu na kitanda changu nusu saa kabla ya kengele yangu kuzima.
  • Zima hita saa moja baada ya kulala.
  • Washa taa yangu ya kitanda wakati kengele yangu inapolia ili nisije kulala tena.
  • na mengi zaidi…

Kwa kazi nyingi hizi, ninatumia kazi ya crontab ndani ya Linux. Hii hukuruhusu kuanzisha kazi zilizopangwa kiotomatiki kuendesha hati ya TransmitRF.py kwa nyakati maalum. Unaweza pia kutumia Linux kwa amri ya kuendesha kazi moja (ambayo, kwangu, ilihitaji kusanikishwa kando kwa kutumia 'sudo apt-get install at'). Kwa mfano, kuwasha hita yangu kwa nusu saa kabla ya kengele yangu kuzima asubuhi iliyofuata, ninachohitaji kufanya ni kuchapa:

saa 05:30

chatu TransmitRF.py c_on

Unaweza pia kutumia mradi huu kwa kushirikiana na mfumo wangu wa ufuatiliaji wa Dropbox nyumbani kudhibiti vifaa kwenye wavuti! Asante kwa kusoma, na ikiwa ungependa kufafanua kitu au kushiriki maoni yako, tafadhali weka maoni!

Ilipendekeza: