XAN77 Postat Decembrie 20, 2022 Partajează Postat Decembrie 20, 2022 Sunt într-o dilemă. Nici nu am mai programat de ceva timp și nu văd încă problema. Datele problemei sunt următoarele: Am un esp01 cu senzori 18b20 care transmit MQTT la un broker temperaturile sub forma: client.publish("foisor/esp8266/ds18b20/exterior", String(exterior,1).c_str(), true) ; unde exterior este de tip float La un client care folosește acea informație, un ceas ce afișează temperatura pe o matrice led de 4x8 cu 7219 citesc datele cu: if (topic == "foisor/esp8266/ds18b20/exterior") ti = ( payload[0] - 48 ) * 10 + ( payload[1] - 48 ); unde ti este de tip int Am aflat că nu e ok acum că a venit frigul. Mă așteptam eu să am probleme la negative dar dacă am programat ceasu ăsta vara am zis na, e timp :D Am impresia că și sub +10 grade îmi afișa eronat, doar la temperaturi pozitive și peste 9.9 afisa ok, eu afisand doar grade intregi fara zecimale. După ce verific dacă ti e mai mic ca 0 ca să afișez ”-” în față, afisarea o fac cu: matrix.drawChar(8,0, ti/10+48, HIGH,LOW,1); matrix.drawChar(14,0, ti%10+48, HIGH,LOW,1); Acum sunt -3,2 grade și mie îmi arată -.) Un sfat o părere ? Link spre comentariu
XAN77 Postat Decembrie 20, 2022 Autor Partajează Postat Decembrie 20, 2022 deci în loc de acel "ti" care este int să folosesc un string si sa afisez cumva stringul ? Link spre comentariu
Kreator Postat Decembrie 20, 2022 Partajează Postat Decembrie 20, 2022 (editat) Trebuie transformat inainte de afisare temperatura negativa asa cum o transmite DS (cu 1 in fata - semnul -) in pozitiva Ceva asa am facut eu. if (bitRead(t_rea, 15)) { // daca e negativ int_temp = t_rea >> 4; int_temp = int_temp | 0xF000; for(int i = 0; i <= 15; i++) { bitWrite(int_temp, i, !bitRead(int_temp, i)); } tsgn = 16; if (!fr_temp ) { int_temp = int_temp + 1; } } else { int_temp = t_rea; tsgn = 10; } Editat Decembrie 20, 2022 de Kreator Link spre comentariu
XAN77 Postat Decembrie 20, 2022 Autor Partajează Postat Decembrie 20, 2022 (editat) Gata am rezolvat vă mulțumesc. La subscribe la citire pun datele într-un char array iar la afișare afișez fiecare caracter, biblioteca matricei de leduri are funcție de drawchar. Editat Decembrie 20, 2022 de XAN77 Link spre comentariu
zvonacfirst Postat Ianuarie 15, 2024 Partajează Postat Ianuarie 15, 2024 Postarea mea este legata tot de senzorul DS18B20. Postez aici pentru a nu deschide un topic nou. Daca initiatorul acestui topic va fi deranjat, am sa rog adminul sa stearga postarea mea. Despre ce este vorba: am un lot de vreo 15 senzori DS18B20, cumparati toti odata cu vreo doi ani in urma de la un magazin de incredere, pe care nu i-am folosit pana recent. Eu prefer senzorii analogici LM35. Acum, nemaiavand LM35, am trecut la cei digitali. Ma asteptam, pentru ca asa am citit, sa fie calibrati din fabrica. Am ramas surprins de faptul ca trebuie sa aplic un offset de -3 grade pentru a afisa temperatura corecta. Biblioteca utilizata este DallasTemperature.h versiunea 3.9.0, adica ultima. Multumesc pentru eventuale sugestii. sensors.requestTemperatures(); float tempCelsius = sensors.getTempCByIndex(0); tempC = (float)tempCelsius -3; Link spre comentariu
hixpp02 Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 Eu la 18b20 n-am observat pana acum sa aiba un decalaj asa de mare, max 1 grad, dar si ala foarte rar. Ciudat, daca sunt originali 100% 3 grade este mult. Eu odata n-am fost atent si am montat un 18b20p in loc de 18b20...si ma miram ce nu merge. Oricum ar fi bine sa fiti sigur ca sunt originali, o verificare nu strica. Link spre comentariu
nico_2010 Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 Schimba senzorul. Link spre comentariu
zvonacfirst Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 Acum 33 minute, hixpp02 a spus: Oricum ar fi bine sa fiti sigur ca sunt originali, o verificare nu strica. Luati de la TME. Acum 5 minute, nico_2010 a spus: Schimba senzorul. Am scris ca am vreo 15 buc luati in aceeasi comanda. I-am testat pe toti. Solutia este sa imi incerc norocul pe Maica Domnului. Ca sa am cu ce compara. Link spre comentariu
hixpp02 Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 Poate ca deja cunosteti treba cu clonele chinezesti ale 18b20, totusi pun aici un link pentru cei care sunt interesati: https://github.com/cpetrich/counterfeit_DS18B20 Un 18B20 costa la ora actula la producator 3.14 USD, pret/buc valabil pentru un lot de 1000 bucati. Link spre comentariu
nico_2010 Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 La ce distanta este senzorul fata de placa Arduino? Citeste si asta: https://arduino.stackexchange.com/questions/789/my-ds18b20-is-reading-high-how-can-i-get-it-to-return-the-correct-temperature Link spre comentariu
zvonacfirst Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 Acum 7 ore, nico_2010 a spus: La ce distanta este senzorul fata de placa Arduino? Este WEMOS pe un breadboard iar senzorul este relativ aproape, cam la o lungime de fir de conexiune din cel scurt. Acum 47 minute, antemir a spus: Daca faci 10 citiri la interval de 100 ms (să zicem) ce valori ai ? Acelasi lucru. Nu variaza de la o secunda la alta. Acum, ca sa emimin balbaiala afisarii cand este la limita dintre doua grade, am ales sa am doua citiri pe minut la interval se 30 secunde (tot la 30 de secunde este afisata) si temperatura este cvasi constanta, fiind intr-o camera. Variaza ± 1 grad comparata cu sonda k a multimetrului si un alt termometru din camera. Se pare ca nu am eu noroc cu senzorii de tempeatura. Am cumparat in doua randuri LM35 de pe AE si toti au fost fake. Astia digitali sunt de pe TME. Mai fac o comanda, sa vedem ce iese. Link spre comentariu
nico_2010 Postat Ianuarie 16, 2024 Partajează Postat Ianuarie 16, 2024 Indeparteaza senzorul fata de placa WEMOS cat poti de mult si repeta masuratorile. Daca poti posteza o fotografie fata verso cat mai clara a unuia dintre senzori. Link spre comentariu
zvonacfirst Postat Ianuarie 17, 2024 Partajează Postat Ianuarie 17, 2024 Indepartarea senzorului de WEMOS nu a avut efect. Este exact senzorul pe care il utilizez acum. Link spre comentariu
nico_2010 Postat Ianuarie 17, 2024 Partajează Postat Ianuarie 17, 2024 Pare a fi fake. Citeste asta: https://github.com/cpetrich/counterfeit_DS18B20 Mareste intervalul de citire la peste 2 sec. Si vezi cum se manifesta. Link spre comentariu
Bandi Szasz Postat Ianuarie 17, 2024 Partajează Postat Ianuarie 17, 2024 Citeste adresa interna a senzorului, majoritatea celor fake au acelasi adresa pentru ca nu se chinuie Chinezul sa le schimbe. Poti incerca tot asa sa scrii si sa citesti memoria EEPROM, cele fake rare ori au memoria EEPROM prezenta si la citire iti da inapoi blank ( 0xFF ). Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum