Upload
others
View
14
Download
0
Embed Size (px)
Citation preview
ARDUINO
1. Ce este Arduino?
Arduino este una dintre cele mai simplu de utilizat platforme cu microcontroller. Te poti
gandi la el ca la un minicalculator (are puterea de calcul a unui computer obisnuit de acum 15 ani),
fiind capabil sa culeaga informatii din mediu si sa reactioneze la acestea.
Arduino este un instrument prin care poţi realiza sisteme informatice capabile să ‘perceapă’
şi să ‘controleze’ lumea înconjurătoare . Acest instrument este open-source şi este compus dintr-
un mediu de dezvoltare (o varianta de Wiring – platforma folosită pentru procesare multimedia) şi
o placă de dezvoltare cu microcontroler AVR.
Arduino poate fi folosit pentru dezvoltarea de obiecte interactive. Informaţia este preluată de
la o gamă variată de senzori şi comutatoare, se procesează în interiorul microcontrolerului AVR,
şi este transmisă către o gamă la fel de variată de lumini, motoare, actuatoare etc.
A) Lucruri necesare înainte de a începe
Pentru a putea să foloseşti platforma Arduino ai nevoie de urmatoarele:
– cablu USB
– placă de dezvoltare Arduino
– mediu de dezvoltare
B) Instalarea plăcii de dezvoltare
Instalarea plăcii de dezvoltare se face foarte simplu. Se leagă placa de dezvoltare cu
calculatorul prin intermediul cablului USB, şi gata.
Pentru Windows mai trebuie să instalezi şi driverul plăcii: Trebuie să mergi în Start->Control
Pannel->System and Security->System->Device Manager În grupul Ports (COM & LPT) ar trebuii
să găseşti un port numit Arduino Uno (sau Arduino Mega). Click dreapta pe portul respectiv şi
selectează Update drivers->Browse my computer for Driver software
Mai departe mergi în directorul în care ai dezarhivat aplicaţia Arduino iar aici va trebuii să
alegi directorul Drivers pentru ArduinoUno sau FTDI USB Drivers pentru plăcile ce folosesc
adaptor FTDI.
C) Descrierea plăcii de dezvoltare ArduinoUNO
Plăcile de dezvoltare Arduino seamănă foarte mult între ele (din elementele comune am putea
enumera: intrările/ieşirile digitale, intrările analogice, microcontrolerul etc.). Din acest motiv
descriem în continuare doar placa de dezvoltare ArduinoUno:
-intrare analogică: este folosită pentru citirea semnalelor nondigitale. Ex. senzori de temperatură,
senzori de lumină, senzori de presiune, umiditate etc.
-intrare/ieşire digitală:imaginativa un intrerupator de la un bec. Acesta poate să aibă 2 stări: inchis
sau deschis adica 0 sau 1
-PWM (Pulse-width modulation): modulaţia în durată a impulsurilor. Poate fi utilizat pentru a
indeplinii o varietate foarte mare de sarcini, de la iluminarea LED pana la controlul vitezei
motoarelor electrice.
D) Mediul de dezvoltare Arduino IDE
Instalare:
Descărcă ultima versiune pentru ArduinoIDE de aici: http://arduino.cc/en/Main/Software,
după care dezarhivează fişierul proaspăt descărcat în locaţia dorită.
E) Configurare:
ArduinoIDE se configurează astfel. Din meniul Tools->Boards se selectează tipul de placă
folosit,
iar din meniul Tools->Ports se selectează portul COM folosit de placa de dezvoltare
F) Utilizare:
Fereastra aplicaţiei arată ca în imaginea de mai jos.
1) Zona meniu:
Verifică programul pentru erori
Incarcă programul în placa de dezvoltare
Crează un nou proiect
Deschide un proiect
Salvează proiectul curent
Monitorizare serială – acest buton este folosit pentru comunicarea prin portul serial cu
calculatorul
2) Zona program:
Această parte din aplicaţie este folosită pentru scrierea şi editatrea programelor. Cu ajutorul
iconiţei din dreapta sus (sub forma de sageata orientata în jos) poţi redenumi/crea fisiere noi.
3) Zona compilator:
În această zonă vor aparea eventualele erori de compilare.
Regulă: fiecare proiect Arduino, chiar daca are doar un singur fișier sursă, trebuie plasat într-un
director cu același nume ca fișierul sursa.
Placa pe care o vom folosi pentru activitatea de laborator este Arduino Mega 2560, bazată
pe microcontrollerul Atmel AVR ATMega2560, pe 8 biti. Placa dispune de 54 de pini digitali
pentru intrare/ieşire, şi16 pini pentru preluare de semnale analogice. Unii pini pot avea funcție
multiplă, constituind semnale pentru diferite interfețe de comunicație (UART, SPI, I2C). Frecvența
microcontrollerului este de 16 MHz. Placa se alimentează prin cablul USB cu care se conectează
la calculator, sau poate fi alimentată cu o sursă de tensiune continuă, de 7 … 12 V, care poate
furniza o intensitate a curentului de minim 0.25 A. A doua opțiune este necesară când placa trebuie
să alimenteze periferice mari consumatoare, precum motoare, shield-uri GSM. Etc.
G) Anatomia unui program Arduino
Orice program Arduino are doua sectiuni. Sectiunea "setup", care este rulata doar o singura
data, atunci cand placa este alimentata (sau este apasat butonul "Reset"), si sectiunea "loop", care
este rulata in ciclu, atat timp cat este alimentata placa. Sa luam un exemplu.
void setup() {
//codul scris aici ruleaza o singura data
}
void loop() {
//codul scris aici ruleaza tot timpul
}
Astfel, in rutina "setup" vom pune de obicei cod de initializare, iar in rutina "loop" vom
scrie partea principala a programului nostru.
H) Breadboard
Un breadboard este un dispozitiv care permite conectarea extrem de simpla a
componentelor electronice, fara lipituri. Pentru a conecta dispozitivele se folosesc fire tata-tata (cu
pini la ambele capete), care se introduc in gaurile din breaboard. Gaurile existente in breaboard
sunt conectate intre ele (de obicei pe linie), astfel incat firele introduse pe aceeasi linie vor fi
conectate intre ele. In imaginea de mai jos am marcat cu linie neagra pinii conectati intre ei (eu am
marcat doar pentru primele 3 coloane, dar toate liniile breadboard-ului sunt conectate intre ele).
2. Rezistori
Rezistorul este cel mai banal şi mai des utilizat component electronic. Spre exemplu un
telefon mobil are câteva sute de rezistori în interiorul lui. Menirea unui rezistor într-un circuit
electronic este să limiteze curentul (să reziste la trecerea curentului). Pentru a înţelege mai bine
haideţi să luăm ca exemplu o conductă cu apă. Cu cât conducta este mai îngustă, prin ea trece o
cantitate mai mică de apă. Aceasta are o rezistenţa mare. În schimb dacă lărgim conducta
respectivă, prin aceasta va putea trece o cantitate mai mare de apă, ceea ce înseamnă că rezistenţa
scade.
Rezistorii se măsoară în ohmi (Ω) şi se calculează după formula R=U/I. Unde U resprezintă
tensiunea, care se măsoară în Volţi, iar I reprezintă intensitatea, care se măsoară în Amperi.
Un caz mai aparte de rezistor este cel variabil. Valoarea acestuia (rezistenţa) poate fi
ajustată prin reglarea unui contact mecanic (cursor). De obicei acest tip de rezistori au trei
terminale şi se mai numesc potenţiometre.
Simbolizare:
A) Codul culorilor:
Valorile rezistenţelor sunt fie scrise fizic ca valoare pe acestea, fie trecută sub forma unor
bande colorate pe corpul rezistorilor. Pentru mai multe informaţii despre codurile de culoare vezi
şi http://en.wikipedia.org/wiki/Electronic_color_code . Programul gResistor te poate ajuta în
interpretarea codurilor de culoare.
B) Despre LED-uri:
Cuvântul LED vine de la Light Emitting Diode (diodă care emite lumină). Pentru a înţelege
ce înseamnă o diodă va trebuii să îţi imaginezi o stradă cu sens unic. Dacă vrei să intri pe această
stradă din sensul opus, există un poliţist care nu îţi va permite acest lucru. La fel, şi dioda permite
curentului să circule într-un singur sens. Printr-o diodă curentul poate trece doar de la pozitiv(+)
spre negativ(-). Exact acelaşi principiu se aplică şi LED-ului, ceea ce înseamnă că polaritatea este
importantă în alimentarea unui LED. LED-urile se folosesc în electronică încă din 1962, iar în
prezent tehnologia a permis folosirea acestora în cele mai diverse aplicaţii. De la dysplay-uri video
până la senzori optici.
Identificarea pinilor (+) şi (-) în cazul unui led se face foarte simplu.
Tot timpul pinul mai lung este (+) sau ANOD iar cel mai scurt este CATOD sau (-). De
asemenea în interiorul LED-ului catodul este mai proeminent faţă de ANOD.
Simbolizare:
C) Legarea LED-urilor la placa de dezvoltare
Pentru obţinerea unui efect puţin mai frumos decât clipirea unui led îţi propun aplicaţia de
mai jos. Pentru aceasta vei avea nevoie de 8 leduri şi de 8 rezistenţe de 220Ω.
Şi acum programul:
/*Joc de lumini pe 8 LED-uri*/
int LED[] = {6,7,8,9,10,11,12,13};//se definesc pinii pe care sunt conectate LED-urile
void setup()
{
/*Se seteaza pinii mai sus definiti ca si IESIRI
Functia FOR lucreaza in felul urmator:
i=0
pinMode(ledPins[0],OUTPUT)-adica pinMode(6,OUTPUT) -seteaza pinul 6 ca iesire
i++ variabila i este incrementata dinou cu 1 in concluzie i=1
i=1
pinMode(ledPins[1],OUTPUT)-adica pinMode(7,OUTPUT) -seteaza pinul 7 ca iesire
.............
se continua pana cand i este mai mic ca 8 adica i=7 cand se seteaza pin-ul 13 ca iesire
*/
for (int i = 0; i < 8; i++)
{
pinMode(LED[i],OUTPUT);
}
}
void loop()
{
animatie();
}
void animatie()
{
int intarziere = 100; //se defineste 100ms interval intre aprinderea si stingerea unui led
for(int i = 0; i <8; i++){
int stopLED = i - 1; //calculeaza care a fost ultimul led aprins
if(i == 0) { //in cazul in care procesul se reia se stinge ultimul LED
stopLED = 7;
}
digitalWrite(LED[i], HIGH); //se aprinde un nou LED
digitalWrite(LED[stopLED], LOW); //se stinge ultimul LED
delay(intarziere);
}
}
3. Butoane
A) Ce sunt butoanele?
Sigur eşti familiarizat cu întrerupătoarele. În locuinţa ta foloseşti cel puţin unul, cel de
lumină. Rolul întrerupătorului este de a permite sau nu trecerea curentului electric prin acţionarea
unui contact mecanic.
Diferenţa între un întrerupător şi un buton este faptul că butonul are revenire, ceea ce
înseamnă că în momentul în care apeşi un buton acesta va revenii automat în poziţia iniţială fără
intervenţia ta. Exemple de butoane: tastatura de la PC, tastele unui telefon mobil etc.
Simbolizare
B) Bounce/Debounce
Datorită contactului mecanic din interiorul butonului în momentul acţionării acestuia,
semnalul trimis catre microcontroler nu este unul „curat” pornit/oprit ci este o trecere continuă
între pornit/oprit până la stabilizarea pe una dintre cele două stări. Efectul este de cele mai multe
ori nedorit. Spre exemplu: în momentul în care apeşi un buton trebuie să se deschidă o poartă iar
în momentul când îl apeşi din nou vrei ca poarta respectivă să se închidă. Fără o procedură adecvată
de debounce poarta ta va oscila între închis/deschis făcând din butonul respectiv o comandă
nesigură.
Pentru a „curăţa” acest semnal se pot folosi mai multe metode, şi anume hardware sau
software. Dacă eşti interesat de efectul de bounce al butoanelor găseşti mai multe informaţii
aici: http://roroid.ro/wiki/pmwiki.php/Main/DebouncingButtonsOnVirtualPorts, noi în continuare
vom folosi metoda software, deoarece este mai simplă şi nu implica modificari suplimentare în
partea electronică a montajului.
Secvenţa de program utilizată pentru a face debounce unui buton este urmatoarea:
#include <Bounce.h>// se include libraria pentru functiile de debounce
Bounce buton1 = Bounce(2,5); /*se defineste pinul pe care este legat butonul si durata in ms
pentru care se face debounce. Aici butonul este legat pe pinul 2 iar durata este definita la 5ms.
Durata aceasta inseamna ca daca apasati butonul intr-un interval mai mic de 5ms microcontrolerul
va inregistra 2 apasari astfel va inregistra 1 apasare.*/
if ( buton1.update() ) { //se verifica starea butonului
if ( buton1.read() == HIGH) { //daca butonul este apasat se executa secventa de cod
descrisa mai jos
Serial.println("Salut lume!"); //se tipareste pe portul serial urmatorul mesaj si muta
cursorul pe o noua linie
}
}
C) Legarea butonului la placa de dezvoltare
Pentru a realiza montajul de mai jos aveţi nevoie de o rezistenţă de 220Ω şi de un buton.
D) Programul final
#include <Bounce.h> // se include libraria pentru functiile de debounce
Bounce buton1 = Bounce(2,5);
/*se defineste pinul pe care este legat butonul si durata in ms
pentru care se face debounce. Aici butonul este legat pe pinul 2 iar durata este definita la 5ms.
Durata aceasta inseamna ca daca apasati butonul intr-un interval mai mic de 5ms
microcontrolerul va inregistra 2 apasari astfel va inregistra 1 apasare.*/
void tasta(){
if ( buton1.update() ) { //se verifica starea butonului
if ( buton1.read() == HIGH) {
//daca butonul este apasat se executa secventa de cod descrisa mai jos
Serial.println("Salut lume!");
//se tipareste pe portul serial urmatorul mesaj si muta cursorul pe o noua linie
}
}
}
void setup()//functia de initializare
{
Serial.begin(9600);//se initializeaza portul serial
pinMode(2, INPUT);//se defineste pinul pe care este conectat butonul ca si intrare
}
void loop(){
tasta();//se apeleaza continuu functia tasta
}
Bibliografie
https://www.robofun.ro/docs/Arduino%20pentru%20Toti%20pagini%201-30.pdf
http://www.roroid.ro/prima-lectie/
http://www.roroid.ro/arduinoleduri-si-nu-numai/
http://www.roroid.ro/butoane/
http://users.utcluj.ro/~rdanescu/pmp-lab01.pdf
https://tighpiverriapresas.wixsite.com/presanalbat/blog/arduino-pentru-incepatori-limba-romana-
download
https://tutoriale-pe.net/programarea-c-pe-placi-arduino/
https://gamessoon.ru/ro/arduino-basis-arduino-lessons-for-beginners-we-blink-led/