Talaan ng mga Nilalaman:

UChip - Serial Over IR !: 4 Hakbang
UChip - Serial Over IR !: 4 Hakbang

Video: UChip - Serial Over IR !: 4 Hakbang

Video: UChip - Serial Over IR !: 4 Hakbang
Video: ТАКОВ МОЙ ПУТЬ В L4D2 2024, Nobyembre
Anonim
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!

Ang komunikasyon sa wireless ay naging isang pangunahing tampok sa aming mga proyekto sa kasalukuyan at pinag-uusapan ang tungkol sa wireless, ang unang bagay na naisip ko ay Wi-Fi o BT, ngunit ang paghawak ng mga Wi-Fi o BT na mga protocol sa komunikasyon ay hindi isang madaling gawain at gumugugol ng maraming ng mga mapagkukunan ng MCU, iniiwan ang maliit na puwang para sa pag-coding ng aking aplikasyon. Samakatuwid, madalas akong nag-opt para sa isang panlabas na Wi-Fi / BT module na serial na konektado sa microcontroller upang hatiin ang mga tungkulin at makakuha ng mas mataas na kalayaan.

Gayunpaman, kung minsan ang Wi-Fi at BT ay "labis na paggamit" para sa ilang mga application na nangangailangan ng mababang bitrate at maikling distansya ng komunikasyon. Bukod dito, ang paggamit ng Wi-Fi o BT ay nagpapahiwatig ng pangangailangan ng pagkonekta sa iyong Smartphone o aparato na may wastong pagpapatotoo.

Isipin na kailangan mo lamang i-on / i-off ang isang panlabas na ilaw, o baguhin ang intensity ng lampara, o magbukas ng isang de-koryenteng gate. Mahalaga bang gamitin ang Wi-Fi o BT?

Nakasalalay sa kapaligiran at mga application, ang wireless na komunikasyon sa paglipas ng IR (Infrared) haba ng daluyong ay maaaring maging madaling gamiting. Ang isang Serial over IR, ipinatupad na may ilang mga panlabas na bahagi (3 mga discrete na sangkap!), At uChip (isang napakaliit na board ng Arduino na katugma) ay maaaring ang solusyon na iyong hinahanap!

Bill of Materials (para sa isang aparato ng Tx-Rx):

1 x uChip

1 x IR LED: pagkakaroon ng rurok ng emission sa 950nm

1 x TSOP-38238 (ng katumbas)

1 x 1KOhm Resistor

Hardware

1 x pisara / board board

1 x Black Plastic Tube: panloob na lapad ng parehong laki ng IR LED, kinakailangan ang tubo upang maiwasan ang cross-talk sa TSOP receiver.

1 x Aluminium Foil (3cm x 3 cm)

1 x Tape

TIP: Maaari kang gumawa ng isang aparato na TX-lamang o RX kung sakaling kailangan mo ng isang direksyon na komunikasyon sa pamamagitan ng pag-alis ng hindi kinakailangang RX / TX hardware mula sa circuit o paganahin / huwag paganahin ang kaugnay na code sa sketch.

Hakbang 1: Mga kable

Kable
Kable
Kable
Kable
Kable
Kable

Wire ang mga sangkap nang magkasama nang naaayon sa eskematiko.

Ang ilang mga tala sa simpleng eskematiko. Dahil ang TSOP-38238 ay nagbibigay-daan sa isang supply ng kuryente mula sa 2.5V hanggang 5V at sumisipsip ng 0.45mA nang higit pa (nahanap mo ang datasheet DITO), papalakasin ko ang receiver gamit ang dalawang mga pin, na magbibigay ng ground at power supply ayon sa pagkakabanggit. Pinapayagan nitong i-on / i-off ang tatanggap ayon sa demand at isang napaka-simpleng pag-setup ng mga kable ng hardware. Bukod dito, kung sakaling kailangan mo ng isang direksyon na komunikasyon maaari kang pumili kung gumawa ng isang (Tx / Rx) -nang aparato sa pamamagitan lamang ng hindi paganahin / paganahin ang TSOP-38238.

Paano gumagana ang circuit?

Ito ay medyo simple. Ang TSOP output pin ay hinila pababa kapag nakita ng sensor ang isang tren na 6 na pulso o higit pa sa 38KHz, sa kabilang banda ay nakuha ito nang mataas kapag walang ganoong signal. Samakatuwid, upang maipadala ang serial data sa paglipas ng IR, kung ano ang ginagawa ng circuit ay pinapagana ang LED anode na may isang 38KHz PWM na binago gamit ang TX serial signal na kumukuha ng mababa sa LED cathode.

Dahil dito, sa isang mataas na antas ng serial TX0, ang LED ay hindi kampi o kampi sa baligtad (walang pulso) at ang TSOP output pin ay hinila ng mataas. Paghahatid ng isang mababang antas sa serial, ang LED ay pinalakas at bumubuo ng IR pulses naaayon sa inilapat na signal ng PWM; samakatuwid, ang output ng TSOP ay hinila pababa.

Dahil ang paghahatid ay direkta (0-> 0 at 1-> 1) hindi na kailangan ng mga inverters o iba pang lohika sa panig ng tatanggap.

Kinokontrol ko ang LED optical output power sa pamamagitan ng pagpili ng PWM duty cycle alinsunod sa application. Kung mas mataas ang cycle ng tungkulin, mas mataas ang kapangyarihan ng output ng optikal at samakatuwid, mas lalo mong maipapadala ang iyong mensahe.

Tandaan na kailangan pa rin nating makabuo ng mga pulso! Sa gayon, hindi ka dapat pumunta sa itaas ng 90% na cycle ng tungkulin, kung hindi man ay hindi matutukoy ng TSOP ang signal bilang mga pulso.

Kailangan mo ba ng higit na lakas?

Upang madagdagan ang kasalukuyang, maaari ba nating mabawasan ang halaga ng 1kOhm risistor?

Siguro, huwag lang masyadong hinihingi! Ang maximum na kasalukuyang nakukuha mo mula sa isang pin ng MCU ay limitado sa 7mA kapag hinihimok ang port pin na mas malakas kaysa sa normal (PINCFG. DRVSTR = 1 at VDD> 3V) tulad ng nakasaad sa SAMD21 datasheet.

Gayunpaman, ang karaniwang pagsasaayos (na kung saan ay isa na pinagtibay ng mga aklatan ng Arduino IDE bilang default) ay naglilimita sa kasalukuyang sa 2mA. Samakatuwid, ang paggamit ng 1kOhm ay nagbibigay na ng kasalukuyang limitasyon sa mga default na setting!

Ang pagdaragdag ng kasalukuyang ay hindi lamang isang bagay ng mga de-koryenteng sangkap. Sa madaling sabi:

  • Baguhin ang risistor (na ang minimum na halaga ay limitado sa tinatayang 470Ohm -> VDD / 470 ~ 7mA);
  • Itakda ang kaukulang PORT-> PINCFG-> DRVSTR sa 1;

Ibibigay ko ang code kasama ang tampok na ito sa hinaharap na pag-update.

Ngunit tandaan, ang paglubog at pag-draining ng kasalukuyang mula sa mga pin ng MCU na malapit sa mga limitasyon nito ay hindi isang mahusay na diskarte. Sa katunayan, binabaan nito ang buhay at pagiging maaasahan ng MCU. Samakatuwid, iminumungkahi kong panatilihin ang normal na lakas ng pagmamaneho para sa pangmatagalang paggamit.

Hakbang 2: Programming

I-load ang sketch na "IRSerial.ino" sa uChip (o ang Arduino compatible board na iyong ginagamit).

Kung sakaling kailanganin mong palitan ang pin na bumubuo ng PWM, tiyaking gumagamit ka ng isang pin na konektado sa isang TCC timer, dahil ang bersyon na ito ng code ay gagana lamang sa mga TCC timer (suriin ang "variant.c" ng iyong board para sa impormasyong ito). Idagdag ko ang code upang magamit din ang mga TC timer sa mga pag-update sa hinaharap.

Ang code ay medyo simple. Matapos itakda ang PIN_5 na mababa (nagbibigay ng TSOP GND) at mataas ang PIN_6 (pinapagana ang TSOP), sinisimulan ng MCU ang PWM sa PIN_1, itinatakda ang tagal ng timer at nakuha kumpara nang naaayon sa kinakailangang pagbago ng dalas (sa aking kaso ito ay 38KHz) at tungkulin cycle (12.5% bilang default). Tapos na itong pagsamantalahan ang karaniwang pag-andar ng analogWrite () sa mga PWM na pin at binabago lamang ang PER_REG (period register) at ang CC (capture Compare) na rehistro (ang nakasulat na code ay isang cut-and-paste lamang mula sa library ng mga wiring_analog). Maaari mong itakda ang kinakailangang dalas nang naaayon sa sensor ng TSOP na nagbabago sa PER_REG (na kung saan ay ang itaas na limitasyon sa pag-reset ng timer counter), habang itinakda ang CC nang katimbang sa halaga ng panahon sa nais na porsyento ng duty cycle.

Susunod, itinatakda ng code ang Serial port gamit ang tamang baud rate na 2400bps. Bakit ang mababang baud rate ?! Ang sagot ay nasa TSOP datasheet na maaari mong makita DITO. Dahil ang TSOP ay nagtatampok ng mataas na mga filter ng pagtanggi sa ingay upang maiwasan ang hindi nais na paglipat, kinakailangan upang magpadala ng isang tren ng maraming mga pulso upang hilahin ang pin ng output ng TSOP (ang bilang ng mga pulso ay nakasalalay sa bersyon ng TSOP, 6 ang karaniwang halaga). Katulad nito, ang output ng TSOP ay hinila ng mataas pagkatapos ng isang minimum na halaga ng oras na katumbas ng 10 pulso o higit pa. Dahil dito, upang maitakda ang output ng TSOP bilang modulate TX0 signal, kinakailangan upang itakda ang rate ng baud na isinasaalang-alang ang sumusunod na equation:

Serial Baud <PWM_frequency / 10

Ang paggamit ng 38KHz ay nagreresulta sa isang baudrate na mas mababa sa 3800bps, na nangangahulugang ang mas mataas na "pamantayan" na pinapayagan na baud rate ay 2400pbs, tulad ng dating inaasahang.

Nais mo bang taasan ang rate ng baud? Mayroong dalawang mga pagpipilian.

Ang pinakamadaling pagpipilian ay ang pagbabago ng TSOP sa isang mas mataas na bersyon ng dalas (tulad ng TSOP38256), na magpapahintulot sa iyo na doble ang baud rate (4800bps)

Hindi sapat?! Pagkatapos ay kailangan mong gumawa ng iyong sariling link sa optical gamit ang isang simpleng IR LED + photodiode at amplification circuitry. Gayunpaman, ang solusyon na ito ay nangangailangan ng maraming kaalaman sa coding at electronics upang maiwasan ang ingay mula sa nakakaapekto sa naihatid na data at samakatuwid ang pagpapatupad nito ay hindi madali. Gayunpaman, kung sa tingin mo ay sapat na tiwala ka, mas malugod kang subukan na gumawa ng iyong sariling TSOP system!:)

Sa wakas, itinakda ko ang SerialUSB port (2400bps) na ginagamit ko upang magpadala at tumanggap ng data sa serial monitor.

Kasama sa pagpapaandar ng loop () ang code na kinakailangan upang maipasa ang data sa dalawang serial at direktang nakopya mula sa halimbawa ng sketch na SerialPassthrough na binabago lamang ang mga pangalan ng serials.

Hakbang 3: Shielding IR LED

Shielding IR LED
Shielding IR LED
Shielding IR LED
Shielding IR LED

Kung pinapagana mo ang circuitry sa itaas pagkatapos mai-load ang code na "IRSerial.ino", suriin ang Serial Monitor sa Arduino IDE at subukang magpadala ng isang string. Marahil ay makikita mo na ang uChip ay tumatanggap ng eksakto kung ano ang ipinapadala nito! Mayroong isang cross-talk sa circuitry dahil sa optikal na komunikasyon sa pagitan ng IR LED at ng TSOP ng parehong aparato!

Narito ang mahirap na bahagi ng proyektong ito, pinipigilan ang cross-talk! Dapat masira ang loop upang makagawa ng bidirectional Serial na komunikasyon sa paglipas ng IR.

Paano namin masisira ang loop?

Unang pagpipilian, babaan mo ang cycle ng tungkulin ng PWM, sa gayon ay babaan ang output ng optikong kapangyarihan ng LED. Gayunpaman, binabawasan din ng pamamaraang ito ang distansya kung saan makakakuha ka ng isang maaasahang serial IR channel. Ang pangalawang pagpipilian ay ang kalasag sa IR LED, sa gayon paggawa ng isang direksyon na IR "sinag". Ito ay isang bagay ng pagsubok at error; sa wakas, gamit ang isang piraso ng itim na pneumatic air hose na nakabalot sa aluminyo foil at tape (na nagbibigay ng pagkakabukod na de-kuryente) Nagawa kong basagin ang cross talk. Ang paglalagay ng nagpapadala ng IR LED sa loob ng tubo ay pumipigil sa komunikasyon sa pagitan ng TX at RX ng parehong aparato.

Tingnan ang larawan upang makita ang aking solusyon, ngunit huwag mag-atubiling subukan ang iba pang mga pamamaraan at / o upang imungkahi ang iyo! Walang ganap na solusyon sa isyung ito (maliban kung kailangan mo ng isang simpleng isang direksyon na channel) at maaaring kailanganin mong iayos ang layout ng circuitry, ikot ng tungkulin ng PWM at IR na kalasag nang naaayon sa iyong mga pangangailangan.

Kapag na-break mo na ang cross talk, maaari mong i-verify na gumagana pa rin ang iyong aparato sa pamamagitan ng paglikha ng isang loop sa aparato na Tx-Rx na pinagsasamantalahan ang pagsasalamin ng haba ng daluyong ng IR sa mga sumasalamin na ibabaw ng IR.

Hakbang 4: Makipag-usap

Makipag-usap!
Makipag-usap!
Makipag-usap!
Makipag-usap!

Yun lang

Ang iyong serial over IR aparato ay handa na upang makipag-usap, gamitin ang mga ito upang magpadala ng data sa paglipas ng IR, i-on / i-off ang anumang gusto mo o suriin ang katayuan ng isang sensor na lihim mong itinatago!

Ang distansya kung saan ang komunikasyon ay maaasahan ay hindi kasing dami ng para sa isang WiFi o BT aparato. Gayunpaman, ito ay itinuro (depende sa LED aperture at ang ipinatupad na IR shielding system), na maaaring maging napaka kapaki-pakinabang sa ilang mga application!

Malapit na mag-upload ako ng isang video kung saan makikita mo ang ilang mga halimbawa ng mga application na aking ginawa. Mag-enjoy!

Inirerekumendang: