Documente Academic
Documente Profesional
Documente Cultură
CursGratuitArduino Lectia9 SenzoriAtmosferici
CursGratuitArduino Lectia9 SenzoriAtmosferici
ro
http://www.robofun.ro/forum
http://www.robofun.ro
http://www.robofun.ro/forum
http://www.robofun.ro
#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
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!
http://www.robofun.ro/forum
http://www.robofun.ro
disponibil
aici
http://www.robofun.ro/forum
http://www.robofun.ro
D"#22 VCC D"#22 GND D"#22 P N2 (on%(tat intr% D#"22 VCC 'i D"#22 P N2
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 @; ,
http://www.robofun.ro/forum
http://www.robofun.ro
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
#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();
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();
in! Temper !ure&um = ((M&B << 8) K 8&B) >> F; 4lo ! celsius = Temper !ure&umG0.0)35; re!urn celsius; ,
http://www.robofun.ro/forum
http://www.robofun.ro
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 !
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
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