Cuprins:

UChip - Serial Over IR !: 4 pași
UChip - Serial Over IR !: 4 pași

Video: UChip - Serial Over IR !: 4 pași

Video: UChip - Serial Over IR !: 4 pași
Video: Borxhi shkak për sherre... Jonila: Iu dhashë para prindërve, por nuk po m’i kthejnë. Burri po më lë 2024, Iulie
Anonim
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!

Comunicarea wireless a devenit o caracteristică cheie în proiectele noastre din zilele noastre și vorbind despre wireless, primul lucru care îmi vine în minte este Wi-Fi sau BT, dar manipularea protocoalelor de comunicație Wi-Fi sau BT nu este o sarcină ușoară și consumă mult de resurse MCU, lăsând spațiu mic pentru codificarea aplicației mele. De aceea, de obicei, optez pentru un modul extern Wi-Fi / BT conectat serial la microcontroler pentru a împărți rolurile și a câștiga o libertate mai mare.

Cu toate acestea, uneori Wi-Fi și BT sunt „exagerate” pentru unele aplicații care necesită un bitbit redus și o distanță scurtă de comunicare. În plus, utilizarea Wi-Fi sau BT implică necesitatea conectării smartphone-ului sau dispozitivului cu autentificare adecvată.

Imaginați-vă că trebuie pur și simplu să porniți / opriți o lumină externă sau să schimbați intensitatea lămpii sau să deschideți o poartă electrică. Ar merita să folosiți Wi-Fi sau BT?

În funcție de mediu și aplicații, comunicația fără fir prin lungimea de undă IR (infraroșu) ar putea fi utilă. Un Serial over IR, implementat cu puține componente externe (3 componente discrete!) Și uChip (o placă foarte mică compatibilă Arduino) pot fi soluția pe care o căutați!

Lista materialelor (pentru un dispozitiv Tx-Rx):

1 x uChip

1 x LED IR: având vârful de emisie la 950nm

1 x TSOP-38238 (echivalent)

1 x rezistor 1KOhm

Hardware

1 x panou de protecție / placă proto

1 x tub din plastic negru: diametru interior de aceeași dimensiune ca LED-ul IR, tubul este necesar pentru a preveni conversația încrucișată cu receptorul TSOP.

1 x folie de aluminiu (3cm x 3 cm)

1 x bandă

SFAT: Puteți crea un dispozitiv numai TX sau numai RX în cazul în care aveți nevoie de o comunicare cu o singură direcție, eliminând hardware-ul RX / TX inutil din circuit sau activați / dezactivați codul aferent din schiță.

Pasul 1: Cablare

Cablare
Cablare
Cablare
Cablare
Cablare
Cablare

Conectați componentele împreună conform schemei.

Câteva note despre schema simplă. Deoarece TSOP-38238 permite o sursă de alimentare de la 2,5V la 5V și absoarbe cel mult 0,45mA (găsiți foaia tehnică AICI), voi alimenta receptorul folosind doi pini, care vor furniza sol și, respectiv, sursă de alimentare. Acest lucru permite pornirea / oprirea receptorului la cerere și o configurare hardware foarte simplă. Mai mult, în cazul în care aveți nevoie de o comunicare cu o singură direcție, puteți alege dacă să creați un dispozitiv (Tx / Rx) numai prin simpla dezactivare / activare a TSOP-38238.

Cum funcționează circuitul?

Este destul de simplu. Pinul de ieșire TSOP este scăzut atunci când senzorul detectează un tren de 6 impulsuri sau mai mult la 38KHz, pe de altă parte, este tras în sus când nu există un astfel de semnal. Prin urmare, pentru a transmite datele seriale prin IR, ceea ce face circuitul este alimentarea anodului LED cu un PWM de 38KHz modulat cu semnalul serial TX care trage catodul cu LED-uri jos.

În consecință, la un nivel ridicat al serialului TX0, LED-ul nu este polarizat sau polarizat în sens invers (fără impulsuri) și pinul de ieșire TSOP este ridicat. Transmiterea unui nivel scăzut pe serial, LED-ul este alimentat și generează impulsuri IR corespunzător semnalului PWM aplicat; prin urmare, ieșirea TSOP este redusă.

Deoarece transmisia este directă (0-> 0 și 1-> 1) nu este nevoie de invertoare sau altă logică pe partea receptorului.

Reglez puterea de ieșire optică LED selectând ciclul de funcționare PWM în funcție de aplicație. Cu cât este mai mare ciclul de funcționare, cu atât este mai mare puterea de ieșire optică și, prin urmare, cu atât mai mult vă veți transmite mesajul.

Rețineți că trebuie totuși să generăm impulsuri! Astfel, nu trebuie să depășiți 90% din ciclul de funcționare, altfel TSOP nu va detecta semnalul ca impulsuri.

Ai nevoie de mai multă putere?

Pentru a crește curentul, putem reduce pur și simplu valoarea rezistorului de 1kOhm?

Poate, pur și simplu nu fiți prea exigenți! Curentul maxim pe care îl obțineți de la un pin al MCU este limitat la 7mA atunci când conduceți pinul portului mai puternic decât în mod normal (PINCFG. DRVSTR = 1 și VDD> 3V), așa cum se menționează în foaia tehnică SAMD21.

Cu toate acestea, configurația standard (care este cea adoptată de bibliotecile IDE Arduino ca implicit) limitează curentul la 2mA. Prin urmare, utilizarea 1kOhm oferă deja limita curentă cu setările implicite!

Creșterea curentului nu este doar o chestiune de componente electrice. Scurt:

  • Schimbați rezistorul (a cărui valoare minimă este limitată la aproximativ 470Ohm -> VDD / 470 ~ 7mA);
  • Setați corespunzător PORT-> PINCFG-> DRVSTR la 1;

Voi furniza codul care include această caracteristică într-o actualizare viitoare.

Dar nu uitați, scufundarea și scurgerea curentului de la pinii MCU aproape de limitele sale nu este o abordare atât de bună. Într-adevăr, reduce durata de viață și fiabilitatea MCU. Prin urmare, vă sugerez să păstrați puterea normală a unității pentru o utilizare pe termen lung.

Pasul 2: Programare

Încărcați schița „IRSerial.ino” în uChip (sau placa compatibilă Arduino pe care o utilizați).

În cazul în care trebuie să schimbați pinul care generează PWM, asigurați-vă că utilizați un pin conectat la un temporizator TCC, deoarece această versiune a codului funcționează numai cu temporizatoarele TCC (verificați „variant.c” a plăcii pentru aceste informații). Voi adăuga codul pentru a utiliza și cronometre TC în actualizări viitoare.

Codul este destul de simplu. După setarea PIN_5 low (furnizează TSOP GND) și PIN_6 high (alimentarea TSOP), MCU pornește PWM pe PIN_1, setând perioada temporizatorului și capturarea se compară în mod corespunzător cu modulația de frecvență necesară (în cazul meu este de 38KHz) și duty ciclu (12,5% implicit). Acest lucru se realizează exploatând funcția standard analogWrite () pe pinii PWM și schimbând doar registrul PER_REG (registru de perioadă) și registrul CC (comparare captură) (codul scris este pur și simplu o decupare și lipire din biblioteca wiring_analog). Puteți seta frecvența necesară în funcție de senzorul TSOP schimbând PER_REG (care este limita superioară de resetare a contorului temporizatorului), în timp ce setați CC proporțional cu valoarea perioadei la procentul dorit al ciclului de funcționare.

Apoi, codul setează portul serial utilizând rata de transmisie corectă, care este de 2400bps. De ce o rată de baud atât de mică ?! Răspunsul este în foaia tehnică TSOP pe care o puteți găsi AICI. Deoarece TSOP are filtre de respingere a zgomotului ridicate pentru a preveni comutarea nedorită, este necesar să trimiteți un tren de impulsuri multiple pentru a trage în jos pinul de ieșire TSOP (numărul de impulsuri depinde de versiunea TSOP, 6 este valoarea tipică). În mod similar, ieșirea TSOP este ridicată după un timp minim echivalent cu 10 impulsuri sau mai mult. În consecință, pentru a seta ieșirea TSOP ca semnal modulant TX0, este necesar să setați rata de transmisie luând în considerare următoarea ecuație:

Serial Baud <PWM_frequency / 10

Folosind 38KHz, aceasta are ca rezultat o viteză de transmisie mai mică de 3800bps, ceea ce înseamnă că rata de transmisie „standard” mai mare este de 2400pbs, așa cum se anticipase anterior.

Doriți să măriți rata baud? Există două opțiuni.

Cea mai ușoară opțiune este schimbarea TSOP într-o versiune cu frecvență mai mare (ca TSOP38256), ceea ce vă va permite să dublați rata de transmisie (4800bps)

Insuficient?! Apoi, trebuie să vă creați propria legătură optică folosind un simplu LED IR + fotodiodă și circuite de amplificare. Cu toate acestea, această soluție necesită multă experiență în codificare și electronică pentru a preveni zgomotul să afecteze datele transmise și, prin urmare, implementarea sa nu este deloc ușoară! Cu toate acestea, dacă vă simțiți suficient de încrezători, sunteți binevenit să încercați să vă creați propriul sistem TSOP!:)

În cele din urmă, am setat portul SerialUSB (2400bps) pe care îl folosesc pentru a trimite și primi date pe monitorul serial.

Funcția loop () include codul necesar pentru trecerea datelor peste cele două seriale și este copiată direct din schița de exemplu SerialPassthrough modificând doar numele seriilor.

Pasul 3: ecranarea LED-ului IR

LED ecran IR
LED ecran IR
LED ecran IR
LED ecran IR

Dacă porniți circuitele de mai sus după încărcarea codului „IRSerial.ino”, verificați Serial Monitor pe Arduino IDE și încercați să trimiteți un șir. Probabil veți vedea că uChip primește exact ceea ce transmite! Există o discuție încrucișată în circuit datorită comunicării optice între LED-ul IR și TSOP al aceluiași dispozitiv!

Aici vine partea grea a acestui proiect, împiedicând conversațiile încrucișate! Bucla trebuie ruptă pentru a face o comunicare serială bidirecțională prin IR.

Cum rupem bucla?

Prima opțiune, reduceți ciclul de funcționare PWM, scăzând astfel puterea optică a LED-ului. Cu toate acestea, această abordare reduce, de asemenea, distanța pe care obțineți un canal serial IR de încredere. A doua opțiune este ecranarea LED-ului IR, făcând astfel un „fascicul” direcțional IR. Este o chestiune de încercare și eroare; în cele din urmă, folosind o bucată de furtun de aer pneumatic negru înfășurat în folie de aluminiu și bandă (asigurând izolație electrică) am reușit să rup discuția. Punerea LED-ului IR de transmisie în interiorul tubului împiedică comunicarea între TX și RX ale aceluiași dispozitiv.

Uitați-vă la imagine pentru a vedea soluția mea, dar nu ezitați să încercați alte metode și / sau să sugerați! Nu există o soluție absolută la această problemă (cu excepția cazului în care aveți nevoie de un canal simplu într-o direcție) și probabil că trebuie să reglați aspectul circuitelor, ciclul de funcționare PWM și ecranul IR în funcție de nevoile dvs.

Odată ce întrerupeți conversația încrucișată, puteți verifica dacă dispozitivul dvs. funcționează în continuare, creând o buclă pe dispozitivul Tx-Rx exploatând reflexia lungimii de undă IR pe suprafețele reflectorizante IR.

Pasul 4: Comunicați

Comunica!
Comunica!
Comunica!
Comunica!

Asta e tot

Dispozitivul dvs. serial prin IR este gata să comunice, folosiți-le pentru a trimite date prin IR, porniți / dezactivați orice vă place sau verificați starea unui senzor pe care îl ascundeți în secret!

Distanța pe care comunicarea este fiabilă nu este la fel de mare ca pentru un dispozitiv WiFi sau BT. Cu toate acestea, este direcțional (în funcție de deschiderea LED-ului și de sistemul de ecranare IR implementat), care poate fi foarte util în unele aplicații!

În curând voi încărca un videoclip în care puteți vedea câteva exemple de aplicații pe care le-am făcut. Bucurați-vă!

Recomandat: