Sunteți pe pagina 1din 8

Controlul LED-urilor cu ajutorul potențiometrului

4. Controlul LED-urilor cu ajutorul potențiometrului

Scop
 Reglarea intensității luminii emise de un LED și controlul unor LED-uri prin potențiometru.

Obiective educaționale și de formare a competențelor specifice


 Realizarea circuitelor electrice cu LED-uri și potențiometru;
 Realizarea codurilor de funcționare a circuitelor electrice cu LED-uri și citirea valorilor
potențiometrului.

4.1. Principii teoretice

În sistemele embedded, un divizor de tensiune este un circuit liniar pasiv care produce o
tensiune de ieșire raportată la o fracțiune din tensiunea de intrare (de alimentare). Divizoarele de
tensiune sunt utilizare, în general, pentru ajustarea nivelului unui semnal, pentru polarizarea
dispozitivelor active şi pentru măsurarea tensiunilor. Divizoarele de tensiune pot fi folosite pentru
a permite unui microcontroler să măsoare rezistența unui senzor. Senzorul este conectat în serie cu
o rezistență cunoscută pentru a forma un divizor de tensiune și o tensiune cunoscută este aplicată
la capătul celălalt al divizorului. Convertizorul analog-digital al microcontrolerului este conectat la
pinul central al divizorului, astfel încât se poate măsura tensiunea de mijloc, și cu ajutorul tensiunii
măsurate și al rezistenței și tensiunii cunoscute, poate calcula rezistența senzorului. Un exemplu,
un potențiometru (rezistor variabil) poate fi utilizat ca unul dintre elementele rezistive. Atunci când
cursorul potențiometrului este rotit, rezistența fie crește, fie scade, modificarea rezistenței
corespunzând cu modificarea unghiulară a cursorului.
În aplicațiile de realizare a circuitelor electrice utilizând placi de dezvoltare Arduino,
potențiometrele sunt cel mai frecvent utilizate în reglarea intensității luminii emise de un LED şi/sau
controlul LED-urilor. Astfel, un potențiometru are 3 pini; prin 2 pini se furnizează alimentarea (5V şi
masă), iar prin pinul 3 se citesc valorile de ieșire ale potențiometrului prin funcția analogRead(). De
asemenea, prin funcțiile Serial.begin() şi Serial.print() se pot afișa valorile potențiometrului.
Limbajul C oferă o facilitate de extindere a limbajului cu ajutorul unui preprocesator de
macro-operații simple, prin folosirea liniilor de forma #define sau #include. Prin caracterului „#” se
indică faptul că aceste linii vor fi tratate ca preprocesor.
Cu ajutorul macro-operatorului "#define", se pot defini la începutul programului nume sau
constante simbolice, care sunt un şir particular de caractere. După aceea, compilatorul va înlocui
toate aparițiile nepuse între ghilimele ale numelui, prin șirul corespunzător. Înlocuirea efectivă a
numelui poate fi orice text, ea nu se limitează la numere. Programul poate fi citit şi valorile acestor
constante pot fi modificate mai ușor.
Sintaxă:
#define constantName value

59
Controlul LED-urilor cu ajutorul potențiometrului

Parametrii:
constantName: PIN_LED

value 3

Exemplu:
#define PIN_LED 3 // compilatorul va utiliza valoare 3 a PIN_LED în momentul
compilării

Funcția analogRead() citește valorile specifice unui pin analogic. Deoarece pinii analogici ai
plăcilor de dezvoltare Arduino operează pe 10 biți, conversia în valorile digitale vor varia de la 0 la
1023, deci 1024 de valori sau dacă se dorește convertirea în tensiune electrică, aceasta va varia de
la 0V la 5V. Prin funcţia Serial.begin(9600) se deschide portul serial prin care se afișează valorile de
pe pinul digital, setat la o rată de transfer de 9600 biţi/sec, iar prin funcţia Serial.println() va afişa
prin serial monitor, valorile pinului analogic.
Sintaxe şi exemplu:
int analogPin = A0; // pinul analogic selectat

void setup() {

Serial.begin(9600); // initializarea comunicării seriale

void loop() {

val = analogRead(analogPin); // citirea valorilor pinului analogic

Serial.println(val); // afișarea valorilor pinului analogic

Pentru implementarea codului de control a LED-urilor cu ajutorul potențiometrului, se pot


utiliza funcţiile if (), if else () şi else ().
Funcția if () verifică o condiție a instrucțiunii și execută instrucțiunea dacă acea condiție este
adevărată, iar parametrii, deci condiția este de tip expresie boolean (adică adevărat sau fals).
Sintaxă:
if (condition) {
//statement(s)
}
Exempu:
if (x > 120) digitalWrite(LEDpin, HIGH);
if (x > 120)
digitalWrite(LEDpin, HIGH);
if (x > 120) {digitalWrite(LEDpin, HIGH);}
if (x > 120) {
digitalWrite(LEDpin1, HIGH);
digitalWrite(LEDpin2, HIGH);
}
// toate sunt corecte

60
Controlul LED-urilor cu ajutorul potențiometrului

Funcția else () - if ...else () permite un control mai bun al codului decât funcția if () permițând
grupare în mai multe condiții, ce pot fi executate în același timp. Codul va rula prin fiecare condiție
până se găsește una adevărată, iar programul trece apoi la linia care urmează în funcţia if/else ().
Daca nici o condiție nu e adevărată, codul va rula funcția default ().
Sintaxă:
if (condition1) {
// do Thing A
}
else if (condition2) {
// do Thing B
}
else {
// do Thing C
}
Exemplu: - cod preluat din funcționarea unui senzor de temperatură
if (temperatura >= 70) {
// Pericol! Închide sistemul.
}
else if (temperatura >= 60) { // 60 <= temperatura < 70
// Avertizare! Este necesară atenţia utilizatorului.
}
else { // temperatura < 60
// În regulă! Continuă activităţile.
}

4.2. Realizarea unui circuit cu LED utilizând placa de dezvoltare Arduino


Nano

Pentru a regla intensitatea luminii emise de un LED, respectiv, pentru a controla mai multe
LED-uri cu ajutorul potențiometrului se vor realiza circuitele electrice, apoi prin compilatorul IDE
Arduino se va implementa codul de funcționare a fiecărui circuit.

Pas 1 – Elementele componente ale circuitului

Principalele elemente componente necesare pentru realizarea circuitelor sunt:


→ Placă de dezvoltare Arduino Nano
→ Breadboard
→ LED-uri
→ Rezistori
→ Conectori
→ Potențiometru
Potențiometrul (fig. 4.1) este un dispozitiv analogic rotativ cu trei terminale, care poate fi
utilizat într-o varietate de circuite electrice/electronice şi are rol de divizor de tensiune, permițând
61
Controlul LED-urilor cu ajutorul potențiometrului

reglare sau controlul intensității curentului care trece printr-un circuit, dacă este conectat în paralel,
sau controlul căderii de tensiune, dacă este conectat în serie.

Fig.4.1. Potențiometru rotativ cu caracteristică liniară

Potențiometru liniar este format dintr-o rezistență liniară care pe lângă cele două conexiuni
de la capetele acestora au și o conexiune glisantă ce poartă denumirea de cursor. Schema unui
potențiometru liniar este redată în fig. 4.2.

Fig.4.2. Schema echivalentă a unui potențiometru rotativ cu caracteristică liniară

Dacă contactul mobil se află pe capetele extreme, tensiunea de ieșire Ux va fi 0 (masă) sau
U (tensiunea de alimentare), iar pentru orice poziție intermediară, tensiunea U x va fi cuprinsă între
0 şi tensiunea de alimentare.

Pas 2 – Realizarea circuitelor cu LED şi potențiometru

Pentru a regla intensitatea luminii emise de un LED se vor utiliza elementele componente
descrise la Pasul 1, care se vor conecta conform fig. 4.3. În acest sens, placa de dezvoltate Arduino
Nano, LED-ul şi potențiometrul vor fi conectați în slot-urile breadboard-ului, se vor realiza
conexiunile cu ajutorul conectorilor şi a rezistorului după cum urmează:
→ Conectarea LED-ului – pinul lung se conectează la un pin digital de pe placa de
dezvoltare Arduino Nano, iar pinul scurt, printr-un rezistor de 220 Ω, se va conecta
la masă (ground, „-”) de pe breadboard, secțiunea exterioară marcată cu line
albastră, masă luată de pe pinul GND de la placa de dezvoltare Arduino Nano;
→ Conectarea potențiometrului – pinul din dreapta al potențiometrului se va conecta
la GND de pe breadboard, pinul din stânga se va conecta la 5V de pe placa de
dezvoltare Arduino Nano, iar pinul central se va conecta la un pin analogic de pe
placa de dezvoltare Arduino Nano.

62
Controlul LED-urilor cu ajutorul potențiometrului

Fig. 4.3. Circuitul format cu Arduino Nano, un LED şi potențiometru

Pentru a controla 3 LED-uri cu ajutorul potențiometrul (fig. 4.4), se vor adăuga încă 2 LED-
uri care vor fi conectate conform descrierii circuitului anterior.

Fig. 4.4. Circuitul format cu Arduino Nano, 3 LED-uri şi potențiometru

63
Controlul LED-urilor cu ajutorul potențiometrului

Pas 3 – Crearea programelor de funcționare ale celor două circuite

Se conectează primul circuit realizat (fig. 4.3.) prin portul USB tip B de la placa de dezvoltare
Arduino Nano la USB-ul laptopului, se lansează compilatorul IDE Arduino, se va selecta din Tools →
Board → Arduino Nano, tot din Tools se va selecta portul de comunicare – COM 3,4,5,... și se va
deschide un nou Sketch din Files în care se va realiza programarea circuitului.
În primă etapă se va declara prin #define pinul utilizat pentru ieșirea digitală a LED-ului și
pinul analogic utilizat pentru citirea valorilor potențiometrului.
#define PIN_LED 3

#define PIN_POTENTIOMETRU A1

În funcția setup() se va inițializa pinul digital pentru LED şi a comunicării seriale pe 9600
biţi/sec. Având în vedere că pinul analogic al potențiometrului este o intrare, acesta nu trebuie să
fie declarat în funcția setup().

void setup()
{
pinMode(PIN_LED, OUTPUT);
Serial.begin(9600);
}

În funcția loop() în primă etapă se va realiza citirea valorilor potențiometrului prin funcția
analogRead(). Deoarece funcția analogRead() este descrisă de 10 biți, aceștia pot fi convertiți în
valori numerice de la 0 la 1023 (10 biţi = 210 = 1024 de valori) sau în tensiune electrică de la 0V la
5V. Cu scopul de a regla intensitatea luminii emise de LED, se inițiază intensitatea luminii la valoarea
potențiometrului, dar deoarece funcția analogWrite() ia valori între 0 şi 255, valoarea
potențiometrului este împărțită la 4. În ultimă etapă, în loop(), se aplică setarea intensității luminii
LED-ului şi prin funcția println() se va afișa în serial monitor valorile pinului analogic.

void loop()
{
int ValoarePotentiometru = analogRead(A1);
int intensitate = ValoarePotentiometru/4;

analogWrite(PIN_LED, intensitate);

Serial.println(intensitate);
delay(100);

Pentru programare circuitului al 2-lea, la care se realizează controlul LED-urilor cu ajutorul


potențiometrului, în primă etapă a realizării codului, prin #define se vor realiza macro-operatori
pentru pinii digitali ai celor 3 LED-uri, pinul analogic al potențiometrului și numărul de LED-uri
utilizate în circuit.

64
Controlul LED-urilor cu ajutorul potențiometrului

#define LED_1_PIN 3
#define LED_2_PIN 5
#define LED_3_PIN 6
#define PIN_POTENTIOMETRU A1
#define NUMAR_LED 3

În funcția setup() se vor inițializa pinii digitali de ieșire pentru cele 3 LED-uri ale circuitului.

void setup()
{
pinMode(LED_1_PIN, OUTPUT);
pinMode(LED_2_PIN, OUTPUT);
pinMode(LED_3_PIN, OUTPUT);
}
În funcţia loop() se vor citii valorile potențiometrului prin analogRead() de la 0 la 1023.
Aceste valori ale potențiometrului de vor transforma în numere care să corespundă a 3 cazuri de
funcționare, respectiv:
0 (pentru LED-ul 1)
1 (pentru LED-ul 2)
2 (pentru LED-ul 3)
Prin cele 3 numere rezultate, împarte de fapt întregul interval de valori ale potențiometrului
pe intervale egale de funcționare a fiecărui LED. În prima treime a intervalului de valori a
potențiometrului (de la 0 la 341) să funcționeze lumină LED-ul 1, în a doua treime (de la 341 la 682)
a intervalului de valori a potențiometrului să funcționeze lumină LED-ul 2 şi în a treia treime a
intervalului de valori a potențiometrului (de la 682 la 1023) să funcționeze lumină LED-ul 3.

void loop() {
int valoarePotentiometru = analogRead(A1);
int alegereLED = valoarePotentiometru / (1024 / NUMAR_LED);
if (alegereLED > NUMAR_LED - 1) {
alegereLED = NUMAR_LED – 1;
}

Prin funcția if(), else if() şi else () se va furniza tensiune pentru fiecare LED în funcție de
poziția cursorului potențiometrului exprimat prin funcția descrisă anterior.

if (alegereLED == 0) {
digitalWrite(LED_1_PIN, HIGH);
digitalWrite(LED_2_PIN, LOW);
digitalWrite(LED_3_PIN, LOW);
}
else if (alegereLED == 1) {
digitalWrite(LED_1_PIN, LOW);
digitalWrite(LED_2_PIN, HIGH);
digitalWrite(LED_3_PIN, LOW);
65
Controlul LED-urilor cu ajutorul potențiometrului

}
else {
digitalWrite(LED_1_PIN, LOW);
digitalWrite(LED_2_PIN, LOW);
digitalWrite(LED_3_PIN, HIGH);
}
}

Dacă se dorește vizualizarea valorilor potențiometrului prin serial monitor, în setup() se va


include Serial.begin, iar după funcția if (), if else () şi else () se va insera:
Serial.println(analogRead(A1));
delay(100);

Pas 4 – Cerințe

Se vor construi cele două circuite electrice utilizând kitul Arduino Nano din dotarea
laboratorului și se va realiza funcționarea acestora prin implementarea codurilor descrise în
laborator, iar afișajul valorilor în Serial monitor să se realizeze şi în tensiune electrică (0V până la
5V).

66

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