Proiect Arduino cu VS1838B KY-022 pentru control la distanta

Proiect Arduino cu VS1838B KY-022 pentru control la distanta

Tutorial video modul receptor IR VS1838B KY-022


In acest videoclip, vei urmari un tutorial care te va ghida pas cu pas prin modul in care trebuie conectat modulul receptor IR VS1838B KY-022 cu celelalte componente necesare.

In acest proiect, vom construi un sistem de control la distanta folosind modulul receptor IR VS1838B KY-022.

Modulul receptor IR VS1838B KY-022 este o componenta electronica capabila sa primeasca si sa decodeze semnale in spectrul infrarosu. Acest modul este utilizat pe scara larga in sistemele de control de la distanta si in alte aplicatii electronice care necesita transmiterea si receptia de semnale in infrarosu. Este o componenta esentiala in electronica si poate fi usor integrata cu alte componente pentru a crea o varietate de aplicatii.

Modul receptor IR VS1838B KY-022 bitmi

Modulul se bazeaza pe senzorul VS1838B si functioneaza la o tensiune de alimentare cuprinsa intre 2,7V si 5,5V DC. Daca doresti sa afli mai multe informatii despre modulul receptor IR VS1838B KY-022, ii poti accesa datasheet-ul AICI.

Pentru controlul iluminarii, vom utiliza o telecomanda IR, o modalitate excelenta de a exercita comenzi la distanta asupra proiectului nostru. Telecomenzile cu infrarosu sunt simple si usor de utilizat, oferind un control eficient asupra luminilor. Prin acest proiect, vom demonstra modul in care tehnologia infrarosie poate fi folosita pentru a controla luminile intr-un mod practic si captivant.

Componente necesare

In continuare, pentru a putea construi acest proiect vei avea nevoie de:

Acum ca ai aflat care sunt componentele necesare, te vei ghida dupa schema de conectare de mai jos.

Schema de conectare modul receptor IR VS1838B KY-022

Tabel conectare modul receptor IR VS1838B KY-022 bitmi

Se conecteaza GND de la Arduino pe breadboard.

Pentru modulul receptor IR VS1838B KY-022, conecteaza pinul S la portul digital 8 Arduino, pinul din mijloc la 5V Arduino si pinul - la GND Arduino.

Pentru LED-uri, conecteaza pinul - (pinul mai scurt) la un rezistor de 220Ω conectat la GND de pe breadboard si pinul + (pinul mai lung) la portul digital 7, 6, 5, 4, 3, respectiv 2 Arduino.

Schema conectare modul receptor IR VS1838B KY-022 bitmi

Exemplu cod

In acest proiect va trebui sa folosesti biblioteca IRremote (pentru telecomanda), pe care o poti descarca AICI.

Pentru a adauga o biblioteca in mediul de dezvoltare Arduino IDE, deschide Arduino IDE si din meniul Sketch (Schita) acceseaza Include Library (Incarcare biblioteca) si apoi selecteaza Add .ZIP Library... (Adauga biblioteca .ZIP). Aici va trebui sa gasesti si sa selectezi fisierul .zip al bibliotectei IRremote. Dupa ce ai deschis fisierul .zip si cand procesul de instalare s-a terminat cu succes, va aparea un mesaj in partea de jos a ferestrei care iti va confirma ca fisierul a fost adaugat in biblioteca.

Dupa ce ai realizat circuitul si ai descarcat cu succes biblioteca IRremote, introdu codul furnizat mai jos. Apoi conecteaza placa Arduino la computer prin intermediul portului USB, selecteaza tipul de placa si portul serial (din meniul Tools selecteaza pentru optiunile Board si Port ceea ce utilizezi). Pentru a incarca codul pe placa, apasa butonul Upload (simbolul de sageata catre dreapta). In partea de jos a ferestrei vei putea urmari mesajele de stare: Compiling Sketch, Uploading si Done. Dupa finalizarea cu succes a incarcarii, placa Arduino va rula codul pe care l-ai incarcat.

#include <IRremote.h>

int RECV_PIN = 8;
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
int LED6 = 7;

long on1 = 0x00FF30CF;
long off1 = 0x00FF6897;
long on2 = 0x00FF18E7;
long off2 = 0x00FF9867;
long on3 = 0x00FF7A85;
long off3 = 0x00FFB04F;
long on4 = 0x00FF10EF;
long off4 = 0x00FF42BD;
long on5 = 0x00FF38C7;
long off5 = 0x00FF4AB5;
long on6 = 0x00FF5AA5;
long off6 = 0x00FF52AD;

IRrecv irrecv(RECV_PIN);
decode_results results;

void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");
  } else {
    if (results->decode_type == NEC) {
      Serial.print("Decoded NEC: ");
    } else if (results->decode_type == SONY) {
      Serial.print("Decoded SONY: ");
    } else if (results->decode_type == RC5) {
      Serial.print("Decoded RC5: ");
    } else if (results->decode_type == RC6) {
      Serial.print("Decoded RC6: ");
    }
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
  }
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    } else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}

void setup() {
  pinMode(RECV_PIN, INPUT); 
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT); 
  pinMode(13, OUTPUT);
  Serial.begin(9600);

  irrecv.enableIRIn();
}

int on = 0;
unsigned long last = millis();

void loop() {
  if (irrecv.decode(&results)) {
    if (millis() - last > 250) {
      on = !on;
      digitalWrite(13, on ? HIGH : LOW);
      dump(&results);
    }
    if (results.value == on1)  digitalWrite(LED1, HIGH);
    if (results.value == off1) digitalWrite(LED1, LOW); 
    if (results.value == on2)  digitalWrite(LED2, HIGH);
    if (results.value == off2) digitalWrite(LED2, LOW); 
    if (results.value == on3)  digitalWrite(LED3, HIGH);
    if (results.value == off3) digitalWrite(LED3, LOW);
    if (results.value == on4)  digitalWrite(LED4, HIGH);
    if (results.value == off4) digitalWrite(LED4, LOW); 
    if (results.value == on5)  digitalWrite(LED5, HIGH);
    if (results.value == off5) digitalWrite(LED5, LOW); 
    if (results.value == on6)  digitalWrite(LED6, HIGH);
    if (results.value == off6) digitalWrite(LED6, LOW); 
    last = millis(); 
    irrecv.resume(); 
  }
}