Innehållsförteckning:
- Steg 1: Kort översikt över kretsen
- Steg 2: Kort översikt över programvaran
- Steg 3: I2C -paketinnehåll
- Steg 4: Skaffa fjärrkontrollkoder (ui32Data)
- Steg 5: Hur man testar din I2C -slavenhet
- Steg 6: Minskar din design
- Steg 7: Slutsats
- Steg 8: Referenser används
Video: I2C InfraRed fjärrkontroll med Arduino: 8 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Den här instruktionen beskriver hur du skapar en universell fjärrkontroll med I2C för gränssnittet.
Hur udda säger du att du använder en I2C -slavenhet?
Ja, en I2C -slavenhet.
Detta beror på att den exakta tidpunkten för IR -paket är ganska krävande och ett typiskt Arduino kommer att kämpa med om det redan utför många andra uppgifter samtidigt. Det är bättre att fördela datorbelastningen genom att tilldela dedikerade processorer när det är möjligt med tidkrävande aktiviteter (bättre gör det fortfarande i hårdvara). Med tanke på att I2C är en väldokumenterad och robust kommunikationsmetod mellan IC: er, valde jag detta som gränssnitt.
Introduktion
Som nämnts ovan beskriver denna instruktionsbok hur man styr hushållsapparater som TV, DVD -spelare och satellit etc. med hjälp av IRremote -biblioteket på Arduino.
Den avslutas med ett designexempel som förvandlar Arduino till en I2C -slavfjärrkontrollmodul (bild 1 ovan) med prototyptestkrets (bild 2 ovan) och fortsätter med detaljer om hur du minskar din design till de minimikomponenter som behövs så att den kan vara inbäddad i en annan design. I mitt fall använder jag den här inbäddade enheten i en IoT Universal fjärrkontroll baserad på en ESP8266-12E.
Vilka delar behöver jag?
För att bygga kretsen som visas i steg 1 (IR -sändare) behöver du följande delar;
- 2 av 10K motstånd
- 1 av 390R motstånd
- 1 av 33R -motstånd
- 1 av 3K8 motstånd
- 1 av Röd LED
- 1 av IR Led TSAL6400
- 1 av Transistor BC337
- 1 av 220uF kondensator
- 1 av Arduino Uno
För att bygga kretsen som visas i steg 4 (IR -mottagare) behöver du följande delar;
- 1 av 10K motstånd
- 1 rabatt på TSOP38328
- 1 av 220uF kondensator
- 1 av Arduino Uno
För att bygga kretsen som visas i steg 5 (slavtestkrets) behöver du följande delar;
- 4 av 10K motstånd
- 2 av 390R motstånd
- 1 av 33R -motstånd
- 1 av 3K8 motstånd
- 2 av röd LED
- 1 av IR Led TSAL6400
- 1 av Transistor BC337
- 1 av 220uF kondensator
- 2 av SPST -knappar
- 2 av Arduino Unos
För att bygga kretsen som visas i steg 6 (krympt design) behöver du följande delar;
- 3 av 10K motstånd
- 1 av 270R motstånd
- 1 av 15R motstånd
- 4 av 1K motstånd
- 1 av Röd LED
- 1 av IR Led TSAL6400 eller TSAL5300
- 1 av Transistor BC337
- 1 av 220uF kondensator elektrolytisk @ 6.3v
- 1 av 1000uF kondensator elektrolytisk @ 6,3v
- 2 av 0,1 uF kondensatorer
- 2 av 22pF kondensatorer
- 1 av 16MHz Xtal
- 1 rabatt på ATMega328P-PU
Obs! Du behöver också en FTDI -enhet för att programmera ATMega328P
Vilka färdigheter behöver jag?
- Ett minimalt grepp om elektronik,
- Kunskap om Arduino och dess IDE,
- Lite tålamod,
- Viss förståelse av I2C skulle vara användbart (se här för några generiska I2C/Wire Library -detaljer).
Ämnen som behandlas
- Kort översikt över kretsen,
- Kort översikt över programvaran,
- I2C -paketinnehåll,
- Skaffa fjärrkontrollkoder (ui32Data),
- Hur man testar din I2C Slave -enhet,
- Minskar din design,
- Slutsats,
- Referenser används.
varning
Som alltid använder du dessa instruktioner på egen risk och de kommer inte att stödjas.
Steg 1: Kort översikt över kretsen
Syftet med kretsen är att överföra IR -fjärrkontrollkoder. Dess design är ganska rak och ganska enkel.
När transistorn Q1 aktiveras en BC337 NPN via en logisk från Arduino PWM O/P D3 till motstånd R5, passerar ström genom lysdioderna 1 och 2. Begränsas endast av ballastmotstånd R3 respektive R4. Q1 används för att öka strömmen som passerar genom IR -dioden (IF Max = 100mA) till det som överstiger vad Arduino O/P har ~ 40mA @ +5v matning.
Kondensator C1 a 220uF Electrolytic ger viss stabilisering som förhindrar att en matningsskena tappar av kraften från lysdioderna 1 och 2.
Motstånden R1 och R2 är I2C pull -ups.
Steg 2: Kort översikt över programvaran
Inledning
För att lyckas sammanställa denna källkod behöver du följande extrabibliotek;
IRremote.h
- Av: z3t0
- Syfte: Infrarött fjärrbibliotek för Arduino: skicka och ta emot infraröda signaler med flera protokoll
- Från:
Kodöversikt
Som visas på bild 1 ovan, vid uppstart, konfigurerar koden mikrokontrollerens I/O och sedan undersöker statusen för den interna mjukvaruflaggan "bFreshDataFlag". När denna flagga är inställd hävdar styrenheten att den är "Upptagen" -linje (sänder datastift D4 låg) och flyttar till "eBUSY" -läget sekventiellt läser knapptryckningskommandon som hålls i uDataArray och skickar IR -modulerade data till IR -lysdioden i en överföringssekvens.
När data som finns i uDataArray har skickats helt, återupptas tillståndet 'eIDLE' och 'Upptagen' rad avaktiveras (skickar datastift D4 högt). Enheten är nu redo att ta emot fler knapptryckningar som markerar slutet på överföringssekvensen.
Mottagning av IR -knapptrycksdata
När data skickas till InfraRed -fjärrkontrollen via I2C utlöser det ett avbrott och funktionen callEvent () utlöses asynkront.
När den mottagna I2C -data väl har utlösts skrivs sekventiellt i bufferten 'uDataArray '.
Under datamottagning, om ett slutet av sekvensen signaleras av mastern (bFreshData! = 0x00) ställs 'bFreshDataFlag' in, vilket signalerar start av överföringssekvensen.
Bilder 2 … 3 ger ett exempel på en typisk paketsekvens.
Obs! Full källkod finns här
Steg 3: I2C -paketinnehåll
Formatet för kontrollpaketet som skickas till slaven över I2C ges ovan i bild 1, betydelsen av varje fält ges nedan
Betydelsen av kontrollpaketfälten
byte bKodning;
-
IR -fjärrkontrollkodning,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Hexrepresentation av den binära IR -dataströmmen 4 Databyte (osignerad lång), LSByte … MSByte
byte bNumberOfBitsInTheData;
Antal bitar i data (max 32). Område = 1… 32
byte bPulseTrainRepeats;
Hur många repetitioner av detta pulståg. Område = 1… 255. Vanligtvis 2 … 4 upprepningar. Du kanske vill förlänga detta för På/Av -kommandon eftersom mottagarenheten ibland kräver några extra pulstågsupprepningar för att få en påslagningssignal
byte bDelayBetweenPulseTrainRepeats;
Fördröjning mellan upprepningar av detta pulståg. Område = 1… 255mS. Vanligtvis 22mS … 124mS
byte bButtonRepeats;
Simulerar upprepad tryckning på samma knapp (men stöder inte den modifierade koden som en Apple -fjärrkontroll, den upprepar bara knappkoden). Område = 1… 256. Standard = 1
uint16_t ui16DelayBetweenButtonRepeats;
Fördröjning mellan knappupprepningar (osignerad int). 2 byte totalt LSByte … MSByte. Område = 1… 65535mS. Standard = 0 ms
byte bFreshData;
-
Färsk data. Ett värde som inte är noll. Skrivet sist, utlöser IR TX -sekvensen. Område 0x00 … 0xFF
- Fler kontrollpaket kommer = 0
- Detta är det slutliga kontrollpaketet = Icke-nollvärde 1, 2, … 255
Observera användningen av kompileringsdirektivet '_packed_'. Detta för att säkerställa att data är paketbyte för byte i minnet oavsett målsystem som används (Uno, Due, ESP8266 etc.). Detta innebär att föreningen mellan registerAllocationType och dataArrayType endast behöver sekvensvis klocka ut/klocka in byte från ett kontrollpaket, vilket gör TX/RX -programvaran enkel.
Steg 4: Skaffa fjärrkontrollkoder (ui32Data)
Det finns tre sätt att skaffa en respektive fjärrkontrollnyckelkod;
- Via biträkning med ett oscilloskop,
- Leta upp det på en webbplats,
- Avkoda det direkt från dataströmmen i programvaran.
Via biträkning med ett omfång
Detta är inte en effektiv metod eftersom det tar ganska lång tid och potentiellt kräver mer än ett försök, men det kan vara mycket exakt. Det är också användbart vid visuell validering av koder som erhållits med hjälp av metod 2 och 3, även för att bestämma alla särdrag hos en fjärrkontroll. Som exempel när du håller ned en knapp på en Apple IR -fjärrkontroll. Fjärrkontrollen kommer initialt att utfärda en kommandosekvens och sedan följa den med en upprepad komprimerad sekvens på 0xF….
Leta upp det på en webbplats
Fjärrkontrollkoddatabasen på Linux Infrared Remote Control -webbplatsen är en bra källa.
Nackdelen är dock att du kanske måste prova några koder tills du hittar en som fungerar för dig. Du kan också behöva tolka några av kodernas representationer för att konvertera dem till motsvarande hexform.
Avkoda det direkt från dataströmmen
Med kretsen i bild 1 ovan i samband med IRremote -biblioteksexemplet 'IRrecvDumpV2.ino' är det möjligt att avkoda dataströmmen direkt från fjärrkontrollen. Bild 2 visar en avkodad Samsung TV -fjärrkontroll för på/av -knapptryckning i Arduino IDE -terminalfönstret.
Kombinerad mottagare/sändare
Bilderna 3 och 4 ovan visar en lösning som möjliggör både mottagning och överföring av IR -kommando för enkel prototypering.
För att avkoda IR -fjärrkontrollens knapptryckningar måste du blinka Arduino med exemplet 'IRrecvDumpV2.ino' som medföljer IRremote -biblioteket.
Det fungerar också lika bra för överföring om IR -kommandon. En röd lysdiod ingår som en visuell indikation på att enheten är i funktion.
Steg 5: Hur man testar din I2C -slavenhet
Använd källkoden här och kretsen som beskrivs ovan i bild 1, programmera 'Master' Arduino med 'IR_Remote_Sim_Test.ino' och 'Slave' Arduino med 'IR_Remote_Sim.ino'.
Förutsatt att du har en Sony Bravia TV, Sky HD -box och en Sony BT SoundBar, tryck på knapp 1 och din TV växlar till BBC1 (kanal 101). Tryck på knapp 2 så stängs ljudet av. Tryck igen så stängs ljudet av.
Under utförandet av IR -överföringssekvensen tänds LED3 för att indikera att slaven är upptagen och LED1 kommer att flimra i linje med IR -överföringsprocessen.
Naturligtvis, om du inte har samma underhållningssystem som ovan, kan du programmera om slaven med 'IRrecvDumpV2.ino', avkoda dina fjärrkommandon av intresse och sedan programmera dem till 'IR_Remote_Sim_Test.ino' för din givet scenario.
Bild 2 visar översikt över systemnivå testprogramvara mellan Master och Slave.
Steg 6: Minskar din design
Ok, så förutsatt att du har följt denna instruerbara förlita sig på två Arduinos för att styra dina hem enheter är inte den mest effektiva användningen av din Arduino lager. Följaktligen, om du konstruerar kretsen som visas på bilden ovan och följer instruktionerna här för att programmera ATMega328P med 'IR_Remote_Sim.ino', kommer du att kunna reducera hela systemet till de minimala komponenterna. Detta gör att du kan bädda in din design i något annat system.
Steg 7: Slutsats
Lösningen är stabil och fungerar bra, den har varit inbäddad i ett annat system i ganska många veckor nu utan problem.
Jag valde Arduino Uno R3 eftersom jag ville ha en enhet som hade tillräckligt med RAM så att jag kunde ha en knappbuffert av rimligt djup. Jag nöjde mig med en buffertstorlek på 20 paket (MAX_SEQUENCES).
Hybrid TX/RX -skölden som jag gjorde var också mycket användbar vid avkodning av fjärrkontroller från Sony och Sky. Även om jag måste erkänna att jag använde mitt digitala omfång då och då för att kontrollera att programvarans avkodade IR -kommando var detsamma som det som kom från IR -mottaget (TSOP38328).
Det enda jag skulle ha gjort annorlunda skulle ha varit att använda konstantströmkretsen för IR -lysdioden som visas ovan på bild 2.
En ytterligare punkt att notera är att inte alla IR -sändare är modulerade med 38KHz, TSOP38328 är optimerad för 38KHz.
Steg 8: Referenser används
IRRemote.h
- Av: z3t0
- Syfte: Infrarött fjärrbibliotek för Arduino: skicka och ta emot infraröda signaler med flera protokoll
- Från:
IR fjärrbibliotek
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IR (infraröd) mottagarsensor - TSOP38238 (motsvarande)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
För att undvika att datastrukturen fylls med ordgränser
- 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
Bra källa till IR -fjärrdetaljer
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR -fjärrdatabas
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Datablad
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Datablad
https://www.vishay.com/docs/81857/1n4148.pdf
ATMega328P-PU-datablad
Rekommenderad:
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter - Rc helikopter - RC -plan med Arduino: 5 steg (med bilder)
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter | Rc helikopter | Rc -plan med Arduino: Att driva en Rc -bil | Quadcopter | Drone | RC -plan | RC -båt, vi behöver alltid en mottagare och sändare, antag att för RC QUADCOPTER behöver vi en 6 -kanals sändare och mottagare och den typen av TX och RX är för dyr, så vi kommer att göra en på vår
Hur man styr hushållsapparater med TV -fjärrkontroll med timerfunktion: 7 steg (med bilder)
Så här kontrollerar du hushållsapparater med fjärrkontroll med TV -funktion: Även efter 25 års introduktion till konsumentmarknaden är infraröd kommunikation fortfarande mycket relevant de senaste dagarna. Oavsett om det är din 55 -tums 4K -TV eller ditt billjudsystem behöver allt en IR -fjärrkontroll för att svara på vår
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Konvertera din IR -fjärrkontroll till RF -fjärrkontroll: 9 steg (med bilder)
Konvertera din IR -fjärrkontroll till RF -fjärrkontroll: I dagens Instructable visar jag dig hur du kan använda en generisk RF -modul utan en mikrokontroller som så småningom kommer att leda oss till att bygga ett projekt där du kan konvertera en IR -fjärrkontroll från vilken enhet som helst till en RF Avlägsen. Den största fördelen med att konvertera en
Styr dina elektriska apparater med din fjärrkontroll för fjärrkontroll (IR -fjärrkontroll) med temperatur- och luftfuktighetsdisplay: 9 steg
Styr dig elektriska apparater med din TV -fjärrkontroll (ir -fjärrkontroll) med temperatur- och luftfuktighetsdisplay: hej jag är Abhay och det är min första blogg om Instructables och idag ska jag visa dig hur du styr dina elektriska apparater med din fjärrkontroll genom att bygga detta enkelt projekt. tack till atl lab för stöd och tillhandahållande av materialet