Talaan ng mga Nilalaman:

I2C InfraRed Remote Control Gamit ang Arduino: 8 Hakbang (na may Mga Larawan)
I2C InfraRed Remote Control Gamit ang Arduino: 8 Hakbang (na may Mga Larawan)

Video: I2C InfraRed Remote Control Gamit ang Arduino: 8 Hakbang (na may Mga Larawan)

Video: I2C InfraRed Remote Control Gamit ang Arduino: 8 Hakbang (na may Mga Larawan)
Video: ESP8266 Diesel Injector Purging Station - PWM NodeMCU pump flow Control (Subtittled) 2024, Nobyembre
Anonim
I2C InfraRed Remote Control Sa Arduino
I2C InfraRed Remote Control Sa Arduino
I2C InfraRed Remote Control Sa Arduino
I2C InfraRed Remote Control Sa Arduino

PreambleThis Naituturo na mga detalye kung paano lumikha ng isang unibersal na remote control gamit ang I2C para sa interface.

Gaano ka kakaiba ang sinasabi mo, gamit ang isang aparato ng alipin ng I2C?

Oo, isang aparato ng alipin ng I2C.

Ito ay dahil ang tumpak na tiyempo ng mga IR packet ay lubos na hinihingi at ang isa isang tipikal na Arduino ay makikipagpunyagi kung nagsasagawa na ito ng maraming iba pang mga gawain nang sabay. Mas mahusay na ipamahagi ang pag-load ng computing sa pamamagitan ng pagtatalaga ng mga aktibidad na masinsinang sa oras sa mga nakatuon na processor hangga't maaari (mas mahusay na gawin ito sa hardware). Dahil sa I2C ay isang mahusay na dokumentado at matatag na pamamaraan ng komunikasyon sa pagitan ng mga IC, pinili ko ito bilang interface.

Panimula

Tulad ng nabanggit sa itaas ang itinuturo na ito ay naglalarawan kung paano makontrol ang mga domestic appliance tulad ng TV, DVD player at Satellite atbp gamit ang IRremote library sa Arduino.

Nagtatapos ito sa isang halimbawa ng disenyo na ginagawang Arduino sa isang module ng remote control na I2C (larawan 1 sa itaas) na may prototype test circuit (larawan 2 sa itaas) at patuloy na detalyado kung paano mapaliit ang iyong disenyo hanggang sa pinakamaliit na sangkap na kinakailangan upang maaari itong naka-embed sa isa pang disenyo. Sa aking kaso ginagamit ko ang naka-embed na aparato sa isang IoT Universal na remote control device na nakabatay sa paligid ng isang ESP8266-12E.

Anong mga bahagi ang kailangan ko?

Upang maitayo ang circuit na nakalarawan sa Hakbang 1 (IR Transmitter) kakailanganin mo ang mga sumusunod na bahagi;

  • 2 off 10K resistors
  • 1 off 390R risistor
  • 1 off 33R risistor
  • 1 off 3K8 risistor
  • 1 off Red LED
  • 1 off IR Led TSAL6400
  • 1 sa Transistor BC337
  • 1 off 220uF capacitor
  • 1 off Arduino Uno

Upang maitayo ang circuit na nakalarawan sa Hakbang 4 (IR Receiver) kakailanganin mo ang mga sumusunod na bahagi;

  • 1 off 10K risistor
  • 1 sa TSOP38328
  • 1 off 220uF capacitor
  • 1 off Arduino Uno

Upang maitayo ang circuit na nakalarawan sa Hakbang 5 (Slave test circuit) kakailanganin mo ang mga sumusunod na bahagi;

  • 4 off 10K resistors
  • 2 off 390R risistor
  • 1 off 33R risistor
  • 1 off 3K8 risistor
  • 2 off Red LED
  • 1 off IR Led TSAL6400
  • 1 sa Transistor BC337
  • 1 off 220uF capacitor
  • 2 off SPST Buttons
  • 2 off Arduino Unos

Upang maitayo ang circuit na nakalarawan sa Hakbang 6 (disenyo ng Shrunk) kakailanganin mo ang mga sumusunod na bahagi;

  • 3 off 10K resistors
  • 1 off 270R risistor
  • 1 off 15R risistor
  • 4 off 1K resistors
  • 1 off Red LED
  • 1 off IR Led TSAL6400 o TSAL5300
  • 1 sa Transistor BC337
  • 1 off 220uF capacitor electrolytic @ 6.3v
  • 1 off 1000uF capacitor electrolytic @ 6.3v
  • 2 off 0.1uF capacitor
  • 2 off 22pF capacitor
  • 1 sa 16MHz Xtal
  • 1 off ATMega328P-PU

Tandaan: Kakailanganin mo rin ang isang FTDI aparato upang mai-program ang ATMega328P

Anong mga kasanayan ang kailangan ko?

  • Isang kaunting pag-unawa ng electronics,
  • Kaalaman sa Arduino at ito ay IDE,
  • Kaunting pasensya,
  • Ang ilang pag-unawa sa I2C ay magiging kapaki-pakinabang (tingnan dito para sa ilang mga pangkalahatang detalye ng I2C / Wire Library).

Saklaw ang mga paksa

  • Maikling pangkalahatang ideya ng circuit,
  • Maikling pangkalahatang ideya ng software,
  • Nilalaman ng I2C Packet,
  • Pagkuha ng mga remote control code (ui32Data),
  • Paano subukan ang iyong aparato ng I2C Slave,
  • Pagliit ng iyong disenyo,
  • Konklusyon,
  • Ginamit na mga sanggunian.

Pagwawaksi

Tulad ng dati, ginagamit mo ang mga tagubiling ito sa iyong sariling peligro at hindi sinusuportahan.

Hakbang 1: Maikling Pangkalahatang-ideya ng Circuit

Maikling Pangkalahatang-ideya ng Circuit
Maikling Pangkalahatang-ideya ng Circuit

Ang layunin ng circuit ay upang magpadala ng mga IR code ng remote control. Ang disenyo ay medyo tuwid at medyo simple.

Kapag ang transistor Q1 isang BC337 NPN ay nakabukas sa pamamagitan ng isang lohika mula sa Arduino PWM O / P D3 hanggang sa Resistor R5, kasalukuyang dumadaan sa Leds 1 at 2. Limitado lamang ng mga ballast resistors na R3 at R4 ayon sa pagkakabanggit. Ang Q1 ay ginagamit upang mapalakas ang kasalukuyang dumadaan sa IR Diode (KUNG Max = 100mA) sa na labis sa kung ano ang may kakayahang Arduino O / P ~ 40mA @ + 5v supply.

Ang Capacitor C1 isang 220uF Electrolytic ay nagbibigay ng ilang pagpapatatag na pumipigil sa isang drop ng supply rail sa pamamagitan ng kuryenteng iginuhit ng Leds 1 at 2.

Ang mga resistors R1 at R2 ay mga pull up ng I2C.

Hakbang 2: Maikling Pangkalahatang-ideya ng Software

Maikling Pangkalahatang-ideya ng Software
Maikling Pangkalahatang-ideya ng Software
Maikling Pangkalahatang-ideya ng Software
Maikling Pangkalahatang-ideya ng Software
Maikling Pangkalahatang-ideya ng Software
Maikling Pangkalahatang-ideya ng Software

Panimula

Upang matagumpay na maipon ang source code na ito kakailanganin mo ang sumusunod na labis na library;

IRremote.h

  • Ni: z3t0
  • Layunin: Infrared remote library para sa Arduino: magpadala at tumanggap ng mga infrared signal na may maraming mga protokol
  • Mula sa:

Pangkalahatang-ideya ng Code

Tulad ng ipinakita sa larawan 1 sa itaas, sa pagsisimula ng pag-configure ng code ang micro-controller I / O pagkatapos ay i-poll ang katayuan ng panloob na flag ng software na 'bFreshDataFlag'. Kapag itinakda ang watawat na ito ang asserter ay nagpapatunay na ito ay 'Busy' na linya (pagpapadala ng data pin na D4 mababa) at lumilipat sa estado na 'eBUSY' na sunud-sunod na nagbasa ng mga pindutan ng pindutin ang hawak sa uDataArray at ipinapadala ang IR na may modulate na data sa IR LED sa isang pagkakasunud-sunod ng paghahatid.

Kapag ang data na gaganapin sa uDataArray ay ganap na naipadala, ang estado na 'eIDLE' ay ipagpatuloy at ang linya na 'Busy' ay de-asserted (nagpapadala ng data pin na D4 mataas). Handa na ang aparato na makatanggap ng higit pang mga pagpindot sa pindutan na nagmamarka sa pagtatapos ng pagkakasunud-sunod ng paghahatid.

Pagtanggap ng IR pindutin ang data

Kapag ang data ay ipinadala sa InfraRed remote control sa pamamagitan ng I2C nag-uudyok ito ng isang nakakagambala at ang callEvent () na tawag sa pag-andar ay na-trigger nang walang asynkron.

Kapag na-trigger ang natanggap na data ng I2C ay nakasulat nang sunud-sunod sa buffer 'uDataArray '.

Sa panahon ng pagtanggap ng data, kung ang isang dulo ng pagkakasunud-sunod ay sinenyasan ng master (bFreshData! = 0x00) ang 'bFreshDataFlag' ay nakatakda, sa gayon ay hudyat ng pagsisimula ng pagkakasunud-sunod ng paghahatid.

Ang mga larawan 2… 3 ay nagbibigay ng isang halimbawa ng isang tipikal na pagkakasunud-sunod ng packet.

Tandaan: Magagamit ang buong code ng mapagkukunan dito

Hakbang 3: Nilalaman ng I2C Packet

Nilalaman ng I2C Packet
Nilalaman ng I2C Packet

Ang format ng control packet na ipinadala sa alipin sa paglipas ng I2C ay ibinibigay sa itaas sa larawan 1 ang kahulugan ng bawat patlang ay ibinibigay sa ibaba

Kahulugan ng mga patlang ng control packet

byte bEncoding;

  • Ang pag-encode ng remote control ng IR,

    • RC6 (Sky) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

Ang hex na representasyon ng binary IR data stream 4 Data bytes (unsigned long), LSByte… MSByte

byte bNumberOfBitsInTheData;

Bilang ng mga Bits sa data (Max ng 32). Saklaw = 1… 32

byte bPulseTrainRepeats;

Ilan ang umuulit ng tren na ito ng pulso. Saklaw = 1… 255. Karaniwan 2… 4 na uulit. Maaaring gusto mong pahabain ito para sa mga utos na On / Off dahil ang tumatanggap na aparato kung minsan ay nangangailangan ng ilang mga labis na paulit-ulit na tren ng pulso upang makatanggap ng isang signal ng pag-on

byte bDelayBet AntaraPulseTrainRepeats;

Pag-antala sa pagitan ng pag-uulit ng tren ng pulso na ito. Saklaw = 1… 255mS. Karaniwan 22mS … 124mS

byte b ButtonRepeats;

Ginagaya ang paulit-ulit na pagpindot ng parehong pindutan (ngunit hindi sinusuportahan ang binagong code tulad ng isang remote ng Apple, inuulit lamang nito ang code ng pindutan). Saklaw = 1… 256. Default = 1

uint16_t ui16DelayBetweenButtonRepeats;

Pag-antala sa pagitan ng pag-uulit ng pindutan (unsigned int). 2 bytes sa kabuuang LSByte… MSByte. Saklaw = 1… 65535mS. Default = 0mS

byte bFreshData;

  • Sariwang data. Isang halagang hindi zero. Huling nakasulat, nagpapalitaw sa pagkakasunud-sunod ng IR TX. Saklaw ng 0x00… 0xFF

    • Higit pang mga control packet na darating = 0
    • Ito ang pangwakas na packet ng kontrol = Hindi-Zero na halaga 1, 2,… 255

Tandaan ang paggamit ng direktiba ng '_packed_' tagatala. Ito ay upang matiyak na ang data ay packet byte para sa byte sa memorya hindi alintana ang target na system na ginamit (Uno, Dahil, ESP8266 atbp.). Nangangahulugan ito na ang unyon sa pagitan ng registerAllocationType at dataArrayType ay kailangan lamang ng sunud-sunod na orasan / orasan sa mga byte mula sa isang control packet, ginagawang simple ang TX / RX software.

Hakbang 4: Pagkuha ng Mga Remote Control Code (ui32Data)

Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)
Pagkuha ng Mga Remote Control Code (ui32Data)

Mayroong tatlong paraan na maaari kang makakuha ng isang kani-kanilang remote control key code;

  1. Sa pamamagitan ng pagbibilang ng bit sa isang oscilloscope,
  2. Hanapin ito sa isang website,
  3. I-decode ito nang direkta mula sa stream ng data sa software.

Sa pamamagitan ng pagbibilang ng bit sa isang saklaw

Ito ay hindi isang mahusay na pamamaraan dahil tumatagal ng ilang oras at potensyal na nangangailangan ng higit sa isang pagtatangka, subalit maaari itong maging lubos na tumpak. Kapaki-pakinabang din ito sa mga biswal na pagpapatunay ng mga code na nakuha gamit ang mga pamamaraan 2 at 3, din sa pagtukoy ng anumang mga kakaibang katangian ng isang remote. Sa pamamagitan ng halimbawa bilang pagpindot ng isang pindutan sa isang Apple IR remote. Ang remote ay unang maglalabas ng isang pagkakasunud-sunod ng utos pagkatapos ay sundin iyon sa isang paulit-ulit na naka-compress na pagkakasunud-sunod ng 0xF ….

Hanapin ito sa isang website

Ang database ng remote control code sa web site ng Infrared na Remote Control ng Linux ay isang mahusay na mapagkukunan.

Ang downside gayunpaman, ay maaaring kailangan mong subukan ang ilang mga code hanggang sa makita mo ang isa na gagana para sa iyo. Maaari mo ring bigyang-kahulugan ang ilan sa mga representasyon ng mga code upang i-convert ang mga ito sa kanilang katumbas na form na hex.

I-decode ito direkta mula sa stream ng data

Gamit ang circuit sa larawan 1 sa itaas kasabay ng halimbawa ng IRremote library na 'IRrecvDumpV2.ino' posible na mai-decode ang data stream na direkta mula sa remote. Ipinapakita ng larawan 2 ang isang naka-decode na remote ng Samsung TV para sa isang on / off button na pindutin sa Arduino IDE terminal window.

Pinagsamang Tagatanggap / Transmitter

Ang mga larawan 3 at 4 sa itaas ay naglalarawan ng isang solusyon na nagbibigay-daan para sa parehong pagtanggap at paghahatid ng utos ng IR upang payagan ang madaling prototyping.

Upang ma-decode ang mga pindutan ng remote control ng IR kakailanganin mong i-flash ang Arduino gamit ang halimbawang 'IRrecvDumpV2.ino' na kasama ng IRremote library.

Gumagawa din ito ng pantay na mahusay para sa paghahatid kung ang mga utos ng IR. Ang isang pulang led ay kasama bilang isang visual na indikasyon na ang aparato ay kumikilos.

Hakbang 5: Paano Subukin ang Iyong I2C Slave Device

Paano Masubukan ang I2C Slave Device mo
Paano Masubukan ang I2C Slave Device mo
Paano Masubukan ang I2C Slave Device mo
Paano Masubukan ang I2C Slave Device mo

Gamit ang source code dito, at ang circuit na nakabalangkas sa itaas sa larawan 1, i-program ang 'Master' Arduino na may 'IR_Remote_Sim_Test.ino' at ang 'Slave' Arduino na may 'IR_Remote_Sim.ino'.

Ipagpalagay na mayroon kang isang Sony Bravia TV, Sky HD box at isang Sony BT SoundBar, pindutin ang pindutan ng 1 at ang iyong TV ay lilipat sa BBC1 (channel 101). Pindutin ang pindutan 2 at ang iyong sound bar ay pipi. Pindutin muli at ito ay mai-mute.

Sa panahon ng pagpapatupad ng pagkakasunud-sunod ng paghahatid ng IR, ang LED3 ay magpapailaw na nagpapahiwatig na abala ang alipin at ang LED1 ay magpapitik sa linya ng proseso ng paghahatid ng IR.

Siyempre kung wala kang parehong sistema ng entertainment na na-set up tulad ng nasa itaas, maaari mong i-program muli ang alipin sa 'IRrecvDumpV2.ino', i-decode ang iyong mga remote na utos ng interes, pagkatapos ay i-program ang mga ito sa 'IR_Remote_Sim_Test.ino' para sa iyong ibinigay na senaryo

Ipinapakita ng larawan 2 ang pangkalahatang-ideya ng software ng antas ng pagsubok sa pagitan ng Master at Alipin.

Hakbang 6: Pagliit ng Iyong Disenyo

Pagliit ng Iyong Disenyo
Pagliit ng Iyong Disenyo

Ok, kaya't sa pag-aakalang nasunod mo ang itinuturo na pag-asa sa dalawang Arduino upang makontrol ang iyong mga aparato sa bahay ay hindi ang pinaka mahusay na paggamit ng iyong Arduino stock. Dahil dito kung itinatayo mo ang circuit na ipinapakita sa larawan sa itaas at sundin ang mga tagubilin dito upang mai-program ang ATMega328P na may 'IR_Remote_Sim.ino', mababawas mo ang buong system sa kaunting mga sangkap. Papayagan ka nitong i-embed ang iyong disenyo sa ilang iba pang system.

Hakbang 7: Konklusyon

Konklusyon
Konklusyon
Konklusyon
Konklusyon

Ang solusyon ay matatag at gumagana nang maayos, na-embed sa ibang system sa loob ng ilang linggo ngayon nang walang mga isyu.

Pinili ko ang Arduino Uno R3 na gusto ko ng isang aparato na may sapat na RAM tulad na maaari akong magkaroon ng isang button buffer ng makatuwirang lalim. Nag-ayos ako para sa isang laki ng buffer na 20 mga packet (MAX_SEQUENCES).

Ang Hybrid TX / RX na kalasag na aking ginawa ay dumating din sa napaka madaling gamiting pag-decode ng mga remote control ng Sony at Sky. Kahit na kailangan kong kumpirmahin gamit ang aking digital na saklaw paminsan-minsan upang suriin ang software na na-decode ang utos ng IR ay kapareho ng nagmumula sa IR na natanggap (TSOP38328).

Ang nag-iisang bagay na gagawin ko sana nang iba ay ang paggamit ng pare-pareho ang kasalukuyang circuit ng drive para sa IR na humantong tulad ng ipinakita sa itaas sa larawan 2.

Ang isang karagdagang punto na dapat tandaan ay, hindi lahat ng mga IR transmitter ay binago sa 38KHz, ang TSOP38328 ay na-optimize para sa 38KHz.

Hakbang 8: Ginamit na Mga Sanggunian

IRRemote.h

  • Ni: z3t0
  • Layunin: Infrared remote library para sa Arduino: magpadala at tumanggap ng mga infrared signal na may maraming mga protokol
  • Mula sa:

IR Remote na silid-aklatan

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

IR (Infrared) Receiver Sensor - TSOP38238 (katumbas)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

Upang maiwasan ang padding ng istraktura ng data sa mga hangganan ng salita

  • 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-attribut-packed-aligned4

Mahusay na mapagkukunan ng mga malalayong detalye ng IR

https://www.sbprojects.com/ fahalalana/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReferensi
  • https://www.arduino.cc/en/Referensi/WireSend

IR Remotes Database

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

BC337 Datasheet

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

1N4148 Datasheet

https://www.vishay.com/docs/81857/1n4148.pdf

ATMega328P-PU Datasheet

Inirerekumendang: