DS18B20 - Senzor digital de temperatură. Senzor de temperatură Arduino DS18B20 Senzor de temperatură Dallas 18b20

DS18B20 este un senzor de schimbare a temperaturii programabil de tip digital modern cu funcție de alarmă. Aceste dispozitive funcționează conform protocolului 1-Wire (linie de comunicație cu un singur fir cu un microcontroler) și sunt echipate cu memorie nevolatilă pentru salvarea și controlul parametrilor de interfață programați. Măsurarea corectă a temperaturii a DS18B20 are loc în intervalul de la -55° la +125°С, dar cea mai mică eroare de 0,5°С este atinsă în intervalul de la -10° la +85°С.

Senzorul digital de temperatură DS18B20, datorită codului său specific de 64 de biți, vă permite să conectați mai multe microcircuite din această serie la o singură linie de comunicație pentru a controla microclimatul atât al unei mici clădiri de birouri din Moscova, cât și al unui imens atelier de producție.

Caracteristici generale, denumiri și marcare a ieșirilor modelelor DS18B20

În funcție de design, cipul senzorului de temperatură Dallas DS18B20 pentru a controla parametrii setați este disponibil în 3 forme:

  • TO-92;
  • SO (150 mm);
  • µSOP.

Să descifrăm unde este ieșirea microcircuitului și cum să-l conectăm corect.

Principalele caracteristici și specificații ale senzorului de temperatură DS18B20:

  • sursă de alimentare în U de nivel scăzut de la linie (3–5,5 V);
  • operare foarte eficientă folosind protocolul 1-Wire;
  • un cod unic de identificare pe 64 de biți scris în memoria ROM independentă a dispozitivului pentru funcționarea mai multor dispozitive folosind o singură linie de comunicație, care vă permite să obțineți poziția exactă a senzorului, a cărui temperatură este peste sau sub cea programată. nivel;
  • gamă largă de măsurători de temperatură: -55°–+125°С cu o precizie de 0,5°С în intervalul -10°–+85°С;
  • ADC încorporat vă permite să programați DS18B20 în intervalul 9-12 biți, ceea ce reduce timpul de măsurare la 750 ms;
  • conexiune convenabilă a cipul Raspberry Pi DS18B20;
  • pentru a programa senzorul de temperatură, este suficient să-l conectezi la orice dispozitiv care rulează arhitecturile Arduino, ARM, PIC sau AVR.

Cum funcționează senzorii moderni de temperatură

Schema bloc a senzorului de temperatură tip DS18B20 este următoarea:

Pe baza structurii de mai sus, senzorul în cauză este format din:

Funcția principală a cipul DS18B20 este transformarea citirilor senzorului de temperatură încorporat într-un cod digital. Această conversie depinde de rezoluția de conversie setată de utilizator, care variază de la 9 la 12 biți (0,5°-0,625°C). Dacă nu au fost efectuate setări, atunci setarea registrului de configurare corespunde la 12 biți.

În starea inițială, DS18B20 este în repaus, sau cu alte cuvinte, la un nivel scăzut de energie. Pentru a începe măsurătorile, microcontrolerul trimite un semnal, după care datele primite sunt stocate în registru, iar senzorul însuși intră în modul „repaus”.

Atunci când senzorul digital de temperatură DS18B20 este operat de la o sursă de alimentare independentă, microcontrolerul este capabil să controleze procesul de executare a comenzii care măsoară temperatura. Astfel, senzorul de temperatură DS18B20 va genera un „0” logic în timpul transformării citirilor de temperatură și un „1” logic dacă procesul de conversie este finalizat.

După primirea și procesarea semnalului de la senzorul de temperatură din microcircuitul DS18B20, datele primite în grade Celsius sunt stocate ca un număr de 16 biți cu un semn (S), care este responsabil pentru semnul de temperatură „+” sau „-”. . Structura registrului de temperatură va arăta ca cea prezentată mai jos.

Dacă citirea temperaturii este mai mare de „0”, atunci indicatorul S=0, dacă valoarea temperaturii este negativă, atunci S=1. Mai jos este un tabel de corespondență între date și temperatură.

Cum se formează și se transmit semnalele de alarmă Th și Tl

După transformarea citirilor de temperatură într-un cod de 16 biți, numărul rezultat este comparat cu valorile Th și Tl situate în registrul de memorie (EEPROM) al microprocesorului, și anume al doilea și al treilea octet. Structura registrelor Th și Tl va arăta astfel:

Dacă datele primite, 11–4 biți ai registrului, depășesc Th sau sunt sub parametrul Tl, atunci este generat un semnal de alarmă pe microcircuit. Dar măsurătorile nu se opresc aici, iar în cazul unei scăderi a Th sub sau Tl peste intervalul specificat, condiția " Prăbușire» este resetat.

Dacă este necesar să se identifice independent unul dintre senzorii care dă semnal " Anxietate”, apoi microcontrolerul folosind comanda ECH va testa fiecare senzor. Dacă parametrii Th și Tl sunt modificați, peste sau sub valorile înscrise în registru, va emite un cod de dispozitiv cu încălcări ale regimului de temperatură.

Cum să alimentați corect DS18B20

Cipul DS18B20 permite 2 tipuri de conexiune:

Acest tip de conexiune este considerat mai rațional. Principalul său avantaj este capacitatea de a lucra cu un număr mare de senzori folosind aplicații speciale.

Cu un U mare pe magistrala cipului DS18B20, funcționează și încarcă Cpp folosind pinul DQ. Condiție obligatorie pentru a opera dispozitivul în acest mod - pământ Vdd. Când nivelul semnalului se schimbă la „0” logic, circuitul este alimentat de la un condensator încărcat anterior. ÎN Mod normal de performanță, cipul DS18B20 este capabil să demonstreze funcționarea continuă și stabilă, păstrând în același timp specificațiile electrice.

Cu toate acestea, atunci când cipul efectuează conversii și interacțiuni frecvente cu memoria, consumul de curent poate depăși 1,5 mA. Acest lucru va face ca tensiunea magistralei să scadă sub nivelul minim permis. Pentru a rezolva această problemă, trebuie să utilizați un tranzistor MOSFET. Funcționează atunci când datele sunt copiate sau temperatura este convertită. Cu toate acestea, este rar folosit deoarece rezerva de putere a cipul DS18B20 vă permite să efectuați calcule fără a reduce nivelul de tensiune.

În cele mai multe cazuri, este rațional să folosiți această metodă. Cu toate acestea, dacă temperatura măsurată este peste 100 ° C, atunci apare un curent de scurgere mare, iar încărcarea condensatorului Cpp nu este suficientă pentru funcționarea completă a microcircuitului. În astfel de cazuri, este mai bine să utilizați sursa de alimentare a microcircuitului de la o sursă externă.

Conectarea senzorului digital de temperatură DS18B20 la o sursă de alimentare externă

Principalul avantaj al conexiunii directe este absența unui tranzistor MOSFET. Microcircuitul este alimentat de la o sursă externă folosind un rezistor de 4,7 kΩ. În această schemă, magistrala de conversie principală poate fi utilizată în alte scopuri, deoarece rămâne liberă.

Control de citire DS18B20

Pentru a controla procesul de citire a datelor codului ROM pe 64 de biți, al nouălea octet este octeții de cod ciclic CRC sau SRAM. Generatorul CRC arată astfel:

Acest cod se află în octetul înalt al memoriei ROM și este calculat pentru cei 56 de biți anteriori. Sarcina principală a celui de-al nouălea octet (CRC) este de a controla citirea datelor de pe cip. Pentru a face acest lucru, microprocesorul calculează codul ciclic primit și îl compară cu codul primit anterior. Ca rezultat al comparației, microcontrolerul primește date despre corectitudinea datelor primite.

Pentru a verifica datele primite, se folosește un polinom al codului ciclic cu următoarea structură:

C R C = X 8 + X 5 + X 4 + 1

Codificare senzor DS18B20

Pentru a controla nivelul temperaturii în diferite puncte, este utilizat un numar mare de senzori, fiecare codificat cu un cod de 64 de biți în memoria ROM. Codul familiei (28h) este scris în primii 8 biți, numărul de serie al senzorului este scris în al doilea 48 de biți, iar codul ciclic (CRC) pentru toți biții anteriori este programat în ultimii 8 biți.

Registrul de configurare

Timpul de procesare a semnalului în cipul DS18B20 depinde de valoarea octetului 4 din memoria de configurare, care este registrul de configurare. Acest registru arată ca cel prezentat mai jos.

Pentru a seta rezoluția de conversie, este necesar să modificați parametrii R0 și R1, care în starea inițială corespund cu 11. Tabelul arată corespondența dintre valorile acestor parametri, rezoluția și timpul de conversie.

Lucrul cu interfața cu 1 fir

Sistemul de măsurare a diferenței de temperatură pe baza senzorilor DS18B20 funcționează folosind protocolul 1-Wire, care constă la rândul său dintr-un master (master sau „Master”) și un dispozitiv slave (SLAVE). Acest tip de senzor poate fi conectat doar ca slave. Dacă la magistrală este conectat un singur senzor, acest sistem va fi apelat un singur punct, iar în cazul mai multor - multipunct. Toate datele și semnalele dintr-un astfel de sistem sunt transmise mai întâi cu bitul cel mai puțin semnificativ.

Cum se realizează memoria unui senzor digital de acest tip

Pentru o funcționare completă, DS18B20 constă din 2 tipuri de memorie: EEPROM și SRAM. Primul tip de memorie este nevolatilă, iar al doilea este operațional. Harta memoriei arată astfel:

EEPROM stochează datele limită de temperatură și registrul de configurare.

Și în cardul de memorie SRAM, primii 2 octeți (0 și 1) sunt responsabili pentru temperatura măsurată, ceilalți 2 octeți sunt doar pentru citire și sunt responsabili pentru valorile temperaturii limită din memoria EEPROM, al patrulea octetul conține parametrii de configurare. Și octeții rezervați cinci până la șapte produc întotdeauna un „1” logic atunci când sunt cititi și nu pot fi scrisi. Pentru ca memoria să funcționeze corect, există și un al optulea octet sau un generator de cod ciclic responsabil pentru primii 8 octeți.

Pentru a scrie în octeții 2-4, trebuie să executați comanda ÎNREGISTRARE MEMORIA. Pentru a avea acces la datele înregistrate, este suficient să executați comanda CITEȘTE MEMORIA. Și dacă trebuie să scrieți parametrii TH, TL sau registrul de configurare, atunci ar trebui să executați comanda COPIEAZĂ MEMORIA.

De ce aveți nevoie pentru a lucra cu cipul DS18B20

Pentru a lucra cu cipul DS18B20, veți avea nevoie de:

  • software Arduino IDE;
  • bibliotecă pentru lucrul cu protocolul 1-Wire Biblioteca OneWire;
  • schiță.

Aplicațiile de mai sus vă vor permite să flashați cipul. Cu toate acestea, pentru a face acest lucru, veți avea nevoie de următoarele echipamente:

  • controler Arduino;
  • Cablu USB care conectează controlerul la un computer personal;
  • placa de circuit pentru instalarea cipul si 3 conectori.

Conectarea cipul la Arduino

Pentru a conecta senzorul așa cum se arată în diagrama de mai jos, pinul 1 (GND) este conectat la „-” comun al plăcii, pinul 2 (Vdd) este conectat la o sursă de alimentare de +5 V printr-un rezistor pull-up de 4,7 kΩ , iar ultimul pin 3 (DATE ) este conectat la unul dintre pinii de pe microcontrolerul Arduino (al doilea pin este folosit în diagramă).

În acest caz, linia 10 ar trebui să arate astfel: OneWire ds(2).

Configurarea codului și lucrul cu bibliotecile

După absolvire munca de instalare puteți începe programarea dispozitivului. Pentru a face acest lucru, folosind aplicația Arduino IDE trebuie să montezi biblioteca Biblioteca OneWire. Pentru a face acest lucru, în meniul aplicației, selectați „ Adăugați o bibliotecă”, care se află în meniul “ Schiță„sau pentru versiunea rusă” Schiță» - « Conectați biblioteca» - « OneWire».

În continuare, în biblioteca care se deschide, ar trebui să găsiți un exemplu de programare „”. Pentru a face acest lucru, în meniul " Fişier» selectați submeniul « Exemple”, apoi secțiunea „ OneWire” și punctul „”.

În exemplul din biblioteca OneWire, pe linia 10, pinul 10 al microcontrolerului este inițial programat, pentru cazul în cauză trebuie înlocuit cu 2. Ca urmare, linia 10 ar trebui să arate astfel:

După operațiunile efectuate corect, compilarea și încărcarea programului în fereastra de monitorizare a portului " Instrumente» - «» apare cam asa:

Concluzie

DS18B20 este un dispozitiv sofisticat de detectare a temperaturii cu instalare ușoară, precizie și fiabilitate de măsurare a temperaturii ridicate. Cu toate acestea, pentru funcționarea deplină a acestor dispozitive, este necesară o programare complexă.

Videoclipuri similare

Trebuie să măsurați temperaturile în medii care sunt ostile cipurilor?

Senzorul DS18B20 vă va ajuta să măsurați temperatura apei dintr-un acvariu sau un ibric. Puteți să-l folosiți pentru a măsura temperatura de afară și să nu vă fie teamă că senzorul se va inunda de ploaie. Locuitorii de vară vor aprecia capacitatea de a măsura temperatura solului în seră și pe șantier.

În memoria permanentă a DS18B20, puteți salva valorile limită de temperatură, la ieșire din care senzorul va intra în modul alarmă. Pe o magistrală comună a multor senzori, microcontrolerul poate afla la un moment dat care dintre ei au trecut în acest mod. Acest lucru facilitează identificarea zonei cu probleme într-un mediu controlat.

Rezoluția de citire este configurabilă și poate fi de la 9 la 12 biți. Cu cât rezoluția este mai mică, cu atât viteza de conversie este mai mare.

Conexiune

Senzorul sigilat bazat pe cipul DS18B20 poate fi conectat în două moduri:

Pe trei fire: putere (roșu), masă (negru) și semnal (alb).

Pe două fire: masă și semnal. În acest caz, senzorul poate da ocazional citiri incorecte, care pot fi ușor eliminate din rezultatul final prin filtrare.

Indiferent de metoda de conectare, firul de semnal trebuie conectat la alimentare printr-un rezistor de 4,7 kΩ. Când conectați un singur senzor, va funcționa și o rezistență de 10 kΩ.

Pentru a conecta senzorul la Arduino sau la o placă de breadboard, va fi convenabil să utilizați un bloc de borne push-in.

Există o bibliotecă gata făcută pentru conectarea dispozitivelor cu 1 fir la Arduino, iar pentru lucrul cu DS18B20 există o bibliotecă suplimentară de la Miles Burton.

Caracteristici:
  • Tensiune de alimentare: 3,0..5,5 V
  • Interval de temperatura: -55°C..+125°C
  • Precizia citirii temperaturii: 0,5 °С
  • Etapa de citire: 0,0625 ° С
  • Interfață: 1-Fir
  • Lungimea firului: 1 metru
  • Consum de curent: 1mA

Senzorul de temperatură din Arduino este unul dintre cele mai comune tipuri de senzori. Există multe opțiuni disponibile pentru dezvoltatorul proiectului de termometru Arduino. diferite opțiuni, care diferă prin principiul de funcționare, precizie, design. Senzorul digital DS18B20 este unul dintre cei mai populari senzori de temperatura, adesea folosit intr-o carcasa impermeabila pentru a masura temperatura apei sau a altor lichide. În acest articol veți găsi o descriere a senzorului ds18b20 în limba rusă, împreună vom lua în considerare caracteristicile conectării la un arduino, principiul de funcționare a senzorului, o descriere a bibliotecilor și schițe.

DS18B20 este un senzor digital de temperatură cu multe caracteristici utile. De fapt, DS18B20 este un întreg microcontroler care poate stoca valoarea de măsurare, poate semnala temperatura dincolo de limitele stabilite (putem seta și modifica limitele), poate schimba precizia măsurării, modul de interacțiune cu controlerul și multe altele. Toate acestea într-un pachet foarte mic, care este disponibil și în versiune impermeabilă.

Senzorul de temperatură DS18B20 are o varietate de tipuri de carcasă. Puteți alege dintre trei - 8-Pin SO (150 mils), 8-Pin µSOP și 3-Pin TO-92. Acesta din urmă este cel mai comun și este realizat într-o carcasă specială impermeabilă, astfel încât să poată fi folosit în siguranță sub apă. Fiecare senzor are 3 pini. Pentru carcasa TO-92, trebuie să vă uitați la culoarea firelor: negru - masă, roșu - putere și alb / galben / albastru - semnal. În magazinele online, puteți cumpăra un modul DS18B20 gata făcut.

De unde să cumpăr un senzor

Desigur, DS18B20 este cel mai ieftin de cumpărat de pe Aliexpress, deși este vândut și în orice magazine online specializate din Rusia cu arduino. Iată câteva link-uri pentru exemple:

Memoria senzorului este formată din două tipuri: operațională și nevolatilă - SRAM și EEPROM. Acesta din urmă conține registrele de configurare și registrele TH, TL, care pot fi folosite ca registre de uz general dacă nu sunt folosite pentru a indica intervalul de valori admisibile de temperatură.

Sarcina principală a DS18B20 este de a determina temperatura și de a converti rezultatul în formă digitală. Putem seta independent rezoluția necesară setând numărul de biți de precizie - 9, 10, 11 și 12. În aceste cazuri, rezoluțiile vor fi, respectiv, egale cu 0,5C, 0,25C, 0,125C și 0,0625C.

Măsurătorile de temperatură primite sunt stocate în SRAM-ul senzorului. Octeții 1 și 2 stochează valoarea temperaturii recepționate, 3 și 4 stochează limitele de măsurare, 5 și 6 sunt rezervați, 7 și 8 sunt utilizați pentru detectarea temperaturii de înaltă precizie, ultimii 9 octeți stochează codul CRC rezistent la zgomot.

Conectarea DS18B20 la Arduino

DS18B20 este un senzor digital. Senzorii digitali transmit valoarea temperaturii măsurate sub forma unui anumit cod binar, care este alimentat la pinii digitali sau analogici ai arduino și apoi decodat. Codurile pot fi foarte diferite, ds18b20 funcționează pe protocolul de date 1-Wire. Nu vom intra în detaliile acestui protocol digital, vom indica doar minim necesar pentru a înțelege principiile interacțiunii.

Schimbul de informații în 1-Wire are loc datorită următoarelor operațiuni:

  • Inițializarea - definirea secvenței de semnale de la care începe măsurarea și alte operațiuni. Dispozitivul master trimite un impuls de resetare, după care senzorul trebuie să dea un impuls de prezență, indicând că este gata să efectueze operația.
  • Scrierea datelor - un octet de date este transferat la senzor.
  • Citirea datelor - se primește un octet de la senzor.

Pentru a lucra cu senzorul, avem nevoie de software:

  • Arduino IDE
  • Biblioteca OneWire, dacă utilizați mai mulți senzori pe autobuz, puteți utiliza biblioteca DallasTemperature. Va rula pe OneWire.

Din echipament veți avea nevoie de:

  • Unul sau mai mulți senzori DS18B20;
  • microcontroler Arduino;
  • conectori;
  • Rezistor de 4,7 kOhm (dacă este conectat un senzor, va merge un rezistor cu o valoare de 4 până la 10K);
  • Placă de circuit;
  • Cablu USB pentru conectarea la un computer.

Senzorul este conectat la placa Arduino UNO simplu: GND de la senzorul de temperatură este conectat la Arduino GND, Vdd este conectat la 5V, Datele sunt conectate la orice pin digital.

Cea mai simplă schemă de conectare pentru senzorul digital DS18B20 este prezentată în figură.

Algoritmul pentru obținerea informațiilor despre temperatura din schiță constă în următorii pași:

  • Determinarea adresei senzorului, verificarea conexiunii acestuia.
  • O comandă este trimisă la senzor cu cerința de a citi temperatura și de a introduce valoarea măsurată în registru. Procedura durează mai mult decât restul, durează aproximativ 750 ms.
  • Se dă o comandă pentru a citi informațiile din registru și a trimite valoarea primită către „monitorul portului”,
  • Dacă este necesar, acesta va fi convertit în Celsius/Fahrenheit.

Exemplu de schiță simplă pentru DS18B20

Cea mai simplă schiță pentru lucrul cu un senzor digital este următoarea. (în schiță folosim biblioteca OneWire, despre care vom vorbi mai detaliat puțin mai târziu).

#include /* * Descrierea interacțiunii cu senzorul digital ds18b20 * Conectarea ds18b20 la arduino prin pinul 8 */ OneWire ds(8); // Creați un obiect OneWire pentru magistrala 1-Wire, care va fi folosit pentru a lucra cu senzorul void setup()( Serial.begin(9600); ) void loop()( // Determinați temperatura din octetul senzorului DS18b20 date; // Locația pentru valoarea temperaturii ds.reset(); // Începeți interacțiunea prin resetarea tuturor comenzilor și parametrilor anteriori ds.write(0xCC); // Comandați senzorului DS18b20 să omite căutarea adresei. În cazul nostru, numai un dispozitiv ds.write(0x44) ; // Dăm senzorului DS18b20 o comandă pentru a măsura temperatura. Nu primim încă valoarea temperaturii în sine - senzorul o va pune în memoria internă întârziere (1000); // Microcircuitul măsoară temperatura și așteptăm. ds.reset(); // Acum ne pregătim să primim valoarea temperaturii măsurate ds.write(0xCC); ds.write(0xBE); // Vă rugăm să ne trimiteți valoarea registrele cu valoarea temperaturii // Obțineți și citiți datele răspunsului = ds.read(); // Citiți octetul mic al valorii temperaturii = ds.read(); // Și acum cel mai vechi // Formând valoarea finală adică: // - mai întâi "lipiți" valoarea, // - apoi înmulțiți-o cu un factor corespunzător rezoluției (pentru 12 biți, valoarea implicită este 0,0625) float temperature = ((date<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Schiță pentru lucrul fără întârziere cu senzorul ds18b20

Puteți complica ușor programul pentru ds18b20 pentru a scăpa de încetinirea din schiță.

#include OneWire ds(8); // OneWire object int temperature = 0; // Variabilă globală pentru stocarea valorii temperaturii de la senzorul DS18B20 long lastUpdateTime = 0; // Variabilă pentru a stoca ora ultimei citiri de la senzor const int TEMP_UPDATE_TIME = 1000; // Determinați frecvența verificărilor void setup()( Serial.begin(9600); ) void loop()( detectTemperature(); // Determinați temperatura de la senzorul DS18b20 Serial.println(temperature); // Imprimați mesajul primit valoarea temperaturii // T (deoarece variabila de temperatură este de tip int, partea fracțională va fi pur și simplu eliminată) int detectTemperature()( byte data; ds.reset(); ds.write(0xCC); ds.write(0x44) ; if (millis() - lastUpdateTime > TEMP_UPDATE_TIME) ( lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); data = ds. read(); // Generează valoarea temperatură = (date<< 8) + data; temperature = temperature >> 4; } }

Biblioteca DallasTemperature și DS18b20

În schițele noastre, putem folosi biblioteca DallasTemperature, care simplifică unele aspecte ale lucrului cu senzorul ds18b20 pe 1 fir. Exemplu de schiță:

#include // Numărul pin Arduino cu senzorul conectat #define PIN_DS18B20 8 // Creați obiect OneWire OneWire oneWire(PIN_DS18B20); // Creați un obiect DallasTemperature pentru lucrul cu senzori, trecându-i o referință la un obiect pentru lucrul cu 1-Wire. DallasTemperature dallasSensors(&oneWire); // Obiect special pentru stocarea adresei dispozitivului DeviceAddress sensorAddress; void loop(void)( // Solicitare de măsurători ale senzorului de temperatură Serial.print(„Se măsoară temperatura...”); dallasSensors.requestTemperatures(); // Solicită ds18b20 să colecteze date Serial.println(„Terminat”); // Solicitare de obținere a valorii de temperatură stocată printTemperature(sensorAddress); // Întârziere pentru ca ceva să poată fi analizat pe ecran întârziere (1000); ) // Funcție auxiliară pentru tipărirea valorii temperaturii pentru dispozitiv void printTemperature(DeviceAddress deviceAddress)( float tempC = dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); ) // Funcție de ajutor pentru afișarea adresei senzorului ds18b20 void printAddress(DeviceAddress deviceAddress)( pentru (uint8_t i = 0) ; i< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Biblioteca OneWire pentru lucrul cu DS18B20

DS18B20 folosește protocolul 1-Wire pentru a face schimb de informații cu arduino, pentru care a fost deja scrisă o bibliotecă excelentă. Puteți și ar trebui să îl utilizați pentru a nu implementa manual toate funcțiile. . Pentru a instala biblioteca, descărcați arhiva, despachetați-o în folderul bibliotecii din directorul dvs. Arduino. Biblioteca este inclusă folosind comanda #include

Toți senzorii DS18B20 sunt conectați în paralel, un rezistor este suficient pentru toți. Folosind biblioteca OneWire, puteți citi simultan toate datele de la toți senzorii. Dacă numărul de senzori conectați este mai mare de 10, trebuie să selectați un rezistor cu o rezistență de cel mult 1,6 kOhm. De asemenea, pentru o măsurare mai precisă a temperaturii, trebuie să puneți un rezistor suplimentar de 100 ... 120 Ohm între ieșirea de date de pe placa Arduino și datele de pe fiecare senzor. Puteți afla de la ce senzor a fost obținută o anumită valoare folosind un cod serial unic de 64 de biți care va fi emis ca urmare a execuției programului.

Pentru a conecta senzori de temperatură în modul normal, trebuie să utilizați circuitul prezentat în figură.

concluzii

Cipul Dallas DS18B20 este foarte dispozitiv interesant. Senzorii de temperatură și termometrele bazate pe acesta au caracteristici acceptabile pentru majoritatea sarcinilor, funcționalitate avansată și sunt relativ ieftine. DS18B20 a câștigat o popularitate deosebită ca dispozitiv rezistent la apă pentru măsurarea temperaturii lichidelor.

Pentru caracteristici suplimentare, trebuie să plătiți cu complexitatea relativă a lucrului cu senzorul. Pentru a conecta DS18B20, cu siguranță vom avea nevoie de un rezistor cu un rating de aproximativ 5K. Pentru a lucra cu senzorul în schițele Arduino, trebuie să instalați o bibliotecă suplimentară și să obțineți anumite abilități pentru a lucra cu el - totul nu este în întregime banal acolo. Cu toate acestea, puteți cumpăra un modul gata făcut, iar pentru o schiță, în cele mai multe cazuri, exemplele simple date în acest articol vor fi suficiente.

DS18B20- Senzor digital de temperatură de la Dallas. Trimite date de temperatură folosind un singur pin digital și un protocol special numit 1-Wire. Puteți conecta mai mulți senzori la un pin. Senzorul măsoară temperatura în grade Celsius.

Specificații DS18B20

  • Senzorul poate fi alimentat cu o tensiune de la 3 la 5,5V
  • Senzorul poate măsura temperatura de la -55 la 125 °C
  • Senzorul are o rezoluție digitală de 9 până la 12 biți
  • Precizie de măsurare +/- 0,5 °C în intervalul de la -10 la 85 °C
  • Precizie de măsurare: +/- 2 °C pentru intervalul de la -55 la 125 °C
  • Deriva de măsurare +/- 0,2 °C

Schema electrică DS18B20

Ce este permisiunea?

ÎN specificatii tehnice se raportează că senzorul DS18B20 poate măsura temperatura cu diferite rezoluții. Rezoluția este ca o riglă: milimetri între centimetri. În mod similar, cu rezoluția DS18B20, acesta este pasul dintre pași succesivi de grade Celsius.

Rezoluția este selectată folosind numărul de biți. Intervalul de selecție este de la 9 la 12 biți. Alegerea permisiunii atrage anumite consecințe. Cu cât rezoluția este mai mare, cu atât mai mult va trebui să așteptați rezultatul măsurătorii.

Pentru rezoluția de 9 biți există 2 pași între niveluri succesive:

  • 0,0°C
  • 0,5°C

Pentru rezoluția de 10 biți există 4 pași între niveluri succesive:

  • 0,0°C
  • 0,25°C
  • 0,5°C
  • 0,75°C

În acest caz, citim temperatura cu o rezoluție de 0,25 °C. Timpul de măsurare pentru rezoluția de 10 biți este de 187,5 ms, ceea ce permite 5,3 măsurători pe secundă.

Pentru rezoluția de 11 biți există 8 pași între niveluri succesive:

  • 0,0°C
  • 0,125°C
  • 0,25°C
  • 0,375°C
  • 0,5°C
  • 0,625°C
  • 0,75°C
  • 0,875°C

Adică rezoluția este de 0,125 °C. Timpul de măsurare pentru rezoluția de 11 biți este de 375 ms. Acest lucru permite 2,6 măsurători pe secundă.

Pentru rezoluția de 12 biți, există 16 pași între niveluri succesive:

  • 0,0°C
  • 0,0625°C
  • 0,125°C
  • 0,1875°C
  • 0,25°C
  • 0,3125°C
  • 0,375°C
  • 0,4375°C
  • 0,5°C
  • 0,5625°C
  • 0,625°C
  • 0,6875°C
  • 0,75°C
  • 0,8125°C
  • 0,875°C
  • 0,9375°C

Prin urmare, rezoluția este de 0,0625 °C. Timpul de măsurare pentru rezoluția de 12 biți este de aproximativ 750 ms. Adică puteți efectua 1,3 măsurători pe secundă.

Ce este precizia măsurării?

Nimic în lume, și mai ales în electronică, nu este perfect. Nu te poți apropia de perfecțiune decât cheltuind din ce în ce mai mulți bani și efort. La fel si cu acest senzor. Are unele inexactități de care ar trebui să fii conștient.

Specificațiile tehnice spun că în intervalul de măsurare de la -10 la 85 ° C, senzorul DS18B20 are o precizie de +/- 0,5 ° C. Aceasta înseamnă că atunci când avem o temperatură a camerei de 22,5 °C, senzorul poate returna un rezultat de măsurare de 22 până la 23 °C. Adică poate arăta 0,5 ° C mai mult sau mai puțin. Totul depinde de caracteristicile individuale ale senzorului.

În intervalul de la -55 la 125 °C, eroarea de măsurare poate crește până la +/- 2 °C. Adică, atunci când măsurați ceva cu o temperatură de 100 ° C, senzorul poate afișa o temperatură de la 98 la 102 ° C.

Toate aceste abateri pot fi ușor diferite pentru fiecare temperatură, dar atunci când se măsoară aceeași temperatură, abaterea va fi întotdeauna aceeași.

Ce este deriva de măsurare?

Deviația de măsurare este cea mai gravă formă de inexactitate. Esența derivei de măsurare constă în faptul că, atunci când se măsoară o temperatură constantă - într-o măsurătoare, senzorul poate afișa o temperatură, iar în alta ulterioară (în funcție de cantitatea de derive).

Deriva senzor de temperatură DS18B20 +/- 0,2 °C. De exemplu, când camera este la o temperatură constantă de 24°C, senzorul poate da o citire între 23,8°C și 24,2°C.

(379.0 Kb, descărcat: 913)

În procesul de studiu a microcontrolerelor, mai devreme sau mai târziu devine necesară măsurarea unui astfel de parametru meteorologic mediu inconjurator ca temperatura ei. Piața globală modernă a componentelor electronice oferă o gamă largă de senzori de temperatură. Principalele diferențe dintre ele sunt în domeniul temperaturii măsurate, al tensiunii de alimentare, al domeniului de aplicare, dimensiunile per total, metode de conversie a temperaturii, interfață pentru interacțiunea cu sistemul de control al utilizatorului. S-a întâmplat din punct de vedere istoric ca în acest moment unul dintre cei mai populari senzori de temperatură să fie senzorul DS18B20 Dallas Semiconductor Corp. Următoarea poveste este despre el.

DS18B20– senzor digital de temperatură cu rezoluție de conversie programabilă.

Trăsături distinctive:

1) Utilizarea magistralei de date a interfeței cu 1 fir pentru a interacționa cu sistemul de control;
2) Prezența unui cod unic de identificare serială pe 64 de biți situat în memoria ROM internă și destinat sistemelor multipunct în care este necesară adresarea unui anumit senzor;
3) Tensiunea de alimentare este de 3-5,5V, ceea ce îi permite să fie utilizat nu numai în sisteme de 5 volți, ci și în 3,3 (majoritatea microcontrolerelor);
4) Intervalul temperaturii măsurate este -55…+125 о С;
5) Precizie de ± 0,5 ° C, deși acest lucru este valabil numai pentru intervalul -10 ... + 85 ° C;
6) Rezoluția conversiei este determinată de utilizator și este de 9…12 biți;
7) Are registre interne de declanșare a pragurilor superioare și inferioare cu generarea unui semnal de alarmă pentru sistemele care utilizează logica termostatică de funcționare;
8) Acești senzori sunt compatibil cu software DS1822și sunt utilizate pe scară largă în controlere termostatice industriale, sisteme industriale, electronice de larg consum și alte sisteme sensibile la temperatură.

Descrierea și principiul de funcționare a dispozitivului:

În articolul meu, voi descrie un exemplu de lucru cu un senzor realizat în pachetul TO-92.

Arata cam asa:

În interiorul acestui instrument este aranjat foarte simplu, aruncați o privire:

Să aruncăm o privire mai atentă la această diagramă bloc.

Cu toate acestea, alimentarea în acest mod introduce unele restricții asupra parametrilor de timp ai senzorului. Menținerea liniei de date pentru o perioadă va descărca condensatorul, ceea ce va duce la o dezactivare a liniei INTERNE Vdd și, în consecință, a senzorului în ansamblu. Prin urmare, în timpul nefolosit, linia DQ trebuie ținută sus. Trebuie remarcată o remarcă importantă. La conversia temperaturii și la copierea datelor din Scratchpad în EEPROM (în unul dintre registre), curentul consumat de linia INTERNĂ Vdd poate ajunge la 1,5 mA, ceea ce este insuportabil pentru condensatorul intern și va exista o cădere mare de tensiune la tracțiune. -rezistor de sus, care va afecta în mod inacceptabil funcționarea dispozitivului în general. Pentru a face acest lucru, este necesar să organizați liniile DQ într-o schemă de pull-up puternică, implementată conform următoarei scheme:

După emiterea comenzii ConvertitT sau CopieCarnet pentru notițe este necesar să porniți un pull-up puternic al liniei DQ cu un tranzistor MOSFET nu mai târziu de 10 μs (max.), Potrivit dezvoltatorilor senzorului, apoi așteptați timpul de conversie (Tconv) sau timpul de transfer de date (Twr). = 10 ms), iar în acest moment nu se întreprinde nicio acțiune când pull-up-ul puternic este pornit pe linia DQ nu ar trebui să fie!

Puțin trebuie spus despre puterea standard, deoarece totul este simplu aici și nici măcar un MOSFET nu este deloc necesar:

Subsistemul „64-BIT ROM AND 1-Wire PORT” conține un cod unic de identificare serial de 64 de biți situat în memoria ROM nevolatilă, iar acest nod conține, de asemenea, o interfață pentru interacțiunea cu sistemul de control 1-Wire. Subsistemul „Memory Control Logic” realizează transferuri de date între subsistemul de interfață 1-Wire și memoria de tip Scratchpad, care, la rândul său, are acces la registrele senzorilor de temperatură, registrele pentru setarea pragurilor de alarmă superioare și inferioare, configurația registrul și suma de control de 8 biți a registrului generatorului pentru a proteja sistemul de date incorecte.

Când este pornit, senzorul are o rezoluție de conversie de 12 biți și intră imediat în modul de putere redusă. Pentru a iniția conversia, comandantul trebuie să trimită comanda ConvertitT . După convertirea temperaturii într-un cod digital, acest cod este stocat în memoria Scratchpad ca un cuvânt de doi octeți, iar senzorul comută înapoi în modul de economisire a energiei.

Conversia temperaturii.

Acum să ne dăm seama cum este convertită temperatura în senzor. De fapt, ADC-ul este situat în interiorul senzorului de temperatură în sine, iar datele de ieșire situate în registrul de temperatură sunt transferate în memoria Scratchpad. Datele de temperatură au următorul format:

Steagul S este un steag de semn, folosit pentru a indica semnul unui număr (S=0 este numărul conținut în biții 10-0 este pozitiv, iar S=1 dacă numărul conținut în aceiași biți este negativ, adică în acest caz temperatura este reprezentată în codul complementului a doi (codul complementului a doi)).

Când se setează la rezoluția de conversie de 12 biți, toți cei 12 biți (bit 11-bit 0) sunt activați și conțin date valide. Când se setează la 11 biți, conținutul bitului 0 ar trebui ignorat, când se setează la 10 biți, biții 0 și 1 nu trebuie luați în considerare și așa mai departe.

Semnalul de alarma este o functie a termostatului.

Pentru aceasta, sunt furnizate 2 registre de 8 biți, Th și Tl. Th conține valoarea pragului superior de temperatură, iar Tl, respectiv, a celui inferior. Dacă temperatura este peste Th sau sub Tl, este setat un semnal de alarmă. Acest flag de alarmă este detectat de către master prin lansarea comenzii Căutare alarmă la linia DQ. Indicatorul de alarmă este actualizat după fiecare operație de conversie a temperaturii. De altfel, doar biții de la 11 la 4 ai registrului de temperatură sunt utilizați în comparație cu registrul Th sau Tl, ceea ce înseamnă că funcția termostat funcționează numai pentru temperaturi întregi. Registrele sunt fizic memorie EEPROM, astfel încât își păstrează valorile atunci când alimentarea este oprită. Registrele în sine sunt similare cu registrul de temperatură, doar că sunt pe 8 biți, steag-ul S are exact aceeași semnificație ca în cazul precedent:

Acest cod, așa cum sa menționat mai devreme, este necesar pentru a identifica fiecare dispozitiv de pe linie în sistemele de măsurare a temperaturii multipunct.

Formatul acestei memorii este:

Cei 8 biți inferiori sunt rezervați pentru denumirea familiei și conțin valoarea 0x28. Următorii 48 de biți conțin numărul de serie unic al dispozitivului. Cel mai semnificativ octet conține valoarea sumei de control CRC calculată pentru cei 56 de biți inferiori ai memoriei ROM.

Organizarea memoriei.

Memoria senzorului constă dintr-un spațiu de memorie Scratchpad și un EEPROM pentru stocarea datelor de configurare și a valorilor registrului de alarmă ridicat și scăzut.

Când alimentarea este oprită, octeții de date 2, 3 și 4 își păstrează valoarea în EEPROM. Ei bine, atunci când sunt pornite, valoarea din ele rămâne neschimbată. Octeții 0 și 1 conțin valoarea temperaturii convertite, octeții 5, 6, 7 sunt rezervați pentru uz intern și nu pot fi accesați de utilizator pentru nevoile sale.

Al 8-lea octet conține valoarea generată de logica de generare CRC încorporată pentru octeții de la 0 la 7, ceea ce minimizează posibilitatea unor citiri eronate de temperatură în final.

Trebuie remarcat faptul că, dacă funcția termostat nu este utilizată, atunci registrele Th și Tl pot fi folosite ca memorie de uz general - puteți stoca orice informație în ele.

Datele sunt scrise pe octeții 2, 3 și 4 începând cu bitul cel mai puțin semnificativ din octetul 2 folosind instrucțiunea Scrie Scratchpad. Pentru a verifica integritatea datelor înregistrate, le puteți citi, pentru care trebuie să trimiteți comanda senzorului Citiți Scratchpad, după care masterul ar trebui să primească date începând de la bitul cel mai puțin semnificativ al octetului 0.

Pentru a stoca datele registrelor înalte, scăzute ale termostatului, precum și registrul de configurare în memoria EEPROM, dispozitivul principal trebuie să trimită comanda senzorului Copiați Scratchpad.

După cum sa menționat mai devreme, datele deja scrise pe EEPROM sunt păstrate atunci când alimentarea este oprită. Dar când alimentarea este pornită, valorile din celulele EEPROM corespunzătoare sunt încărcate automat în registrele de memorie scratchpad corespunzătoare. Convenabil, nu? :)

În plus, datele scrise pe EEPROM pot fi suprascrise în memoria scratchpad în orice moment. Acest lucru este necesar, de exemplu, atunci când modificați configurația în timpul funcționării și apoi trebuie să treceți la „modul normal”, adică. returnează configurația de operare care a fost înainte de modificarea conținutului registrelor de memorie scratchpad. De fapt, pentru aceasta, dispozitivul principal trebuie să trimită comanda senzorului Amintiți-vă pe E2 .

În registrul de configurare, doar 2 biți pot fi definiți de utilizator: R0 și R1. Acești biți determină rezoluția de conversie a temperaturii și sunt setați implicit la 1, care este setarea inițială pentru rezoluția de conversie de 12 biți.

Toate configurațiile posibile ale acestor biți și permisiunile corespunzătoare sunt prezentate în tabelul de mai jos. Trebuie remarcat faptul că, cu cât rezoluția de conversie este mai mare, cu atât timpul de conversie este mai lung, de exemplu, pentru rezoluția de 12 biți, timpul de conversie este de 750 ms (max.).

Interacțiunea cu sistemul de control.

DS18B20, după cum sa menționat mai devreme, utilizează o magistrală de date cu interfață cu 1 fir pentru a comunica cu un dispozitiv slave. Prin urmare, pentru a-l conecta, sistemul de control trebuie să furnizeze o ieșire cu dren deschis sau cu o stare de linie Hi-Z.

Configurația internă a interfeței senzorului este prezentată mai jos:

În starea inactivă (starea inactivă), linia DQ este trasă în sus de un rezistor la sursa de alimentare „+”. Astfel, între tranzacții (transferuri de date), această linie trebuie să fie întotdeauna menținută în această stare. Dacă, din orice motiv, tranzacțiile trebuie suspendate, linia DQ trebuie menținută la nivel ridicat dacă acest transfer urmează să fie reluat în continuare. În procesul de oprire a tranzacției, putem menține linia DQ la un nivel logic ridicat atât timp cât ne dorim, începând de la 1 µs. Dar, dacă magistrala de date este menținută la nivel scăzut mai mult de 480 µs, va avea loc o resetare completă a tuturor senzorilor prezenți pe această magistrală.

Secvența operațiunilor pentru schimb.

De fiecare dată când aplicați sistem de control la senzor, trebuie respectată următoarea secvență de acțiuni:

1) Inițializare;
2) comanda ROM (urmată de schimbul de date necesar);
3) Comanda funcției senzor (urmată de comunicarea necesară).

Dacă nu există niciun pas la accesarea senzorului, senzorul nu va răspunde. Excepția sunt comenzile Căutarerom [ F0 h] Și AlarmaCăutare [ ECH] , după executarea lor, comandantul trebuie să revină la prima etapă a secvenței de control.

Asa de. Toate tranzacțiile încep cu inițializare. Această operație este urmată de generarea unui impuls de resetare de către master, după care slave (în acest caz, senzorul(i)) transmit un impuls de prezență către master, care îi anunță că senzorii sunt conectați și pregătiți pentru Operațiune.

În general, magistrala de interfață 1-Wire implementată în senzor definește mai multe tipuri de semnale pe linia de date: impuls de resetare, impuls de prezență, scriere 0, scriere 1, citire 0, citire 1. Toate aceste operații sunt implementate de dispozitivul master. , cu excepția pulsului de prezență. Este format numai din senzor(i).

Deci, pentru început, masterul intră în modul transmițător și setează linia DQ la 0 pentru cel puțin 480 µs (evidențiat cu negru aldine). Aceasta resetează senzorul. Apoi linia trebuie eliberată și dispozitivul principal trebuie să fie pus în modul receptor, în timp ce rezistorul de pull-up va seta linia de date la un nivel logic înalt (evidențiat cu negru subțire). După ce senzorul detectează o margine ascendentă, senzorul va aștepta 15-60 µs și va reseta linia de date la 0 prin interfața sa hardware și o va menține timp de 60-240 µs. După acest timp, senzorul va elibera linia și va fi setat la nivelul logic 1 pentru cel puțin 480 µs după ce senzorul detectează impulsul de resetare.

Acum să vorbim despre modul în care se realizează procesul de transfer de date. În general, transferuri de biți. Ideea este următoarea. Se ia o perioadă de timp, iar în acest timp maestrul se uită la ceea ce avem pe linie, să spunem 1 - înseamnă că am notat 1, dacă 0 - înseamnă că am notat zero. Dar aceasta este doar o explicație abstractă. De fapt, există câteva nuanțe asociate cu intervalul de timp al întregului caz.

Vezi poze:

Totul începe cu faptul că masterul trebuie să coboare linia de date la un nivel logic scăzut, iar din acel moment începe slotul de scriere/citire 1/0, cu o durată de la 60 la 120 μs. Între sloturile de scriere/citire, linia de date trebuie setată la 1 pentru un timp nu mai mic decât timpul de recuperare (1 μs). Pentru a organiza un slot de scriere 0, este necesar să păstrați linia de date la 0 tot timpul slotului, dar dacă este necesar să scrieți la senzorul 1, atunci mai întâi resetați linia de date la 0, apoi așteptați cel puțin 1 μs și eliberați linia la 1, în timpul slotului de scriere 1 (60-120 µs) va scrie 1 pe senzor (vezi figura din dreapta sus).

De fapt, dacă 1 este detectat pe linia de date în termen de 15-60 µs după pornire, atunci va fi scris 1, iar dacă 0 este detectat în 60-240 µs, atunci va fi scris 0.

Citirea datelor este însoțită de dispozitivul master, când resetează linia, așteaptă cel puțin 1 µs, iar timp de 15 µs se uită la ceea ce se întâmplă pe linie: dacă rămâne 0, atunci senzorul transmite 0, dacă a trecut la 1, apoi 1 a fost transmis.

echipe.

comenzi ROM.

Aceste comenzi trebuie să urmeze secvența de inițializare și să conțină instrucțiuni pentru găsirea senzorului adecvat etc. Capacitatea fiecărei instrucțiuni este de 8 biți. După executarea comenzii corespunzătoare, puteți trimite o comandă de funcție către senzor.

CĂUTARE ROM

Când sistemul este conectat inițial, acesta trebuie să recunoască toate dispozitivele conectate la magistrală. Pentru asta este această comandă. Dar, din moment ce avem un singur senzor, nu vom folosi această comandă.

CITEȘTE ROM

Această comandă este utilizată numai atunci când există un singur senzor pe magistrală. Acest lucru permite dispozitivului master să citească conținutul a 64 de biți de memorie ROM fără a utiliza comanda find. Și dacă încercați să utilizați această comandă cu mai mult de 1 senzori conectați, toți vor începe să transmită conținutul acestei memorie, ceea ce va duce la consecințe nedorite.

MECI ROM

Aceasta este comanda ROM match. Masterul eliberează 64 de biți din ROM-ul corespunzător al senzorului conectat la magistrală și deja stabilește ce să facă cu el (măsoară temperatura etc.). Alți senzori de pe autobuz își vor aștepta rândul în acest moment.

SKIP ROM

Aceasta este comanda ROM skip. Nu ia în considerare adresa vreunui senzor anume de pe magistrală, ci adresează toate odată. După această comandă, puteți emite, de exemplu, o comandă de conversie a temperaturii, iar toți senzorii vor începe conversia. Cu toate acestea, emiterea unei comenzi de citire a memoriei după apelarea acestei comenzi va duce la rezultate imprevizibile (deoarece toți senzorii vor transmite date simultan). Aceasta înseamnă că doar cu un singur senzor conectat o astfel de situație este posibilă.

CĂUTARE ALARMĂ

Această comandă este identică cu prima din acest tabel, cu excepția faptului că caută senzori pe magistrală cu indicatorul de alarmă setat.

comenzi funcționale.

Aceste comenzi efectuează operațiunile funcționale ale oricăror procese, de exemplu, pornirea operației de conversie a temperaturii, copierea memoriei etc. Există 6 comenzi în total, fiecare lungime de biți este de 8 biți.

CONVERTĂ T

Porniți conversia temperaturii. După executarea acestei comenzi, datele de 2 octeți sunt introduse în registrul de temperatură.

SCRIE SCRATCHPAD

Scrie date în registrele 2-4 începând de la al doilea, primul bit cel mai puțin semnificativ. În timpul transferului de date în cele trei registre, trebuie avut grijă ca masterul să nu reseteze senzorii, deoarece este posibilă pierderea datelor.

CITEȘTE SCRATCHPAD

Inițiază un proces de transfer de date pentru toate registrele de memorie scratchpad, începând cu bitul scăzut al octetului 0 și terminând cu bitul înalt al octetului 8 (CRC).

COPIEAZĂ SCRATCHPAD

Această instrucțiune copiază conținutul registrelor de octeți 2, 3 și 4 în locațiile EEPROM corespunzătoare.

REAMINTEȚI E2

Această comandă copiază datele din EEPROM în locațiile corespunzătoare din scratchpad. După cum sa menționat mai devreme, această operațiune are loc automat la pornirea alimentării.

CITIȚI SURSA DE ALIMENTARE

Aceasta este, de fapt, toată înțelepciunea lucrului cu senzorul de temperatură DS18B20. Pentru informații mai detaliate, vă rugăm să consultați fișa de date (). Acum este necesar să implementăm toată această afacere în fier.

Schema schematică a dispozitivului:

Desen de asamblare al plăcii de circuit imprimat (scuze pentru calitate, tocmai am făcut-o să funcționeze, pentru depanare):

Nu uitați să oglindiți placa corect

Deoarece aceasta este o placă, am scos-o din vechiul proiect, așa că placa de mai sus este puțin diferită de cea pe care o am (pe a mea, acum am eliminat tot ce era de prisos și a devenit exact ca în pozele de mai sus).

Iată ce mi s-a întâmplat:

S-a dovedit a fi un sandviș

Codul sursă al programului a fost scris în mediul de dezvoltare. Nu am încercat să folosesc maximum de biblioteci de compilatoare avr-gcc gata făcute, ci am scris totul, așa cum se spune, „de mână”. Scopul meu nu este să demonstrez virtuozitatea C, ci doar un exemplu scris într-o oră care le poate oferi începătorilor o idee generală despre lucrul cu senzorul.
Dispozitivul este destinat utilizării într-o cameră, prin urmare nu prevede măsurarea temperaturilor negative.

Descărcați surse și placă de circuit imprimat LAY puteți mai jos

Orice întrebări sau sugestii suplimentare sunt binevenite la: [email protected]