Dallas 18b20 (ds18b20) conexiune la arduino

În gama magazinului nostru a existat un senzor de temperatură DALLAS 18B20 într-o cutie impermeabilă cu o gamă largă de temperaturi măsurate de la -55 la +125 ° C. Datele privind rezistența la apă și temperatura maximă de +125 grade au condus imediat la gândirea de a efectua teste extreme în apă clocotită. Asta o să facem.







Dallas 18b20 (ds18b20) conexiune la arduino

Acest senzor funcționează pe magistrala 1-Wire.

Pentru dispozitivele care rulează pe magistrala 1-Wire în mediul IDE Arduino, se folosește biblioteca OneWire.
Ultima versiune a bibliotecii, precum și documentația completă pot fi găsite pe pagina dezvoltatorilor.

Fiecare astfel de dispozitiv conține un cod "ROM" unic pe 64 biți format din 8 biți care specifică codul de serie, 48 biți ai numărului unic și 8 biți ai codului CRC anti-interferență.

Informațiile despre temperatura măsurată sunt stocate în memoria senzorului, care constă din 9 octeți.

1 și 2 octeți stochează informații despre temperatură.

Cele 3 octeți și 4 octeți stochează limitele superioare și inferioare ale temperaturii.

7 și 8 octeți sunt utilizați pentru măsurarea ultra-precisă a temperaturii.

9 octeți stochează codul CRC rezistent la zgomot al celor 8 octeți anteriori.

Comenzile principale folosite la lucrul cu biblioteca:

Căutările pentru următorul dispozitiv cu 1 fir, dacă dispozitivul este găsit, atunci matricea adresei sale de 8 octeți scrie codul său ROM, altfel returnă false.

Efectuează o nouă căutare de la primul dispozitiv.

Resetează magistrala, este necesară înainte de a comunica cu senzorul.

Selectează dispozitivul după resetare, ROM-ul trimite codul dispozitivului.

Trimite un octet de informații către dispozitiv

Trimite un octet de informații unui dispozitiv care funcționează în modul fals

Citește octetul de informații de pe dispozitiv

Calculează codul CRC al octeților din lungimea dateArray

Cu comanda de scriere, putem transmite comenzile de control senzorului ca octeți, vom examina principalele:

0x44 - pentru a efectua o măsurare a temperaturii și a scrie datele în memoria principală

0x4E - scrie 3 octeți pentru a 3, 4 și 5 octeți de RAM

0xBE - numără consecutiv 9 octeți de RAM

0x48 - copiați 3 și 4 octeți de memorie RAM în EEPROM







0xB8 - copiați datele de pe EEPROM la a 3-a și 4-octeți de RAM

0xB4 - returnează tipul sursei de alimentare (0 - parazit, 1 - extern)

Conectarea la Arduino

De la senzor există trei fire:

Roșu: "+" putere.

Negru: "-" sursa de alimentare

Alb: semnal de ieșire

Conectarea senzorului:

Roșu: la + 5V Arduino.

Negru pe oricare dintre pinii GND Arduino.

Albul față de orice intrare digitală Arduino (în exemplul D10).

Pentru a acționa senzorul, este necesar să conectați cablul de semnal la cablul de alimentare cu o rezistență de 4,7 kΩ.

Dallas 18b20 (ds18b20) conexiune la arduino

Mai întâi, să aruncăm o privire asupra celui mai util exemplu pentru a lucra cu un cititor senzor - ieșire de temperatură către un monitor port.

Cod exemplu

Dallas18B20 Extreme Testing

Un releu a fost adăugat circuitului pentru oprirea automată a cazanului la o temperatură de 99,5 ° C. Pentru a nu tăia firele de pe cazan se conectează prin priza, în interiorul căreia este amplasat releul menționat mai sus.

Dallas 18b20 (ds18b20) conexiune la arduino

OneWire ds (10); // Conectați senzorul la 10 pin digital

void setup (void) Serial.begin (9600);
pinMode (3, ieșire);
// Porniți boilerul
digitalWrite (3, LOW);
>

buclă void (void) byte i;
byte type_s;
date octet [12];
byte addr [8];
float celsius, fahrenheit;

// Căutați alresa senzorului
dacă (! ds.search (addr)) Serial.println ("Nu mai există adrese");
Serial.println ();
ds.reset_search ();
întârziere (250);
return;
>

// Verificați dacă au existat interferențe în timpul transmisiei
dacă (OneWire :: crc8 (addr, 7)! = addr [7]) Serial.println ("CRC nu este valid!");
return;
>
Serial.println ();

// Definiți seria de senzori
comutator (addr [0]) caz 0x10:
Serial.println ("Chip = DS18S20");
type_s = 1;
pauză;
caz 0x28:
Serial.println ("Chip = DS18B20");
type_s = 0;
pauză;
caz 0x22:
Serial.println ("Chip = DS1822");
type_s = 0;
pauză;
default:
Serial.println ("Dispozitivul nu este un dispozitiv de familie DS18x20");
return;
>

ds.reset ();
ds.select (addr);
ds.write (0xBE); // Citiți memoria senzorului

pentru (i = 0; i <9; i++) <
date [i] = ds.read (); // Completați matricea cu datele citite
>

// Datele de temperatură sunt conținute în primele două octeți, le traducă într-o singură valoare și se convertesc la un număr hexazecimal
int16_t raw = (date [1] <<8) | data[0];
dacă (type_s) raw = raw <<3;
dacă (date [7] == 0x10) prime = (prime 0xFFF0) + 12 - date [6];
>
>
alt octet cfg = (date [4] 0x60);
dacă (cfg == 0x00) prime = prime

7;
altfel dacă (cfg == 0x20) raw = raw

3;
altfel dacă (cfg == 0x40) prime = prime

1;
>
celsius = (float) prime / 16,0;
fahrenheit = celsius * 1,8 + 32,0;
Serial.print ("Temp =");
Serial.print (celsius);
Serial.print ("C");
Serial.print (fahrenheit);
Serial.println ("F");

// Dacă temperatura atinge punctul de fierbere (cu o eroare), opriți cazanul
dacă (celsius> 99,5)
digitalWrite (3, HIGH);
>
>

Cumpara in RusiaDallas 18B20 in carcasa impermeabila







Trimiteți-le prietenilor: