0% au considerat acest document util (0 voturi)
15 vizualizări17 pagini

Arduino Lectia 05

Încărcat de

katanamad
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
15 vizualizări17 pagini

Arduino Lectia 05

Încărcat de

katanamad
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 17

Semnale.

Senzor de lumină

1
Lecția #5

Semnale. Senzor de
lumină

În lecțiile anterioare, am lucrat cu LED-uri și butoane. Acum trebuie să


studiem în detaliu semnalele, tipurile și principiile de funcționare ale
acestora, precum și să învățăm cum să controlăm luminozitatea LED-urilor
(Figura 1).

Figura 1

Lumea reală nu este digitală. Semnalele analogice ne înconjoară peste


tot - acestea sunt schimbări de temperatură, umiditate și iluminare. Simțurile
noastre percep informațiile într-o formă analogică, adică continuu în timp.
De exemplu, o schimbare a temperaturii camerei sau a umidității aerului.

Materialele lecției sunt atașate la acest fișier PDF.


Pentru a accesa materialele, trebuie să deschideți
lecția în aplicația Adobe Acrobat Reader.

2
Semnale. Senzor de lumină

Dacă măsurăm, de exemplu, fluctuațiile de temperatură în fiecare oră,


atunci succesiunea datelor în grade Celsius va arăta astfel: 20,3; 20; 20,5;
21; 20.8 și așa mai departe (Figura 2).

Figura 2

Un semnal digital diferă de un semnal analog prin faptul că ia doar două


valori. Acest tip de semnal codifică informațiile ca șir, unde 0 (LOW) și 1
(HIGH). Cele mai multe dispozitive electronice moderne, inclusiv
computere și telefoane mobile, codifică datele ca semnale digitale. În
comparație cu semnalele analogice, semnalele digitale sunt mai ușor și mai
precis de transmis (Figura 3).

Figura 3

Acum știm cum diferă semnalele analogice și cele digitale. Cu toate


acestea, Arduino nu poate accepta temperatura sau iluminarea așa cum le
percepem. Microprocesoarele nu pot procesa date ca oamenii. Este necesar
să traduceți datele primite într-o astfel de valoare încât microcipul să poată

3
Lecția 5

citi. Pentru aceasta, ar trebui folosiți senzori, care în acest caz convertesc
temperatura într-o valoare a tensiunii. Aceste valori diferă de HIGH și
LOW, care caracterizează semnalele digitale, deoarece pot lua orice valoare
de la 0 la 5 volți, de exemplu, 0,3 volți, 3,27 volți, 4,99 volți. Acesta este un
semnal analogic, ia mult mai mult de două valori. Cantitatea de informații
transmise depinde doar de capacitățile microcontrolerului cu care vom lucra.
Microcontrolerul Arduino, de exemplu, poate distinge doar între 1.024 de
valori: de la 0 la 1023 (Figura 4).

Figura 4

Să vedem cum să obținem informații despre iluminare folosind semnale


analogice. Pentru aceasta vom folosi un senzor de lumină sau un
fotorezistor. Un fotorezistor sau fotocelula este un rezistor variabil, reglabil
în intensitatea luminii. Cu cât mai sus cu intensitatea luminii, cu atât
rezistența fotorezistorului este mai mică (Figurza 5).

Figura 5

Să creăm un proiect în care LED-ul se va aprinde la lumină slabă și se


va stinge când este bună lumina (Figura 6).

4
Semnale. Senzor de lumină

Figura 6

Circuitul Tinkercad are un circuit gata făcut la care sunt deja conectate
o diodă și un fotorezistor. Să intrăm în bara de căutare „photorezistor", Și
adăugați schema Calibratione (Figura 7).

Figura 7
5
Lecția 5

În această diagramă, LED-ul este conectat la pin Digital. Semnalul


digital poate fi HIGH sau LOW.
Acest lucru este suficient pentru a porni și stinge LED-ul. Fotorezistor
conectat la pinul analogic A0 pentru a primi un semnal analogic (Figura 8).

Figura 8

Acum să trecem la cod (Figura 9).

Figura 9

6
Semnale. Senzor de lumină

Există deja cod pentru această schemă. Trebuie să-l eliminați pentru a
vă scrie programul. În primul rând, să adăugăm un element piezoelectric pe
placa, astfel încât să putem auzi un anumit sunet. Vom schimba tonul și
durata sunetului, în funcție de nivelul de iluminare. Conectați elementul
piezoelectric la pinul 8 (Figura 10).
Schema electrică:

Figura 10

Acum să programăm placa. Mai întâi, indicăm pinii la care am conectat


senzorii:
const int pRezistor = A0; // Fotorezistor pin analog A0
const int ledPin = 9; // LED pin 9
const int buzzerPin = 8; //piezo pin8

Apoi creăm o variabilă în care vom stoca informații de la fotorezistor.


Deoarece vom procesa un semnal analogic, valorile de la 0 la 1023 vor fi
stocate în această variabilă:
//Variables
int value; // Stocăm valoare de la fotoresistor (0-1023)

void setup(){
pinMode(ledPin, OUTPUT); // Setăm ledPin - pin9 ca output
pinMode(pResistor, INPUT);// Setăm ledPin - pinA0 ca input
(optional)

7
Lecția 5

pinMode(buzzerPin, OUTPUT); // Setăm pin8 ca output

Apoi mergem la bucla principală a programului:


void loop(){
// setăm luminozitatea pinului 9:
value = analogRead(pResistor);
//Puteți schimbavaloarea "935"
if (value > 935){
digitalWrite(ledPin, LOW); //LED off
tone(buzzerPin, 2000, 50);

else{
digitalWrite(ledPin, HIGH); //LED on
tone(buzzerPin, 3000, 400);

delay(500); //mic delay


}

Stocăm în variabilă value semnalul analog al fotorezistorului. Pentru


aceasta folosim funcția analogRead (pRezistor).
Comparați valoarea din variabila value cu un număr. Dacă valoarea este
mai mică decât numărul pe care l-am ales, adică este întuneric, atunci porniți
LED-ul. Dacă valoarea este mai mare, atunci stingeți LED-ul.
Să începem emularea. Pentru a experimenta cu fotorezistorul și pentru
a-i aplica mai multă sau mai puțină lumină, faceți clic pe el. Apare un glisor.
Îl putem trage spre dreapta pentru a da mai multa lumina, sau spre stanga
(Figura 11).

8
Semnale. Senzor de lumină

Figura 11

Știm deja cum să procesăm un semnal analogic. Acum să vedem cum


să controlăm luminozitatea unui LED folosind pinii analogici. Noi vom
folosi funcţia analogWrite() să se pornească treptat si să se stingă LED-ul.
AnalogWrite folosește și modularea lățimii impulsului (PWM) pentru a
controla puterea și a crea un efect de amortizare. Puteți transmite 256 de
valori de la 0 la 255. Să încercăm să folosim un semnal analogic pentru a
controla luminozitatea LED-ului. Adăugați un LED și conectați-l la un pin,
lângă care există o denumire specială sub formă de tilde (~) (Figura 12).

Figura 12

În continuare, să adăugăm variabile la începutul codului:

9
Lecția 5

const int led = 6; // PWM fixează LED-ul


int brightness = 0; // luminozitatea LEDului
int fadeAmount = 30; // cu cat sa intunecam LEd-ul

Am inițializat pinul la care este conectat LED-ul ( LED). În plus, a


indicat valoarea inițială luminozitate (brightness) și valoarea cu care se va
modifica luminozitatea (fadeAmount).
Apoi trebuie să inițializați LED-ul din interiorul funcției setup():
void setup(){
… … …
pinMode (led, OUTPUT); // declar pinul 9 ca fiind o ieșire
}

După aceea, să schimbăm puțin codul din bucla. Trebuie să vă asigurați


că LED-ul se aprinde treptat la lumină slabă și se stinge încet la lumină
puternică:
void loop(){

// setăm luminozitatea pinului 9:
analogWrite(led, brightness);

//Puteți schimbavaloarea "935"


if (value > 935){

if (brightness > 0) {
// schimbăm luminozitatea prin bucla următoare:
brightness = brightness - fadeAmount;
if (brightness < 0) {
brightness = 0;
}
}
}

else{

10
Semnale. Senzor de lumină

if (brightness < 255) {


// schimbăm luminozitatea prin bucla următoare:
brightness = brightness + fadeAmount;
if (brightness > 255) {
brightness = 255;
}
}
}
}

Astfel, am adăugat încă o condiție if în interior. Dacă în fotorezistor a


intrat multă lumină și LED-ul nu este aprins, atunci luminozitatea crește. In
caz contrar valoare în variabilă luminozitatea scade (Figura 13).

Figura 13

Codul sursă final:


const int pRezistor = A0; // Fotorezistor pin analog A0
const int ledPin = 9; // LED pin 9
const int buzzerPin = 8; //piezo pin8

const int led = 6; // PWM fixează LED-ul


int brightness = 0; // luminozitatea LEDului
int fadeAmount = 30; // cu cat sa intunecam LEd-ul

//Variables
int value; // Stocăm valoare de la fotoresistor (0-1023)
11
Lecția 5

void setup(){
pinMode(ledPin, OUTPUT); // Setăm ledPin - pin9 ca output
pinMode(pResistor, INPUT);// pinA0 ca input (optional)
pinMode(buzzerPin, OUTPUT);// Setăm ledPin - pin0 ca output
pinMode (led, OUTPUT); // declar pinul 9 ca fiind o ieșire
}

void loop(){
value = analogRead(pResistor);
// setăm luminozitatea pinului 9:
analogWrite(led, brightness);
//Puteți schimbavaloarea "935"
if (value > 935){
digitalWrite(ledPin, LOW); //LED off
tone(buzzerPin, 2000, 50);

if (brightness > 0) {
// schimbăm luminozitatea prin bucla următoare:
brightness = brightness - fadeAmount;
if (brightness < 0) {
brightness = 0;
}
}
}
else{
digitalWrite(ledPin, HIGH); //LED on
tone(buzzerPin, 3000, 400);

if (brightness < 255) {


// schimbăm luminozitatea prin bucla următoare:
brightness = brightness + fadeAmount;
if (brightness > 255) {
brightness = 255;
}
}
}
delay(500); //mic delay
}
12
Semnale. Senzor de lumină

Programul este gata! Știind cum funcționează semnalele analogice,


puteți crea o varietate de dispozitive. De exemplu, lămpi inteligente pentru
casă, a căror luminozitate sau culoare pot fi modificate folosind o aplicație
pe un telefon mobil (Figura 14).

Figura 14

Sau creați lămpi inteligente pentru iluminatul stradal care se vor aprinde
și stinge la un anumit nivel de iluminare (Figura 15).

Figura 15

13
Lecția 5

Acum hai să creăm un proiect cu Led-uri multiple. Acest proiect va face


posibil ca 6 LED-uri, unul câte unul, să clipească intr-o formare înainte și
înapoi. Acest tip de circuit a fost făcut renumit de show-ul Knight Rider,
care include o mașină cu LED-uri în buclă.
Elemente necesare: Arduino Uno, USB A-to-B Cable, ,Breadboard,
LED-uri 5mm, 220 Ω rezistoare, fire de conexiune.
Schema electrică (Figura 16):

Figura 16

Codul sursă:
void setup() {
for(int thisPin =2; thisPin <8; thisPin++)
{
pinMode(thisPin, OUTPUT);
}
}
void loop()
{
// put your main code here, to run repeatedly:
for(int thisPin =2; thisPin<8; thisPin++)
14
Semnale. Senzor de lumină

{
digitalWrite(thisPin, HIGH);
delay(100);
digitalWrite(thisPin,LOW);
}
for(int thisPin=7;thisPin>=2;thisPin--)
{
digitalWrite(thisPin,HIGH);
delay(100);
digitalWrite(thisPin,LOW);
}
}
Exemplu de cod folosit:
for(i=1;i<=6;i++) //setează 1~6 pini de ieșire pe rând
pinMode(i,OUTPUT);/ /setează pinul ca ieșire

Instrucțiunea „for” este folosită pentru a repeta un bloc de instrucțiuni


cuprinse între acolade. Contorul de increment este de obicei folosit pentru a
incrementa și a termina bucla. Declarația for este utilă pentru orice operație
repetitivă și este adesea folosit în combinație cu matrice pentru a opera
culegeri de date/pini.
Există trei părți pentru antetul buclei for (Figura 17):
for (inițializare; condiție; incrementare) {
//statement (declarație);
}

Figura 17

15
Lecția 5

Inițializarea are loc mai întâi și exact o dată. De fiecare dată prin buclă,
condiția este testată; dacă este adevărat, blocul de instrucțiuni și incrementul
este executat, atunci condiția este testată din nou. Când condiția devine
falsă, bucla se termină.

16
Semnale. Senzor de lumină

Lecția 5
Semnale. Senzor de lumină.

© STEP Computer Academy


www.itstep.org

Toate drepturile asupra fișierelor foto, audio și video sunt protejate prin drepturi de autor, ale căror
fragmente sunt utilizate în material, aparțin deținătorilor lor legali. Fragmente de lucrări sunt
utilizate în scopuri ilustrative în măsura justificată de sarcina în cauză, în cadrul procesului
educațional și în scopuri educaționale, în conformitate cu art. 1274h. 4 din Codul civil al Federației
Ruse și art. 21 și 23 din Legea Ucrainei „Cu privire la dreptul de autor și dreptul total”. Volumul și
metoda lucrărilor citate respectă normele acceptate, nu aduce atingere utilizării normale a obiectelor
cu drepturi de autor și nu aduce atingere intereselor legitime ale autorului și ale titularilor de
drepturi. Fragmentele din lucrările citate în momentul utilizării nu pot fi înlocuite cu omologi
alternativi, fără drepturi de autor și, ca atare, îndeplinesc criteriile de utilizare loială și utilizare
loială.

Toate drepturile rezervate. Copierea completă sau parțială a materialelor este interzisă. Coordonarea
utilizării operelor sau a fragmentelor acestora se realizează cu autorii și deținătorii drepturilor de
autor. Utilizarea convenită a materialelor este posibilă numai cu indicarea sursei.

Responsabilitatea pentru copierea neautorizată și utilizarea comercială a materialelor este


determinată de legislația actuală din Ucraina.

17

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