blog.ijacek007.cz

Blog o všem trochu jinak.

Chtěl jsem díky ARDUIN(u) měřit teplotu a pomocí programu ji nějakým způsobem vyhodnocovat. Poohlédl jsem se tedy po možnostech, kdy to za minimální náklady uskutečním co nejjednodušeji. Na Aukru jsem našel digitální obvod DS18S20. Tento obvod má pouze jediný výstup a pomocí jediného odporu 4K7 jej můžete připojit do Arduina a okamžitě začít měřit teplotu v rozmezí –55 až + 125 stupňů. Cena tohoto obvodu je okolo 42 Kč.

ds18s20

Zapojení tohoto obvodu je opravdu jednoduché.

ds18s20

Ono zapojení je jedna věc, druhá je ale naučit program, aby s obvodem pracoval. To byl trochu oříšek, jelikož je nutné pro komunikaci použít knihovnu OneWire, kterou ale musíte nejdříve na internetu stáhnout. Na stránkách projektu ARDUINO.CC přitom překvapivě stažení nefungovalo.


Obrázek

Po chvíli hledání jsem nalezl stránku, kde byly k dispozici příklad, i celý zdrojový kód i s knihovnou a tím se mi podařilo celé zapojení oživit.

U knihovny ještě zůstanu, jelikož zde je menší zádrhel, na který jsem narazil, když jsem se snažil obvod zprovoznit. Na internetu je těchto knihoven více a nejsou zdaleka všechny stejné. Některé končí chybou, a proto je nutné dohledat správnou verzi, aby vše fungovalo tak jak má.

Pro opakované použití je nutné knihovnu do arduina přidat. To se dělá tak, že se složka s knihovnou se musí přidat do složky a ardurinem a to do složky libaries.


Obrázek

Po importu této knihovny již příklad funguje jak má a jako odměnou se Vám ARDUINO odmění výpisem měřených hodnot.


Obrázek

Na zkušebním poli jde vidět i mé nouzové spojení odporu. Abych docílil orientační hodnoty 4K7 musel jsem spojit několik slabších odporu do sebe.

#include <OneWire.h>

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2

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

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

delay(100); //just here to slow down the output so it is easier to read

}


float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius

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

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
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); // start conversion, with parasite power on at the end

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad


for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}

ds.reset_search();

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

float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;

return TemperatureSum;

}

Zajímavé odkazy

Stránka kde jsem našel funkční knihovnu

Zdrojový kod i s knihovnou OneWire


Štítky článku elektronika | stavebnice | zajimavosti |
Autor Ijacek.007 23.06.2012 zobrazeno 29 022x
Předchozí článek ARDUINO první zapojení běžící světlo.
ARDUINO jako digitální záznamník teploty Další článek


1

Danh

2013-01-10 19:12:23

Díky moc už jsem byl zoufalej.Ale super návod :) jen se divim že arduino na to má tutoriál ale nemá v arduino ide tu složku


gravatar2iconblog.ijacek007.cz

Ijacek.007

2013-01-10 19:48:09

no taky jsem se divil ale přikládal jsem to tomu že složky v instalátoru se mění kdežto starší tutoriál zůstal bezezměn. Hlavně že jsem ti pomohl :-)


3

tonde

2013-03-19 11:45:16

Ahoj, dík za inspiraci, večer doma vyzkouším, jelikož se mi obvod nepodařilo rozběhat, stále mi psalo, že nenašel periferii. Jen „teploměr“ se mi pár sekund po zapojení tak zahřál, že na něm nebylo možné ani udržet prst – setkal se s tím někdo? Děkuji :)


gravatar4iconblog.ijacek007.cz

Ijacek.007

2013-03-19 12:15:33

no zahřívat by se ten obvod určitě neměl pokud se zahřívá můžeš ho mít napojený špatně. Mě se rozhodně nehřeje.


5

tonde

2013-03-19 17:54:22

:) já jsem totiž trošku debil, já zapojil odpor mezi signál a zem :DDDD Takže už to chodí, díky moc :)Ještě vyzkouším původní OneWire knihovnu.


gravatar6iconblog.ijacek007.cz

Ijacek.007

2013-03-19 21:14:08

tak hlavně že ti to funguje :-) když tak se pochlub dalším zajímavým zapojením :-)


7

tonde

2013-03-20 15:49:30

snažím se dělat cnc řezačku epp, tak až bude nějaký výsledek, který se bude dát ukázat tak sem určitě písnu :)


8

Juro

2015-02-11 18:43:36

Můžu se prosím zeptat…když připojim čidlo, napíšu stejný program, tak mi to vypisuje pouze hodnoty z return (-1000), když přepíšu, tak ono přepsané číslo. Co s tím?


gravatar9iconblog.ijacek007.cz

Ijacek.007

2015-02-11 19:49:03

ahoj Juro
no tak začni tím že napišeš jakou verzi arduina máš jakou verzi máš programovací sw a kouknu co se dá dělat někde možná jen děláš chybu nebo je příklad napsaný s chybou kdo ví to co jsem zde zveřejnil fungovalo ale už to pod novou verzi fungovat nemusí.


10

ladae

2015-10-28 11:15:23

Ahoj,

v seriovém monitoru se mi nic nezobrazuje. Dokážete poradit? začátečník :)

Arduino: 1.6.5 (Windows 7), Vývojová deska: “Arduino Nano, ATmega328”


11

ladae

2015-10-28 11:19:48

Ahoj,

na seriovém monitoru se mi nic nezobrazí Dokážete poradit? začátečník :)

Arduino: 1.6.5 (Windows 7), Vývojová deska: “Arduino Nano, ATmega328”


12

Tony

2015-11-10 17:47:25

Ahoj, které si použil DS18S20 nebo DS18B20. Protože máš na obrázku jiné označení než v popisku. Jaký je mezi nima rozdíl dají se zaměnit?


gravatar13iconblog.ijacek007.cz

Ijacek.007

2015-11-12 08:51:38

ahoj Tony,
no máš pravdu že je v tom trochu chaoz. Ani přesně nevím jaký vlastně mám teploměr. Zkoušel jsem jej hledat a nemohl jsme ho najít. Mám teď v „dílně“ poněkud problém s úklidem takže ani nezjistím který obvod jsem použil.


14

Tony

2016-03-26 01:19:45

Ahoj,

mám to zapojené a nahrané na Arduino, ale když dám vypsat hodnoty tak to ukazuje 3,06. Když čidlo zahřeju rukou celkem pomalu vstoupá teplota. Co s tím? Když jsem nahrál jiný kód tak to fungovalo dobře. Jen ten drůhý kód vypisuje více hodnot a já bych potřeboval jen sloupec čísel…


gravatar15iconblog.ijacek007.cz

Ijacek.007

2016-03-26 09:58:58

upřímně nevím kde by mohl být problém musel bych vyhrabat to čidlo a program spustit znovu abych zjistil zda se něco nezměnilo podle mě si ale někde musel udělat chybu.


gravatar

Vložit komentář

Nick *:
WWW:
Email * (nezobrazuje se ):
Gravatar:
Pamatuj si mě:
Komentář článku *:
Opiš následující text: *

* - vyžadované údaje. RSS kanál s komentáři

Přihlášení



Audioknihy

Jsme milovníci audio knížek, kterých aktuálně máme zakoupených 426. Poslech všech dohromady zabral přes 5945 hodin.

Z tohoto množství jsme si již stihli poslechnout téměř 48% tedy 203 audioknih.

Aktuálně poslouchaná audioknihakniha je Orlova kořist

Poslední hodnocenou audioknihou je Marek Dvořák: Mezi nebem a pacientem Hodnocení audioknihy 4/5.

Nejlépe hodnocenou audioknihou je Astronautův průvodce životem na Zemi Hodnocení audioknihy 4/5.

Reklama