Innehållsförteckning:
- Tillbehör
- Steg 1: Bygga kretsen:
- Steg 2: Kod:
- Steg 3: Kod i djupet: Skicka IR -signaler
- Steg 4: Kod i djupet: Ta emot IR -signaler
- Steg 5: Slutsats
Video: Universal TV -fjärrkontroll - Ardiuino, infraröd: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
Hej! I denna instruerbara, ska jag visa dig hur du bygger och programmerar din egen universella fjärrkontroll som fungerar med det mesta som använder en infraröd fjärrkontroll, och som också "lyssnar" och avkodar en infraröd signal som skickas av olika andra fjärrkontroller.
Lite bakgrund till vad som inspirerade mig att bygga den här fjärrkontrollen - jag, som de flesta av er, tappar mina fjärrkontroller ständigt, och denna olycka är ganska frustrerande, så jag tänker att jag kan lösa det! Jag har byggt den här fjärrkontrollen och diskret inbäddat den i min specialbyggda sängram (jag är också en träarbetare) - jag kan inte tappa fjärrkontrollen om den är en del av min sängram!
Tillbehör
Saker du behöver: -Arduino UNO eller Nano - körsträcka kan variera med andra brädor
-Lödlös brödbräda (eller lödbar bandbräda om du vill göra den mer permanent)
-Tröjor i olika färger och längder
-Momentära tryckknappar (5) (du kan lägga till fler knappar, men du måste använda digitala stift, eftersom alla utom 1 av de analoga stiften används - du måste se till att du korrekt använder pull -up -motstånd, eller dra ned motstånden, och tryck ner tryckknapparna)
-10K Ohm motstånd (5) (om du vill ha fler tryckknappar behöver du fler av dessa)
-470 Ohm motstånd (2)
-Infraröd LED
-Röd LED
-Infraröd sensor (jag använde artikelnummer VS1838B, du kan använda en annan, kolla bara pin-out)
(Valfritt) Lödkolv, Löd, Lödflöde.
Steg 1: Bygga kretsen:
1). Jag gillar alltid att börja med att lägga ut mina komponenter, eftersom detta alltid driver layouten på brödbrädan.
-Trycka på knappar
-LEDS: den röda lysdioden och IR -lysdioden är anslutna parallellt, så att du kan se vad IR -lysdioden gör.
-Sensor
2). Motstånd
- De fem 10K -motstånden som vi har kopplat till tryckknapparna kallas "pull down" -motstånd. Dra ned motstånden se till att när en tryckknapp inte trycks in får motsvarande Arduino -stift 0 volt (eller åtminstone nära den). För mer information om pull down (eller pull up) motstånd här är en djupgående guide:
www.electronics-tutorials.ws/logic/pull-up…
Dessa motstånd är kanske inte helt nödvändiga, men om du får "spök" -tryck orsakas det mer än troligt av kapacitiv koppling och neddragningsmotstånd förhindrar detta.
3). Kretsledningar
4). 5V och jordledningar
Använd bilden som referens! var inte rädd för att ändra det för dina behov!
Steg 2: Kod:
#include const int RECV_PIN = 7; // IR -sensor läs stift int Knapp1 = A4; // Längst längst vänster int Knapp2 = A3; // 2: a från vänster int Knapp3 = A2; // Mitt int -knapp4 = A1; // 2: a till höger int Knapp5 = A0; // Längst till höger int LED = 3; // IR LED & Röd LED int val = 0; // Ändra värde IRsend irsend; IRrecv irrecv (RECV_PIN); resultat avkodningsresultat;
void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, OUTPUT); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // använder analog läsning i stället för digital läsning för att undvika problem med kapacitans. hjälper också till att avbryta knapparna. // Med analog läsning på 900 möjliggör viss vridning i värdena, vilket betyder att infrasignalen kommer att skickas även om en fullständig 5V inte appliceras på stiftet. // men 900 är tillräckligt hög för att inte läsa felaktigt på grund av kapacitiv kopplingsfördröjning (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // Om du ändrar värdet i "i <3" ändras antalet gånger signalen upprepas omedelbart. så "i <2" kommer att upprepa signalen två gånger. // du kan behöva leka med det här numret om din TV inte svarar, vanligtvis fungerar 1 eller 3 mest, om de inte gör det, prova udda tal. // du kan också behöva spela med värdena för fördröjning av intrasignaler, till exempel för min TV 10 fungerar, men 30 gör det inte. {irsend.sendSony (0xa90, 12); // Sony TV -strömkod, för min TV måste koden skickas 3x3, så 3 pulser, tre separata gånger fördröjning (10); // "intra signal delay" för (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" är bitnumret, olika protokoll kräver olika bitnummer. NEC är 32, Sony är 12, du kan slå upp de andra fördröjningen (10); för (int i = 0; i 900) {för (int i = 0; i 900) {för (int i = 0; i 900) {för (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Sony TV -ström Volym nedfördröjning (100);}}} fördröjning (100);} om (irrecv.decode (& resultat)) // nedanstående del av koden gör att du kan tolka infraröda signaler från olika fjärrkontroller. {Serial.println (results.value, HEX); // det kommer att generera proceduren "NEC, Sony, Etc.." och en TV -kod "c90, a90, FF02FD" du måste lägga till 0x på framsidan av TV -kodbrytaren (results.decode_type) {case DENON: Serial.println ("DENON"); ha sönder; fall NEC: Serial.println ("NEC"); ha sönder; fall PANASONIC: Serial.println ("PANASONIC"); ha sönder; case SONY: Serial.println ("SONY"); ha sönder; fall RC5: Serial.println ("RC5"); ha sönder; fall JVC: Serial.println ("JVC"); ha sönder; fall SANYO: Serial.println ("SANYO"); ha sönder; fall MITSUBISHI: Serial.println ("MITSUBISHI"); ha sönder; fall SAMSUNG: Serial.println ("SAMSUNG"); ha sönder; fodral LG: Serial.println ("LG"); ha sönder; fall RC6: Serial.println ("RC6"); ha sönder; skålen SKÅL: Serial.println ("SKÅL"); ha sönder; fall SHARP: Serial.println ("SHARP"); ha sönder; fall WHYNTER: Serial.println ("WHYNTER"); ha sönder; fall AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); ha sönder; standard: fall okänt: Serial.println ("Okänt"); break;} irrecv.resume ();}}
Steg 3: Kod i djupet: Skicka IR -signaler
Jag kommer att hänvisa till kodrader efter deras radnummer - för att följa med, använd den här länken:
pastebin.com/AQr0fBLg
Först måste vi inkludera IR Remote Library med z3t0.
Här är en länk till biblioteket:
github.com/z3t0/Arduino-IRremote
Om du behöver en guide om hur du laddar ner ett bibliotek korrekt och installerar det i IDE:
www.arduino.cc/en/guide/libraries
Rad 1 inkluderar biblioteket.
Därefter måste vi deklarera några variabler, rad 2-12 gör detta.
Vi använder "cost int" för att definiera variabler som inte kommer att förändras, alla utom en faller i denna kategori.
Vi använder "int" för att definiera variabler som kommer att förändras.
Vi måste använda en stift med puls med modulering (PWM) för vår LED -stift - alla stift som har "~" bredvid det kommer att räcka, i min kod - vi använder digital stift 3.
Därefter måste vi göra lite inställningar - den här koden körs bara en gång när Arduino startas eller återställs.
Lägg märke till att vi definierar våra ingångar och utgångar (15-20), startar seriell bildskärm (21), aktiverar IR-sensorn (22) och säger åt Arduino att blinka den inbyggda lysdioden närhelst vi får en signal i sensorn (23).
Därefter kommer vi att bygga ut vår slinga - den här koden körs upprepade gånger, går uppifrån och ner en handfull gånger i sekunden.
På rad 25 använder vi ett if -uttalande, detta berättar för Arduino "leta efter dessa specifika kriterier, om dessa kriterier är uppfyllda, gör den här specifika saken". I det här fallet är kriterierna analogRead (Knapp1)> 900, eller med andra ord - "Arduino, titta på knapp1, som vi definierade som stift A4 tidigare, om den analoga signalen som tas emot är större än 900, fortsätt till våra nästa instruktioner, om inte, gå vidare ". Det finns lite att packa upp här, så låt oss dyka in: en analog signal på Arduino är ett värde som är lika med eller mindre än 5V, med 5V lika med 1023 och 0V lika med 0. Varje given spänning mellan 0 och 5V kan definieras med ett tal, och med lite matematik kan vi räkna ut det talet, eller vice versa, en spänning. Dela 1024 (vi inkluderar 0 som enhet) med 5, vilket ger oss 204,8. Till exempel använder vi talet 900, för att översätta det till spänning delar vi helt enkelt 900 med 204,8, vilket ger oss ~ 4,4V. Vi säger åt Arduino att leta efter en spänning som är större än ~ 4,4 volt, och om det är det, gör vår nästa instruktion.
På tal om nästa instruktion (rad 25) ser vi irsend.sendNEC (0xFF02FD, 32). Detta säger "Arduino, skicka en modulerad puls som följer NEC -protokollet, specifikt FF02FD -signalen, och se till att den är 32 bitar lång". Detta kommer att få vår IR -LED att flimra på sätt som andra enheter kan förstå. Tänk på det lite som Morse Code, men bara med osynligt ljus! Det finns många olika protokoll där ute, var och en med hundratals om inte tusentals individuella signaler, och var och en med sitt specifika bitnummer - vår enhet kommer att kunna känna igen en stor mängd av dessa signaler, men vi kommer att dyka in i det senare!
På rad 28 har vi vår första fördröjning - detta är här för att förhindra oavsiktliga upprepningssignaler, när knappen trycks in och IR -signalen skickas har vi 100 millisekunder för att få bort fingret från knappen. det låter inte som mycket tid, men i praktiken verkar det fungera bra. fördröjningsfunktionen berättar för Arduino "gör ingenting för X millisekunder" och som referens är de 1000 millisekunder på en sekund.
Gå vidare till vår nästa knapp på rad 29, knapp 5 (jag hade ursprungligen 4 knappar på den här fjärrkontrollen, lade till en femte, så det är därför vi är ur funktion). Detta är i anda samma sak som knapp 1, men med några viktiga skillnader. Den första skillnaden du ser är en for statement - detta är i huvudsak en annan loop - en loop med en annan större loop, loopception. Specifikt har vi "för (int i = 0; i <3; i ++)", läs detta som "Arduino, låt oss börja med 0, upprepa följande instruktioner tills vi når 3 gånger". Funktionen för används eftersom många enheter är programmerade för att leta efter en upprepad signal, och i vårt fall här, 3 gånger. Du kan helt enkelt ändra nummer 3 till ett annat nummer om din enhet kräver ett annat upprepningsschema. En annan viktig skillnad med knapp 5 är att den upprepas igen, 3 gånger eller 3x3. Med andra ord skickar vi signalen 3 gånger, väntar 10 millisekunder, skickar den igen 3 gånger, väntar ytterligare 10 millisekunder och skickar den sedan 3 gånger igen. Denna typ av kommunikation är vanlig för att slå på och stänga av enheter och kan bara vara vad din TV eller enhet kräver - nyckeln till detta är att leka med alla variabler tills du får önskat resultat. Ändra det korta fördröjningsvärdet, ändra värdet för upprepning, skicka 6 satser istället för 3, etc. Enheter är avsiktligt programmerade med godtyckliga signalregler, tänk om din TV -fjärrkontroll skickade samma typsignal som din soundbar; varje gång du bytte kanal på din TV stängdes din soundbar av - det är därför det finns olika signalregler.
De tre nästa knapparna är programmerade med samma principer, åtminstone delvis, beskrivna ovan - så att vi kan hoppa ända ner till rad 55.
Steg 4: Kod i djupet: Ta emot IR -signaler
På rad 55 börjar vi programmera Arduino för att tolka IR -signaler som skickas av andra fjärrkontroller - detta är nödvändigt så att du kan räkna ut de protokoll och signaler som dina fjärrkontroller använder. Den första kodraden på rad 55 är om (irrecv.decode (& resultat) läser detta som "Arduino, leta efter en IR -kod, om du hittar en, returnera ett sant värde, om ingenting hittas, returnera false. När det är sant, spela in informationen till "resultat" ".
Vidare till rad 56 har vi Serial.println (results.value, HEX) där det står "Ardunio, skriv ut resultaten i seriell bildskärm i ett HEX -format". Hex, som betyder hexadecimal, är ett sätt att förkorta en binär sträng (bara 0: or och 1: or) till något som är lite lättare att skriva. Till exempel är 101010010000 "a90", koden som används för att slå av och på min TV och 111111110000001011111101 är 0xFF02FD, som styr min RGB -remsa. Du kan använda diagrammet ovan för att konvertera binärt till hex, och vice versa, eller så kan du använda följande länk:
www.rapidtables.com/convert/number/hex-to-…
Ned till rad 57 har vi en ny funktion, kallad ett switch case.
I huvudsak tillåter ett switchfall oss att specificera olika instruktioner baserat på resultaten av en given variabel (case). pausen lämnar switch -satsen och används i slutet av varje sats.
Vi använder switchväskan här för att ändra hur vi skriver ut i den seriella bildskärmen baserat på de protokoll som vår Arduino känner av från de olika fjärrkontrollerna.
Steg 5: Slutsats
Om du har en fråga - hör av dig till mig här! Jag är glad att försöka hjälpa dig så gott jag kan.
Jag hoppas att du har lärt dig något som du kan använda för att göra ditt liv lite bättre!
-RB
Rekommenderad:
Raspberry Pi - TMD26721 Infraröd digital närhetsdetektor Java Handledning: 4 steg
Raspberry Pi-TMD26721 Infraröd digital närhetsdetektor Java Tutorial: TMD26721 är en infraröd digital närhetsdetektor som tillhandahåller ett komplett närhetsdetekteringssystem och digital gränssnittslogik i en enda 8-polig ytmonteringsmodul. noggrannhet. Ett proffs
IOT Smart infraröd termometer (COVID-19): 3 steg
IOT Smart infraröd termometer (COVID-19): På grund av COVID-upproret 2019 bestämde vi oss för att göra en IOT Smart infraröd termometer som ansluter till smarta enheter för att visa den registrerade temperaturen, detta är inte bara ett billigare alternativ, utan också ett bra undervisningsmodul för teknik och IOT som
Infraröd lampa: 4 steg
Infraröd lampa: Detta projekt visar en infraröd lampa som tänds i en halv minut efter att den fått en signal från en TV -infraröd fjärrkontroll. Du kan se kretsen som fungerar i videon. Jag konstruerade en krets med BJT -transistorer efter att ha läst den här artikeln: https
Raspberry Pi Infraröd spelkamera: 6 steg
Raspberry Pi Infraröd spelkamera: Jag har precis börjat utforska Raspberry Pi och blev fascinerad av Pi -infraröda kameramodulen. Jag bor i ett något avlägset område och har sett tecken på olika vilda djur som utforskar huset runt natten. Jag hade en idé om att skapa en nig
Infraröd styrd MP3 -spelare: 6 steg (med bilder)
Infraröd kontrollerad MP3 -spelare: Bygg en infraröd fjärrkontroll MP3 -spelare för cirka $ 10 (usd). Den har de vanliga funktionerna: spela, pausa, spela nästa eller föregående, spela en enda låt eller alla låtar. Den har också equalizervariationer och volymkontroll. Allt styrbart via en r