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.
[…] https://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?
witam, mój problem polega na tym, że po podłączeniu więcej niż jednego czujnika, po od kilkudziesięciu minut do kilku godzin malina przestaje gadać z czujnikami (urządzenia znikają – jak by zostały odłączone …), po restarcie maliny wszystko wraca do normy i znowu po kolejnych minutach / godzinach to samo. Ma ktoś pomysł co może być nie tak?
Próbowałem już:
– innych GPIO,
– innych przewodów (również krótszych),
– podłączenia 1 czujnika po najdłuższym z przewodów – było OK (co wyklucza powyższe – jakość / długość przewodów),
– różnych kombinacji podpięcia czujników (3 z 3, 2 z 3, 2 z 3 w innej konfiguracji),
Walczę z tematem już kilka tygodni, i zastanawiam się czy nie powinienem zareklamować maliny…