Sisällysluettelo:

Universal TV -kaukosäädin - Ardiuino, infrapuna: 5 vaihetta
Universal TV -kaukosäädin - Ardiuino, infrapuna: 5 vaihetta

Video: Universal TV -kaukosäädin - Ardiuino, infrapuna: 5 vaihetta

Video: Universal TV -kaukosäädin - Ardiuino, infrapuna: 5 vaihetta
Video: High Density 2022 2024, Heinäkuu
Anonim
Universal TV Remote - Ardiuino, infrapuna
Universal TV Remote - Ardiuino, infrapuna

Hei! Tässä ohjeessa näytän sinulle, kuinka rakentaa ja ohjelmoida oma universaali kauko -ohjaimesi, joka toimii useimpien infrapunakaukosäädintä hyödyntävien asioiden kanssa ja joka myös "kuuntelee" ja purkaa useiden muiden kaukosäätimien lähettämän infrapunasignaalin.

Hieman taustaa siitä, mikä inspiroi minua rakentamaan tämän kaukosäätimen - minä, kuten useimmat teistä, menetän kaukosäätimeni jatkuvasti, ja tämä onnettomuus on melko turhauttavaa, joten arvelen, että ratkaisemme sen! Olen rakentanut tämän kaukosäätimen ja upottanut sen huomaamattomasti omaan sängynrunkooni (olen myös puutyöläinen) - en voi hukata kaukosäädintä, jos se on osa sängynrunkoani!

Tarvikkeet

Tarvittavat asiat: -Arduino UNO tai Nano - kilometrimäärä voi vaihdella muiden levyjen mukaan

-Juottamaton leipälauta (tai juotettava nauha, jos haluat tehdä siitä pysyvämmän)

-Eriväriset ja -pituiset hyppylangat

-Painikkeelliset painikkeet (5) (voit lisätä muita painikkeita, mutta sinun on käytettävä digitaalisia nastoja, koska kaikkia analogisia nastoja käytetään yhtä lukuun ottamatta - sinun on tutkittava, että käytät oikein ylösvetovastauksia tai vedä alas vastukset ja vapauta painikkeet)

-10 K ohmin vastus (5) (jos haluat enemmän painikkeita, tarvitset lisää näitä)

-470 ohmin vastus (2)

-Infrapuna -LED

-Punainen LED

-Infrapuna-anturi (käytin osanumeroa VS1838B, voit käyttää toista, tarkista vain pistoke)

(Valinnainen) Juotin, juote, juotosvirta.

Vaihe 1: Piirin rakentaminen:

Piirin rakentaminen
Piirin rakentaminen

1). Haluan aina aloittaa komponenttien asettamisesta, koska tämä ohjaa aina leipälevyn asettelua.

-Painikkeet

-LEDIT: Punainen LED ja IR -LED on kytketty rinnakkain, joten voit nähdä, mitä IR -LED tekee.

-Sensori

2). Vastukset

- Viittä 10K vastusta, jotka olemme kiinnittäneet painikkeisiin, kutsutaan "alasvetovastauksiksi". Vedä vastukset alas ja varmista, että kun painonappia ei paineta, vastaava Arduino -nasta saa 0 volttia (tai ainakin sen lähellä). Lisätietoja vetovastus (tai vetäminen) -vastuksista on tässä syväoppaassa:

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

Nämä vastukset eivät välttämättä ole täysin välttämättömiä, mutta jos saat "haamukuvia", se johtuu enemmän kuin todennäköisesti kapasitiivisesta kytkennästä ja alaslasketut vastukset estävät tämän.

3). Piirijohdot

4). 5V ja maajohdot

Käytä mukana toimitettua kuvaa viitteenä! älä kuitenkaan pelkää muuttaa sitä tarpeidesi mukaan!

Vaihe 2: Koodi:

#include const int RECV_PIN = 7; // IR -anturin lukunasta int int Button1 = A4; // Kaukaisin vasen int Button2 = A3; // toinen vasemmalta int Button3 = A2; // Keskimmäinen int -painike4 = A1; // toinen oikealle int Button5 = A0; // Kauimpana oikealle int LED = 3; // IR -LED & Punainen LED int val = 0; // Arvon muuttaminen IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results tulokset;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (painike5, TULO); pinMode (LED, LÄHTÖ); Sarja.alku (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // käyttämällä analogista lukua digitaalisen lukemisen sijasta, jotta vältetään kapasitanssiongelmat. auttaa myös poistamaan painikkeet. // Kun analoginen lukema on 900, arvoissa voi olla jonkin verran heilutusta, eli infrasignaali lähetetään, vaikka täyden 5 V: n jännitettä ei käytettäisi. // mutta 900 on tarpeeksi korkea, jotta se ei pysty lukemaan virheellisesti kapasitiivisen kytkennän viiveen vuoksi (100);} // RGB -nauhan päälle ja pois {jos (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // arvon muuttaminen kohdassa "i <3" muuttaa signaalien toistokertojen määrää välittömästi. niin "i <2" toistaa signaalin kahdesti. // joudut ehkä pelaamaan tällä numerolla, jos televisiosi ei vastaa, yleensä 1 tai 3 toimii eniten, jos ei, kokeile parittomia numeroita. // saatat joutua myös pelaamaan signaalin sisäisen viiveen ajoitusarvoilla, esimerkiksi TV 10 toimii, mutta 30 ei. {irsend.sendSony (0xa90, 12); // Sony TV: n virtakoodi, televisiolleni, koodi on lähetettävä 3x3, joten 3 pulssia, kolme erillistä aikaviivettä (10); // "signaalin sisäinen viive" kohteelle (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" on bittinumero, eri protokollat vaativat erilaisia bittinumeroita. NEC on 32, Sony on 12, voit etsiä muiden viivästystä (10); for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Sony TV: n äänenvoimakkuuden vähennysviive (100);}}} viive (100);} if (irrecv.decode (& results)) // koodin alla olevan osan avulla voit tulkita eri kaukosäätimien infrapunasignaaleja. {Serial.println (results.value, HEX); // se luo menettelyn "NEC, Sony, jne." ja TV -koodin "c90, a90, FF02FD", sinun on lisättävä 0x TV -koodikytkimen etuosaan (results.decode_type) {case DENON: Serial.println ("DENON"); tauko; tapaus NEC: Serial.println ("NEC"); tauko; tapaus PANASONIC: Serial.println ("PANASONIC"); tauko; tapaus SONY: Serial.println ("SONY"); tauko; tapaus RC5: Serial.println ("RC5"); tauko; tapaus JVC: Serial.println ("JVC"); tauko; tapaus SANYO: Serial.println ("SANYO"); tauko; tapaus MITSUBISHI: Serial.println ("MITSUBISHI"); tauko; tapaus SAMSUNG: Serial.println ("SAMSUNG"); tauko; tapaus LG: Serial.println ("LG"); tauko; tapaus RC6: Serial.println ("RC6"); tauko; tapaus DIS: Serial.println ("DISH"); tauko; tapaus SHARP: Serial.println ("SHARP"); tauko; tapaus WHYNTER: Serial.println ("WHYNTER"); tauko; tapaus AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); tauko; oletus: tapaus Tuntematon: Serial.println ("UNKNOWN"); break;} irrecv.resume ();}}

Vaihe 3: Koodin syvyys: IR -signaalien lähettäminen

Viittaan koodiriveihin niiden rivinumeron mukaan - seuraa tätä linkkiä:

pastebin.com/AQr0fBLg

Ensinnäkin meidän on sisällytettävä z3t0 IR Remote Library.

Tässä linkki kirjastoon:

github.com/z3t0/Arduino-IRremote

Jos tarvitset oppaan kirjaston lataamisesta ja asentamisesta IDE: hen oikein:

www.arduino.cc/en/guide/libraries

Rivi 1 sisältää kirjaston.

Seuraavaksi meidän on ilmoitettava muutama muuttuja, rivit 2-12 tekevät tämän.

Käytämme "cost int" -määritteitä sellaisten muuttujien määrittämiseen, jotka eivät muutu, mutta kaikki kuuluvat tähän luokkaan.

Käytämme "int": ää muuttujien määrittämiseen.

Meidän on käytettävä LED -nastassa pulssi- ja modulaatiota (PWM) - mikä tahansa nasta, jonka vieressä on "~", riittää koodissani - käytämme digitaalista tappia 3.

Seuraavaksi meidän on tehtävä joitakin asetuksia - tämä koodi suoritetaan vain kerran, kun Arduino käynnistetään tai nollataan.

Huomaa, että määritämme tulot ja lähdöt (15-20), käynnistämme sarjamonitorin (21), otamme IR-anturin (22) käyttöön ja kehotamme Arduinoa vilkkumaan sisäisen LED-valon aina, kun saamme signaalin (23).

Seuraavaksi rakennamme silmukan - tämä koodi suoritetaan toistuvasti ylhäältä alas muutaman kerran sekunnissa.

Rivillä 25 käytämme if -lausetta, joka kertoo Arduinolle "etsi tätä erityistä ehtoa, jos tämä kriteeri täyttyy, tee tämä tietty asia". Tässä tapauksessa kriteerit ovat analogRead (Button1)> 900 tai toisin sanoen - "Arduino, Katso painiketta 1, jonka määritimme aiemmin nastaksi A4, jos vastaanotettu analoginen signaali on suurempi kuin 900, siirry seuraaviin ohjeisiin, jos ei, siirry eteenpäin ". Tässä on vähän purkamista, joten anna sukeltaa: Arduinon analoginen signaali on arvo, joka on yhtä suuri tai pienempi kuin 5 V, 5V on 1023 ja 0V on 0. Mikä tahansa 0-5 V: n jännite voidaan määrittää luku, ja vähän matematiikkaa, voimme selvittää tämän luvun tai päinvastoin jännitteen. Jaa 1024 (sisällytämme yksikköön 0) viidellä, jolloin saadaan 204,8. Esimerkiksi käytämme numeroa 900, muunnamme sen jännitteeksi, jaamme 900 yksinkertaisesti 204,8: lla, jolloin saadaan ~ 4,4 V. Kerromme Arduinolle etsimään yli ~ 4,4 voltin jännitettä, ja jos on, tee seuraava ohje.

Seuraavista ohjeista (rivi 25) näemme irsend.sendNEC (0xFF02FD, 32). Tämä sanoo "Arduino, lähetä moduloitu pulssi, joka noudattaa NEC -protokollaa, erityisesti FF02FD -signaalia, ja varmista, että sen 32 bitin pituus". Tämä saa IR -LED: n välkkymään tavalla, jonka muut laitteet ymmärtävät. Ajattele sitä vähän kuin Morse Code, mutta vain näkymättömällä valolla! Siellä on paljon erilaisia protokollia, joista jokaisella on satoja ellei tuhansia yksittäisiä signaaleja, ja jokaisella on oma bittiluvunsa - laitteemme pystyy tunnistamaan suuren määrän näitä signaaleja, mutta sukellamme siihen myöhemmin!

Rivillä 28 meillä on ensimmäinen viive - tämä on estääkseen tahattomat toistosignaalit, kun painiketta painetaan ja infrapunasignaali lähetetään, meillä on 100 millisekuntia saadaksemme sormemme pois painikkeesta. tämä ei kuulosta paljon aikaa, mutta käytännössä se näyttää toimivan hyvin. Viive -toiminto kertoo Arduinolle "älä tee mitään X millisekunnille" ja viitteenä, ne ovat 1000 millisekuntia sekunnissa.

Siirrytään seuraavaan painikkeeseen rivillä 29, painike 5 (minulla oli alun perin 4 painiketta tässä kauko -ohjaimessa, lisätty viidesosa, joten olemme epäkunnossa). Tämä on hengessä sama asia kuin painike 1, mutta sillä on muutamia keskeisiä eroja. Ensimmäinen näkemäsi ero on lausunto - tämä on pohjimmiltaan toinen silmukka - silmukka, jossa on toinen suurempi silmukka, silmukan havaitseminen. Erityisesti meillä on "for (int i = 0; i <3; i ++)", lue tämä "Arduino, aloitetaan nollasta, toista seuraavat ohjeet, kunnes saavutamme 3 kertaa". For -toimintoa käytetään, koska monet laitteet on ohjelmoitu etsimään toistuvaa signaalia, ja tässä tapauksessa 3 kertaa. Voit yksinkertaisesti muuttaa numeron 3 toiseen numeroon, jos laitteesi vaatii eri toistoaikataulua. Toinen tärkeä ero painikkeen 5 kanssa on, että se toistetaan uudelleen, 3 kertaa tai 3x3. Toisin sanoen lähetämme signaalin 3 kertaa, odotamme 10 millisekuntia, lähetämme sen uudelleen 3 kertaa, odotamme vielä 10 millisekuntia ja sitten lähetämme sen 3 kertaa uudelleen. Tämäntyyppinen viestintä on yleistä laitteiden käynnistämisessä ja sammuttamisessa, ja televisio tai laite vaatii juuri sitä - avain tähän on pelata kaikkien muuttujien kanssa, kunnes saat halutun tuloksen. Muuta lyhyen viiveen arvoa, vaihda toistoarvoa, lähetä 6 erää kolmen sijasta jne. Jne. Laitteet on ohjelmoitu mielivaltaisilla signaalisäännöillä tarkoituksellisesti. Kuvittele, jos TV: n kaukosäädin lähetti samantyyppisen signaalin kuin äänipalkki; aina, kun vaihdat kanavaa televisiossasi, äänipalkki sammuu - siksi on olemassa erilaisia signaalisääntöjä.

Seuraavat kolme painiketta on ohjelmoitu samoilla periaatteilla, ainakin osittain, edellä kuvatulla tavalla - joten voimme hypätä aina riville 55.

Vaihe 4: Koodin syvyys: IR -signaalien vastaanottaminen

Syvyyskoodi: IR -signaalien vastaanottaminen
Syvyyskoodi: IR -signaalien vastaanottaminen

Rivillä 55 aloitamme Arduinon ohjelmoinnin muiden kaukosäätimien lähettämien IR -signaalien tulkitsemiseksi - tämä on tarpeen, jotta voit selvittää kaukosäätimien käyttämät protokollat ja signaalit. Rivin 55 ensimmäinen koodirivi on, jos (irrecv.decode (& results) lukee tämän muodossa "Arduino, etsi IR -koodi, jos löydät sellaisen, palauta tosi arvo, jos mitään ei löydy, palauta false. Kun tosi, tallenna tiedot "tuloksiksi" ".

Siirtymällä riville 56, meillä on Serial.println (results.value, HEX), joka sanoo "Ardunio, tulosta tulokset sarjamonitorissa HEX -muodossa". Hex, joka tarkoittaa heksadesimaalia, on tapa, jolla voimme lyhentää binaarijonon (vain 0 ja 1) jotain hieman helpompaa kirjoittaa. Esimerkiksi 101010010000 on "a90", television sammuttamiseen ja käynnistämiseen käytettävä koodi ja 111111110000001011111101 on 0xFF02FD, joka ohjaa RGB -nauhaani. Voit käyttää yllä olevaa kaaviota muuntaaksesi binäärin heksadesimaaliksi ja päinvastoin, tai voit käyttää seuraavaa linkkiä:

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

Riville 57 asti meillä on uusi toiminto, nimeltään kytkinkotelo.

Pohjimmiltaan kytkinkotelon avulla voimme määrittää erilaisia ohjeita tietyn muuttujan (tapauksen) tulosten perusteella. tauko poistuu kytkinlauseesta ja sitä käytetään jokaisen lausekkeen lopussa.

Käytämme tässä kytkentäkoteloa muuttaaksemme, miten tulostamme sarjamittarissa eri kaukosäätimien Arduino -aistien protokollien perusteella.

Vaihe 5: Johtopäätös

Jos sinulla on kysyttävää - ota rohkeasti yhteyttä täällä! Olen iloinen voidessani auttaa sinua parhaani mukaan.

Toivottavasti opit jotain, jonka avulla voit tehdä elämästäsi hieman parempaa!

-RB

Suositeltava: