Na rynku dostępnych jest kilka rodzajów termometrów z różnymi sposobami komunikacji m.in. 1-wire, analogowe czy i2c. Przy wykorzystaniu Raspberry Pi najbardziej wygodnym i najprostszym rozwiązaniem jest wykorzystanie termometrów komunikujących się poprzez protokół 1-wire, który Raspberry Pi obsługuje na pinie 4 GPIO. Raspberry Pi jest w stanie obsłużyć do ośmiu urządzeń za pomocą protokołu 1-wire. W artykule tym pokażę jak łatwo można podłączyć i odczytać temperatury z termometrów DS18B20+.
Praktycznie wszystkie systemy maja już zainstalowane moduły dla protokołu 1-wire i obsługi termometrów po tym protokole. Aby sprawdzić czy moduły są zainstalowane możemy je ręcznie załadować
[bash]
sudo modprobe w1-gpio
sudo modprobe w1-therm
[/bash]
Jeśli nie otrzymaliśmy żadnych błędów to warto aby powyższe moduły ładowały się wraz ze startem systemu dodając do pliku /etc/modules poniższe linijki.
[bash]
w1-gpio
w1-therm
[/bash]
UWAGA:
W nowszych wersjach systemu należy jeszcze dodać poniższy wpis do pliku /boot/config.txt i zrestartować malinę.
[bash]dtoverlay=w1-gpio,gpiopin=4[/bash]
Wybór czujników
Do naszych testów użyjemy cyfrowe termometry DS18B20+, które do komunikacji wykorzystują protokół 1-wire. Czujniki DS18B20+ można także kupić jako moduły oraz wodoodporne sondy.
Schemat podłączenia
Na poniższym obrazku pokazany jest schemat podłączenia termometrów do Raspberry Pi. Rezystor musi mieć wartość 4,7KΩ i być podłączony pomiędzy zasilaniem 3.3v (pin 1<>prawa nóżka) a kablem komunikacji (pin 7(GPIO4)<>środkowa nóżka). Trzecia lewa nóżka powinna być podłączona do GDN (pin 6)
Odczytywanie informacji z czujników
Odczyt stanów i wartości z magistrali 1-wire odbywa się za pomocą odczytów z plików. Listę podpietych urządzeń można odczytać np. za pomocą poleceń
[bash]
cd /sys/bus/w1/devices
ls
[/bash]
Po przejściu do katalogu sys/bus/w1/devices i wyświetleniu jego zawartości zobaczymy wszystkie podłączone urządzenia
[bash]
28-0000045478fb 28-000004f3843c 28-0000054d14bc 28-0000054d6df0
28-000004f354e6 28-0000054cfeb2 28-0000054d52b8 w1_bus_master1
[/bash]
gdzie 28-00000xxxxxx
to ID urządzeń a w1_bus_master1
określa pierwszy i jedyny główny kontroler w naszej malinie.
Możemy wyświetlić w łatwy sposób liczbę podłączonych czujników
[bash]
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
7
[/bash]
Możemy również wyświetlić listę ID podłączonych czujników
[bash]
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
28-0000054d6df0
28-0000054d52b8
28-000004f3843c
28-0000054d14bc
28-0000054cfeb2
28-000004f354e6
28-0000045478fb
[/bash]
Aby odczytać wartości temperatur oraz inne dane przykładowo z pierwszego czujnika z naszej listy wydajemy polecenie
[bash]
cat /sys/bus/w1/devices/28-0000054d52b8/w1_slave
78 01 4b 46 7f ff 08 10 51 : crc=51 YES
78 01 4b 46 7f ff 08 10 51 t=23500
[/bash]
Temperatura podana jest w wartości t=23500, którą musimy podzielić przez 1000, dzięki czemu otrzymujemy ją w bardziej przyjaznym formacie – 23,5 (°C). Wartość crc=51 YES
określa czy transmisja była wykonana bez błędów – w naszym przypadku się to udało.
Dzięki możliwości odczytu informacji o czujnikach z plików możemy praktycznie w każdym języku programowania odczytywać dane jak ze zwykłych plików tekstowych za pomoca wbudowanych funkcji i klas danego języka.
osworld.pl liked this on Facebook.
Grzegorz Olejniczak liked this on Facebook.
Cyryl Sochacki liked this on Facebook.
[…] http://osworld.pl/ […]
Polecam zamontować w ten sposób : http://www22.speedyshare.com/chMZs/download/2013-…
Na arduino śmiga bez problemu, a mamy oszczędność jednej żyły
Niestety Bartosz na malinie ten myk nie działa.
@Cyryl fajny opis, to może teraz napiszesz jak zrobić wykresy w Highcharts do tych odczytów :)
Czy długość przewodu może mieć znaczenie na jakość dokonywanych pomiarów?
Czy jest możliwość podpięcia czujnika do maliny z zainstalowanym raspbmc lub openelc, tak aby temperatura się wyświetlała zamiast tej pobranej dla lokalizacji z netu?
Nie powinna mieć. Z tego co czytałem przy 25m nie ma praktycznie problemów powyżej robi się jakieś zabiegi. Głównie są problemy z komunikacją a nie błędnymi odczytami. Powinieneś bez problemów dopiąć czujniki pod malinę z raspbmc, ale jak wyświetlić to w panelu xbmc to nie mam pojęcia.
tutaj: http://forum.xbmc.org/showthread.php?tid=101125 masz opis jak dodac temperatury CPU i GPU w xbmc na home screen. Analogicznie mozesz zrobic z temepratura z czujnika.
[…] Raspberry Pi – obsługa termometrów DS18B20+ […]
Ja mam pytanie odnośnie czujników. Jeszcze nie mam swojego zestawu, ale na wiosnę kupię i chciałbym za wczasu się trochę dowiedzieć. Czy te identyfikatory zawsze są takie same po starcie systemu? Chodzi o to, że umieszczę sobie kilka czujników temperatury w różnych miejscach i chciałbym wiedzieć który czujnik jest który. Nie żebym potem odczytywał temperaturę (skryptem co jakiś czas) i się okazało, że ten czujnik ma teraz inne id i nie mogę się do niego dostać. Ewentualnie czy można im nadać swoje identyfikatory.
Tak każdy czujnik ma unikalny id. Możesz nadać własną nazwę w programie(który musisz sam napisać albo znaleźć ) do odczytu dodając nazwę wg ID.
Dzięki za odpowiedź. To mi trzeba było wiedzieć
Przy ujemnej temperaturze za oknem (-4 )wyszło mi coś takiego :
f3 ff 4b 46 7f ff 0d 10 e8 : crc=e8 YES
f3 ff 4b 46 7f ff 0d 10 e8 t=-812
Gdy podzielimy to przez 1000 nie daje to oczekiwanego wyniku. Co jest nie tak?
Ciężko powiedzieć jest to prawie -1 st. więc któryś z termometrów kłamie :P
Też doszedłem do tego, ten który pokazywał -4 oszukiwał. Dzięki :)
[…] Raspberry Pi – obsługa termometrów DS18B20+ […]
Który opornik jest potrzebny: 4,7KOHM 1W, czy 4,7KOHM 0,25W?
W tym przykładzie służy do podciągania, a więc wystarczy 0,25W. Oczywiście 1W też może być, ale 0,25 wystarczy ;)
A ja miałem zainstalowane WebIOPi na raspberry i zainstalowałem sobie ten termometr i działa.
Mam tylko pytanie, jak na stronie (np. takiej z WebIOPi) wyświetlić odczyt?
[…] Pi – CamJam Edukit 2. Jest to specjalny zestaw od Cambridge University, zawierający sensory: temperatury DS18B20, światła i PIR, płytkę stykową, Light Dependent Resistor, Piezo buzzer, kable, rezystory, […]
Witam, mam problem, bo nie widzę w devices w1_bus_master1.
Witam,
Niestety nie widzę w Devices: w1_bus_master1. Sondy jeszcze nie podpiąłem ale zastanawiam się czy nie mam uszkodzonego kontrolera w tym przypadku…
Macie jakieś pomysły?
zaktualizowałem wpis. Należy dodać w pliku config.txt wpis dtoverlay=w1-gpio,gpiopin=4
[…] Pojawił się ElektroPrzewodnik numer 55: [Arduino] Termometr DS18B20. W serii filmów autor w ciekawy sposób wprowadza początkujących użytkowników w świat elektroniki i elektryczności, opisując działania urządzeń oraz budując przykładowe układy. Tym razem został przedstawiony cyfrowy termometr Dallas od firmy Maxim – DS18B20. Mieliśmy okazję opisać dokładnie obsługę termometrów DS18B20+ dla Raspberry Pi. […]
Dałoby radę naprawić zdjęcie schematu?
Hej. Poprawiłem obrazek. Przepraszamy za problem :-)
[…] Związku z tym że RPi się dosyć grzeje, a obudowa jest mała i szczelna zamontowałem wewnątrz termometr DS18B20. […]
[…] Związku z tym że RPi się dosyć grzeje, a obudowa jest mała i szczelna zamontowałem wewnątrz termometr DS18B20. […]
można określić który z czujników jest podpięty do konkretnego gpio?
cześć, czy ktoś może napisać jak podpiąć tak skonfigurowany czujnik do owfs i do openhaba. Wszyscy używają jakiś adapterów, przejściówek, a nikt nie pisze o bezpośrednim podłączeniu do gpio
czy wiadomo coś na temat dokładności wskazań temperatury przez te czujniki? Są różne rodzaje, analogowe cyfrowe…który lepszy?