Termometr cyfrowy na układzie DS1820
: 2006-02-10, 16:26
Pomiar temperatury za pomocą układu DS1820
<center><img src="http://bimber.ovh.org/images/czujnik.jpg" border="1"></center>
Jakiś czas temu na Oliwce pojawiły się posty o pomiarze temperatury za pomocą układu DS1820. Jako, że osobiście zmontowałem ten termometr, postanowiłem zebrać wszystkie informacje w jednym miejscu aby ewentualnie zachęcić was do samodzielnego wykonania tego układu. Budowa jest na tyle prosta, że powinnią sobie z nią poradzić nawet osoby nie mające doświadczenia z elektroniką. Jak widać na zdjęciu elementów nie ma wiele i są na tyle małe, że wszystkie z powodzeniem mieszczą się z standardowej wtyczne złącza RS232. Można co prawda zbudować wszystko w tzw. pająka, ale tej metody nie polecam. Wykonanie układu we wtyczne wydaje mi się bardziej eleganckie, a już na pewno bardziej trwałe i co za tym idzie niezawodne.
<center><img src="http://bimber.ovh.org/images/moje_rs232.jpg" border="1"></center>
Czym jest DS1820 (zamienniki to DS18S20 lub DS18B20) - jest to układ scalony produkwany przez firmę Dallas Semiconductor, będący czujnikiem temperaturowym. Podstawowe parametry układu:
- unikalny kod 64-bitowy w każdym czujniku
- zakres temperatur -55°C - +125°C
- dokładność 0,5°C (w zakresie -10°C - +85°C)
- używa interfejsu 1-Wire(tm)
- 12 bitowa rozdzielczość pomiaru
- maksymalna długość magistrali pomiarowej 30m
Układ nie wymaga żadnej kalibracji, jest już ustawiony przez producenta i komunikuje się przez magistralę 1-Wire za pomocą sygnałów cyfrowyvh. Magistrala 1-Wire oznacza, że do przesłania sygnałów z termometru do komputera wykorzystywany jest tylko jeden przewód (oczywiście nie może obyć się bez masy (GND), która jest drugą żyłą). Liczba czujników może być zwielokrotniona, i dalej wszystkiem będą mogły korzystać do przesyłania danych z tego samego przewodu. Identyfikację poszczególnych termometrów w aplikacji sterującej zapewnia indywidualny 64 bitowy kod zapisany w układzie. Dokładność pomiaru wydaje się być niewielka, ale zaręczam że jest wystarczająca dla naszych celów. Myślę, że w większy błąd możemy być wprowadzeniu przez zróżnicowanie ciśnienia atmosferycznego, niż z powodu błędu pomiaru czujnika. Dla ścisłości dodam, że istnieje możliwość znacznego zwiększenia dokładności pomiaru, ale w warunkach domowych jest ona praktycznie nie do zrealizowania. Mimo względne dużego błędu pomiaru, sama rozdzielczość czujnika jest bardzo wysoka. W trybie 12bit (największa rozdzielczość) pomiar dokonywany jest z dokładnością do 0,0625°C. To zadowoli to chyba już wszystkich.
Układ elektroniczyny jest badzo prosty. Jest to adapter dostosowujący magistralę 1-Wire do portu szeregowego komputeera RS-232. Jeżeli w swoim sprzęcie nie masz portu RS-232 musisz użyć odpowiedniej przejściówki USB-RS232 (do nabycia na Allegro).
<center><img src="http://bimber.ovh.org/images/ds_schemat.gif" alt="schemat"></center>
<ul>
<li>UL DS1820 (odpowiednik DS18S20. DS18B20) <li>D1 Dioda Schottky BAT85 (odpowiednik 1N5818)<li>D2 Dioda Zenera 6,2V<li>D3 Dioda Zenera 3,7V <li>D4 Dioda Schottky BAT85 (odpowiednik 1N5818)<li>R1 Rezystor 1,5K Ohm<li>Wtyczka RS232 żeńska plus obudowa </ul>
<center><img src="http://bimber.ovh.org/images/rs232.jpg" border="1"></center>
Z widocznej na zdjęciu wyżej wtyczki będziemy wykorzystywać następujące piny:
<ul><li> 2 - RXD<li> 3 - TXD<li> 4 - DTR <li> 5 - GND</ul>
Numery nóżek DS-a, w położeniu układu jak na pierwszym zdjęciu u góry to: 1-2-3. Koszt części przy założeniu, że wykorzystamy jeden element pomiarowy wyniesie około 11 PLN. Jednym z miejsc gdzie można najtaniej nabyć części elektroniczne jest Allegro. DS18S20 (najdroższy elemet zestawu) w zależności od sprzedawcy kosztuje około 7,5 PLN. Pozostałe części to groszowa sprawa.
Do odczytu czujników Dallasa wykorzystamy komputer z zainstalowanym odpowiednim oprogramowaniem. W sieci istnieje stosunkowo dużo różnych aplikacji. Ja wykorzystałem program Lampomittari. Potrafi on obsługiwać większa liczbę czujników, posiada możliwość zaprogramowania alarmów i wszystko prezentuje na zgrabnym wykresie. Program mozna pobrać z jego <a href="http://elektroniikka.org/thermometer/">strony domowej</a>, lub ze strony <a href="http://termik.ok.9x.pl/">Alarmusa</a>, który prowadzi, mniej więcej, jej polski odpowiednik. Polecam jednak wizytę na stronie pierwszej z uwagi na ewentualną możliwość ściągnięcia najnowszej wersji programu. Na stronie Alarmusa znajduje się obrazkowa konfiguracja, więc nikt nie powienien miec problemów z przystosowaniem programu do swoich potrzeb.
Przed budową układu przejrzałem forum Alarmusa i Elektrody w celu zorientowania się co do problemów, które mogą mnie czekać. Szczęśliwie okazało się, że w moim przypadku wszystko zadziałało od razu. Mam trzy czujniki w magistrali równoległej, całkowita długość do skrajnego elementu wynosi u mnie około 7 metrów. Firma Dallas podaje w notach katalogowych, że maksymalna długość magistrali 1-wire nie powinna przekraczać długości 30 metrów, ale doświadczenia użytkowników wskazują, że poprawny odczyt temperatury jest możliwy nawet z odległości 100 metrów!. Kierując się uwagami z forum zmieniłem w stosunku do oryginalnego schematu diodę zenera z 6,2V na 5,1V oraz dodałem kondensator 4,7nF/250V, podłączony równolegle do tej diody.
Oto małe FAQ po wizycie na forach:
<ul><li>Nie mam komunikacji z czujnikiem<br> Sprawdź czy w programie odczytującym temperaturę prawidłowo wybrano numer portu COM. Sprawdź poprawność montażu elektrycznego elementów. Diody Zenera muszą mieć moc 500mW.
<li>Program pokazuje ---- zamiast temperatury<br> Zmień czas oczekiwania na 1 sekundę. Temperatura powinna pojawiać się szybciej.
<li>Mam kłopoty z komunikacją na dużych odległościach, przy krótkim kablu jest OK<br> Należy do nózki Data czujnika (środkowa) dolutować rezystor 100 omów. Dodatkowo można wstawić równolegle do diody Zenera 6,2V kondensator 4,7nF/250V. Inną metodą do prawidłowej komunikacji czujników przy większych odległościach i topologii sieci typu gwiazda jest zastosowanie tzw. przełączników (np. DS2409), ang. Couplers http://pdfserv.maxim-ic.com/en/ds/DS2409.pdf
<li>Używam DS1820 soft i dostaje wyniku na przemian -999.9 i 85<br> pierwsza część odpowiedzi wyżej.
<li>Termometr pokazuje cały czas +85C lub brak jest wskazania<br> Prawdopodobie winę za to ponosi zwiększony prąd pobierany przez przetwornik. Należy podać napięcie +5V na nóżkę VDD czujnika (zmodyfikowany układ: http://www-e.uni-magdeburg.de/mthraenh/newapp74.pdf). </ul>
Linki o DS1820:
Elektroda Komputerowy termometr DS1820: http://www.elektroda.net/dla_kompa/ds1820/
Elektroda - forum: http://www.elektroda.pl/rtvforum/topic1 ... asc-0.html
Karta katologowa DS18S20: http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf
Strona Alarmusa: http://termik.ok.9x.pl/ lub http://termik.alarmus.boo.pl/
Termometr cyfrowy: http://ds18b20.friko.pl/index.html
Miernik temperatury: http://eko.one.pl/index.php?page=Termometr
Soft do Linuksa: http://www.digitemp.com/
Termometr do PC: http://www.republika.pl/grzesiek21/termo.htm
Opis układów, programowanie: http://republika.pl/rejestr/strony/termometr.html
Coś o kalibracji czyjników
Post z forum Alarmusa:
"Te układy są tak czułe, że porównywanie z termometrem wzorcowym musi się obywać w ośrodku o dużej przewodnosci cieplej aby na małej odległości nie było różnicy temperatur, bo w powietrzu to byle dmuchnięcie zakłamie pomiar tak że kalibracja nie zwiększy dokładności. Dlatego najlepiej by było aby to zrobić w specjalnej komorze cieplnej gdzie błąd pomiaru jest mniejszy niż 0.05°C. Przyjęcie samego alfa sprawi że wyrównamy błąd pomiaru do błędu w miejcu Tzero _slope na cały przedział (-55°C - 125°C) pod warunkiem że poprawnie go odgadliśmy, a może się on zawierać w przedziale 10-30°C. Jeżeli nie zgadniemy, to zmienimy błąd tak że będzie się zmieniał liniowo i w ten sposób zawężamy zakres na którym mamy największą precyzję pomiaru do temperatur dodatnich jeżeli nie znamy błędu w tym punkcie. Patrząc na wykresy błędów można się spodziewać że dla całego zakresu temperatur ujemnych możemy mieć błąd mniejszy niż 0.5°C a błąd pomiaru rośnie do ~+2°C tylko dla wysokich temperatur. Moje próby porównań z termometrami wzorcowymi skończyły się fiaskiem ze względu na brak warunków.
Najlepsza rada, to nie wpisywać niczego do alfa i Tzero_slope ani OFFset(jeżeli jest ujemny) jeżeli chcemy mierzyć temperatury ujemne. Jeżeli chcemy mierzyć temperatury powyżej 70°C to napewno zmniejszymy błąd pomiaru jak użyjemy alfa=0.000125 i Tzero_slope=20 podanej przez KK nie znając nawet OFFsetu. OFFset sprawdzałbym w temperaturze 20stC, co też nie jest łatwe w domowych warunkach jak masz wykryć różnice 0.2°C lub mniejszą. Wpisywanie samego OFFsetu da dobre rezultaty w temperaturach pokojowych."
<center><img src="http://bimber.ovh.org/images/czujnik.jpg" border="1"></center>
Jakiś czas temu na Oliwce pojawiły się posty o pomiarze temperatury za pomocą układu DS1820. Jako, że osobiście zmontowałem ten termometr, postanowiłem zebrać wszystkie informacje w jednym miejscu aby ewentualnie zachęcić was do samodzielnego wykonania tego układu. Budowa jest na tyle prosta, że powinnią sobie z nią poradzić nawet osoby nie mające doświadczenia z elektroniką. Jak widać na zdjęciu elementów nie ma wiele i są na tyle małe, że wszystkie z powodzeniem mieszczą się z standardowej wtyczne złącza RS232. Można co prawda zbudować wszystko w tzw. pająka, ale tej metody nie polecam. Wykonanie układu we wtyczne wydaje mi się bardziej eleganckie, a już na pewno bardziej trwałe i co za tym idzie niezawodne.
<center><img src="http://bimber.ovh.org/images/moje_rs232.jpg" border="1"></center>
Czym jest DS1820 (zamienniki to DS18S20 lub DS18B20) - jest to układ scalony produkwany przez firmę Dallas Semiconductor, będący czujnikiem temperaturowym. Podstawowe parametry układu:
- unikalny kod 64-bitowy w każdym czujniku
- zakres temperatur -55°C - +125°C
- dokładność 0,5°C (w zakresie -10°C - +85°C)
- używa interfejsu 1-Wire(tm)
- 12 bitowa rozdzielczość pomiaru
- maksymalna długość magistrali pomiarowej 30m
Układ nie wymaga żadnej kalibracji, jest już ustawiony przez producenta i komunikuje się przez magistralę 1-Wire za pomocą sygnałów cyfrowyvh. Magistrala 1-Wire oznacza, że do przesłania sygnałów z termometru do komputera wykorzystywany jest tylko jeden przewód (oczywiście nie może obyć się bez masy (GND), która jest drugą żyłą). Liczba czujników może być zwielokrotniona, i dalej wszystkiem będą mogły korzystać do przesyłania danych z tego samego przewodu. Identyfikację poszczególnych termometrów w aplikacji sterującej zapewnia indywidualny 64 bitowy kod zapisany w układzie. Dokładność pomiaru wydaje się być niewielka, ale zaręczam że jest wystarczająca dla naszych celów. Myślę, że w większy błąd możemy być wprowadzeniu przez zróżnicowanie ciśnienia atmosferycznego, niż z powodu błędu pomiaru czujnika. Dla ścisłości dodam, że istnieje możliwość znacznego zwiększenia dokładności pomiaru, ale w warunkach domowych jest ona praktycznie nie do zrealizowania. Mimo względne dużego błędu pomiaru, sama rozdzielczość czujnika jest bardzo wysoka. W trybie 12bit (największa rozdzielczość) pomiar dokonywany jest z dokładnością do 0,0625°C. To zadowoli to chyba już wszystkich.
Układ elektroniczyny jest badzo prosty. Jest to adapter dostosowujący magistralę 1-Wire do portu szeregowego komputeera RS-232. Jeżeli w swoim sprzęcie nie masz portu RS-232 musisz użyć odpowiedniej przejściówki USB-RS232 (do nabycia na Allegro).
<center><img src="http://bimber.ovh.org/images/ds_schemat.gif" alt="schemat"></center>
<ul>
<li>UL DS1820 (odpowiednik DS18S20. DS18B20) <li>D1 Dioda Schottky BAT85 (odpowiednik 1N5818)<li>D2 Dioda Zenera 6,2V<li>D3 Dioda Zenera 3,7V <li>D4 Dioda Schottky BAT85 (odpowiednik 1N5818)<li>R1 Rezystor 1,5K Ohm<li>Wtyczka RS232 żeńska plus obudowa </ul>
<center><img src="http://bimber.ovh.org/images/rs232.jpg" border="1"></center>
Z widocznej na zdjęciu wyżej wtyczki będziemy wykorzystywać następujące piny:
<ul><li> 2 - RXD<li> 3 - TXD<li> 4 - DTR <li> 5 - GND</ul>
Numery nóżek DS-a, w położeniu układu jak na pierwszym zdjęciu u góry to: 1-2-3. Koszt części przy założeniu, że wykorzystamy jeden element pomiarowy wyniesie około 11 PLN. Jednym z miejsc gdzie można najtaniej nabyć części elektroniczne jest Allegro. DS18S20 (najdroższy elemet zestawu) w zależności od sprzedawcy kosztuje około 7,5 PLN. Pozostałe części to groszowa sprawa.
Do odczytu czujników Dallasa wykorzystamy komputer z zainstalowanym odpowiednim oprogramowaniem. W sieci istnieje stosunkowo dużo różnych aplikacji. Ja wykorzystałem program Lampomittari. Potrafi on obsługiwać większa liczbę czujników, posiada możliwość zaprogramowania alarmów i wszystko prezentuje na zgrabnym wykresie. Program mozna pobrać z jego <a href="http://elektroniikka.org/thermometer/">strony domowej</a>, lub ze strony <a href="http://termik.ok.9x.pl/">Alarmusa</a>, który prowadzi, mniej więcej, jej polski odpowiednik. Polecam jednak wizytę na stronie pierwszej z uwagi na ewentualną możliwość ściągnięcia najnowszej wersji programu. Na stronie Alarmusa znajduje się obrazkowa konfiguracja, więc nikt nie powienien miec problemów z przystosowaniem programu do swoich potrzeb.
Przed budową układu przejrzałem forum Alarmusa i Elektrody w celu zorientowania się co do problemów, które mogą mnie czekać. Szczęśliwie okazało się, że w moim przypadku wszystko zadziałało od razu. Mam trzy czujniki w magistrali równoległej, całkowita długość do skrajnego elementu wynosi u mnie około 7 metrów. Firma Dallas podaje w notach katalogowych, że maksymalna długość magistrali 1-wire nie powinna przekraczać długości 30 metrów, ale doświadczenia użytkowników wskazują, że poprawny odczyt temperatury jest możliwy nawet z odległości 100 metrów!. Kierując się uwagami z forum zmieniłem w stosunku do oryginalnego schematu diodę zenera z 6,2V na 5,1V oraz dodałem kondensator 4,7nF/250V, podłączony równolegle do tej diody.
Oto małe FAQ po wizycie na forach:
<ul><li>Nie mam komunikacji z czujnikiem<br> Sprawdź czy w programie odczytującym temperaturę prawidłowo wybrano numer portu COM. Sprawdź poprawność montażu elektrycznego elementów. Diody Zenera muszą mieć moc 500mW.
<li>Program pokazuje ---- zamiast temperatury<br> Zmień czas oczekiwania na 1 sekundę. Temperatura powinna pojawiać się szybciej.
<li>Mam kłopoty z komunikacją na dużych odległościach, przy krótkim kablu jest OK<br> Należy do nózki Data czujnika (środkowa) dolutować rezystor 100 omów. Dodatkowo można wstawić równolegle do diody Zenera 6,2V kondensator 4,7nF/250V. Inną metodą do prawidłowej komunikacji czujników przy większych odległościach i topologii sieci typu gwiazda jest zastosowanie tzw. przełączników (np. DS2409), ang. Couplers http://pdfserv.maxim-ic.com/en/ds/DS2409.pdf
<li>Używam DS1820 soft i dostaje wyniku na przemian -999.9 i 85<br> pierwsza część odpowiedzi wyżej.
<li>Termometr pokazuje cały czas +85C lub brak jest wskazania<br> Prawdopodobie winę za to ponosi zwiększony prąd pobierany przez przetwornik. Należy podać napięcie +5V na nóżkę VDD czujnika (zmodyfikowany układ: http://www-e.uni-magdeburg.de/mthraenh/newapp74.pdf). </ul>
Linki o DS1820:
Elektroda Komputerowy termometr DS1820: http://www.elektroda.net/dla_kompa/ds1820/
Elektroda - forum: http://www.elektroda.pl/rtvforum/topic1 ... asc-0.html
Karta katologowa DS18S20: http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf
Strona Alarmusa: http://termik.ok.9x.pl/ lub http://termik.alarmus.boo.pl/
Termometr cyfrowy: http://ds18b20.friko.pl/index.html
Miernik temperatury: http://eko.one.pl/index.php?page=Termometr
Soft do Linuksa: http://www.digitemp.com/
Termometr do PC: http://www.republika.pl/grzesiek21/termo.htm
Opis układów, programowanie: http://republika.pl/rejestr/strony/termometr.html
Coś o kalibracji czyjników
Post z forum Alarmusa:
"Te układy są tak czułe, że porównywanie z termometrem wzorcowym musi się obywać w ośrodku o dużej przewodnosci cieplej aby na małej odległości nie było różnicy temperatur, bo w powietrzu to byle dmuchnięcie zakłamie pomiar tak że kalibracja nie zwiększy dokładności. Dlatego najlepiej by było aby to zrobić w specjalnej komorze cieplnej gdzie błąd pomiaru jest mniejszy niż 0.05°C. Przyjęcie samego alfa sprawi że wyrównamy błąd pomiaru do błędu w miejcu Tzero _slope na cały przedział (-55°C - 125°C) pod warunkiem że poprawnie go odgadliśmy, a może się on zawierać w przedziale 10-30°C. Jeżeli nie zgadniemy, to zmienimy błąd tak że będzie się zmieniał liniowo i w ten sposób zawężamy zakres na którym mamy największą precyzję pomiaru do temperatur dodatnich jeżeli nie znamy błędu w tym punkcie. Patrząc na wykresy błędów można się spodziewać że dla całego zakresu temperatur ujemnych możemy mieć błąd mniejszy niż 0.5°C a błąd pomiaru rośnie do ~+2°C tylko dla wysokich temperatur. Moje próby porównań z termometrami wzorcowymi skończyły się fiaskiem ze względu na brak warunków.
Najlepsza rada, to nie wpisywać niczego do alfa i Tzero_slope ani OFFset(jeżeli jest ujemny) jeżeli chcemy mierzyć temperatury ujemne. Jeżeli chcemy mierzyć temperatury powyżej 70°C to napewno zmniejszymy błąd pomiaru jak użyjemy alfa=0.000125 i Tzero_slope=20 podanej przez KK nie znając nawet OFFsetu. OFFset sprawdzałbym w temperaturze 20stC, co też nie jest łatwe w domowych warunkach jak masz wykryć różnice 0.2°C lub mniejszą. Wpisywanie samego OFFsetu da dobre rezultaty w temperaturach pokojowych."