Sisukord:

Universaalne teleri kaugjuhtimispult - Ardiuino, infrapuna: 5 sammu
Universaalne teleri kaugjuhtimispult - Ardiuino, infrapuna: 5 sammu

Video: Universaalne teleri kaugjuhtimispult - Ardiuino, infrapuna: 5 sammu

Video: Universaalne teleri kaugjuhtimispult - Ardiuino, infrapuna: 5 sammu
Video: wifi пульт для IR и RF кодов Broadlink RM4C Pro, работа в Home Assistant - управляем кондиционером 2024, Juuli
Anonim
Universaalne teleri kaugjuhtimispult - Ardiuino, infrapuna
Universaalne teleri kaugjuhtimispult - Ardiuino, infrapuna

Tere! Selles juhendis näitan teile, kuidas luua ja programmeerida oma universaalne kaugjuhtimispult, mis töötab enamiku asjadega, mis kasutavad infrapunapulti ning mis ka "kuulab" ja dekodeerib erinevate muude kaugjuhtimispuldide saadetud infrapunasignaali.

Natuke tausta sellest, mis inspireeris mind selle puldi loomisel - mul, nagu enamikul teist, kaovad pidevalt kaugjuhtimispuldid ja see õnnetus on üsna masendav, nii et arvan, et laseme selle lahendada! Olen selle kaugjuhtimispuldi ehitanud ja varjatult oma kohandatud voodiraami sisse pannud (olen ka puidutööline) - ma ei saa puldi kaotada, kui see on osa minu voodiraamist!

Tarvikud

Asjad, mida vajate: -Arduino UNO või Nano - läbisõit võib teiste plaatide puhul erineda

-jooteta leivalaud (või jootetav ribalaud, kui soovite seda püsivamaks muuta)

-Eri värvi ja pikkusega džemprid

-Momentaalsed vajutusnupud (5) (võite lisada rohkem nuppe, kuid peate kasutama digitaalseid tihvte, kuna kasutatakse kõiki peale ühe analoogtihvti - peate uurima, kas kasutate tõmbetakisteid õigesti või tõmmake takistid alla ja lülitage nupud välja)

-10K oomi takisti (5) (kui soovite rohkem nuppe, vajate neid rohkem)

-470 oomi takisti (2)

-Infrapuna LED

-punane LED

-Infrapunaandur (kasutasin osa numbrit VS1838B, võite kasutada teist, kontrollige lihtsalt pistikut)

(Valikuline) jootekolb, jootetoru, jootmisvool.

Samm: vooluringi ehitamine:

Ringraja ehitamine
Ringraja ehitamine

1). Mulle meeldib alati alustada oma komponentide paigutamisega, kuna see juhib alati leivalaua paigutust.

-Vajutage nuppe

-LED: punane LED ja IR LED on ühendatud juhtmetega, nii et näete, mida IR LED teeb.

-Andur

2). Takistid

- Viit 10K takistit, mille oleme vajutusnuppudele kinnitanud, nimetatakse "pull down" takistiteks. Tõmmake takistid alla ja veenduge, et kui nupule ei vajutata, saab vastav Arduino tihvt 0 volti (või vähemalt selle lähedale). Tõmbetakistite allalaskmise (või üles tõmbamise) kohta leiate lisateavet siit:

www.electronics-tutorials.ws/logic/pull-up…

Need takistid ei pruugi olla täiesti vajalikud, kuid kui saate "kummitus" tõukeid, on see tõenäoliselt tingitud mahtuvuslikust haakeseadisest ja tõmbetakistid takistavad seda.

3). Ahela juhtmed

4). 5V ja maandusjuhtmed

Viitamiseks kasutage kaasasolevat pilti! ärge kartke seda siiski oma vajaduste järgi muuta!

2. samm: kood:

#include const int RECV_PIN = 7; // IR -anduri lugemisnupp int Nupp1 = A4; // Kaugeim vasakpoolne int -nupp2 = A3; // 2. vasakult int Nupp3 = A2; // Keskmine int nupp4 = A1; // 2. paremale int Nupp5 = A0; // Kõige kaugemal paremal int LED = 3; // IR LED ja punane LED int val = 0; // Väärtuse muutmine IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results tulemused;

void setup () {pinMode (Button1, INPUT); pinMode (nupp2, sisend); pinMode (nupp 3, sisend); pinMode (nupp4, sisend); pinMode (nupp 5, sisend); pinMode (LED, VÄLJUND); Seriaalne algus (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // kasutades digitaalse lugemise asemel analooglugemist, et vältida suletud mahtuvusega seotud probleeme. aitab ka nuppe lahti ühendada. // Kui analooglugemine on 900, võimaldab see väärtustes mõningast muutust, see tähendab, et infrasignaal saadetakse isegi siis, kui tihvtile pole rakendatud täisvolt. // aga 900 on piisavalt kõrge, et mitte lugeda ekslikult mahtuvusliku sidumise viivituse tõttu (100);} // RGB riba sisse ja välja {kui (analogRead (Button5)> 900) {jaoks (int i = 0; i <3; i ++) // väärtuse "i <3" muutmine muudab signaali korduste arvu kohe. nii et "i <2" kordab signaali kaks korda. // kui teler ei reageeri, peate võib -olla selle numbriga mängima, tavaliselt töötab kõige rohkem 1 või 3, kui ei, proovige paarituid numbreid. // peate võib -olla mängima ka näiteks signaali sisese viivituse ajastamise väärtustega, näiteks minu TV 10 töötab, kuid 30 mitte. {irsend.sendSony (0xa90, 12); // Sony TV toite kood, minu teleri jaoks tuleb kood saata 3x3, seega 3 impulssi, kolm eraldi aja viivitust (10); // "signaalisisene viivitus" (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" on bittide arv, erinevad protokollid nõuavad erinevaid bitinumbreid. NEC on 32, Sony on 12, saate otsida teiste viivitust (10); (int i = 0; i 900) {jaoks (int i = 0; i 900) {jaoks (int i = 0; i 900) {jaoks (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Sony TV toite helitugevuse vähendamise viivitus (100);}}} viivitus (100);} kui (irrecv.decode (& results)) // koodi alumine osa võimaldab teil tõlgendada erinevatest kaugjuhtimispultidest pärinevaid infrapunasignaale. {Serial.println (results.value, HEX); // see genereerib protseduuri "NEC, Sony, jne" ja teleri koodi "c90, a90, FF02FD", peate lisama telekoodi lüliti esiküljele 0x (results.decode_type) {case DENON: Serial.println ("DENON"); murda; juhtum NEC: Serial.println ("NEC"); murda; juhtum PANASONIC: Serial.println ("PANASONIC"); murda; juhtum SONY: Serial.println ("SONY"); murda; juhtum RC5: Serial.println ("RC5"); murda; juhtum JVC: Serial.println ("JVC"); murda; juhtum SANYO: Serial.println ("SANYO"); murda; korpus MITSUBISHI: Serial.println ("MITSUBISHI"); murda; ümbris SAMSUNG: Serial.println ("SAMSUNG"); murda; juhtum LG: Serial.println ("LG"); murda; juhtum RC6: Serial.println ("RC6"); murda; juhtum DISH: Serial.println ("DISH"); murda; juhtum SHARP: Serial.println ("SHARP"); murda; juhtum WHYNTER: Serial.println ("WHYNTER"); murda; juhtum AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); murda; vaikimisi: juhtum UNKNOWN: Serial.println ("UNKNOWN"); break;} irrecv.resume ();}}

3. samm: sügavuskood: IR -signaalide saatmine

Ma viitan koodiridadele nende reanumbri järgi - järgimiseks kasutage seda linki:

pastebin.com/AQr0fBLg

Esiteks peame z3t0 lisama IR -kaugraamatukogu.

Siin on link raamatukogule:

github.com/z3t0/Arduino-IRremote

Kui vajate juhendit, kuidas raamatukogu õigesti alla laadida ja IDE -sse installida:

www.arduino.cc/en/guide/libraries

Rida 1 sisaldab raamatukogu.

Järgmisena peame deklareerima mõned muutujad, read 2-12 teevad seda.

Kasutame "cost int" muutujate määratlemiseks, mis ei muutu, kõik kuuluvad sellesse kategooriasse peale ühe.

Muutuvate muutujate määratlemiseks kasutame int.

Peame oma LED -tihvti jaoks kasutama modulatsiooniga (PWM) impulsiga tihvti - minu koodis piisab igast tihvtist, mille kõrval on "~" - kasutame digitaalset tihvti 3.

Järgmisena peame tegema mõningaid seadistusi - see kood töötab ainult üks kord, kui Arduino on sisse lülitatud või lähtestatud.

Pange tähele, et määratleme oma sisendeid ja väljundeid (15-20), käivitame jadamonitori (21), lubame IR-anduri (22) ja käsime Arduino'l vilkuda sisseehitatud LED-i igal ajal, kui saame anduris signaali (23).

Järgmisena ehitame välja oma silmuse - see kood töötab korduvalt, liikudes ülevalt alla käputäis kordi sekundis.

Reas 25 kasutame lauset if, see ütleb Arduinole, et "otsige neid konkreetseid kriteeriume, kui need kriteeriumid on täidetud, tehke seda konkreetset asja". Sellisel juhul on kriteeriumid analogRead (Button1)> 900 või teisisõnu - "Arduino, vaata nuppu 1, mille me varem määratlesime kui tihvti A4, kui vastuvõetud analoogsignaal on suurem kui 900, jätkake meie järgmiste juhistega kui ei, siis palun liikuge edasi. " Siin on natuke lahti pakkida, nii et laseme sukelduda: Arduino analoogsignaal on väärtus, mis on võrdne või väiksem kui 5 V, kusjuures 5 V on 1023 ja 0 V võrdub 0 -ga. Mis tahes pinget vahemikus 0 kuni 5 V saab määratleda arvu ja natuke matemaatikat kasutades saame selle arvu välja mõelda või vastupidi, pinge. Jagage 1024 (lisame ühikuna 0) 5 -ga, mis annab meile 204,8. Näiteks kasutame numbrit 900, selle pingeks teisendamiseks jagame 900 lihtsalt 204,8 -ga, andes meile ~ 4,4 V. Me käsime Arduino'l otsida pinget, mis on suurem kui ~ 4,4 volti, ja kui see on nii, siis täitke meie järgmine juhis.

Rääkides järgmistest juhistest (rida 25), näeme irsend.sendNEC (0xFF02FD, 32). See ütleb: "Arduino, saatke moduleeritud impulss, mis järgib NEC -protokolli, täpsemalt FF02FD signaali, ja veenduge, et selle pikkus on 32 bitti". See paneb meie IR -LED vilkuma nii, et teised seadmed seda mõistaksid. Mõelge sellele natuke nagu morsekood, kuid lihtsalt nähtamatu valgusega! Seal on palju erinevaid protokolle, millest igaühel on sadu, kui mitte tuhandeid individuaalseid signaale ja igaüks oma konkreetse bitinumbriga - meie seade suudab ära tunda suure hulga neid signaale, kuid me sukeldume sellesse hiljem!

Reas 28 on meil esimene viivitus - see on siin selleks, et vältida tahtmatuid kordussignaale. Kui nupule vajutatakse ja IR -signaal saadetakse, on meil 100 millisekundit, et sõrm nupult lahti saada. see ei tundu palju aega, kuid praktikas tundub, et see toimib hästi. viivitusfunktsioon ütleb Arduinole "ära tee midagi X millisekundi jooksul" ja võrdluseks on need 1000 millisekundit sekundis.

Liikudes edasi meie järgmise nupu juurde reas 29, nupp 5 (mul oli algselt sellel nupul 4 nuppu, lisasin viiendiku, nii et sellepärast oleme rivist väljas). See on vaimus sama asi nagu nupp 1, kuid sellel on mõned olulised erinevused. Esimene erinevus, mida näete, on avaldus - see on sisuliselt teine tsükkel - tsükkel teises suuremas silmus, silmavaatlus. Täpsemalt on meil "for (int i = 0; i <3; i ++)", loe seda järgmiselt: "Arduino, alustame nullist, korrake järgmisi juhiseid, kuni jõuame 3 korda". Funktsiooni for kasutatakse seetõttu, et paljud seadmed on programmeeritud otsima korduvat signaali ja meie puhul siin 3 korda. Kui teie seade nõuab teistsugust korduste ajakava, saate lihtsalt numbri 3 muuta. Teine oluline erinevus nupuga 5 on see, et seda korratakse uuesti, 3 või 3x3. Teisisõnu, me saadame signaali 3 korda, ootame 10 millisekundit, saadame selle uuesti 3 korda, ootame veel 10 millisekundit ja seejärel saadame selle uuesti 3 korda. Seda tüüpi suhtlus on levinud seadmete sisse- ja väljalülitamisel ning see võib olla just see, mida teie teler või seade nõuab - selle võti on kõigi muutujatega mängimine, kuni saate soovitud tulemuse. Muutke lühikese viivituse väärtust, muutke kordusväärtust, saatke 3 partii asemel 6 partiid jne. Seadmed on meelevaldselt programmeeritud suvaliste signaalireeglitega, kujutage ette, kas teie teleri pult saatis sama tüüpi signaali kui teie heliriba; iga kord, kui teleris kanalit vahetate, lülitub heliriba välja - seetõttu kehtivad erinevad signaalireeglid.

Järgmised kolm nuppu on programmeeritud samade põhiprintsiipidega, vähemalt osaliselt, mida on kirjeldatud eespool - seega võime vahele jätta kuni rea 55.

4. samm: sügavuskood: IR -signaalide vastuvõtmine

Sügavkood: IR -signaalide vastuvõtmine
Sügavkood: IR -signaalide vastuvõtmine

55. real alustame Arduino programmeerimist, et tõlgendada teiste kaugjuhtimispultide saadetud IR -signaale - see on vajalik, et saaksite aru saada, millised protokollid ja signaalid teie kaugjuhtimispuldid kasutavad. Rea 55 esimene koodirida on see, kui (irrecv.decode (& results) loeb selle järgmiselt: "Arduino, otsige IR -koodi, kui leiate, tagastage tõene väärtus, kui midagi ei leitud, tagastage vale. Kui tõene, salvestage teave "tulemusteks".

Liikudes reale 56, on meil Serial.println (results.value, HEX) ja see ütleb: "Ardunio, printige tulemused jadamonitoris HEX -vormingus". Hex, mis tähendab kuueteistkümnendsüsteemi, on viis, kuidas saame lühendada binaarset stringi (vaid 0 ja 1) millekski, mida on veidi lihtsam sisestada. Näiteks 101010010000 on "a90", minu teleri välja- ja sisselülitamiseks kasutatud kood ning 111111110000001011111101 on 0xFF02FD, mis juhib minu RGB -riba. Ülaloleva diagrammi abil saate binaarfaili heksadeks teisendada ja vastupidi või kasutada järgmist linki:

www.rapidtables.com/convert/number/hex-to-…

Kuni reale 57 on meil uus funktsioon, mida nimetatakse lülituskorpuseks.

Põhimõtteliselt võimaldab lülitusjuhtum meil antud muutuja (juhtumi) tulemuste põhjal määrata erinevaid juhiseid. break väljub lüliti avaldusest ja seda kasutatakse iga avalduse lõpus.

Kasutame siin lülitiümbrist, et muuta jadamonitoris printimist erinevate Arduino tunnete protokollide põhjal erinevatest kaugjuhtimispultidest.

5. samm: järeldus

Kui teil on küsimus - võtke minuga julgelt ühendust siin! Mul on hea meel aidata teid nii hästi kui võimalik.

Loodan, et õppisite midagi, mille abil saate oma elu natuke paremaks muuta!

-RB

Soovitan: