Përmbajtje:

Telekomandë InfraRed I2C Me Arduino: 8 hapa (me fotografi)
Telekomandë InfraRed I2C Me Arduino: 8 hapa (me fotografi)

Video: Telekomandë InfraRed I2C Me Arduino: 8 hapa (me fotografi)

Video: Telekomandë InfraRed I2C Me Arduino: 8 hapa (me fotografi)
Video: Инфракрасный приемник дистанционного управления NE567 (схема и макет) 2024, Korrik
Anonim
Telekomandë I2C InfraRed Me Arduino
Telekomandë I2C InfraRed Me Arduino
Telekomandë InfraRed I2C Me Arduino
Telekomandë InfraRed I2C Me Arduino

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

Vështrim i shkurtër i qarkut
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

Pasqyrë e shkurtër e Softuerit
Pasqyrë e shkurtër e Softuerit
Pasqyrë e shkurtër e Softuerit
Pasqyrë e shkurtër e Softuerit
Pasqyrë e shkurtër e Softuerit
Pasqyrë e shkurtër e 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

Përmbajtja e Paketës I2C
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)

Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)
Marrja e kodeve të telekomandës (ui32Data)

Ka tre mënyra se si mund të merrni një kod përkatës të telekomandës;

  1. Përmes numërimit të bitëve me një oshiloskop,
  2. Shikojeni në një faqe në internet,
  3. 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

Si të provoni pajisjen tuaj të skllevërve I2C
Si të provoni pajisjen tuaj të skllevërve I2C
Si të provoni pajisjen tuaj të skllevërve I2C
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

Tkurrja e dizajnit tuaj
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

Përfundim
Përfundim
Përfundim
Përfundim

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: