- Munka magyarázat:
- IR távirányító jelek dekódolása Arduino használatával:
- Áramkör leírása:
- Kód Leírás:
Korábban számos otthoni automatizálási módot foglalkoztunk különböző technológiák alkalmazásával, például a DTMF alapú otthoni automatizálást, a PC-vel vezérelt otthoni automatizálást az Arduino segítségével, a Bluetooth által vezérelt otthoni automatizálást. Ebben a projektben IR-alapú vezeték nélküli kommunikációt használunk a háztartási gépek vezérléséhez. Ebben a projektben az Arduino-t használják az egész folyamat vezérlésére. Néhány parancsot elküldünk a vezérlő rendszernek, az IR TV / DVD / MP3 távirányítóval az AC háztartási készülékek vezérléséhez. Miután az IR távirányítóról vett jelet, az Arduino kapcsolódó jelet küld azoknak a reléknek, amelyek a háztartási gépek be- vagy kikapcsolásáért felelősek egy relé meghajtón keresztül.
Munka magyarázat:
A projekt működése könnyen érthető. Ha megnyomjuk az IR Remote bármely gombját, akkor a távoli kódot küld kódolt impulzusok formájában 38Khz moduláló frekvenciával. Ezeket az impulzusokat a TSOP1738 érzékelő fogadja és Arduino olvassa fel, majd az Arduino dekódolja a kapott impulzussorozatot hex értékre, és összehasonlítja ezt a dekódolt értéket a megnyomott gomb előre definiált hex értékével. Ha bármilyen egyezés történik, akkor az Arduino viszonylagos műveletet hajt végre, és a megfelelő eredmény a 16x2 LCD-n is megjelenik a megfelelő parancsok használatával. Ebben a projektben három különböző színű izzót használtunk bemutatóként, amely a ventilátort, a fényt és a tévét jelzi.
Sokféle IR távvezérlő áll rendelkezésre különböző eszközökhöz, de a legtöbbjük kb. 38KHz frekvenciajelen dolgozik. Ebben a projektben IR TV távirányítóval vezéreljük a háztartási készülékeket. Az IR távoli jel detektálásához a TSOP1738 IR vevőt használjuk. Ez a TSOP1738 érzékelő képes érzékelni a 38Khz frekvencia jelet. Az IR távirányító és a TSOP1738 működéséről részletesen beszámolhatunk ebben a cikkben: IR adó és vevő
Alkatrészek:
- Arduino UNO
- TSOP1738
- IR TV / DVD távirányító
- ULN2003
- 5 voltos relék
- Izzó tartóval
- Csatlakozó vezetékek
- Kenyérlap
- 16x2 LCD
- Tápegység
- PVT
- IC 7805
Ebben a projektben az IR távirányító 7, 8 és 9 számgombját használtuk a ventilátor, a fény és a TV vezérléséhez, az ON / OFF gombot (bekapcsológomb) pedig az összes készülék egyidejű be- és kikapcsolásához.
Itt az egy háztartási készülék be- és kikapcsolásához váltási módszert használtunk. Toggle módszer nem más, mint megkapni, hogy a gombot akár egyszerre, akár a páratlan számú alkalommal nyomják meg. Ezt úgy találjuk meg, hogy az emlékeztetőt megkapjuk, miután elosztjuk 2-vel (i% 2), ha van valamilyen emlékeztető, akkor az eszköz bekapcsol, és ha az emlékeztető 0, akkor kikapcsol. Tegyük fel, hogy a 7 gombot megnyomják a távvezérlőn, majd a távoli jelet küld az Arduino-nak a TSOP IR vevőn keresztül. Ezután az Arduino dekódolja és tárolja a dekódolt értéket az eredmény változóban. Most az eredményváltozó hexadecimális értéke 0x1FE00FF, miután hozzáigazította a 7. kulcs előre meghatározott hexaértékéhez (lásd a fenti képet), Arduino bekapcsolja a ventilátort. Most, amikor ugyanazt a gombot (7-es billentyűt) ismét megnyomjuk, az IR ugyanazt a kódot küldi. Az Arduino ugyanazt a kódot kapja, és ugyanazzal a kóddal illeszkedik, mint korábban, de a ventilátor ezúttal kikapcsolt a bit váltása miatt (i% 2).
IR távirányító jelek dekódolása Arduino használatával:
Itt található egy DVD NEC típusú távoli dekódolt kimeneti kódok listája:
Ha nem ismeri az infravörös távvezérlő dekódolt kimenetét, akkor könnyen megtalálható, csak kövesse az alábbi lépéseket:
- Töltse le az IR távoli könyvtárat innen:
- Csomagolja ki, és helyezze az Arduino 'Könyvtárak' mappába. Ezután nevezze át a kibontott mappát IRremote névre.
- Futtassa az alábbi programot az Arduino-ról, és nyissa meg a Serial Monitor ablakot az Arduino IDE-ben. Most nyomja meg bármelyik IR távirányító gombot, és nézze meg a megfelelő dekódolt hexakimenetet a Serial Monitor ablakban.
* IRremote: IRrecvDemo - bemutatja az IRrecv-vel kapott IR-kódokat. * A RECV_PIN bemenethez infravörös érzékelőt / demodulátort kell csatlakoztatni. * 0.1 verzió, 2009. július * Copyright 2009 Ken Shirriff * http://arcfn.com * / #include
A fenti program az IRremote könyvtár 'példák' mappájából származik, és további példákat is megnézhet az IR távvezérlő használatáról. Így dekódoltuk az IR távkimenetet.
Áramkör leírása:
Ennek az áramkörnek a csatlakoztatása nagyon egyszerű, itt egy folyadékkristályos kijelzőt használnak a háztartási gépek állapotának megjelenítésére, amely 4-bites módban közvetlenül kapcsolódik az arduino-hoz. Az LCD adatcsapjai, nevezetesen RS, EN, D4, D5, D6, D7 csatlakoznak az Arduino 6, 7, 8, 9, 10, 11 számú digitális tűhöz. A TSOP1738 kimeneti tűje közvetlenül a 14-es (A) Arduino. És a Vcc érintkező +5 voltos és GND tű csatlakozik az áramkör földelő kapcsához. Relé meghajtót, nevezetesen az ULN2003-at is használnak a relék vezetésére. 5 voltos SPDT 3 relét használnak a LIGHT, FAN és a TV vezérléséhez. A relék pedig az ULN2003 relé meghajtón keresztül csatlakoznak a 3., 4. és 5. számú arduino csapokhoz a LIGHT, a FAN és a TV vezérléséhez.
Kód Leírás:
A projekt egy részének programozásában Először is a programozásban szerepel az IR távvezérlő könyvtár, amely könnyen elérhető a Google-nál. És definiálja a pin és a deklarálandó változókat.
#include
Ezután mellékeljen egy fejlécet a folyadékkristályos kijelzőhöz, majd meghatározzuk az LCD és a háztartási gépek adat- és vezérlőcsapjait.
#include
Utána inicializálnunk kell az LCD-t, és meg kell adnunk a csapok irányát, amelyeket a ventilátorhoz, a fényhez és a TV-hez használnak.
void setup () {Soros.kezdés (9600); lcdbegin (16,2); pinMode (ventilátor, OUTPUT); pinMode (Fény, OUTPUT); pinMode (TV, OUTPUT);
Mint már kifejtettük, a kód alábbi része a kapott hexaérték és a gomb már definiált hexakódjának összehasonlítására szolgál. Ha egyezik, akkor egy relatív műveletet a kódban megadott megfelelő függvények segítségével hajtunk végre.
void loop () {if (irrecv.decode (& results)) {Soros.println (eredmények.érték, HEX); késés (100); lcd.setCursor (0,0); lcd.print ("Fan Light TV"); if (eredmények.érték == 0x1FE00FF) {i ++; int x = i% 2; digitalWrite (Fan, x);