Përmbajtje:
- Hapi 1: Vështrim i shkurtër i qarkut
- Hapi 2: Vështrim i shkurtër i Softuerit
- Hapi 3: Përmbajtja e Paketës I2C
- Hapi 4: Marrja e kodeve të telekomandës (ui32Data)
- Hapi 5: Si të provoni pajisjen tuaj të skllevërve I2C
- Hapi 6: Tkurrja e dizajnit tuaj
- Hapi 7: Përfundimi
- Hapi 8: Referencat e përdorura
Video: Telekomandë InfraRed I2C Me Arduino: 8 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:27
PreambleThis Instructable detajon se si të krijoni një telekomandë universale duke përdorur I2C për ndërfaqen.
Sa e çuditshme thoni, duke përdorur një pajisje skllevër I2C?
Po, një pajisje skllevër I2C.
Kjo ndodh sepse koha e saktë e paketave IR është mjaft e kërkuar dhe një me të cilën një Arduino tipike do të luftojë nëse tashmë po kryen shumë detyra të tjera në të njëjtën kohë. Bettershtë më mirë të shpërndani ngarkesën llogaritëse duke caktuar aktivitete intensive kohore për përpunuesit e dedikuar kurdo që të jetë e mundur (akoma më mirë ta bëni atë në harduer). Duke pasur parasysh që I2C është një metodë e dokumentuar mirë dhe e fuqishme e komunikimit midis IC -ve, e zgjodha këtë si ndërfaqe.
Prezantimi
Siç u përmend më lart, ky udhëzues përshkruan se si të kontrolloni pajisjet shtëpiake si TV, DVD player dhe Satellite etj duke përdorur bibliotekën IRremote në Arduino.
Përfundon me një shembull të projektimit duke e kthyer Arduino -n në një modul të telekomandës skllevër I2C (figura 1 më lart) me qark testimi prototip (figura 2 më lart) dhe vazhdon në detaje se si ta zvogëloni modelin tuaj në përbërësit minimalë të nevojshëm në mënyrë që të mund të jetë ngulitur në një dizajn tjetër. Në rastin tim, unë e përdor këtë pajisje të integruar në një pajisje të telekomandës IoT Universal të bazuar në një ESP8266-12E.
Cilat pjesë më duhen?
Për të ndërtuar qarkun e përshkruar në Hapin 1 (Transmetuesi IR) do t'ju duhen pjesët e mëposhtme;
- 2 rezistenca 10K
- 1 rezistencë 390R
- 1 rezistencë 33R
- 1 rezistencë 3K8
- 1 zbritje LED e kuqe
- 1 zbritje IR Led TSAL6400
- 1 jashtë Transistorit BC337
- 1 off kondensator 220uF
- 1 zbritje Arduino Uno
Për të ndërtuar qarkun e përshkruar në Hapin 4 (Marrësi IR) do t'ju duhen pjesët e mëposhtme;
- 1 rezistencë 10K
- 1 zbritje TSOP38328
- 1 off kondensator 220uF
- 1 zbritje Arduino Uno
Për të ndërtuar qarkun e përshkruar në Hapin 5 (qarku i testimit të skllevërve) do t'ju duhen pjesët e mëposhtme;
- 4 rezistenca 10K
- 2 jashtë rezistencës 390R
- 1 rezistencë 33R
- 1 rezistencë 3K8
- 2 fikur LED i kuq
- 1 zbritje IR Led TSAL6400
- 1 jashtë Transistorit BC337
- 1 off kondensator 220uF
- 2 butona SPST
- 2 zbritje nga Arduino Unos
Për të ndërtuar qarkun e përshkruar në Hapin 6 (Dizajni i tkurrur) do t'ju duhen pjesët e mëposhtme;
- 3 rezistenca 10K
- 1 rezistencë 270R
- 1 rezistencë 15R
- 4 rezistenca 1K
- 1 zbritje LED e kuqe
- 1 zbritje IR Led TSAL6400 ose TSAL5300
- 1 jashtë Transistorit BC337
- 1 off 220uF kondensator elektrolitik @ 6.3v
- 1 jashtë kondensatorit 1000uF elektrolitik @ 6.3v
- 2 jashtë kondensatorëve 0.1uF
- 2 jashtë kondensatorëve 22pF
- 1 jashtë 16 MHz Xtal
- 1 zbritje ATMega328P-PU
Shënim: Ju gjithashtu do të kërkoni një pajisje FTDI për të programuar ATMega328P
Çfarë aftësish më duhen?
- Një kuptim minimal i elektronikës,
- Njohuri për Arduino dhe IDE -në e tij,
- Pak durim,
- Njëfarë kuptimi i I2C do të ishte i dobishëm (shih këtu për disa detaje të përgjithshme të Bibliotekës I2C/Wire).
Temat e mbuluara
- Vështrim i shkurtër i qarkut,
- Pasqyrë e shkurtër e softuerit,
- Përmbajtja e paketës I2C,
- Marrja e kodeve të telekomandës (ui32Data),
- Si të provoni pajisjen tuaj I2C Slave,
- Duke zvogëluar modelin tuaj,
- Përfundim,
- Referencat e përdorura.
Mohim
Si gjithmonë, ju i përdorni këto udhëzime në rrezikun tuaj dhe ato vijnë të pambështetura.
Hapi 1: Vështrim i shkurtër i qarkut
Qëllimi i qarkut është të transmetojë kodet e telekomandës IR. Dizajni i tij është mjaft i thjeshtë dhe mjaft i thjeshtë.
Kur tranzistori Q1 a BC337 NPN ndizet nëpërmjet një logjike nga Arduino PWM O/P D3 në Rezistorin R5, rryma kalon nëpër Leds 1 dhe 2. E kufizuar vetëm nga rezistorët e çakëllit R3 dhe R4 respektivisht. Q1 përdoret për të rritur rrymën që kalon përmes Diodës IR (IF Max = 100mA) në atë që tejkalon atë që Arduino O/P është e aftë të furnizojë ~ 40mA @ +5v.
Kondensatori C1 a 220uF Elektrolitik siguron një stabilizim duke parandaluar një rënie të hekurudhës së furnizimit nga fuqia e tërhequr nga Leds 1 dhe 2.
Rezistencat R1 dhe R2 janë ngritje I2C.
Hapi 2: Vështrim i shkurtër i Softuerit
Parathënie
Për të përpiluar me sukses këtë kod burim do t'ju duhet biblioteka shtesë e mëposhtme;
IRremote.h
- Nga: z3t0
- Qëllimi: Biblioteka infra të kuqe për Arduino: dërgoni dhe merrni sinjale infra të kuqe me protokolle të shumta
- Nga:
Vështrim i Përgjithshëm i Kodit
Siç tregohet në figurën 1 më sipër, me fillimin e kodit konfiguron mikrokontrolluesin I/O, pastaj anketon statusin e flamurit të brendshëm të softuerit 'bFreshDataFlag'. Kur vendoset ky flamur, kontrolluesi pohon se është linja "e zënë" (duke dërguar pinin e të dhënave D4 të ulët) dhe kalon në gjendjen "eBUSY" duke lexuar në mënyrë sekuenciale komandat e shtypit të butonit të mbajtur në uDataArray dhe dërgimin e të dhënave të moduluara IR në LED LED në një sekuenca e transmetimit.
Pasi të dhënat e mbajtura në uDataArray të jenë dërguar plotësisht, gjendja 'eIDLE' rifillon dhe linja 'e zënë' de-pohohet (dërgimi i të dhënave pin D4 i lartë). Pajisja tani është gati të marrë më shumë shtypje të butonave që shënojnë fundin e sekuencës së transmetimit.
Marrja e të dhënave të shtypjes së butonit IR
Kur të dhënat i dërgohen telekomandës InfraRed përmes I2C ajo shkakton një ndërprerje dhe thirrja e funksionit receveEvent () nxitet në mënyrë asinkrone.
Pasi të aktivizohet, të dhënat e marra I2C shkruhen në mënyrë sekuenciale në tampon 'uDataArray '.
Gjatë marrjes së të dhënave, nëse një fund i sekuencës sinjalizohet nga masteri (bFreshData! = 0x00) vendoset 'bFreshDataFlag', duke sinjalizuar kështu fillimin e sekuencës së transmetimit.
Fotografitë 2… 3 japin një shembull të një sekuence tipike të paketave.
Shënim: Kodi i plotë burimor i disponueshëm këtu
Hapi 3: Përmbajtja e Paketës I2C
Formati i paketës së kontrollit të dërguar te skllavi mbi I2C është dhënë më lart në figurën 1, kuptimi i secilës fushë është dhënë më poshtë
Kuptimi i fushave të paketave të kontrollit
bajt kodimi;
-
Kodimi i telekomandës IR,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Paraqitja gjashtëkëndore e rrjedhës binare të të dhënave IR 4 Bajt të dhënash (të panënshkruara gjatë), LSByte… MSByte
byte bNumberOfBitsInTheData;
Numri i Biteve në të dhëna (Maks 32). Gama = 1… 32
byte bPulseTrainPërsërit;
Sa përsëritje të këtij treni pulsues. Gama = 1… 255. Zakonisht 2… 4 përsëritje. Ju mund të dëshironi ta zgjasni këtë për komandat On/Off pasi pajisja marrëse ndonjëherë kërkon disa përsëritje shtesë të trenit të pulsit për të marrë sinjalin e ndezjes
byte bDelayBetweenPulseTrainPërsërit;
Vonesa midis përsëritjeve të këtij treni pulsues. Gama = 1… 255mS. Në mënyrë tipike 22mS… 124mS
byte bButtonPërsërit;
Simulon shtypjen e përsëritur të të njëjtit buton (por nuk e mbështet kodin e modifikuar si telekomanda e Apple, thjesht përsërit kodin e butonit). Gama = 1… 256. E parazgjedhur = 1
uint16_t ui16VonesëMe butoninPërsërit;
Vonesa midis përsëritjeve të butonave (pa shenjë int). 2 byte në total LSByte… MSByte. Gama = 1… 65535mS. E parazgjedhur = 0mS
byte bFreshData;
-
Të dhëna të freskëta. Një vlerë jo-zero. E shkruar e fundit, shkakton sekuencën IR TX. Gama 0x00… 0xFF
- Më shumë pako kontrolli do të vijnë = 0
- Kjo është paketa përfundimtare e kontrollit = Vlera Jo-Zero 1, 2,… 255
Vini re përdorimin e direktivës së përpiluesit '_paket_'. Kjo është për të siguruar që të dhënat të jenë bajt pako për bajt në memorje pavarësisht nga sistemi i synuar i përdorur (Uno, Due, ESP8266 etj.). Kjo do të thotë bashkim midis regjistruesAllocationType dhe dataArrayType duhet vetëm njëra pas tjetrës të nxjerrë orë/orë në byte nga një paketë kontrolli, duke e bërë softuerin TX/RX të thjeshtë.
Hapi 4: Marrja e kodeve të telekomandës (ui32Data)
Ka tre mënyra se si mund të merrni një kod përkatës të telekomandës;
- Përmes numërimit të bitëve me një oshiloskop,
- Shikojeni në një faqe në internet,
- Dekodoni atë drejtpërdrejt nga rryma e të dhënave në softuer.
Përmes numërimit të bitit me një shtrirje
Kjo nuk është një metodë efikase pasi kërkon mjaft kohë dhe potencialisht kërkon më shumë se një përpjekje, megjithatë mund të jetë shumë e saktë. Alsoshtë gjithashtu e dobishme në verifikimin vizual të kodeve të marra duke përdorur metodat 2 dhe 3, gjithashtu në përcaktimin e ndonjë veçorie të një telekomande. Për shembull, kur mbani shtypur një buton në telekomandën Apple IR. Telekomanda fillimisht do të lëshojë një sekuencë komandimi, pastaj do ta ndjekë atë me një sekuencë të përsëritur të ngjeshur prej 0xF….
Shikoni atë në një faqe në internet
Baza e të dhënave të kodeve të telekomandës në faqen e internetit të telekomandës me rreze infra të kuqe Linux është një burim i mirë.
Ana negative megjithatë, është se mund t'ju duhet të provoni disa kode derisa të gjeni një që funksionon për ju. Ju gjithashtu mund të keni nevojë të interpretoni disa nga paraqitjet e kodeve për t'i kthyer ato në formën e tyre ekuivalente gjashtëkëndore.
Dekodoni atë drejtpërdrejt nga rryma e të dhënave
Duke përdorur qarkun në figurën 1 më sipër në lidhje me bibliotekën IRremote 'IRrecvDumpV2.ino' është e mundur të deshifroni rrjedhën e të dhënave drejtpërdrejt nga telekomanda. Figura 2 tregon një telekomandë të Samsung TV të dekoduar për një shtypje të butonit të ndezjes/fikjes në dritaren e terminalit Arduino IDE.
Marrësi/Transmetuesi i Kombinuar
Fotografitë 3 dhe 4 më sipër përshkruajnë një zgjidhje e cila lejon marrjen dhe transmetimin e komandës IR për të lejuar prototipimin e lehtë.
Për të deshifruar shtypjet e butonave të telekomandës IR do t'ju duhet të ndizni Arduino me shembullin 'IRrecvDumpV2.ino' i cili vjen me bibliotekën IRremote.
Gjithashtu funksionon njësoj mirë për transmetimin nëse komandon IR. Një led i kuq përfshihet si një tregues vizual që pajisja është në veprim.
Hapi 5: Si të provoni pajisjen tuaj të skllevërve I2C
Duke përdorur kodin burimor këtu, dhe qarkun e përshkruar më sipër në figurën 1, programoni 'Master' Arduino me 'IR_Remote_Sim_Test.ino' dhe 'Slave' Arduino me 'IR_Remote_Sim.ino'.
Duke supozuar se keni një TV Sony Bravia, një kuti Sky HD dhe një Sony BT SoundBar, shtypni butonin 1 dhe TV juaj do të kalojë në BBC1 (kanali 101). Shtypni butonin 2 dhe shiriti juaj i zërit do të heshtë. Shtypni përsëri dhe do të çaktivizohet.
Gjatë ekzekutimit të sekuencës së transmetimit IR LED3 do të ndriçojë duke treguar se skllavi është i zënë dhe LED1 do të dridhet në linjë me procesin e transmetimit IR.
Sigurisht, nëse nuk keni të njëjtin sistem argëtimi të vendosur si më sipër, mund ta ri-programoni skllavin me 'IRrecvDumpV2.ino', të deshifroni komandat tuaja të largëta me interes, pastaj t'i programoni ato në 'IR_Remote_Sim_Test.ino' për tuajin. skenari i dhënë.
Figura 2 tregon pasqyrën e softuerit të testit të nivelit të sistemit midis Master dhe Slave.
Hapi 6: Tkurrja e dizajnit tuaj
Ok, pra duke supozuar se e keni ndjekur këtë udhëzues duke u mbështetur në dy Arduinos për të kontrolluar pajisjet tuaja shtëpiake nuk është përdorimi më efikas i stokut tuaj Arduino. Rrjedhimisht, nëse ndërtoni qarkun e treguar në figurën e mësipërme dhe ndiqni udhëzimet këtu për të programuar ATMega328P me 'IR_Remote_Sim.ino', do të jeni në gjendje të zvogëloni të gjithë sistemin në përbërësit minimalë. Kjo do t'ju lejojë të integroni modelin tuaj në ndonjë sistem tjetër.
Hapi 7: Përfundimi
Zgjidhja është e qëndrueshme dhe funksionon mirë, është futur në një sistem tjetër për mjaft javë tani pa asnjë problem.
Zgjodha Arduino Uno R3 pasi doja një pajisje e cila të kishte RAM të mjaftueshme të tillë që të kem një tampon butoni me thellësi të arsyeshme. U vendosa për një madhësi tampon prej 20 paketash (MAX_SEQUENCES).
Mburoja Hybrid TX/RX që bëra gjithashtu ishte shumë e dobishme kur deshifroni telekomandat e Sony dhe Sky. Megjithëse më duhet të rrëfej duke përdorur hapësirën time dixhitale herë pas here për të kontrolluar që komanda IR e deshifruar e softuerit ishte e njëjtë me atë që vinte nga IR e marrë (TSOP38328).
E vetmja gjë që do të kisha bërë ndryshe do të ishte përdorimi i qarkut të vazhdueshëm të rrymës për drejtimin IR, siç tregohet më lart në figurën 2.
Një pikë tjetër për tu vënë në dukje është se jo të gjithë transmetuesit IR modulohen me 38KHz, TSOP38328 është optimizuar për 38KHz.
Hapi 8: Referencat e përdorura
IRRemote.h
- Nga: z3t0
- Qëllimi: Biblioteka infra të kuqe për Arduino: dërgoni dhe merrni sinjale infra të kuqe me protokolle të shumta
- Nga:
Biblioteka në distancë IR
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Sensori i Marrësit IR (Infrared) - TSOP38238 (ekuivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Për të shmangur mbushjen e strukturës së të dhënave në kufijtë e fjalëve
- 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
Burim i mirë i detajeve të largëta IR
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Baza e të dhënave të telekomandës IR
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Fleta e të dhënave
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
Fleta e të dhënave 1N4148
https://www.vishay.com/docs/81857/1n4148.pdf
Fleta e të dhënave ATMega328P-PU
Recommended:
Arduino: Programet e kohës dhe telekomandë nga aplikacioni Android: 7 hapa (me fotografi)
Arduino: Programet e Kohës & Telekomanda nga Aplikacioni Android: Gjithmonë kam pyetur veten se çfarë ndodh me të gjitha ato borde Arduino për të cilat njerëzit nuk kanë nevojë pasi të përfundojnë projektet e tyre të mrekullueshme. E vërteta është pak shqetësuese: asgjë. Unë e kam vënë re këtë në shtëpinë e familjes sime, ku babai im u përpoq të ndërtonte shtëpinë e tij
Telekomandë Universale TV - Ardiuino, Infrared: 5 Hapa
Telekomandë Universale TV - Ardiuino, Infrared: Përshëndetje! Në këtë udhëzues, unë do t'ju tregoj se si të ndërtoni dhe programoni telekomandën tuaj universale që do të funksionojë me shumicën e gjërave që përdorin një telekomandë infra të kuqe, dhe që gjithashtu " do të dëgjojë " dhe deshifroni një sinjal infra të kuqe të dërguar nga të tjerë të ndryshëm
IRduino: Telekomandë Arduino - Imitoni një telekomandë të humbur: 6 hapa
IRduino: Telekomandë Arduino - Imitoni një telekomandë të humbur: Nëse e keni humbur ndonjëherë telekomandën për televizorin ose DVD player -in tuaj, e dini sa frustruese është të ecësh, të gjesh dhe të përdorësh butonat në vetë pajisjen. Ndonjëherë, këto butona nuk ofrojnë as të njëjtin funksionalitet si telekomanda. Merr
Roboti me telekomandë duke përdorur Arduino dhe T.V. Telekomandë: 11 hapa
Roboti me telekomandë duke përdorur Arduino dhe TV Telekomandë: Kjo makinë me telekomandë mund të lëvizet duke përdorur praktikisht çdo lloj telekomande si TV, AC etj. Përdor faktin që telekomanda lëshon IR (infra të kuqe). Kjo pronë përdoret duke përdorur një marrës IR, i cili është një sensor shumë i lirë. Në
Pan dhe telekomandë me telekomandë: 7 hapa
Pan i kontrolluar nga distanca dhe koka e pjerrët: Unë gjithmonë kam dashur një tigan të kontrolluar nga distanca dhe kokë të pjerrët. Ndoshta ishte për kamerën time video, një gjuajtës i gomës ose një gjuajtës me armë uji. Nuk ka shumë rëndësi se çfarë vendosni në kuvertën e sipërme (përderisa nuk është shumë e rëndë), me këtë projekt të vogël ju