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:
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
Kod: Zaznacz cały
make ds9097
Kod: Zaznacz cały
cp digitemp_DS9097 /usr/bin/digitemp
Kod: Zaznacz cały
cd ~
digitemp -s /dev/ttyS0 -i
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
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
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
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
Kod: Zaznacz cały
cp server/drivers/hd44780.so /usr/lib/.
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
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.