DS18B20 1-wire


Get the Flash Player to see this player.

time2online Joomla Extensions: Simple Video Flash Player Module
DS18B20 1-wire

Kontynuując pracę nad naszym inteligentnym domem należałoby podłączyć jakieś czujniki do stacji bazowej, które będą informowały nas o warunkach środowiskowych w pomieszczeniu. W zależności od wskazań czujników będziemy załączać klimatyzację itp. Najprostszym przykładem czujnika jest termometr DS18B20, ponieważ każdy linux ma biblioteki do obsługi tego termometru standardowo wbudowane w jądrze. Wystarczy tylko przy kompilacji jądra załączyć opcję "Driver for 1-wire Dallas network protocol". Tu pojawia się problem, ponieważ nie każdy wie jak skompilować jądro i jakie elementy wybrać, aby nasz system obsługiwał standardowe wejścia i wyjścia. Na szczęście w internecie znajdziecie gotowe jądra ze skonfigurowanym już jądrem pod czujnik Dallasa. Ja wykorzystałem artykuł http://www.raspberrypi.org/phpBB3/viewtopic.php?t=6649 oraz płytkę gotroniki na której był już termometr DS18B20.Teraz podpinamy termometr:

Jak widać na obrazku linia GPIO4 jest już podciągnięta do napięcia, ale bezpieczniej jest podciągnąć go do 5V jakimś rezystorem. Ja korzystałem z DS18B20 na płytce Gotroniki, a tam jest już podpięty rezystor, więc nie wiem czy bez tego rezystora wszystko będzie działało.

Można też podłączyć kilka tak jak na stornie: http://picoboard.pl/raspberry-pi-obsluga-termomertrow-ds18b20/ w taki sposób:

Rezystor to 4,7k Ohm.

W nowych Resbian'ach jest już załączona linia 1-wire, więc wystarczy wpisać tylko:

sudo modprobe w1-gpio
sudo modprobe w1-therm

i mamy dostęp do dany 1-wire w pliku

/sys/bus/w1/devices

Można też ściągnąć skompilowane jądro z 1-wire (jeśli macie jakiś sterszy system) zalogować się do konsoli raspberry jako administrator i ściągnąć jądro obsługujące termometr w następujący sposób:

cd /boot
wget http://www.frank-buss.de/raspberrypi/kernel-rpi-w1.tgz
tar -xzf kernel-rpi-w1.tgz
rm -f kernel-rpi-w1.tgz
cd /lib/modules
wget http://www.frank-buss.de/raspberrypi/modules-rpi-w1.tgz
tar -xzf modules-rpi-w1.tgz
rm -f modules-rpi-w1.tgz
sync
reboot
#po reboocie wpisz
modprobe w1-gpio


Po ponownym odpaleniu konsoli powien pokazać się katalog /sys/bus/w1 jeśli go nie ma, to znaczy że nie zostały zainstalowane pakiety obsługujące 1-wire.

Jeśli macie katalog "sys/bus/w1", to wystarczy wysłać "1" do pliku w1_master_search, aby wykryć adres termometru, a następnie wyświetlić wszystkie dane na ekran za pomocą cat */w1_slave tak jak to zaprezentowałem na poniższym zrzucie z ekranu lub wywołać pojedynczy czujnik za pomocą jego adresu cat 28-000002c56e9d/w1_slave.

Aby sprawdzić czy termometr działa wystarczy dotknąć  go palcem i wyświetlić dane z termometru. Temperatura w naszym przykładzie to t=25812, wystarczy podzielić ją przez 1000 i otrzymujemy 25,812 stopni C.

Oczywiście każdy plik ma jakąś rolę konfiguracyjną, którą można znaleźć w literaturze:

- w1_master_slave_count - umożliwia sprawdzenie liczby czujników zarejestrowanych w systemie i gotowych do odczytu.
- w1_master_slaves - odczytanie numerów identyfikacyjnych czujników.
- w1_master_search - umożliwia wykrycie urządzeń. Zapis wartości -1 spowoduje ciągłe skanowanie, 0 spowoduje wyłączenie skanowania, a liczba np. 3 spowoduje trzy krotne skanowanie.
- w1_master_attempts - liczba wykonanych automatycznych skanowań.
- w1_master_add i remove - pozwalają na ręczne dodanie urządzenia.