Arduino #2: paljenje/gašenje lampe pomoću daljinskog upravljača

U ovom tutorijalu ću pokazati kako možete iskoristiti bilo koji daljinski za paljenje i gašenje bilo kojeg električnog uređaja u kući! Da, možete koristiti daljinski od TV-a, DVD-a, klime… da uključite i isključite neki uređaj u kući. Ja ću konkretno uzeti primer obične lampe, ali možete kontrolisati bilo šta što radi na 220v (veš mašina, radijator, ventilator…)

Potrebno je:

Povezivanje:

Prvo raskopčajte Arduino, postavite Breadboard i povežite sve kao na slici ispod.

IR remote relay_bb

Dakle, povezaćemo IR prijemnik na digitalni pin ~11, a Relay na digitalni pin 13.

Dalje, obratiti pažnju na Relay modulu jer postoje 3 izlaza, potrebno je žice povezati tačno kao na slici. Što se dela kabla od lampe (ili nekog uređaja) tiče, potrebno je prerezati jednu (od dve) žice i spojiti sa Relay modulom kao na slici ispod:

IR remote relay_bb1

Budite oprezni: radite sa visokim naponom! Isključite lampu iz struje pre nego što bilo šta uradite.

Kod:

1) Dekodiranje daljinskog upravljača

Prvo će biti potrebno pronaći HEX vrednost određenog tastera na određenom daljinskom upravljaču kako bismo ga kasnije iskoristili za manipulisanje Relay modula. Zato pripremite daljinski i odredite koji taster ćete koristiti za kontrolisanje.

  • Preuzmite IR biblioteku sa neta https://github.com/z3t0/Arduino-IRremote, raspakujte je u folderu gde ste instalirali Arduino pa u „libraries“ podfolder.
  • Pokrenite Arduino i Arduino IDE
  • Nalepite Kod ispod, kompajlirajte i pošaljite u Arduino


#include
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
irrecv.resume();
}
}

Uključite Serial Monitor (ikonica u gornjem desnom uglu Arduino IDE), uperite daljinski u IR prijemnik koji ste povezali, pritisnite željeni taster i pogledajte koje se vrednosti ispisuju u Serial Monitor prozorčetu, npr. nešto kao na slici ispod:

arduino-decode-ir-remote

Strelicom je prikazana HEX vrednost pritisnutog tastera na daljinskom upravljaču. To će nam trebati zato zapišite/kopirajte negde.

2) Završni Kod

Sad je potrebno da nalepite i pošaljete ovaj Kod s tim da ćete umesto KOD_OVDE uneti Kod koji ste kopirali.


/*
Pin 1 -> ~11
Pin 2 -> GND
Pin 3 -> Vcc (+5v Arduino)
*/
#include
int IRpin = 11; // IR pin
int relay = 13; // Relay pin
IRrecv irrecv(IRpin);
decode_results results;
boolean relayOn = true;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(relay, OUTPUT);
}
void loop()
{
if (irrecv.decode(&results))
{
if (results.value == 0xKOD_OVDE)
{
if (relayOn == true)
{
relayOn = false;
digitalWrite(relay, HIGH);
delay(100);
}else{
relayOn = true;
digitalWrite(relay, LOW);
delay(100);
}
}
irrecv.resume();
}
// debagovanje
Serial.println(results.value, HEX);
}

Nakon što ste kompajlirali i poslali Kod u Arduino, proverite još jednom da li ste sve dobro povezali i testirajte ali BEZ uključene lampe. Kada ponovo pritisnete taj taster na daljinskom, Relay bi treba da se uključi. Nema veze što je lampa isključena iz struje, Relay će se čuti kad se uključi i svetleće lampica na njemu. Ako je sve ok, ponovo pritisnite taster na daljinskom da se Relay isključi pa onda uključite lampu i palite/gasite pomoću daljinskog koliko hoćete.

Ja sam iskoristio opciju daljinskog upravljača koja je dostupna u LG G3 mobilnom telefonu pa sam napravio posebno dugme samo za to.

Ako želite da upravljate pomoću BlueTooth-a, pogledajte uputstvo ovde: https://arduinisti.wordpress.com/2016/02/09/paljenje-svetla-telefonom/

Povezane objave:

Tvoj komentar

Email adresa neće biti javno vidljiva!

4 komentara

  1. Denis kaže

    dali se može napisati kod da se sa dva tastera aktivira Relay,kad se stisne prvi taster pali led1 ali još ne i relay tek kad se stisne drugi taster pali se i led2 i relay uključi a led nakon nekog vremena isključe,da se relay isključi isti postupak hvala!

    1. Aleksa kaže

      Naravno da se može napisati i to, u pitanju bi bile vrlo jednostavne dopune u kodu. :)

      1. Denis kaže

        možda nešto ovako,otprilike sam to uspjeo sastaviti

        #include

        int RECV_PIN = 6; // the pin where you connect the output pin of TSOP4838
        int led1 = 12;
        int led2 = 11;
        int relay = 8;
        int itsONled[] = {0,0,0};
        int itsONrelay[] = {0};
        /* the initial state of LEDs is OFF (zero)
        the first zero must remain zero but you can
        change the others to 1’s if you want a certain
        led to light when the board is powered */
        #define code1 3812
        // code received from button A
        #define code2 17969
        // code received from button B

        IRrecv irrecv(RECV_PIN);

        decode_results results;
        boolean relayOn = true;
        void setup()
        {
        Serial.begin(9600); // you can comment this line
        irrecv.enableIRIn(); // Start the receiver
        pinMode(led1, OUTPUT);
        pinMode(led2, OUTPUT);
        pinMode(relay, OUTPUT);
        }

        void loop() {
        if (irrecv.decode(&results)) {
        unsigned int value = results.value;
        switch(value) {
        case code1:
        if(itsONled[1] == 1) { // if first led is on then
        digitalWrite(led1, LOW); // turn it off when button is pressed
        itsONled[1] = 0; // and set its state as off
        } else { // else if first led is off
        digitalWrite(led1, HIGH); // turn it on when the button is pressed
        itsONled[1] = 1; // and set its state as on
        }
        break;
        case code2:
        if(itsONled[2] == 1) {
        digitalWrite(led2, LOW);
        itsONled[2] = 0;
        } else {
        digitalWrite(led2, HIGH);
        itsONled[2] = 1;
        }
        if (digitalRead(12) == HIGH && digitalRead(11) == HIGH)
        {
        relayOn = true;
        digitalWrite(relay, HIGH);
        delay(100);
        }
        else
        {
        relayOn = false;
        digitalWrite(relay, LOW);
        delay(100);
        }
        break;
        }
        Serial.println(value); // you can comment this line
        irrecv.resume(); // Receive the next value
        }
        }

        1. Aleksa kaže

          Deluje na prvi pogled kao da ce raditi, samo je zakomplikovan previse, bolje je koristiti boolean promenljive nego navedene nizove. :)

Sviđa ti se članak?

Lajkuj stranicu i budi u toku! Hvala