Durata de livrare: 1 - 3 zile lucratoare
Senzorul de temperatura brick este o componenta care sesizeaza nivelul temperaturii din mediul ambiant.
Pinul de semnal (OUT) se conecteaza la un pin analogic al Arduino.
Pinul de semnal se cupleaza la pinul analogic 0 al placii Arduino.
Programul de mai jos afiseaza temperatura in grade Celsius in consola de debug.
void setup(){ Serial.begin(9600); } void loop(){ Serial.print("Temperatura: "); float temperatura = readTempInCelsius(10,0); Serial.print(temperatura); Serial.print(" "); Serial.write(176); Serial.println("C"); delay(200); } float readTempInCelsius(int count, int pin) { float temperaturaMediata = 0; float sumaTemperatura = 0; for (int i =0; i < count; i++) { int reading = analogRead(pin); float voltage = reading * 5.0; voltage /= 1024.0; float temperatureCelsius = (voltage - 0.5) * 100 ; sumaTemperatura = sumaTemperatura + temperatureCelsius; } return sumaTemperatura / (float)count; }
Cum să realizăm un sistem LoRaWAN
Adrian Simionescu,
Vreau sa fac un serviciu windows/linux care sa interogheze un termometru digital. De ex.: sa citesc temperatura si sa o afisez intr-un site web sau sa trimit o notificare pe email.
Nu stiu ce traductoare/dispozitive ar trebui sa folosesc. Exista asa ceva, nu? Mersi!
Florin,
Acest sensor foloseste prin programul furnizat valoarea de referinta de 5 V a placii.
Aceasta valoare nu este insa constanta ci difera in functie de sarcina, intra altele. Variatii foarte mici de tensiune determina variatii mari de temperature (vezi formula).
In locul referintei de 5 V eu am folosit referinta interna de 1.1.V a placii si valoarea citita este mai precisa. Totusi, variaza in cadrul unui grad si are nevoie de cateva minute pentru stabilizare, daca folositi o
medie. Necesita si calibrare prin modificarea coeficientilor din formula respectiva.
Am lucrat cu acest snzor si Arduino UNO original cumparat de la Robofun (le-am chinuit si au rezistat eroic - multumesc Robofun pentru calitatea lor!).
Pentru cele de mai sus am folosit indicatiile primite de pe forumul Arduino (multumiri lui @Wawwa si @VWMarle!).
Viorel [ROBOFUN],
@Robert
Poti sa-mi dai prin email codul sursa pe care il folosesti ?
contact [at] robofun [dot] ro
Viorel
Robert,
@Viorel
Am urmat pas cu pas cablajul (am verificat de 3 ori sa fie totul corect), am urmat instructiunile pentru a face enable la SPI, am creat un nou modul pentru python 3 si am dat copy-paste la codul sursa. Singura chestie ce am facut diferit ii faptul ca am scos acel for si pur si simplu am trimis numarul pinului de pe shield unde era legat senzorul. La prima incercare imi tot dadea valoarea -50, adica nu citea valorile deloc, insa acum, variaza intre -49 si 10 grade celsius, ceea ce mi se pare incorect. Uneori imi da valori negative chiar daca tin senzorul in mana.
Viorel [ROBOFUN],
@Robert
Banuiala mea e ca ai facut tu ceva gresit, nu este nevoie de vreo calibrare suplimentara.
Ma poti ajuta cu mai multe detalii despre cum anume ai procedat, ca sa incerc sa imi dau seama ce nu ai facut corect ? Eventual hai sa mutam discutia pe forum, este mai simplu de discutat acolo.
Robert,
Pentru Raspberry PI e nevoie de vreo calibrare pentru a citi corect temperatura? Am urmat pasii la kitul de senzori pentru Raspberry, insa imi tot citesti valori negative, si abia imi da maxim 10-12 grade Celsius, pe cand in camera ii cel putin 21 de grade Celsius. Sau am facut ceva gresit?
Viorel [ROBOFUN],
@George
Te cred, doar ca de la mine nu vrei primi vreo recomandare in acest sens. Nu-mi da voie sectiunea de "Termeni si Conditii".
Viorel [ROBOFUN],
@George
In opinia mea, pentru orice fel de investigatii de ordin medical, singurele produse recomandate sunt termometrele medicale, produse si certificate pentru acest scop.
Viorel [ROBOFUN],
@George
Tehnic, senzorul va masura temperatura capsulei. Depinzand de cat de mult timp il tii in contact cu corpul, probabil ca la un moment da capsula senzorului va atinge aceeasi temperatura cu corpul.
NU RECOMANDAM INSA UTILIZAREA IN SCOPURI MEDICALE (vezi si sectiunea "Termeni si Conditii").
George,
Acest senzor poate fi folosit pentru masurarea temperaturii corpului la nivelul pielii?
Viorel [ROBOFUN],
@Liviu
Nu iti recomand sa folosesti acest senzor la distanta, este un senzor analogic.
Ai varianta DS*, care merge fara probleme la distante mari, este digital, iar ca pret sunt comparabili - https://www.robofun.ro/index.php?route=product/search&search=DS18B20
Liviu,
Salut,
Care este lungimea maxima pentru cablul de conectare ?. Este indicata utilizarea unui cablu ecranat, sau un cablu gen utp cupru este suficient ?
Multumesc
Viorel [ROBOFUN],
Pe vremea cand am scris codul din pagina, orice variabila lasata neinitializa era automat initializata cu valoarea zero.
Intre timp aparent s-au mai schimbat lucrurile :)
Multumesc de avertizare, am modificat.
Viorel
Adrian,
Am testat cu exemplul din pagina pentru inceput iar rezultatul era Temperatura: ovf C.
Program:
float sumaTemperatura;
Corect:
float sumaTemperatura = 0;
Scuze daca pare evident, dar pana am inteles de unde provenea eraorea...
Marius,
Senzorul pe care l-am achizitionat eu arata cu aproimativ 3 grade in plus fata de termometrele digitale pe care le am in casa, puse fix langa el.
Dupa ce s-a identificat diferenta (constanta) de temperatura, problema se rezolva usor prin modificarea formulei de citire:
in loc de: float temperatureCelsius = (voltage - 0.5) * 100 ;
va fi: float temperatureCelsius = (voltage - 0.53) * 100 ;
Fiecare grad in plus inseamna 0.01 mai mult la voltajul de referinta V0C.
Procedeul de calibrare e explicat mai in detaliu aici: http://www.instructables.com/id/How-to-calibrate-a-cheap-temperature-sensor/?ALLSTEPS
Dupa calibrarea senzorului am achizitionat un shield ethernet 2 pentru a conecta arudino-ul la router. Atunci au aparut diferente mari de temperatura:
doar Arduino: 27 grade
arduino + ethernet: 37 grade
arduino + ethernet + cablu de retea conectat: 43 grade
Nu stiu de ce sunt diferente asa de mari la montarea shieldului de ethernet, dar probabil creste rezistenta pe circuit.
Am masurat tensiunea de intrare in senzor VCC, care e de fix 5V, se modifica doar Vout de la 0.8 la 0.99.
Poate mai bine ar trebui achizitionat un senzor digital de temperatura.
Viorel [ROBOFUN],
@Dan
-
Serial.write(176) scrie simbolul "celsius"
-
float temperaturaMediata = 0; este o declaratie de variabila; poti sa o initializezi cu 0 sau nu, se intampla acelasi lucru
- voltage /= 1024.0 este echivalentul instructiunii "voltage = voltage / 1024.0" si nu este acelasi lucru cu "voltage = 1024"
- "float voltage = reading * 5.0; si float temperatureCelsius = (voltage - 0.5) * 100 ;" este o formula matematica de conversie din voltaj in grade celsius; a fost obtinuta din datasheet.
Dan,
1. care este scopul la:
Serial.write(176);
2. pentru ce s-ar folosi:
float temperaturaMediata = 0;
3. de ce se foloseste:
voltage /= 1024.0;
in loc de un simplu:
voltage = 1024.0;
ca doar se citeste variabila de fiecare data in bucla, nu este influentata de alta iteratie a buclei
4. imi puteti explica formula?
float voltage = reading * 5.0;
si
float temperatureCelsius = (voltage - 0.5) * 100 ;
5. Multumesc!
Ionut,
Acest senzor este LM50 sau LM50-Q1?
Sa stiu la ce specificatii din datasheet sa ma uit.
Multumesc anticipat!
Viorel [ROBOFUN],
@raz
Multumesc pentru update-uri.
Ceea ce zici este foarte corect. De exemplu, pentru Raspberry PI, functioneaza exemplul de aici - https://www.robofun.ro/Kit-RASPBERRY-PI-B-pentru-incepatori
/>
Viorel
raz,
Revin pt cazul in care pinii nu sunt 5v toleranti:
float voltage = reading * 3.3;
Apoi codul model este corect. Se imparte la 1024 pt. ca ADC-ul e pe 10 biti, apoi se scade 0.5 V (offset-ul) si se inmulteste cu 100.
raz,
@ Stef : la fel patesc si eu folosind codul exemplu.
Am obtinut o temperatura apropiata cu cea din camera cu formula:
rezolutie_ADC = 1/1024 ; // ADC pe 10 biti
val fizica = val_logica * rezolutie_ADC * 100
pt. 0xF0 * 0.0009765625 * 100 = 23.437 grade celsius
Acum nu sunt sigur daca intr-adevar e corecta pana la capat abordarea mea...
Stef,
Intrebarea mea este.. pinul vcc unde se conectaza pe o placa leonardo...
valorile sunt in grade celsius dare pare ca la mine depasesc valorile normale gen 30-35 grade , tot timpul imi arata 150,150,149,150,2,150. Gresesc pe undeva ?
Andrei B.,
Găseşti în datasheetul ataşat mai sus informaţiile cerute, la pagina 7.
Administratori : înlăturaţi din codul de mai sus variabila temperaturaMediata; nu este folosită.
Andreea,
Imi puteti spune va rog ce tip de senzor de temperatura este de fapt acesta? Termorezistenta, termistor, termocuplu sau jonctiune p-n?
Mihai,
Exista o explicatie pentru citiri de '0' din cand in cand?
Primesc citiri de genul: 150,149,150,2,150,149,0,150,150
1 persoana a considerat acest review util!
Vali,
" Pinul de semnal (OUT) se conecteaza la un pin analogic al Arduino. "
" Exemplu de cod
// pinul de semnal se cupleaza la pinul digital 0; programul afiseaza temperatura in grade Celsius in consola de debug;
"
Banuiesc ca pe analogic trebuie conectat pinul OUT , nu ?
liviu,
inca nu detin un raspberry pi dar as fi curios cu ce se poate interoga temperatura de pe un raspberry pi folosind acest device pe USB
Raspundeionut,
,,Exemplu de cod
// pinul de semnal se cupleaza la pinul ANALOG 0; programul afiseaza temperatura in grade Celsius in consola de debug;
"
Ultimele produse vizualizate
Newsletter Nu rata ofertele si promotiile noastre
Suport clienti Email tehnic si cereri de oferta B2B: contact@robofun.ro
+40 373 813 088 info@robofun.roCompara produse
Trebuie sa mai adaugi cel putin un produs pentru a compara produse.
A fost adaugat la favorite!
A fost sters din favorite!
Viorel [ROBOFUN],
RaspundeSalut,
Da, exista.
Cel mai simplu ar fi sa folosesti serviciul http://iot.robofun.ro/ .
Vezi spre exemplu proiectul cu Blynk, pare a fi exact ce vrei tu - https://blog.robofun.ro/2017/06/20/proiect-blynk-iot/
Sau cel cu zgomotul, e mai simplu de folosit Arduino ETH - https://blog.robofun.ro/2017/06/13/proiect-noise-o-meter-iot/
Viorel
A fost util acest review?