Un kit special creat pentru cei care vor sa inceapa programarea pe platforma Arduino. Contine o carte "Arduino pentru Incepatori" in limba romana si o serie de componente brick special gandite ca sa incepi foarte simplu. Fiecare componenta vine cu un conector special gandit special pentru conectarea simpla la Arduino, fara lipire.
Kitul contine placa Arduino Uno.
Acest kit contine :
- o placa Arduino Uno
- o carte "Arduino pentru Incepatori" in limba romana
- un buton brick
- un minidifuzor brick
- un led galben brick
- un led verde brick
- un led rosu brick
- un led albastru brick
- un senzor de lumina brick
- un breadboard
-10 fire de conectare brick
Mai exact, tot ce ai nevoie ca sa explorezi ceea ce poate face Arduino.
Ce este Arduino?
Placa
Arduino este disponibila mai multe variante. Cele mai folosite sunt
Arduino UNO,
Arduino Leonardo si
Arduino Mega. Arduino Leonardo este una dintre cele mai noi variante ale placii si permite emularea de
tastatura si mouse virtual. Dezavantajul acestei placi este faptul ca uneori conectarea la portul serial pentru transmisia de date sau debug poate fi mai dificila, in sensul ca uneori portul alocat de sistemul de operare de pe PC placii se schimba (sau pur si simplu dispare pentru un minut) dupa upload. Pentru detalii complete despre aceste comportament urmareste
discutia din forum. Arduino UNO si Arduino Mega nu sunt afectate de acest comportament. Pe langa acestea, exista si
Arduino Due, ultima varianta a placii Arduino. Din pacate aceasta placa este destul de greu disponibila, primim foarte putine bucati in stoc, din cauza cererii prea mari la nivel mondial, si livram in ordinea precomenzilor.
Tabelul de mai jos compara placile Arduino din punct de vedere al numarului de pini, al frecventei de ceas, al tipului de microcontroller, etc.
|
|
|
|
|
|
Arduino UNO |
Arduino Mega |
Arduino Leonardo |
Arduino Due |
Frecventa de Ceas |
16Mhz |
16 Mhz |
16 Mhz |
84 Mhz |
Microcontroller |
ATmega328 |
ATmega2560 |
ATmega32U4 |
AT91SAM3X8E |
Numar Pini IO Digitali |
11 |
52 |
11 |
52 |
Numar Pini Input Analogici |
6 |
16 |
12 |
12 |
Numar Pini PWM |
6 |
14 |
7 |
12 |
Numar Porturi Seriale |
1 |
4 |
1 |
1 |
Memorie Flash |
32Kb |
256Kb |
32Kb |
512Kb |
Tensiune Functionare Interna |
5V |
5V |
5V |
3.3V |
Emulare Tastatura / Mouse |
NU |
NU |
DA |
NU |
Led Brick, ON/OFF
Un led brick reprezinta cea mai simpla posibilitate de a genera un semnal luminos folosind Arduino. Un led brick necesita un port digital liber pentru a fi controlat de catre Arduino.
Arduino Leonardo
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Rutina setup, care se executa exact o singura data cand Arduino este alimentat, declara pinul digital 13 (cel la care am conectat led-ul) ca fiind un pin de iesire (in sensul ca va controla un dispozitiv extern conectat la Arduino, si nu va citi o informatie digitala din mediu). Rutina loop, care se executa atata timp cat Arduino este alimentat, aprinde led-ul ridicand pinul 13 in HIGH (mai exact, face ca tensiunea pinului sa fie 5 V), apoi asteapta o secunda, stinge led-ul (tensiunea pinului devine 0 V) si apoi iarasi asteapta o secunda.
Led Brick, intensitate variabila
In prima lectie am vazut cum putem aprinde si stinge un led. In acest exempluvom folosi acelasi led, dar il vom aprinde variabil. Chiar daca Arduino nu poate scoate tensiune variabila pe porturile digitale (scoate ori 5V ori 0V), exista o posibilitate de a genera un semnal de putere variabila pe unul dintre porturile sale. Acest lucru este posibil prin generarea unui semnal dreptunghiular, care se plimba periodic intre 0V si 5V, foarte rapid. In functie de cat timp sta in 5V si cat timp sta in 0V, puterea semnalului variaza. Numele acestui gen de semnal este "PWM".
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
for (int i = 0; i < 255; i++){
analogWrite(11, i);
delay(50);
}
for (int i = 255; i > 0; i--){
analogWrite(11, i);
delay(50);
}
}
Rutina setup, care se executa exact o singura data cand Arduino este alimentat, declara pinul digital 11 (cel la care am conectat led-ul) ca fiind un pin de iesire.
In rutina loop este interesanta instructiunea analogWrite, care defineste puterea semnalului PWM de iesire. Ca parametri, instructiunea analogWrite primeste pinul (11, in cazul nostru), si puterea semnalului (variabila, de la 0 la 255). Aceasta instructiune este apelata intr-un ciclu for, care modifica valoarea variabilei i intre 0 si 255. Efectul va fi ca led-ul se va aprinde gradat pana la maxim, iar apoi se va stinge treptat.
Buton Brick
Am vazut in exemplele precedente cum putem folosi porturile digitale Arduino pentru a comanda dispozitive din exterior (led-uri, in exemplele de pana acum). Acum vom vedea cum putem folosi un port digital Arduino pentru a citi informatie din mediu (starea unui buton).
void setup() {
pinMode(7, INPUT);
Serial.begin(9600);
}
void loop() {
int stareButon = digitalRead(7);
Serial.println(stareButon);
delay(10);
}
Senzor Lumina Brick
Dupa ce am comandat led-uri si am citit valori digitale din mediu, senzorul de lumina este primul exemplu de citire a valorilor analogice din mediu. Un senzor de lumina da o valoare numerica intre 0 si 1023, valoare proportionala cu nivelul de iluminare din mediul ambiant.
void setup() {
Serial.begin(9600);
}
void loop() {
int nivelIluminare = analogRead(0);
Serial.println(nivelIluminare);
delay(10);
}
In rutina setup singurul lucru pe care il facem este sa initializam o comunicare seriala cu PC-ul, pe care o vom folosi ca sa transmitem si sa vizualizam pe PC valorile citite de senzorul de lumina. Rutina loop citeste valoarea data de senzorul de lumina (conectat la portul serial 0) si afiseaza aceasta valoare in consola seriala. Poti vedea aceasta informatie deschizand Serial Monitor in Arduino IDE. Pentru a testa ca lucrurile functioneaza corect, pune degetul peste senzorul de lumina. Vei observa ca valoarea pe care o vezi in Serial Monitor scade.
Minidifuzor
Mini difuzorul este cea mai simpla modalitate de a crea sunete cu Arduino. Utilizarea acestuia este extrem de simpla. Conectezi firul negru la pinul GND al placii Arduino, iar firul rosu la un pin PWM digital al placii Arduino. Placa Arduino Leonardo are 7 astfel de pini (3, 5, 6, 9, 10, 11 si 13), iar placa Arduino Mega are 15 astfel de pini (de la pinul 2 pana la pinul 13 si de la pinul 44 la pinul 46). Un semnal de tip PWM este un semnal care se misca foarte rapid intre 5V si 0V, astfel incat membrana difuzorului este si ea miscata la fel de rapid, generand sunete. Frecventa cu care semnalul se misca intre 5V si 0V determina frecventa sunetului.
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
for (int i = 1500; i < 4000; i++) {
tone(11, i);
delay(10);
}
for (int i = 4000; i > 1500; i--) {
tone(11, i);
delay(10);
}
}
Partea interesanta din codul de mai sus este instructiunea tone, care primeste ca parametri pinul la care este conectat difuzorul (in cazul nostru pinul 11) si frecventa sunetului (in cazul nostru, variabila i). Variabila i se modifica intre 1500 de Hertzi si 4000 de Hertzi. Efectul obtinut este cel de sirena. Ca sa opresti sunetul complet, instructiunea este noTone(
); In cazul de mai sus, noTone(11) opreste complet sunetul.
Semafor, Trei Led-uri Brick
In acest proiect vom folosi un led verde brick, un led galben brick si un led rosu brick pentru a genera un efect de tip semafor. Pentru alimentarea tuturor celor trei led-uri, vom utiliza un breaboard. Conectarea se face exact ca in situatia in care ai folosit un singur led, doar ca vei folosi breadboard-ul pentru a obtine mai multe puncte GND.
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(12, HIGH);
delay(200);
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(12, HIGH);
delay(200);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(1000);
}
Rutina setup face acelasi lucru ca in exemplul cu un singur led, doar ca acum declara trei pini in loc de unul. Rutina loop aprinde initial led-ul verde vreme de o secunda. Apoi aprinde led-ul galben vreme de 0.2 secunde si apoi stinge led-ul verde si il aprinde pe cel rosu. Dupa o secunda, face exact acelasi ciclu, dar de data aceasta cu led-ul verde aprins.
Lampa de Veghe
Sau mai bine spus, led de veghe. Pentru acest proiect ai nevoie de un led brick, un senzor de lumina brick, si evident, un Arduino. Vom programa Arduino ca ori de cate ori nivelul de iluminare scade sub o anumita valoare, sa aprinda led-ul si sa il stinga atunci cand nivelul de iluminare creste iarasi. Daca mai folosesti si o bila de ping-pong in care bagi led-ul brick (si folosesti un led brick albastru), rezultatul arata chiar excelent. Pentru conectarea componentelor la Arduino, vezi mai sus sectiunea despre led brick si despre senzorul de lumina. Probabil ca vei vrea sa folosesti un breadboard pentru a obtine mai multe puncte VCC si GND.
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
int nivelIluminare = analogRead(0);
if (nivelIluminare < 300) {
digitalWrite(11, HIGH);
} else {
digitalWrite(11, LOW);
}
}
Singurul lucru pe care il face rutina setup este sa declare pinul la care este conecta ledul ca fiind pin de iesire. Rutina loop verifica daca nivelul de iluminare a scazut sub un anumit prag predefinit, si daca da, atunci aprinde led-ul. In caz contrar, il stinge. S-ar putea ca pragul ales de mine sa nu fie bine ales pentru parametrii din incaperea ta, si atunci led-ul sa stea stins tot timpul. Daca se intampla acest lucru, cel mai simplu este sa maresti valoarea pragului (cu cat vrei tu), sau sa folosesti debug-ul serial ca sa vezi exact valoarea pe care o masoara senzorul in camera ta (vezi lectia a doua despre debug). Daca valoarea prag-ului este bine aleasa, atunci led-ul va sta stins in mod obisnuit. Ca sa testezi ca se stinge, pune degetul peste senzorul de lumina, iar led-ul se va aprinde.
Buton + Led
Un proiect simplu care aprinde un led atunci cand apesi un buton. Ai nevoie de un led brick, un buton brick si un Arduino. Proiectul este destul de similar cu cel anterior, doar ca am inlocuit senzorul de lumina cu butonul. Pentru conectarea componentelor la Arduino, vezi mai sus sectiunea despre led brick si despre butonul brick. Probabil ca vei vrea sa folosesti un breadboard pentru a obtine mai multe puncte VCC si GND.
void setup() {
pinMode(11, OUTPUT);
pinMode(7, INPUT);
}
void loop() {
int stareButon = digitalRead(7);
if (stareButon == 1) {
digitalWrite(11, HIGH);
} else {
digitalWrite(11, LOW);
}
}
Este interesanta cea de-a doua instructiune din rutina setup, care declara ca pinul 7, cel pe care este conectat butonul, este un pin de intrare. Rutina loop verifica starea butonului (folosind digitalRead) si actualizeaza starea led-ului in consecinta.
Arduino Leonardo pe post de tastatura
(functioneaza doar cu Arduino Leonardo)
Exact, daca ai un Arduino Leonardo (cel din acest kit), poti sa-l faci sa se comporte ca o tastatura sau un mouse absolut obisnuite (din punct de vedere al calculatorului). Este o facilitate a noului microcontroller Atmega32u4. Tot ce ai facut este ca in codul Arduino sa apelezi libraria Keyboard si calculatorul (la care ai conectat Arduino prin USB) se va comporta ca si cum ai fi apasat taste pe tastatura obisnuita.
Inainte de a trece mai departe, este necesar sa iti atrag atentia asupra unui lucru care ar putea fi neplacut. Imediat ce ai programat placa sa trimita taste apasate catre calculator, Arduino le va trimite tot timpul, pana cand ii spui sa se opreasca. Singurul mod in care ii poti spune sa se opreasca este incarcand alt program. Dar daca ai pus placa sa trimita taste prea rapid, atunci nu vei putea face acest lucru, pentru ca se vor apasa taste chiar in mediul de dezvoltare, acolo unde vei vrea sa scrii codul. Ca sa nu se intample asta, ai grija ca sa existe un mecanism prin care sa opresti trimiterea de taste (cum ar fi un buton conectat la Arduino, sau un delay mare pus un setup). Cu un delay in setup, poti oricand sa dai un reset placii altfel incat sa o fortezi sa ruleze functia setup, si apoi cat timp placa sta in delay, tu ii vei putea modifica programul.
void setup() {
delay(15000);
Keyboard.begin();
}
void loop() {
Keyboard.print("Hello!");
delay(10000);
}
In exemplul de mai sus, nu facem altceva decat sa initializam modul tastatura (Keyboard.begin()) si apoi sa trimitem la fiecare 10 secunde sirul de caractere "Hello" (exact ca si cum am apasa pe tastatura consecutiv tastele H e l l o. Am pus un delay in setup de 15 secunde in ideea ca atunci cand vei vrea sa schimbi programul placii, sa poti da un reset si astfel sa ai la dispozitie 15 secunde pentru a incarca noul program.
Cu Arduino Leonardo poti apasa si tastele CTRL, ALT, sau SHIFT, ca mai jos.
char ctrlKey = KEY_LEFT_CTRL;
void setup() {
Keyboard.begin();
delay(15000);
}
void loop() {
delay(1000);
Keyboard.press(ctrlKey);
Keyboard.press('n');
delay(100);
Keyboard.releaseAll();
delay(30000);
}
Dupa ce au trecut cele 15 secunde din setup, Arduino apasa tasta CTRL (si o mentine apasata), apoi apasa tasta "n" si apoi elibereaza ambele taste. Efectul, pe majoritatea sistemelor de operare, este deschiderea unei ferestre noi.
Lista tuturor comenzilor asociate tastaturii emulate de Arduino este disponibila aici.
Arduino Leonardo pe post de mouse
(functioneaza doar cu Arduino Leonardo)
Exact in acelasi mod cum emuleaza tastatura, Arduino Leonardo poate fi vazut de calculator si ca mouse. Poate misca cursorul pe ecran la orice pozitie si poate simula apasarea pe butoanele mouse-ului.
void setup() {
delay(15000);
Mouse.begin();
}
void loop(){
Mouse.move(50, 50, 0);
delay(10000);
}
Codul de mai sus initializeaza modul mouse, iar apoi la fiecare 10 secunde misca pointer-ul mouse-ului cu 50 de pixeli pe fiecare axa. De remarcat faptul ca in rutina setup avem un delay de 15 secunde, in idee de a da timp pentru programarea placii cu alt program.
Logare nivel de iluminare in Excel, cu Arduino Leonardo
(functioneaza doar cu Arduino Leonardo)
Folosindu-ne de capacitatea lui Arduino Leonardo de a emula o tastatura, devine foarte simplu sa logam informatie pe calculator. Tot ce avem de facut este sa apasam din Arduino acele taste corespunzatoare valorilor citite (ca sa cand le-am introduce manual din tastatura).
Acest proiect foloseste un senzor de lumina brick, impreuna cu un Arduino Leonardo pentru a introduce periodic informatie intr-un document Excel.
void setup(void) {
Serial.begin(9600);
delay(15000);
Keyboard.begin();
}
void loop(void) {
int nivelIluminare = analogRead(1);
Keyboard.print(String(nivelIluminare));
Keyboard.print(KEY_RIGHT_ARROW);
Keyboard.print(String(nivelUmiditate));
Keyboard.println();
delay(2000);
}
CERBU VASILE,
Multumim de promptitudine.
RaspundeA fost util acest review?