Dallas 18b20 (DS18B20) kapcsolat Arduino
A palettáját áruház megjelent DALLAS 18B20 hőmérséklet-érzékelő a vízálló burkolatot egy széles mért hőmérsékletek -55 és + 125 ° C-on Adatai vízállóság és a maximális hőmérséklet 125 fok azonnal megkérdezi, hogy gondolt a szélsőséges tesztelés forró vízben. Ily módon fogjuk csinálni.
Ez az érzékelő működik az 1-Wire busszal.
A működő eszközök a buszon a 1-Wire közegben Arduino IDE használt OneWire könyvtár.
A legújabb verzió a könyvtár, valamint a teljes dokumentáció megtalálható a fejlesztői oldal.
Mindegyik eszköznek egyedi 64 bites „ROM” kódot, amelyből 8 bit meghatározó kódsorozat, 48 bites egyedi számot és 8 bit hibajavító kódot CRC.
Tájékoztatás a mért hőmérséklet tárolja az érzékelő RAM amely 9 bájt.
1 és 2 bájt tárolja hőmérséklet információt.
3 és 4 byte rendre tárolt alsó és felső hőmérséklet határok.
7 és 8 bájt használják nagy pontosságú hőmérséklet mérése.
9 nem bájtos tárolja a CRC előző 8 bájt.
Alap parancsokat, ha dolgozik a könyvtárban:
Megkeresi a következő 1-Wire eszközök, ha a készülék talált, a 8 bájtos tömb addressArray írva a ROM kód, egyébként false.
Elvégzi új keresést az első eszköz.
Elvégzi busz visszaállítása szükséges való összekapcsolás előtt az érzékelőt.
Elvégzi szelekciós eszköz visszaállítás után a készülék továbbítja ROM kódot.
Információt továbbít byte az eszközön
Információkat közvetít byte egy eszközön működik parazita energiatakarékos módban
Byte kiolvassa a készülékből
Kiszámítja egy CRC kódot byte tömb dataArray, hosszúságú
A parancs írási tudjuk továbbítani parancsoknak a szenzor formájában bájt, úgy a legfontosabbak:
0x44 - hold mérést és rögzíti az adatokat a RAM
0x4E - beírhatjuk 3 bájt a 3., 4. és 5. bájt RAM
0xBE - 9 bájt tekinthető sorrendben RAM
0x48 - másolja a 3. és 4. byte RAM az EEPROM
0xB8 - átmásolja az adatokat az EEPROM-ban a 3. és 4. byte RAM
0xB4 - visszaadja a típusú élelmiszer (0 - parazita, 1 - külső)
Csatlakozás Arduino
ki a három vezetéket a szenzor:
Piros: „+” tápegység.
Fekete: „-” tápegység
Fehér: A kimenet a kimeneti jel
Érzékelő csatlakozás:
Piros: A + 5V Arduino.
Fekete bármelyik GND csapok Arduino.
White lyuby digitális bemenet Arduino (D10 a példában).
A érzékelő működését kell csatlakoztatni a jelvezeték a ellenálláson huzal adagoló névleges értéke 4,7 ohm.
Kezdeni, úgy a leghasznosabb példa dolgozó érzékelő - kimenet hőmérséklet leolvasás a port monitor.
példa kód
Dallas18B20 extrém tesztelése
A relé áramkör került, hogy automatikusan kikapcsolja a kazánt hőmérsékleten 99,5 ° C-on Annak érdekében, hogy ne vágja el a vezetékeket a kazán csatlakozik a kimeneten át, amelynek székhelye, a fent említett relét.
OneWire DS (10); // Csatlakoztassa az érzékelőt a 10 pin a digitális
void setup (void) Serial.begin (9600);
pinMode (3, kimenetet);
// kapcsolja be a kazánt
digitalWrite (3, LOW);
>
void hurok (void) byte i;
byte type_s;
bájtos adat [12];
byte addr [8];
float Celsius, Fahrenheit;
// Nézd ALRES érzékelő
ha Serial.println ( "Nincs több címet.") (ds.search (cím)!);
Serial.println ();
ds.reset_search ();
késleltetés (250);
return;
>
// Ellenőrizze, van-e interferenciát az átviteli
if (OneWire :: crc8 (cím, 7) = addr [7]!) Serial.println ( "CRC nem érvényes!");
return;
>
Serial.println ();
// Meghatározza az érzékelő sorozat
kapcsolót (addr [0]) esetében 0x10:
Serial.println ( "Chip = DS18S20");
type_s = 1;
break;
esetében 0x28:
Serial.println ( "Chip = DS18B20");
type_s = 0;
break;
esetében 0x22:
Serial.println ( "Chip = DS1822");
type_s = 0;
break;
alapértelmezett:
Serial.println ( „eszköz nem DS18x20 család eszközt.”);
return;
>
ds.reset ();
ds.select (cím);
ds.write (0xBE); // olvassa el a szenzor operatív memória
for (i = 0; i <9; i++) <
adatok [i] = ds.read (); // Töltsük a tömb adatok olvasását
>
// hőmérséklet szereplő adatok az első két bájt, lefordítani őket egyetlen érték, és átalakulni a hexadecimális számok
int16_t nyers = (adatok [1] <<8) | data[0];
ha (type_s) nyers = nyers <<3;
ha a (adatok [7] == 0x10) nyers = (nyers 0xFFF0) + 12 - adatok [6];
>
>
mást byte CFG = (adatok [4] 0x60);
ha (CFG == 0x00) nyers = nyers
7;
else if (CFG == 0x20) nyers = nyers
3;
else if (CFG == 0x40) nyers = nyers
1;
>
Celsius = (float) nyers / 16,0;
Fahrenheit = Celsius * 1,8 + 32,0;
Serial.print ( "Temp =");
Serial.print (Celsius);
Serial.print ( "C,");
Serial.print (Fahrenheit);
Serial.println ( "F");
// Ha a hőmérséklet eléri a forráspont (egy hiba), letiltja a fűtő
ha (Celsius> 99,5)
digitalWrite (3, HIGH);
>
>
Vásárolni RossiiDallas 18B20 vízálló házban