digitemp + LCDproc + rrdtool

W tym miejscu zapraszamy Was do współpracy. Czekamy na propozycje, sugestie i rady.
Moderatorzy zatroszczą się o to, by najlepsze teksty trafiły do FAQ.

Moderatorzy: Moderatorzy, Administratorzy

Czy uważasz ten artykuł za zbyt elektroniczny jak na forum.slackware.pl ?

Tak
1
9%
Nie
10
91%
 
Liczba głosów: 11

Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)

digitemp + LCDproc + rrdtool

Post autor: bojleros »

Po pierwsze chciałem zaznaczyć że nie biorę odpowiedzialności za jakiekolwiek uszkodzenia sprzętu !!! Artykuł jest dla ludzi którzy wiedzą co robią pomimo tego całość nie jest specjalnie skomplikowana.

Streszczenie:


Opracowanie ma na celu przedstawienie prostego sposobu na akwizycję danych z czujników 1-wire. Jako centrum całego systemu wykorzystano komputer PC posiadający porty: szeregowy, równoległy i usb(zasilanie). Dane pobrane z czujników (programem digitemp), zostają wstępnie obrobione w skrypcie temperatura.pl który to skrypt jednocześnie wysyła je do serwera LCDd i do bazy RRD. Obecna temperatura pokazywana jest na wyświetlaczu LCD a dostęp do wykresów możliwy jest przez stronę www. Układ jest przedstawieniem możliwości a nie gotowym produktem ;)

Wymagania sprzętowe dotyczące komputera:

1 x rs232
1 x lpt
1 x usb

Droższe części elektroniczne:

n x DS18S20 - czujnik temperatury 1-wire
1 x max232 - konwerter poziomu napięć rs232 <=> TTL
1 x wyświetlacz LCD minimum 16x2 znaki

1. Montaż i uruchomienie czujników temperatury.

a) Budowa mastera

Czujniki temperatury podłącza się równolegle do magistrali 1-wire. Do połączenia czujników z masterem wymagana jest jedna para prostego kabla telekomunikacyjnego. Czujniki nie wymagają oddzielnego zasilania ponieważ są zasilane z magistrali.

Magistrala jest sterowana poprzez specjalną przejściówkę z portu szeregowego:

Obrazek

Przejściówka wymaga zasilania +5V do czego naturalnie nadaje się port USB. Zewnętrzne zasilanie pozwala na sterowanie dłuższych linii 1-wire. W moim domu mam puszczone 1-wire po jednej parze przewodu telefonicznego który się rozgałęzia. Całość ma długość około 50 metrów i działa bez zarzutu. Gdyby linia była mała to wystarczy jeden z prostych konwerterów jakie można znaleźć w internecie.

b) podpinanie czujników

Czujniki podpina się równolegle do magistrali zostawiając pin VCC czujnika niepodpięty i zaizolowany. W przypadku problemów z działaniem na długich liniach pomocne może być równoległe dopięcie diod Schottkyego do czujników. Dopina się je w kierunku zaporowym. Prawdopodobnie można użyć także innych czujników lecz wszystko zależy od tego czy są obsługiwane w programie digitemp. Inną sprawą może być ich działanie w trybie zasilania z linii.

c) kompilacja digitemp

Najpierw należy pobrać źródła digitemp. Znajdziemy je na stronie http://www.digitemp.com/software.shtml

Kod: Zaznacz cały

cd /usr/src
wget http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz
tar xf digitemp-3.6.0.tar.gz
Program kompilujemy wydając z konsoli:

Kod: Zaznacz cały

make ds9097
Następnie kopiujemy nasz program w miejsce wskazywane przez $PATH:

Kod: Zaznacz cały

cp digitemp_DS9097 /usr/bin/digitemp
W tym momencie jesteśmy gotowi do sprawdzenia działania czujników:

Kod: Zaznacz cały

cd ~
digitemp -s /dev/ttyS0 -i 
Powinniśmy ujżeć podobne wyjście:

Kod: Zaznacz cały

# digitemp -s /dev/ttyS0 -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
..
Searching the 1-Wire LAN
10BA46CA010800B9 : DS1820/DS18S20/DS1920 Temperature Sensor
10653ACA01080015 : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 10BA46CA010800B9
ROM #1 : 10653ACA01080015
Wrote .digitemprc
Takie wyjście świadczy o tym że digitemp wykrył dwa czujniki temperatury. W innym przypadku należy sprawdzić czujniki i mastera. Jeżeli czujniki zostały wykryte to trzeba sprawdzić ich odczyt:

Kod: Zaznacz cały

# digitemp -a   
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Mar 11 19:36:40 Sensor 0 C: 18.81 F: 65.86
Mar 11 19:36:41 Sensor 1 C: 19.12 F: 66.42
Powyższy przykład to poprawnie działające czujniki. Jeżeli wartości odczytane z czujników mają się nijak do rzeczywistości to możliwe że Twój czujnik nie działa poprawnie przy zasilaniu z linii DQ i wymaga dodatkowego zasilana. Jeżeli wszystko jest ok to możesz wyedytować plik .digitemprc który powinien wyglądać mniej więcej tak:

Kod: Zaznacz cały

TTY /dev/ttyS0
READ_TIME 950
LOG_TYPE 1
LOG_FORMAT "Sensor%s: %.2C C"
CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C"
HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%"
SENSORS 2
ROM 1 0x10 0xBA 0x46 0xCA 0x01 0x08 0x00 0xB9
ROM 0 0x10 0x65 0x3A 0xCA 0x01 0x08 0x00 0x15
Najistotniejsza jest linia LOG_FORMAT. Takiego formatu będzie się spodziewał skrypt temperatura.pl. Teraz gdy mamy działającego digitempa możemy zabrać się za dalszą część pracy.


2.Uruchomienie wyświetlania na LCD


W tym momencie chciałem jeszcze raz przypomnieć o możliwości uszkodzeń.

a)część sprzętowa

Jak można znaleźć na stronie lcdproc program ten obsługuje popularne wyświetlacze LCD z kontrolerem HD44780. Sam wykorzystałem połączenie na linii 4ro bitowej opisanej w tabeli 5.4 z zastrzeżeniem że pin RW podłączyłem na stałe do masy.

Generalnie nie ma jednego układu wyprowadzeń dla tego typu wyświetlaczy a i oznaczenia wyprowadzeń mogą się odrobinę różnić. Zachowując ostrożność można jednak takie urządzenie podłączyć bez problemowo do komputera PC. Poza wyprowadzeniami opisanymi w tabelce istnieje także konieczność zasilenia układu. Można wykorzystać port USB przejściówki rs232 <=> 1-wire. Wyświetlacz lcd wymaga podświetlenia które zrealizujemy podłączając anodę podświetlającej diody poprzez szeregowy rezystor 100Ohm do plusa. Katodę podpinamy do minusa. Pozostało jedynie ustalenie poziomu kontrastu. Realizuje się to poprzez zastosowanie potencjometru 22kOhm. Skrajne zaciski ścieżki oporowej dołącza się do plusa i minusa zasilania a środkowy zacisk podłącza się na wejście napięcia kontrastu. Po podłączeniu wyświetlacza do zasilania kontrast regulujemy tak aby nieznacznie były widoczne bloki pierwszej linii.

UWAGA! Niektóre wyświetlacze wymagają napięć ujemnych. Ja opisałem wyświetlacz nie wymagający takich napięć dlatego należy zwrócić uwagę co się jak podpina a najlepiej przeczytać datasheet.

b)oprogramowanie

Na tym etapie należy przystąpić do skompilowania LCDproc które można pobrać spod adresu: http://sourceforge.net/projects/lcdproc/ .

Kod: Zaznacz cały

cd /usr/src
tar xf lcdproc-0.5.2.tar.gz
cd lcdproc-0.5.2
./configure --prefix=/usr --sysconfdir=/etc --enable-drivers=hd44780
make
make install
Teraz należy skopiować nasz plik drivera LCD w jakieś miejsce poza źródłami:

Kod: Zaznacz cały

cp server/drivers/hd44780.so /usr/lib/.
Ścieżka ta jest istotna ze względu na to że musimy ją podać w pliku konfiguracyjnym serwera LCDd. Przykładowy plik konfiguracyjny umieszczam tutaj.

Jeżeli mamy wszystko poprawnie zbudowane i skonfigurowane to wydanie polecenie LCDd z konsoli spowoduje wyświetlenie treści na LCD. W tym momencie jesteśmy gotowi do

instalacji rrdtool. W razie problemów należy sprawdzić wszystkie połączenia oraz plik konfiguracyjny.

3.Kompilacja rrdtool

Należy pobrać paczkę ze źródłami rrdtool ze strony http://oss.oetiker.ch/rrdtool/download.en.html

Następnie przechodzimy do kompilacji:

Kod: Zaznacz cały

cd /usr/src
tar xf rrdtool-1.2.8.tar.gz
cd rrdtool-1.2.8
./configure --prefix=/usr --sysconfdir=/etc/rrd --disable-ruby --disable-python --disable-tcl --enable-perl-site-install --enable-latin2 --with-rrd-default-font=/usr/share/fonts/TTF/arial.ttf
make
make install
Tak skonfigurowany rrdtool odrazu cieszy oko polskimi czcionkami jednak jeżeli się nie posiada żadnej licencji na widnowsa to lepiej pokombinować z innymi czcionkami.


4.Skrypt temperatura.pl

Skrypt temperatura.pl (po pobraniu zmień rozszerzenie na .pl)jest odpowiedzialny za wystawianie danych na wyświetlacz i do bazy rrd którą w razie potrzeby sam tworzy. Należy zwrócić uwagę na powiązanie numeru czujnika z nazwą jaka jest wyświetlana na wykresie. Skrypt jest w stadium bardzo rozwojowym ale mimo tego pokazuje możliwości. Najlepiej jest go uruchamiać z rc.local nie zapominając o uprzednim zdeklarowaniu LC_LANG i LC_ALL.

5.Podsumowanie.

Mam nadzieję że nie przesadziłem z elektroniką. Nie chce jednocześnie pisać na elketrodzie ponieważ tam już jest Ameryka.

Artykuł starałem się tak napisać aby użytkownik który wie co robi nie miał najmniejszych problemów z uruchomieniem zestawu. Sam korzystam z tego na moim domowym serwerku i wszystko działa stabilnie nie podnosząc średniego użycia RAM ani CPU. Skrypt może być napisany odrobinie "nieoptymalnie" lecz jestem początkujący jeżeli idzie o perl'a. Niemniej życzę udanego "wdrożenia" i użytkowania :) (choćby się je dało na palcach jednej reki policzyć)


Bartek R.
Ostatnio zmieniony 2010-07-27, 20:10 przez bojleros, łącznie zmieniany 4 razy.
Awatar użytkownika
Zielony
Użytkownik
Posty: 535
Rejestracja: 2005-03-17, 18:22
Lokalizacja: Poznań
Kontakt:

Re: digitemp + LCDproc + rrdtool

Post autor: Zielony »

Też posiadam 2 DS18B20 - jeden przed oknem, drugi za. Fajna sprawa, bo zawsze widać aktualną temperaturę na pulpicie, np. poprzez Conky. ;-) Natomiast jeśli chodzi o podłączenie czujników, to polecałbym COM zamiast LPT, chociażby dlatego, że to drugie może się przydać do innych urządzeń. http://meteo.achjoj.info/info.php - tutaj znajduje się schemat, na podstawie którego można chyba zbudować prostszy układ niż ten przedstawiony. Sam nie interesuję się elektroniką, a dałem radę. digitemp znajduje się w SCXD.
Żyję - nie każdemu się zdarza - a we krwi mam chlorofil.
[url=http://scxd.info/][img]http://scxd.info/pub/scxdbar/scxd-bar.png[/img][/url]
[b]Registered User #448882[/b]
[img]http://scxd.info/say/img.php[/img]
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: digitemp + LCDproc + rrdtool

Post autor: Pajaczek »

Zielony, Ależ bojleros podłącza czujniki przez COM (czy może bezpieczniej powiedzieć RS'a), LPT wykorzystał (jak rozumiem bo nie czytałem dokładnie) do podłączenia wyświetlacza LCD.

A pytanie do bojlerosa dlaczego S20 a nie tańsze B20? Miałeś jakiś konkretny powód, czy po prostu były pod ręką?
Awatar użytkownika
Zielony
Użytkownik
Posty: 535
Rejestracja: 2005-03-17, 18:22
Lokalizacja: Poznań
Kontakt:

Re: digitemp + LCDproc + rrdtool

Post autor: Zielony »

Pajaczek pisze:Zielony, Ależ bojleros podłącza czujniki przez COM (czy może bezpieczniej powiedzieć RS'a), LPT wykorzystał (jak rozumiem bo nie czytałem dokładnie) do podłączenia wyświetlacza LCD.
Ah, no to przepraszam, źle przeczytałem.
A pytanie do bojlerosa dlaczego S20 a nie tańsze B20? Miałeś jakiś konkretny powód, czy po prostu były pod ręką?
Nie zauważyłem też tej jednej literki różnicy. Być może do S20 rzeczywiście nie da się zbudować prostszej przystawki. Między innymi dlatego proponowałbym B20.
Żyję - nie każdemu się zdarza - a we krwi mam chlorofil.
[url=http://scxd.info/][img]http://scxd.info/pub/scxdbar/scxd-bar.png[/img][/url]
[b]Registered User #448882[/b]
[img]http://scxd.info/say/img.php[/img]
Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)

Re: digitemp + LCDproc + rrdtool

Post autor: bojleros »

Zielony, Masz racje ta przejściówka jest prostsza. Ale jak sobie wyobrażasz przeładowywanie pojemności 60 metrowego kabla przy zasilaniu z RS ?:> Dlatego właśnie przedstawiłem moją przejściówkę która tak samo jest podłączana pod rs232. Na dobrą sprawę całość można by sterować jakimś mikroprocesorem który byłby z kolei podpięty przez samo usb ale nie miałem za bardzo czasu coś takiego budować bo robię teraz pracę dyplomową :)
Zielony pisze:Być może do S20 rzeczywiście nie da się zbudować prostszej przystawki.
1-Wire to 1-Wire.
Pajaczek pisze:A pytanie do bojlerosa dlaczego S20 a nie tańsze B20? Miałeś jakiś konkretny powód, czy po prostu były pod ręką?
Szczerze mówiąc to te czujniki są dla mnie tak samo tanie. Chwyt ... zamówiłem sample z Maxima :)

Z DS1820 (i jak rozumiem DS18B20) jest pewien problem który został naprawiony dopiero w 18S20:
http://www.digitemp.com/docs/ds1820-report.pdf

Swoją drogą mam pytanie do Was. Jak zasilacie swoje czujniki? Dajecie im dodatkowe +5V czy korzystacie z trybu parsite ?

Dziękuje za zainteresowanie :)
Ostatnio zmieniony 2009-03-13, 08:52 przez bojleros, łącznie zmieniany 1 raz.
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: digitemp + LCDproc + rrdtool

Post autor: Pajaczek »

bojleros pisze:Szczerze mówiąc to te czujniki są dla mnie tak samo tanie. Chwyt ... zamówiłem sample z Maxima
No tak, sample to jest rozwiązanie, dopóki ludzie nie zaczną robić kreciej roboty i masowo sprzedawać, wówczas zaczyna się robić nieprzyjemnie z samplami. Zresztą i Maxim i np. ST okresowo krzywo patrzą na zamówienia z Polski.
bojleros pisze:Z DS1820 (i jak rozumiem DS18B20) jest pewien problem który został naprawiony dopiero w 18S20:
No chyba niezupełnie:
Mike Mitchell writes:

The DS18S20 and DS18B20 are upgrades from the old 1820. The 18S20 is
actually an 18B20 that has been factory programmed to be software
compatible with the 1820.
The 18B20 can operate in a 9-bit conversion mode that takes
only 93ms, the 18S20 is fixed at 750ms. The newer devices conversion times
are completely different than the 1820 because the design is completely
different. They do not use the same technology to convert temperature.

How old is your 1820? The older technology parts' current measurement
error will drift over time. The newer ones such as the 18S20, 18B20 do not.

Mike Mitchell
Battery Management Applications
Dallas Semiconductor
Ach... jeszcze zasilanie. O ile tylko się da to podkradam zasilanie z linii danych :twisted: , dodatkowe zasilanie tylko jakby się pojawiły problemy.
Ostatnio zmieniony 2009-03-13, 15:20 przez Pajaczek, łącznie zmieniany 1 raz.
Awatar użytkownika
Zielony
Użytkownik
Posty: 535
Rejestracja: 2005-03-17, 18:22
Lokalizacja: Poznań
Kontakt:

Re: digitemp + LCDproc + rrdtool

Post autor: Zielony »

bojleros pisze:Zielony, Masz racje ta przejściówka jest prostsza. Ale jak sobie wyobrażasz przeładowywanie pojemności 60 metrowego kabla przy zasilaniu z RS ?
Jak już mówiłem, nie znam się na elektronice. W każdym razie dla kilkumetrowego kabla działa.
bojleros pisze:Jak zasilacie swoje czujniki?
Patrz schemat, który podałem. :P
Żyję - nie każdemu się zdarza - a we krwi mam chlorofil.
[url=http://scxd.info/][img]http://scxd.info/pub/scxdbar/scxd-bar.png[/img][/url]
[b]Registered User #448882[/b]
[img]http://scxd.info/say/img.php[/img]
Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)

Re: digitemp + LCDproc + rrdtool

Post autor: bojleros »

Zielony pisze:Patrz schemat, który podałem. :P
Ano tak , wcześniej to na to pobieżnie spojrzałem :) Widzę że używasz parsite. Ja też , tylko że jak podłączyłem Vcc czujnika do masy to nie mierzył mi żadnej temperatury. Dopiero po pozostawieniu Vcc niepodłączonego mierzy jak powinno :) Dlatego pytam o to jak działają czujniki. Albo ja coś żle zrozumiałem z datasheeta albo oni coś pomieszali...
Morpheusplus
Użytkownik
Posty: 1
Rejestracja: 2010-07-26, 00:51

Re: digitemp + LCDproc + rrdtool

Post autor: Morpheusplus »

bojleros, mógłbyś jeszcze raz zamieścić skrypt temperatura.pl i plik LCDd.conf? Linki, które podałeś nie działają, a chciałbym u siebie wdrożyć;)
Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)

Re: digitemp + LCDproc + rrdtool

Post autor: bojleros »

Dzięki za informację. Padł mi domowy serwer. Podam nowe linki jak tylko będę miał chwilkę czasu.
Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)

Re: digitemp + LCDproc + rrdtool

Post autor: bojleros »

Poprawiłem linki. Teraz już wszystko jest ponownie dostępne. Smacznego ;)
ODPOWIEDZ