9

Arduino s teploměrem DALLAS DS18B20

Pomocí Arduina budeme měřit teplotu okolí, budeme potřebovat DALLAS DS18B20. 

Zapojte podle schémata na obrázku. Teploměr je schopen měřit v rozsahu -55 až +125 stupňů Celsia.

DS18S20-hookup-400x2371

 

Potřebujete

Knihovna OneWire.h

  1. Stáhněte si OneWire
  2. Rozbalte a vložte do C:\Program Files (x86)\Arduino\libraries (záleží na adresáři nainstalování Arduino SW)
  3. Nyní restartujte program Arduino, poté by vám měl program fungovat

Zdrojový kód

 

[sourcecode language=“plain“]

#include <OneWire.h>
int DS18S20_Pin = 3; //čidlo je připojeno na pinu 3

OneWire ds(DS18S20_Pin);

void setup(void) {
Serial.begin(9600);
}

void loop(void) {
float temperature = getTemp();
Serial.println(temperature);

delay(100); //pomalejší zobrazování teplot pro lepší čitelnost

}
float getTemp(){

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for (int i = 0; i < 9; i++) { // potřebujeme 9 bytů
data[i] = ds.read();
}

ds.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float tempRead = ((MSB << 8) | LSB);
float TemperatureSum = tempRead / 16;

return TemperatureSum;

}

[/sourcecode]

Program zobrazuje teplotu na sériové lince ve stupních Celsia.

Arduino Uno, Mega, Senzory, Moduly za

VÝHODNOU CENU

Adam Gajdečka

Vytvářím návody pro Arduino, skvěle se orientuji v IT a označuji se za geeka. Miluji nové technologie, protože jsou úžasné. Budu rád, když můj malý magazín o Arduinu podpoříte! Děkuji moc, jste skvělí

  1. Zdravím. Neporadili byste mi prosím nějaký nápad, jak průměrovat tato měření? Je na to nějaká knihovna?

  2. Jenom praktická zkušenost – tyto čidla mají při měření dost velkou spotřebu a tím se zahřívají. Při opakovaném měření ve smyčce to v pohodě udělá při pokojové teplotě i plus 3 °C. Takže doporučuji připevnit na kus hliníku (např. starý chladič) a měřit v delších intervalech (např. 1 minuta)

    • Mi se to nezahřívalo vůbec. Asi záleží na obvodu a teplotě okolo. Díky za komentář! Určitě mnoho lidem pomůže. Pokud bys chtěl, pošli mi fotky tvých projektů a nějaký popis, rád jej zveřejním :-) info @ arduinonavody.eu

      • Nechají se koupit již vodotěsně zalité v kovové trubičce s kusem kabelu. Ty jsou pro praktické použití lepší. Já ale používám samostatná čidla v pouzdře TO-92 a ta se zahřívají vždy znatelně. Když nebudeme uvažovat parazitní napájení, ale použití 3 drátů, tak v datasheetu je uveden standby proud 750 až 1000 nA a active proud 1 až 1.5 mA, což při 5V napájení už dá nezanedbatelný tepelný výkon se kterým je nutné počítat.

        • 7,5 mW je v pouzdře TO-92 zanedbatelné.Osobně mi Dsko nehřaje vůbec,ani v 92ce ani v soic8.Něco musí být špatně.

          • Nevím, nepřijde mi to nutně špatně. Pokud program vyčítá teplotu čidla příliš často, začne měření ovlivňovat proud 1 mA čidlem v aktivním stavu. Ale kde je limit četnosti měření, to je otázkou na pokus…

  3. Zdravím. Jak připojit DS18B20 k arduinu spoječně s BH1750FVI když knihovny pro BH1750FVI a OneWire spolu „nekamarádí“ ? Nedá se DS18B20 připojit napřímo bez OneWire?

    • Teoreticky by to mohlo fungovat, když upravíte knihovnu OneWire, musíte ale najít řádky, které se nesnesou s BH1750FVI a upravit to. Nebo zkuste najít návod, jak to připojit bez knihovny – mělo by to jít Taky si můžete koupit ten mikrokontroler z Arduina a připojit k němu DALLAS. Z mikrokontroleru budete posílat hodnotu do arduino, tam už nebude potřeba knihovny.
      Mikrokontroler by mohl stát okolo 60 Kč
      Zkuste to prostudovat, třeba to vyřešíte i jinak. Také se můžete zeptat na zahraničním fóru, protože se tam pohybuje více lidí, kteří tomu rozumí.
      http://www.itnetwork.cz/arduino-samostatny-cip-atmega328p

    • Jak přesně spolu nekamarádí? Otevřel jsem ukázkový příklad k BH1750 (knihovny BH1750.h a Wire.h) a připojil k tomu knihovnu OneWire.h a zkusil to zkompilovat. Dopadlo to bez chyb.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *