Turinys:

UChip - Serial Over IR!: 4 žingsniai
UChip - Serial Over IR!: 4 žingsniai
Anonim
UChip - serijinis per IR!
UChip - serijinis per IR!
UChip - serijinis per IR!
UChip - serijinis per IR!

Belaidis ryšys šiais laikais tapo pagrindine mūsų projektų ypatybe ir kalbant apie belaidį ryšį, pirmas dalykas, kuris ateina į galvą, yra „Wi-Fi“arba „BT“, tačiau „Wi-Fi“ar „BT“ryšio protokolų tvarkymas nėra lengva užduotis ir reikalauja daug energijos. MCU išteklių, paliekant mažai vietos mano programos kodavimui. Todėl dažniausiai pasirenku išorinį „Wi-Fi“/BT modulį, nuosekliai prijungtą prie mikrovaldiklio, kad pasiskirstyčiau vaidmenimis ir įgyčiau didesnę laisvę.

Tačiau kartais „Wi-Fi“ir „BT“yra „perdėtas“kai kurioms programoms, kurioms reikalingas mažas pralaidumas ir mažas ryšio atstumas. Be to, naudojant „Wi-Fi“arba „BT“reikia prijungti išmanųjį telefoną ar įrenginį tinkamai autentifikuojant.

Įsivaizduokite, kad jums tiesiog reikia įjungti/išjungti išorinę šviesą, pakeisti lempos intensyvumą arba atidaryti elektrinius vartus. Ar verta naudoti „Wi-Fi“ar „BT“?

Priklausomai nuo aplinkos ir taikomųjų programų, belaidis ryšys per IR (infraraudonųjų spindulių) bangos ilgį gali būti naudingas. Serijinis per IR, įdiegtas naudojant keletą išorinių komponentų (3 atskiri komponentai!) Ir „uChip“(labai maža su „Arduino“suderinama plokštė) gali būti jūsų ieškomas sprendimas!

Medžiagų sąrašas (vienam Tx-Rx įrenginiui):

1 x „uChip“

1 x IR šviesos diodas: spinduliavimo smailė yra 950 nm

1 x TSOP-38238 (lygiavertis)

1 x 1Khm rezistorius

Techninė įranga

1 x duonos/proto lenta

1 x juodas plastikinis vamzdelis: vidinis skersmuo yra tokio paties dydžio kaip IR šviesos diodas, vamzdis yra būtinas, kad būtų išvengta kryžminio pokalbio su TSOP imtuvu.

1 x aliuminio folija (3 cm x 3 cm)

1 x juosta

PATARIMAS: Galite sukurti tik TX arba tik RX įrenginį, jei jums reikia vienos krypties ryšio, pašalindami nereikalingą RX/TX aparatūrą iš grandinės arba įjunkite/išjunkite atitinkamą eskizo kodą.

1 žingsnis: laidų prijungimas

Laidai
Laidai
Laidai
Laidai
Laidai
Laidai

Sujunkite komponentus pagal schemą.

Keletas pastabų apie paprastą schemą. Kadangi TSOP-38238 leidžia maitinti nuo 2,5 V iki 5 V ir sugeria ne daugiau kaip 0,45 mA (duomenų lapą rasite ČIA), imtuvą maitinu dviem kištukais, kurie atitinkamai užtikrins įžeminimą ir maitinimą. Tai leidžia įjungti/išjungti imtuvą pagal poreikį ir atlikti labai paprastą aparatūros laidų sąranką. Be to, jei jums reikia vienos krypties ryšio, galite pasirinkti, ar sukurti tik (Tx/Rx) įrenginį, tiesiog išjunkite/įjunkite TSOP-38238.

Kaip veikia grandinė?

Tai gana paprasta. TSOP išvesties kaištis žemai traukiamas, kai jutiklis aptinka 6 ar daugiau impulsų srovę 38KHz dažniu, kita vertus, jis yra traukiamas aukštai, kai nėra tokio signalo. Todėl, norint perduoti serijinius duomenis per IR, grandinė daro maitinimą LED anodui su 38KHz PWM, moduliuotu su TX nuosekliu signalu, kuris sumažina LED katodą.

Taigi, esant dideliam serijinio TX0 lygiui, šviesos diodas nėra šališkas arba atvirkščiai (be impulsų), o TSOP išvesties kaištis traukiamas aukštai. Siųsdamas žemą serijos lygį, šviesos diodas yra maitinamas ir generuoja IR impulsus pagal taikomą PWM signalą; todėl TSOP išėjimas yra žemas.

Kadangi perdavimas yra tiesioginis (0-> 0 ir 1-> 1), imtuvo pusėje nereikia keitiklių ar kitos logikos.

Aš reguliuoju šviesos diodų optinę išėjimo galią, pasirinkdamas PWM darbo ciklą pagal programą. Kuo didesnis darbo ciklas, tuo didesnė optinė išėjimo galia, taigi, tuo toliau perduosite savo pranešimą.

Atminkite, kad mums dar reikia generuoti impulsus! Taigi, jūs neturėtumėte viršyti 90% darbo ciklo, kitaip TSOP neaptiks signalo kaip impulsų.

Ar jums reikia daugiau galios?

Norėdami padidinti srovę, ar galime tiesiog sumažinti 1 kOhm rezistoriaus vertę?

Galbūt, tik nebūk per daug reiklus! Didžiausia srovė, kurią gaunate iš MCU kaiščio, yra ribojama iki 7 mA, kai įvesties kaištis yra stipresnis nei įprastai (PINCFG. DRVSTR = 1 ir VDD> 3 V), kaip nurodyta SAMD21 duomenų lape.

Tačiau standartinė konfigūracija (kurią pagal nutylėjimą priima „Arduino IDE“bibliotekos) riboja srovę iki 2 mA. Todėl naudojant 1 kOhm jau suteikiama dabartinė riba su numatytais nustatymais!

Srovės didinimas yra ne tik elektros komponentų klausimas. Trumpai:

  • Pakeiskite rezistorių (kurio minimali vertė yra apribota iki maždaug 470 Ohm -> VDD/470 ~ 7mA);
  • Atitinkamai nustatykite PORT-> PINCFG-> DRVSTR į 1;

Būsimame atnaujinime pateiksiu kodą, įskaitant šią funkciją.

Tačiau atminkite, kad srovės nuskandinimas ir išleidimas iš MCU kaiščių arti jo ribų nėra toks geras metodas. Iš tikrųjų tai sumažina MCU tarnavimo laiką ir patikimumą. Todėl siūlau išlaikyti įprastą pavaros stiprumą ilgalaikiam naudojimui.

2 žingsnis: programavimas

Įkelkite eskizą „IRSerial.ino“į „uChip“(arba naudojamą „Arduino“suderinamą plokštę).

Jei jums reikia pakeisti PIN kodą, generuojantį PWM, įsitikinkite, kad naudojate kaištį, prijungtą prie TCC laikmačio, nes ši kodo versija veikia tik su TCC laikmačiais (šios informacijos ieškokite savo plokštės „variant.c“). Pridėsiu kodą, kad būsimuose atnaujinimuose būtų naudojami ir TC laikmačiai.

Kodas yra gana paprastas. Nustačius žemą PIN_5 (suteikia TSOP GND) ir aukštą PIN_6 (įjungiant TSOP), MCU paleidžia PWM PIN_1, nustatydamas laikmačio laikotarpį ir fiksavimą, atitinkamai palygindamas su reikiamu dažnio moduliavimu (mano atveju jis yra 38KHz) ir pareiga ciklas (12,5% pagal numatytuosius nustatymus). Tai daroma naudojant PWM kaiščių standartinę analogWrite () funkciją ir keičiant tik PER_REG (laikotarpio registras) ir CC (fiksavimo palyginimo) registrą (parašytas kodas yra tiesiog iškirpimas ir įklijavimas iš „wiring_analog“bibliotekos). Galite atitinkamai nustatyti reikiamą dažnį, kad TSOP jutiklis pakeistų PER_REG (tai yra viršutinė riba, iš naujo nustatanti laikmačio skaitiklį), o CC proporcingai nustatykite laikotarpio vertę iki norimo darbo ciklo procento.

Tada kodas nustato nuoseklųjį prievadą, naudodamas teisingą 2400 bps duomenų perdavimo spartą. Kodėl toks mažas duomenų perdavimo greitis ?! Atsakymą rasite TSOP duomenų lape, kurį rasite ČIA. Kadangi TSOP turi didelio triukšmo atmetimo filtrus, kad būtų išvengta nepageidaujamo perjungimo, norint nuspausti TSOP išvesties kaištį, būtina išsiųsti kelių impulsų traukinį (impulsų skaičius priklauso nuo TSOP versijos, 6 yra tipinė vertė). Panašiai TSOP išvestis padidinama po minimalaus laiko, atitinkančio 10 ar daugiau impulsų. Taigi, norint nustatyti TSOP išvestį kaip moduliuojantį TX0 signalą, būtina nustatyti duomenų perdavimo spartą atsižvelgiant į šią lygtį:

Serijinis baudas <PWM_frequency/10

Naudojant 38KHz, duomenų perdavimo sparta yra mažesnė nei 3800bps, o tai reiškia, kad didesnis „standartinis“leistinas duomenų perdavimo greitis yra 2400pb, kaip buvo numatyta anksčiau.

Ar norite padidinti duomenų perdavimo spartą? Yra du variantai.

Lengviausias variantas yra pakeisti TSOP į didesnio dažnio versiją (kaip TSOP38256), kuri leistų padvigubinti duomenų perdavimo spartą (4800 bps)

Nepakankamai?! Tada jums reikia sukurti savo optinę nuorodą naudojant paprastą IR LED+fotodiodą ir stiprinimo schemą. Tačiau šiam sprendimui reikia daug kodavimo ir elektronikos žinių, kad triukšmas nepaveiktų perduodamų duomenų, todėl jo įgyvendinimas nėra lengvas! Tačiau, jei jaučiatės pakankamai pasitikintys savimi, kviečiame išbandyti savo TSOP sistemą!:)

Galiausiai nustatiau „SerialUSB“prievadą (2400 bps), kurį naudoju siunčiant ir gaunant duomenis iš serijinio monitoriaus.

Funkcija „loop ()“apima kodą, reikalingą duomenims perduoti per du serialus, ir nukopijuojamas tiesiai iš pavyzdinio eskizo „SerialPassthrough“, keičiant tik serijos pavadinimus.

3 žingsnis: IR ekranavimas

Apsauginis IR šviesos diodas
Apsauginis IR šviesos diodas
Apsauginis IR šviesos diodas
Apsauginis IR šviesos diodas

Jei įjungę pirmiau nurodytą grandinę įkeliate kodą „IRSerial.ino“, patikrinkite „Arduino IDE“serijos monitorių ir pabandykite nusiųsti eilutę. Tikriausiai pamatysite, kad „uChip“gauna būtent tai, ką perduoda! Dėl optinio ryšio tarp IR šviesos diodo ir to paties įrenginio TSOP grandinėje yra kryžminis pokalbis!

Čia ateina sunkioji šio projekto dalis, užkertanti kelią pokalbiams! Ciklas turi būti nutrauktas, kad būtų užtikrintas dvikryptis nuoseklusis ryšys per IR.

Kaip nutraukti kilpą?

Pirmasis variantas yra sumažinti PWM veikimo ciklą, taip sumažinant šviesos diodo optinę galią. Tačiau šis metodas taip pat sumažina atstumą, per kurį gaunate patikimą nuoseklų IR kanalą. Antrasis variantas yra IR šviesos diodų ekranavimas, taip sukuriant kryptingą IR „spindulį“. Tai bandymo ir klaidos klausimas; pagaliau, naudojant juodos pneumatinės oro žarnos gabalėlį, suvyniotą į aliuminio foliją ir juostą (užtikrinančią elektros izoliaciją), man pavyko nutraukti kryžminį pokalbį. Įdėjus perduodantį IR šviesos diodą į vamzdelį, neleidžiamas ryšys tarp to paties prietaiso TX ir RX.

Pažvelkite į paveikslėlį, kad pamatytumėte mano sprendimą, tačiau nedvejodami išbandykite kitus metodus ir (arba) pasiūlykite savo! Nėra absoliutaus šios problemos sprendimo (nebent jums reikia paprasto vienos krypties kanalo) ir tikriausiai jums reikia suderinti grandinės išdėstymą, PWM veikimo ciklą ir IR skydą pagal savo poreikius.

Nutraukę kryžminį pokalbį, galite patikrinti, ar jūsų prietaisas vis dar veikia, sukurdami kilpą įrenginyje Tx-Rx, išnaudodami IR bangos ilgio atspindį ant atspindinčių IR paviršių.

4 žingsnis: bendraukite

Bendrauti!
Bendrauti!
Bendrauti!
Bendrauti!

Tai viskas

Jūsų serijinis per IR įrenginys yra paruoštas bendrauti, naudokite juos duomenims siųsti per IR, įjunkite/išjunkite viską, kas jums patinka, arba patikrinkite slaptai slepiamo jutiklio būseną!

Atstumas, kuriuo ryšys yra patikimas, nėra toks didelis kaip naudojant „WiFi“ar „BT“įrenginį. Tačiau jis yra kryptingas (priklausomai nuo šviesos diodų apertūros ir įdiegtos IR ekranavimo sistemos), kuris kai kuriose programose gali būti labai naudingas!

Netrukus įkelsiu vaizdo įrašą, kuriame galėsite pamatyti keletą mano sukurtų programų pavyzdžių. Mėgautis!

Rekomenduojamas: