Sunteți pe pagina 1din 10

Laborator Sisteme cu Microprocesoare Integrate

Departamentul de Automatic i Informatic Industrial

Lucrare 11 Comunicaia prin infrarou

Coninutul lucrrii pe scurt:


Introducerea metodelor de comand fr fir
Prezentarea elementelor de comand de putere
Realizarea unui sistem telecomandat bazat pe relee

Echipamente necesare lucrrii:


Plac de dezvoltare Arduino Uno sau compatibil
Cablu de conectare USB
Breadboard + fire de interconectare
LCD alfanumeric16x2 + rezistor variabil (poteniometru)
10Kohm + rezistor 220ohm
Receptor infrarou integrat + telecomand infrarou
Buzzer piezo + rezistor 220ohm
2 LED-uri + 1 rezistor de 220ohm
Releu RM50-3011-85-1005 + tranzistor de comand BC547A
(sau echivalent 2N2222, 2N4401) + rezistor 1Kohm + diod de
protecie

Seciuni lucrare:
Elemente de comand la distan fr fir
Proiect decodificator de telecomand
Funcionarea elementelor de tip releu
Proiect sistem de comand la distan
Referine online

1
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

Elemente de comand la distan fr fir

De multe ori elementele de comand sunt aflate la distan de utilizator i necesit o


modalitate de transmitere a comenzii utilizator la distan. Una dintre cele mai cunoscute
metode de transmitere fr fir a comenzii utilizator la distane mici este bazat pe protocolul
IrDA (comunicaie bazat pe raze infraroii raze luminoase invizibile) cel mai bun exemplu
fiind telecomenzile aparatelor electrocasnice. Protocolul IrDA este (sau mai bine zis a fost)
folosit i ca modalitate de transport de date (generaiile mai vechi de echipamente portabile
mobile, laptop-uri, camere foto) dar la momentul actual este unul dintre cele mai rspndite
modaliti de comand la distan fr fir pentru distane mici.

Cea mai simpl modalitate de a implementa funcionaliti IrDA n


cadrul unui sistem bazat pe placa de dezvoltare Arduino este
utilizarea unui receptor infrarou integrat care se va conecta la
orice pin digital al plcii. Receptorul transmite ctre placa Arduino
un tren de impulsuri echivalent cu comenzile primite prin
infrarou. ATENIE! n funcie de tipul i modelul receptorului
imaginea i dispunerea pinilor poate fi diferit. Trebuie verificat
cu atenie documentaia circuitului pentru o conectare corect
conectarea greit a pinilor conduce la distrugerea imediat i
permanent a receptorului. Pentru o decodare mai uoar a
comenzilor primite prin intermediul receptorului se poate utiliza
biblioteca software A Multi-Protocol Infrared Remote Library for
the Arduino [1].

Pentru a transmite comanda ctre un sistem bazat pe receptor infrarou putem folosi orice
telecomand pe care o avem deja (telecomanda de la televizor, de la aerul condiionat sau de la
combina audio), o telecomand specializat sau un sistem Arduino cu un LED IR ataat.
Biblioteca IR de mai sus permite att decodarea transmisiei IR ct i codarea pentru
transmiterea comenzii (n directorul examples al bibliotecii se regsesc exemple pentru
operaiile de recepie i transmisie: IRrecvDemo i IRsendDemo).

n cazul n care se utilizeaz o telecomand deja existent pentru a putea identifica codurile
corespondente diverselor butoane de comand se poate utiliza unul dintre exemplele
bibliotecii: IRrecvDemo sau IRrecvDump. Pentru a utiliza biblioteca este necesar copierea n
directorul libraries al mediului Arduino IDE, includerea n fiierul surs a acesteia

#include <IRremote.h>

declararea unui obiect de tip IRrecv i a unui obiect de tip decode_results iar n funcia setup()
activarea receptorului IR:

IRrecv irrecv(PIN);
decode_results results;

2
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

void setup() { irrecv.enableIRIn(); }

Recepionarea mesajului se face cu ajutorul comenzii irrecv.decode(&results) unde


mesajul poate fi accesat cu ajutorul results.value . Pentru preluarea urmtorului mesaj
este necesar reluarea recepionrii irrecv.resume(); .

Proiect decodificator de telecomand

n cadrul acestui proiect ne propunem s realizm decodificarea comenzilor trimise de ctre o


telecomand i afiarea comenzii pe un afiaj LCD. Pentru acest lucru vom utiliza un receptor
integrat de infrarou de 38kHz TSOP4838 [2]. Schema de interconectare este prezentat pe
pagina urmtoare.

Partea de iniializare a programului va include bibliotecile necesare, va declara i iniializa


obiectele care vor fi utilizate ulterior.

#include <IRremote.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, NULL, 11, 10,9,8,7);


int receiver = 4;
IRrecv irrecv(receiver);
decode_results results;

void setup()
{
lcd.begin(16, 2);
lcd.noCursor();
irrecv.enableIRIn();
}

n cadrul programului se va efectua citirea secvenei de informaii primite prin infrarou, se va


ncerca identificarea i afiarea (linia 0) categoriei de protocol, se va afia codul primit de la
telecomand n hexazecimal i butonul asociat (linia 1):

3
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

4
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

Codul asociat funciei loop() este urmtorul:

void loop() {
if (irrecv.decode(&results)) {
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
if (results.decode_type == UNKNOWN) {
lcd.print("Unknown");
}
else if (results.decode_type == NEC) {
lcd.print("NEC");
}
else if (results.decode_type == SONY) {
lcd.print("SONY");
}
else if (results.decode_type == RC5) {
lcd.print("RC5");
}
else if (results.decode_type == RC6) {
lcd.print("RC6");
}
else if (results.decode_type == PANASONIC) {
lcd.print("PANASONIC");
}
else if (results.decode_type == JVC) {
lcd.print("JVC");
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(results.value, HEX);
lcd.print(" ");
// decodare comenzi pentru NEC AverMedia RM-KV
if (results.value==0x20DF807F) lcd.print("Power");
if (results.value==0x20DF609F) lcd.print("Mute");
if (results.value==0x20DF906F) lcd.print("1");
if (results.value==0x20DF50AF) lcd.print("2");
if (results.value==0x20DFD02F) lcd.print("3");
if (results.value==0x20DFD22D) lcd.print("OK");
if (results.value==0x20DF20DF) lcd.print("Vol+");
if (results.value==0x20DFA05F) lcd.print("Vol-");
if (results.value==0x20DF40BF) lcd.print("CH+");
if (results.value==0x20DFC03F) lcd.print("CH-");
irrecv.resume();
}
delay(100);
}

5
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

Funcionarea elementelor de tip releu

n cazul n care n cadrul unui sistem este necesar transmiterea unei comenzi unui element ce
difer ca putere electric (tensiune / curent) de elementul de comand este necesar gsirea
de soluii pentru urmtoarele dou probleme:

Modificarea (de obicei amplificarea) comenzii pentru a fi potrivit elementului


comandat,
Izolarea galvanic ntre elementul de comand i elementul comandat pentru a proteja
elementul de putere mai mic (de obicei elementul de comand).

Amplificarea comenzii poate fi realizat prin tranzistoare de putere sau drivere de curent dar
aceste componente au un raport de amplificare limitat i nu asigurar izolarea galvanic
(separarea electric ntre circuitul comandat i circuitul de comand). Circuitele de tip
optocuplor pot asigura izolarea galvanic dar au nici o influen asupra parametrilor electrici de
comand.

Pentru a rezolva ambele probleme se pot utiliza


elementele de tip releu. Releul este un ntreruptor
acionat electric. Majoritatea releelor utilizeaz un
electromagnet pentru a declana ntreruptorul mecanic.
Releele sunt utilizate cnd se dorete ca un sistem de
comand de mic putere s transmit o comand de tip
nchis / deschis unui sistem de mare putere asigurndu-
se izolare galvanic ntre cele dou circuite.

n cadrul lucrrii vom utiliza un releu RM50-3011 [3] cu


comand de 5V DC i pini de comand att pe nchis ct
i pe deschis. Releul poate nchide (comanda) circuite
funcionnd pn la 15A / 24V DC sau 10A / 240V AC.

Dup cum se poate observa din diagrama din dreapta


releul utilizat permite nchiderea unui circuit pe 0 logic
i a altui circuit pe 1 logic.

6
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

Deoarece acionarea bobinei interne a releului


necesit o putere de 360mW vom executa
comanda prin intermediul unui tranzistor NPN
pentru a crete curentul de comand i pentru a
proteja pinul de comand al plcii Arduino
(schem stnga).

Proiect sistem de comand la distan

n cadrul proiectului ne propunem s realizm un sistem de comand de putere comandat de la


distan prin intermediul unui receptor infrarou. Schema electric este prezentat n
pagina urmtoare (trebuie verificat documentaia receptorului integrat infrarou
pentru o conectare corect: Vs la +5V, GND la GND, OUT la pin5). Trebuie verificat de
asemenea cu atenie i tipul tranzistorului de comand pentru ca n baza acestuia s fie
conectat comanda de la pinul 6 al plcii Arduino, emitorul s fie conectat la mas i
colectorul s fie conectat la bobina de comand a releului.

Vom utiliza de pe telecomand un buton pentru a comanda o stare de start / stop pentru
comanda releului. n cazul n care se apas alt buton buzzerul va emite un semnal sonor de
avertizare. Emiterea semnalului sonor se bazeaz pe procedura playTone() utilizat i n cadrul
lucrrii 9.

void playTone(int tone, int duration) {


for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(buzzerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(buzzerPin, LOW);
delayMicroseconds(tone);
}
}

Starea de start presupune alternare de comand 0 / 1 pentru releu, starea de stop este o
stare de repaus. Codificare strii de funcionare a programului se bazeaz pe variabila stat. n
cazul schemei propuse releul comand dou leduri nu este vorba efectiv de comand de

7
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

putere (LED-urile sunt alimentate la 5V de la placa Arduino) ci doar de o exemplificare a


funcionrii releului.

8
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

n cadrul programului trebuie personalizat codul butonului ce declaneaz tranziia start / stop
n funcie de telecomanda folosit (butonul Power sau un alt buton).

n cadrul procedurii setup() se realizeaz iniializarea comunicaiei prin infrarou, a pinilor


digitali utilizai (releu i buzzer). Procedura loop()execut comanda pentru releu (dac
stat==1) i efectueaz verificarea primirii unei comenzi prin infrarou.

#include <IRremote.h>
const int receiver = 5;
IRrecv irrecv(receiver);
decode_results results;
const byte releuPin = 6;
volatile byte stat = 0;
const int buzzerPin = 4;

void setup()
{ irrecv.enableIRIn();
pinMode(releuPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
}

void loop() {
if (stat) {
digitalWrite(releuPin,HIGH);
delay(1000);
digitalWrite(releuPin,LOW);
delay(1000);
}
if (irrecv.decode(&results))
{
if (results.value==0x20DF807F) stat=!stat;
else playTone(2000,500);
irrecv.resume(); // receive the next value
}
}

9
Laborator Sisteme cu Microprocesoare Integrate
Departamentul de Automatic i Informatic Industrial

Referine online

[1] A Multi-Protocol Infrared Remote Library for the Arduino


http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
[2] IR Receiver Modules for Remote Control Systems
http://www.vishay.com/docs/82459/tsop48.pdf
[3] RM50 miniature relays
http://www.relpol.pl/content/download/13683/165949/file/RM50.pdf

10

S-ar putea să vă placă și