Cuprins:
- Pasul 1: Scurtă prezentare generală a circuitului
- Pasul 2: Prezentare succintă a software-ului
- Pasul 3: Conținutul pachetului I2C
- Pasul 4: Achiziționarea codurilor de control de la distanță (ui32Data)
- Pasul 5: Cum să vă testați dispozitivul sclav I2C
- Pasul 6: Reducerea designului
- Pasul 7: Concluzie
- Pasul 8: Referințe utilizate
Video: Telecomandă cu infraroșu I2C cu Arduino: 8 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Preambul Acest instructabil detaliază cum să creați o telecomandă universală folosind I2C pentru interfață.
Cât de ciudat spuneți că utilizați un dispozitiv sclav I2C?
Da, un dispozitiv sclav I2C.
Acest lucru se datorează faptului că sincronizarea exactă a pachetelor IR este destul de solicitantă și una cu care se va lupta un tipic Arduino dacă îndeplinește deja multe alte sarcini în același timp. Este mai bine să distribuiți sarcina de calcul prin atribuirea activităților intensive de sincronizare procesorelor dedicate ori de câte ori este posibil (mai bine să o faceți în hardware). Având în vedere că I2C este o metodă de comunicații bine documentată și robustă între circuite integrate, am ales aceasta ca interfață.
Introducere
După cum sa menționat mai sus, acest instructiv descrie cum să controlați aparatele de uz casnic, cum ar fi TV, DVD player și satelit etc., utilizând biblioteca IRremote de pe Arduino.
Se încheie cu un exemplu de proiectare care transformă Arduino într-un modul de control de la distanță I2C sclav (imaginea 1 de mai sus) cu circuit de testare prototip (imaginea 2 de mai sus) și continuă să detalieze cum să vă micșorați designul până la componentele minime necesare pentru a putea fi încorporat într-un alt design. În cazul meu, folosesc acest dispozitiv încorporat într-un dispozitiv de telecomandă IoT Universal bazat pe un ESP8266-12E.
De ce piese am nevoie?
Pentru a construi circuitul descris în Pasul 1 (Transmițător IR) veți avea nevoie de următoarele părți;
- 2 rezistențe de 10K
- 1 rezistor 390R
- 1 rezistor 33R
- 1 rezistor 3K8
- 1 oprit LED roșu
- 1 off IR Led TSAL6400
- 1 de pe tranzistorul BC337
- 1 off condensator 220uF
- 1 de pe Arduino Uno
Pentru a construi circuitul descris în Pasul 4 (Receptor IR) veți avea nevoie de următoarele părți;
- 1 rezistor de 10K
- 1 de pe TSOP38328
- 1 off condensator 220uF
- 1 de pe Arduino Uno
Pentru a construi circuitul descris în Pasul 5 (Circuitul de testare a sclavilor) veți avea nevoie de următoarele părți;
- 4 rezistențe de 10K
- 2 rezistențe 390R
- 1 rezistor 33R
- 1 rezistor 3K8
- 2 oprit LED roșu
- 1 off IR Led TSAL6400
- 1 de pe tranzistorul BC337
- 1 off condensator 220uF
- 2 de pe butoanele SPST
- 2 de pe Arduino Unos
Pentru a construi circuitul descris în Pasul 6 (proiectare Shrunk) veți avea nevoie de următoarele părți;
- 3 rezistențe de 10K
- 1 rezistor 270R
- 1 rezistor 15R
- 4 rezistențe 1K
- 1 oprit LED roșu
- 1 de pe IR Led TSAL6400 sau TSAL5300
- 1 de pe tranzistorul BC337
- 1 off 220uF condensator electrolitic @ 6.3v
- 1 off 1000uF condensator electrolitic @ 6.3v
- 2 off condensatori 0.1uF
- 2 condensatori de 22pF
- 1 off Xtal 16MHz
- 1 de pe ATMega328P-PU
Notă: Veți avea nevoie și de un dispozitiv FTDI pentru a programa ATMega328P
De ce abilități am nevoie?
- O înțelegere minimă a electronicii,
- Cunoașterea Arduino și a IDE-ului său,
- Puțină răbdare,
- O anumită înțelegere a I2C ar fi utilă (consultați aici câteva detalii generice I2C / Wire Library).
Subiecte acoperite
- Scurtă prezentare generală a circuitului,
- Scurtă prezentare generală a software-ului,
- Conținutul pachetului I2C,
- Achiziționarea codurilor de control de la distanță (ui32Data),
- Cum să vă testați dispozitivul I2C Slave,
- Reducerea designului,
- Concluzie,
- Referințe utilizate.
Declinare de responsabilitate
Ca întotdeauna, utilizați aceste instrucțiuni pe propriul risc și acestea sunt neacceptate.
Pasul 1: Scurtă prezentare generală a circuitului
Scopul circuitului este de a transmite coduri de telecomandă IR. Designul său este destul de simplu și destul de simplu.
Când tranzistorul Q1 un BC337 NPN este pornit printr-unul logic de la Arduino PWM O / P D3 la rezistorul R5, curentul trece prin ledurile 1 și 2. Limitat doar de rezistențele de balast R3 și respectiv R4. Q1 este utilizat pentru a crește curentul care trece prin dioda IR (IF Max = 100mA) la cel care depășește ceea ce este capabil Arduino O / P ~ 40mA @ + 5v de alimentare.
Condensatorul C1 a 220uF electrolitic asigură o anumită stabilizare, prevenind o cădere a șinei de alimentare prin puterea consumată de ledurile 1 și 2.
Rezistențele R1 și R2 sunt extrageri I2C.
Pasul 2: Prezentare succintă a software-ului
Preambul
Pentru a compila cu succes acest cod sursă, veți avea nevoie de următoarea bibliotecă suplimentară;
IRremote.h
- De: z3t0
- Scop: Bibliotecă la distanță cu infraroșu pentru Arduino: trimite și primi semnale în infraroșu cu mai multe protocoale
- De la:
Prezentare generală a codului
Așa cum se arată în imaginea 1 de mai sus, la pornire, codul configurează I / O pentru microcontroler, apoi sondează starea semnalizatorului software intern „bFreshDataFlag”. Când acest semnal este setat, controlerul afirmă că este linia „Ocupată” (trimiterea pinului de date D4 scăzut) și se deplasează la starea „eBUSY” citind secvențial butonul de apăsare a comenzilor ținute în uDataArray și trimiterea datelor modulate IR către LED-ul IR într-un secvența de transmisie.
Odată ce datele deținute în uDataArray au fost complet trimise, starea „eIDLE” este reluată și linia „Ocupată” este anulată (trimiterea pinului D4 ridicat). Dispozitivul este acum gata să primească mai multe apăsări de butoane care marchează sfârșitul secvenței de transmisie.
Recepția datelor de apăsare a butonului IR
Când datele sunt trimise la telecomanda InfraRed prin I2C, aceasta declanșează o întrerupere și apelul funcției ReceEvent () este declanșat asincron.
Odată declanșate datele I2C primite sunt scrise secvențial în bufferul „uDataArray ”.
În timpul recepției de date, dacă un final de secvență este semnalat de master (bFreshData! = 0x00) este setat „bFreshDataFlag”, semnalând astfel începutul secvenței de transmisie.
Imaginile 2 … 3 oferă un exemplu de secvență tipică de pachete.
Notă: Codul sursă complet disponibil aici
Pasul 3: Conținutul pachetului I2C
Formatul pachetului de control trimis sclavului prin I2C este dat mai sus în imaginea 1, semnificația fiecărui câmp este dată mai jos
Înțelesul câmpurilor de pachete de control
octet bCodificare;
-
Codificare telecomandă IR,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Reprezentarea hexagonală a fluxului de date IR binar 4 octeți de date (nesemnat lung), LSByte … MSByte
octet bNumberOfBitsInTheData;
Numărul de biți din date (maximum 32). Gama = 1 … 32
octet bPulseTrainRepeats;
Câte repetări ale acestui tren de impulsuri. Interval = 1 … 255. De obicei 2 … 4 repetări. Poate doriți să extindeți acest lucru pentru comenzile On / Off, deoarece dispozitivul receptor necesită uneori câteva repetări suplimentare ale trenului de impulsuri pentru a primi un semnal de pornire
octet bDelayBetweenPulseTrainRepeats;
Întârziere între repetări ale acestui tren de impulsuri. Interval = 1 … 255mS. De obicei 22mS … 124mS
octet bButtonRepeats;
Simulează apăsarea repetată a aceluiași buton (dar nu acceptă codul modificat ca o telecomandă Apple, doar repetă codul butonului). Gama = 1 … 256. Implicit = 1
uint16_t ui16DelayBetweenButtonRepeats;
Întârziere între repetarea butonului (int semnat). 2 octeți în total LSByte … MSByte. Interval = 1 … 65535mS. Implicit = 0mS
octet bFreshData;
-
Date noi. O valoare diferită de zero. Scris ultima dată, declanșează secvența IR TX. Gama 0x00 … 0xFF
- Mai multe pachete de control viitoare = 0
- Acesta este pachetul de control final = valoare non-zero 1, 2, … 255
Rețineți utilizarea directivei compilatorului „_packed_”. Acest lucru este pentru a vă asigura că datele sunt pachete de octeți pentru octeți în memorie, indiferent de sistemul țintă utilizat (Uno, Due, ESP8266 etc.). Aceasta înseamnă că unirea dintre registerAllocationType și dataArrayType are nevoie doar de secvențial clock out / clock in bytes dintr-un pachet de control, ceea ce face software-ul TX / RX simplu.
Pasul 4: Achiziționarea codurilor de control de la distanță (ui32Data)
Există trei moduri în care puteți obține un cod cheie de telecomandă respectiv;
- Prin numărarea de biți cu un osciloscop,
- Căutați-l pe un site web,
- Decodează-l direct din fluxul de date din software.
Prin numărarea de biți cu un scop
Aceasta nu este o metodă eficientă, deoarece durează destul de mult timp și necesită potențial mai mult de o încercare, însă poate fi extrem de precisă. De asemenea, este util în validarea vizuală a codurilor obținute folosind metodele 2 și 3, de asemenea, în determinarea particularităților unei telecomenzi. De exemplu, când țineți apăsat un buton pe o telecomandă Apple IR. Telecomanda va emite inițial o secvență de comandă, apoi va urma aceea cu o secvență repetată comprimată de 0xF …
Căutați-l pe un site web
Baza de date a codului de control de la distanță de pe site-ul web Linux Remote Control este o sursă bună.
Dezavantajul este că va trebui să încercați câteva coduri până când veți găsi unul care să vă funcționeze. De asemenea, poate fi necesar să interpretați câteva dintre reprezentările codurilor pentru a le converti în forma hexagonală echivalentă.
Decodează-l direct din fluxul de date
Utilizând circuitul din imaginea 1 de mai sus împreună cu exemplul de bibliotecă IRremote „IRrecvDumpV2.ino” este posibil să decodificați fluxul de date direct de la distanță. Imaginea 2 prezintă o telecomandă Samsung TV decodificată pentru apăsarea unui buton de pornire / oprire în fereastra terminalului Arduino IDE.
Receptor / emițător combinat
Imaginile 3 și 4 de mai sus descriu o soluție care permite recepția și transmiterea comenzilor IR pentru a permite o prototipare ușoară.
Pentru a decoda apăsarea butonului telecomenzii IR, va trebui să luminați Arduino cu exemplul „IRrecvDumpV2.ino” care vine cu biblioteca IRremote.
De asemenea, funcționează la fel de bine pentru transmisie dacă comandă IR. Un led roșu este inclus ca o indicație vizuală a dispozitivului în acțiune.
Pasul 5: Cum să vă testați dispozitivul sclav I2C
Folosind codul sursă aici și circuitul prezentat mai sus în imaginea 1, programați „Master” Arduino cu „IR_Remote_Sim_Test.ino” și „Slave” Arduino cu „IR_Remote_Sim.ino”.
Presupunând că aveți un televizor Sony Bravia, o cutie Sky HD și un Sony BT SoundBar, apăsați butonul 1 și televizorul dvs. va trece la BBC1 (canalul 101). Apăsați butonul 2 și bara de sunet se va dezactiva. Apăsați din nou și va dezactiva sunetul.
În timpul executării secvenței de transmisie IR LED3 se va aprinde indicând faptul că sclavul este ocupat și LED1 va pâlpâi în linie cu procesul de transmisie IR.
Desigur, dacă nu aveți același sistem de divertisment configurat ca mai sus, puteți reprograma sclavul cu „IRrecvDumpV2.ino”, decoda comenzile de la distanță de interes, apoi le puteți programa în „IR_Remote_Sim_Test.ino” pentru scenariu dat.
Imaginea 2 arată prezentarea generală a software-ului la nivel de sistem între Master și Slave.
Pasul 6: Reducerea designului
Ok, deci presupunând că ați urmărit acest lucru instructiv bazându-vă pe două Arduino pentru a vă controla dispozitivele de acasă nu este cea mai eficientă utilizare a stocului dvs. Arduino. În consecință, dacă construiți circuitul prezentat în imaginea de mai sus și urmați instrucțiunile de aici pentru a programa ATMega328P cu „IR_Remote_Sim.ino”, veți putea reduce întregul sistem la componentele minime. Acest lucru vă va permite să încorporați designul în alt sistem.
Pasul 7: Concluzie
Soluția este stabilă și funcționează bine, a fost încorporată într-un alt sistem de câteva săptămâni, fără probleme.
Am ales Arduino Uno R3 pentru că doream un dispozitiv care să aibă suficientă memorie RAM, astfel încât să pot avea un buton tampon de o adâncime rezonabilă. M-am mulțumit cu o dimensiune tampon de 20 de pachete (MAX_SEQUENCES).
Scutul hibrid TX / RX pe care l-am făcut a fost foarte util la decodarea telecomenzilor Sony și Sky. Deși trebuie să mărturisesc că folosind din când în când scopul digital pentru a verifica dacă comanda IR decodificată de software a fost aceeași cu cea provenită de la IR primită (TSOP38328).
Singurul lucru pe care l-aș fi făcut diferit ar fi fost să folosesc circuitul de acționare a curentului constant pentru ledul IR așa cum se arată mai sus în imaginea 2.
Un alt punct de remarcat este că nu toate emițătoarele IR sunt modulate cu 38KHz, TSOP38328 este optimizat pentru 38KHz.
Pasul 8: Referințe utilizate
IRRemote.h
- De: z3t0
- Scop: Bibliotecă la distanță cu infraroșu pentru Arduino: trimite și primi semnale în infraroșu cu mai multe protocoale
- De la:
Biblioteca la distanță IR
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Senzor receptor IR (infraroșu) - TSOP38238 (echivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Pentru a evita completarea structurii datelor la limitele cuvintelor
- https://github.com/esp8266/Arduino/issues/1825
- https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
- https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4
Sursă bună de detalii la distanță IR
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Baza de date IR Telecomandă
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Foaie de date
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Foaie de date
https://www.vishay.com/docs/81857/1n4148.pdf
Recomandat:
Telecomanda TV devine o telecomandă RF -- NRF24L01 + Tutorial: 5 pași (cu imagini)
Telecomanda TV devine o telecomandă RF || Tutorial NRF24L01 +: În acest proiect vă voi arăta cum am folosit popularul IC nRF24L01 + RF pentru a regla luminozitatea unei benzi LED fără fir prin trei butoane inutile ale unei telecomenzi TV. Să începem
Telecomandă TV universală - Ardiuino, infraroșu: 5 pași
Telecomandă TV universală - Ardiuino, infraroșu: Bună ziua! În acest instructable, vă voi arăta cum să construiți și să programați propria telecomandă universală care să funcționeze cu majoritatea lucrurilor care utilizează o telecomandă cu infraroșu și care va „asculta”, de asemenea, și decodează un semnal infraroșu trimis de diferite alte
Telefon mobil Aparat de aer condiționat cu infraroșu Telecomandă Producere DIY: 7 pași
Telefon mobil Aparat de aer condiționat cu infraroșu Telecomandă Producție DIY: În vara fierbinte, când mergeți acasă sau la birou, doriți să porniți aparatul de aer condiționat, dar nu puteți găsi telecomanda pentru o vreme. Este un lucru foarte enervant. În epoca în care acest telefon mobil nu pleacă, puteți folosi telefonul mobil ca
Tester de telecomandă cu infraroșu folosind TSOP4838: 5 pași
Tester de telecomandă cu infraroșu folosind TSOP4838: Iată cum să construiți un circuit simplu de testare a telecomenzii. Urmați pașii de mai jos și o veți realiza sub 5 minute. Dacă funcționează, vă rugăm să lăsați un like pe videoclipul nostru și să ne spuneți în comentarii
Convertiți telecomanda IR la telecomandă RF: 9 pași (cu imagini)
Convertiți telecomanda IR la telecomandă RF: În Instructable de astăzi, vă voi arăta cum puteți utiliza un modul RF generic fără microcontroler, ceea ce ne va conduce în cele din urmă la construirea unui proiect în care puteți converti o telecomandă IR a oricărui dispozitiv la un RF La distanta. Principalul avantaj al conversiei unui