Sunteți pe pagina 1din 14

http://www.robofun.

ro

Curs Gratuit Arduino si Robotica

Textul si imaginile din acest document sunt licentiate


Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Codul sursa din acest document este licentiat


Public-Domain Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website / blo , printare, sau orice alt mijloc!, atat timp cat nu aduci nici un "el de modi"icari acestuia# Codul sursa din acest document poate "i utili$at in orice "el de scop, de natura comerciala sau nu, "ara nici un "el de limitari#

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Senzori Atmosferici Presiune Atmosferica BMP085


Senzorul BMP085 este un senzor foarte precis produs de firma Bosch, capabil sa masoare presiunea atmosferica si temperatura. Cum presiunea atmosferica variaza cu altitudinea, pe baza presiunii atmosferice masurate se poate calcula si altitudinea (lucru foarte util la drone si alte dispozitive zburatoare). Conectarea senzorului la Arduino se face prin I2C, astfel ca avem nevoie de doar doi pini (in afara celor doi pini de alimentare). Pentru a citi valorile senzorului recomand o librarie open-source, disponibila aici : http://www.robofun.ro/senzor_presiune_bmp085 (primul link, "Librarie Arduino"). Dupa instalarea librariei, codul sursa este extrem de simplu, ca mai jos.

Arduino 3.3 V Arduino GND Arduino SDA Arduino SCL

BMP085 VCC BMP085 GND BMP085 SDA BMP085 SCL

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

#include <Wire.h> #include <BMP085.h> BMP085 dps = BMP085(); long Temper !ure = 0" Pressure = 0" #l!i!ude = 0; $oid se!up($oid) % &eri l.'egin(()00); Wire.'egin(); del *(+000); dps.ini!(); del *(5000); , $oid loop($oid) % dps.ge!Temper !ure(-Temper !ure); dps.ge!Pressure(-Pressure); dps.ge!#l!i!ude(-#l!i!ude); &eri &eri &eri &eri &eri &eri l.prin!(.Temp(/)0.); l.prin!(Temper !ure); l.prin!(. #l!(cm)0.); l.prin!(#l!i!ude); l.prin!(. Pressure(P )0.); l.prin!ln(Pressure);

Singurul lucru de remarcat aici este delay-ul de 5 secunde din setup, necesar pentru initializarea senzorului.

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Presiune Atmosferica MPL115A1


MPL115A1 este destul de similar cu BMP085. Difera modul de conectare cu Arduino (I2C in cazul BMP085 si SPI in cazul MPL115A1). Conectarea se face folosind pinii SPI, ca mai jos.

Arduino 3.3 V Arduino GND Arduino Digital 9 Arduino Digital 10 Arduino Digital 12 Arduino Digital 11 Arduino Digital 13

MPL115A1 VCC MPL115A1 GND MPL115A1 SDN MPL115A1 CSN MPL115A1 SDO MPL115A1 SD MPL115A1 SC!

Codul sursa integral in vei gasi la adresa: http://www.robofun.ro/senzor_presiune_atmosferica_MPL115A1

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Temperatura si Umiditate SHT15


SHT15 este un senzor care masoare presiunea si umiditatea mediului ambiant extrem de precis (precizie de 0.3 C, si 2 % RH ). Conectarea la Arduino se face folosind doi pini digitali.

Arduino 5 V Arduino GND Arduino Digital 9 Arduino Digital 8

S"#15 VCC S"#15 GND S"#15 DA#A S"#15 SC!

Codul sursa integral este http://www.robofun.ro/senzor_temperatura_umiditate_sht15 .

disponibil

aici

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Temperatura si Umiditate DHT


Daca nu ai nevoie de o precizie chiar asa de mare ca in cazul SHT15 si te multumesti si cu +/0.5 C, atunci DTH22 s-ar putea sa fie alegerea corecta pentru tine. Frecventa de citire pentru acest senzor este de asemenea destul de scazuta comparata cu SHT15 (poti face cel mult o citire la 2 secunde). Ca necesar de pini, este foarte modest, avand nevoie doar de un singur pin digital pentru conectarea cu Arduino.

Arduino 5 V Arduino GND Arduino Digital 2 $%&i'tor 10!

D"#22 VCC D"#22 GND D"#22 P N2 (on%(tat intr% D#"22 VCC 'i D"#22 P N2

Mai departe, instaleaza libraria pentru Arduino disponibila aici : http://www.robofun.ro/senzor_umiditate_temperatura_dht22


#include <12T33.h> #de4ine 12T335P67 3 12T33 m*12T33(12T335P67); $oid se!up($oid)

http://www.robofun.ro/forum

http://www.robofun.ro
% &eri l.'egin(()00); &eri l.prin!ln(.12T33 8i'r r* 1emo.); , $oid loop($oid) % 12T3359::;:5! error/ode; del *(3000); &eri l.prin!(.:e<ues!ing d ! ....); error/ode = m*12T33.re d1 ! (); s=i!ch(error/ode) % c se 12T59::;:57;790 &eri l.prin!(.>o! 1 ! .); &eri l.prin!(m*12T33.ge!Temper !ure/()); &eri l.prin!(./ .); &eri l.prin!(m*12T33.ge!2umidi!*()); &eri l.prin!ln(.?.); 're @; c se 12T59::;:5/29/A&BM0 &eri l.prin!(.chec@ sum error .); &eri l.prin!(m*12T33.ge!Temper !ure/()); &eri l.prin!(./ .); &eri l.prin!(m*12T33.ge!2umidi!*()); &eri l.prin!ln(.?.); 're @; c se 12T5BB&52B7>0 &eri l.prin!ln(.BB& 2ung .); 're @; c se 12T59::;:57;T5P:9&97T0 &eri l.prin!ln(.7o! Presen! .); 're @; c se 12T59::;:5#/A5T;;58;7>0 &eri l.prin!ln(.#/A !ime ou! .); 're @; c se 12T59::;:5&C7/5T6M9;BT0 &eri l.prin!ln(.&*nc Timeou! .); 're @; c se 12T59::;:51#T#5T6M9;BT0 &eri l.prin!ln(.1 ! Timeou! .); 're @; c se 12T59::;:5T;;DB6/A0 &eri l.prin!ln(.Polled !o <uic@ .); 're @; ,

Curs Gratuit Arduino si Robotica

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Temperatura TMP10
TMP102 este un senzor de temperatura care comunica pe I2C, cu o rezolutie de 0.0625 C si o precizie de 0.5 C. Alimentarea se face la 3.3 V, iar conectarea la Arduino se face folosind pinii I2C. Limitele sale sunt -25 C pana la 85 C, iar consumul este de-a dreptul impresionant 10 microAmperi !.

Arduino 3.3 V Arduino GND Arduino SDA *Analog +, Arduino SCL *Analog 5, Arduino GND

#MP102 V) #MP102 GND #MP102 SDA #MP102 SCL #MP102 ADD0

#include <Wire.h> in! !mp+03#ddress = 0EF8; $oid se!up()% &eri l.'egin(()00); Wire.'egin(); , $oid loop()% 4lo ! celsius = ge!Temper !ure(); &eri l.prin!(./elsius0 .); &eri l.prin!ln(celsius); 4lo ! 4 hrenhei! = (+.8 G celsius) H I3; &eri l.prin!(.J hrenhei!0 .);

http://www.robofun.ro/forum

http://www.robofun.ro
&eri l.prin!ln(4 hrenhei!); del *(300); , 4lo ! ge!Temper !ure()% Wire.re<ues!Jrom(!mp+03#ddress"3); '*!e M&B = Wire.re d(); '*!e 8&B = Wire.re d();

Curs Gratuit Arduino si Robotica

in! Temper !ure&um = ((M&B << 8) K 8&B) >> F; 4lo ! celsius = Temper !ure&umG0.0)35; re!urn celsius; ,

Senzorul TMP102 are 4 adrese distincte posibile, adresa curenta fiind selectata prin conectarea pinului ADD0 la GND, 3.3 V, SDA sau respectiv SCL. Astfel, in exemplul de mai sus, pinul ADD0 este conectat la GND si atunci adresa senzorului este 0x48. Daca vom conecta pinul ADD0 la 3.3 V, atunci adresa senzorului va deveni 0x49. Conectarea pinului ADD0 la pinul SDA va determina adresa 0x4A, iar conectarea la SCL va determina adresa 0x4B. Acest lucru este excelent pentru situatiile in care avem nevoie de mai multi senzori conectati la acelasi Arduino. Putem astfel conecta pana la cel mult patru senzori, toti conectati pe acelasi bus I2C. Pentru primul senzor, pinul ADD0 se conecteaza la GND, pentru al doilea senzor, pinul ADD0 se conecteaza la 3.3V, pentru a treilea senzor, pinul ADD0 se conecteaza la SDA, iar pentru a al patrulea senzor, pinul ADD0 se conecteaza la pinul SCL. Toti ceilalti pini se conecteaza exact ca mai sus. In cod, vom avea patru adrese distincte, cate o adresa pentru fiecare senzor, ca mai jos.
#include <Wire.h> in! !mp+03#ddress+ in! !mp+03#ddress3 in! !mp+03#ddressI in! !mp+03#ddressF = = = = 0EF8; 0EF(; 0EF#; 0EFB;

$oid se!up()% &eri l.'egin(()00); Wire.'egin(); , $oid loop()% 4lo ! celsius = ge!Temper !ure(!mp+03#ddress+); &eri l.prin!(./elsius" &enLor +0 .); &eri l.prin!ln(celsius); celsius = ge!Temper !ure(!mp+03#ddress3); &eri l.prin!(./elsius" &enLor 30 .); &eri l.prin!ln(celsius); celsius = ge!Temper !ure(!mp+03#ddressI); &eri l.prin!(./elsius" &enLor I0 .); &eri l.prin!ln(celsius); celsius = ge!Temper !ure(!mp+03#ddressF);

http://www.robofun.ro/forum

http://www.robofun.ro
&eri l.prin!(./elsius" &enLor F0 .); &eri l.prin!ln(celsius); del *(300); , 4lo ! ge!Temper !ure(in! ddress)% Wire.re<ues!Jrom( ddress"3); '*!e M&B = Wire.re d(); '*!e 8&B = Wire.re d();

Curs Gratuit Arduino si Robotica

in! Temper !ure&um = ((M&B << 8) K 8&B) >> F; 4lo ! celsius = Temper !ure&umG0.0)35; re!urn celsius; ,

Temperatura !a Distanta ML"#0$1%


MLX90614 este un senzor de temperatura cu o functionalitate unica. Determina temperatura obiectelor de la distanta, fara a le atinge ! Senzorul functioneaza pe baza determinarii lungimii de unda a radiatiei infrarosie emisa de obiectul in cauza. Determina temperaturi intre -70 C si 382 C, cu o rezolutie imensa (0.0034 C !). Conectarea la Arduino este ceva mai complexa decat de obicei, pentru ca senzorul nu este inclus pe un montaj, ci montajul va trebui sa il faci tu. Doua rezistoare de 4.7 K si un condensator de 0.1 uF sunt tot ce iti trebuie.

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Arduino 3.3 V Arduino GND Arduino SDA *Analog +, Arduino SCL *Analog 5, Cond%n'ator 100n/

ML-90.1+ P N2 ML-90.1+ P N1 ML-90.1+ P N3 ML-90.1+ P N+ Con%(tat intr% ML-90.1+ P N1 'i ML-90.1+ P N2 Con%(tat intr% ML-90.1+ P N3 'i Arduino 3.3V Con%(tat intr% ML-90.1+ P N+ 'i Arduino 3.3V

$%&i'tor +.0 !

$%&i'tor +.0 !

Mai departe, vei avea nevoie sa iti instalezi in mediul tau de dezvoltare Arduino libraria I2CMaster (disponibila ca download de pe pagina : http://www.robofun.ro/senzor_infrarosu_MLX90614 ). Codul sursa integral este disponibil mai jos.
#include <i3cm s!er.h> $oid se!up()% &eri l.'egin(()00); i3c5ini!();

http://www.robofun.ro/forum

http://www.robofun.ro
P;:T/ = (+ << P;:T/F) K (+ << P;:T/5); , $oid loop()% in! de$ = 0E5#<<+; in! d ! 5lo= = 0; in! d ! 5high = 0; in! pec = 0; i3c5s! r!5= i!(de$H63/5W:6T9); i3c5=ri!e(0E0M); i3c5rep5s! r!(de$H63/5:9#1); d ! 5lo= = i3c5re d#c@(); d ! 5high = i3c5re d#c@(); pec = i3c5re d7 @(); i3c5s!op(); dou'le !empJ c!or = 0.03; dou'le !emp1 ! = 0E0000; in! 4r c; !emp1 ! !emp1 !

Curs Gratuit Arduino si Robotica

= (dou'le)(((d ! 5high - 0E00MJ) << 8) H d ! 5lo=); = (!emp1 ! G !empJ c!or)N0.0+;

4lo ! celsius = !emp1 ! N 3MI.+5; 4lo ! 4 hrenhei! = (celsiusG+.8) H I3; &eri l.prin!(./elsius0 .); &eri l.prin!ln(celsius); &eri l.prin!(.J hrenhei!0 .); &eri l.prin!ln(4 hrenhei!); del *(+000); ,

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Aceasta a fost lectia 9. In final, as vrea sa te rog sa ne oferi feedback asupra acestei lectii, pentru a ne permite sa le facem mai bune pe urmatoarele. Este vorba despre un sondaj cu 4 intrebari (oricare este optionala), pe care il poti accesa dand click aici. Sau ne poti contacta direct prin email la contact@robofun.ro . Iti multumim, Echipa Robofun.RO

http://www.robofun.ro/forum

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