Wodoodporny czujnik temperatury DS18B20

Internetowy termometr

Witajcie ! O ile dobrze pamiętam, jakoś przed początkiem ostatniej sesji zimowej, w ramach prokastrynacji, i niechęci do nauki na egzaminy postanowiłem zrobić coś fajnego. Jak pewnie cześć z was widziała na moim fanpage facebookowym, padło na internetowy termometr. O ile skonstruowałem go i on faktycznie działał, o tyle zwój kabli przechodzących przez całe mieszkanie i walający się po moim pokoju wydawał się dość mocno nieestetyczny. Postanowiłem więc odczekać chwilę do momentu, aż będę mieć fundusze na jakieś urządzenie, które pozwoli mi połączyć go z routerem bez kabla biegnącego przez środek mieszkania. Akurat tak się szczęśliwie złożyło, że rodzice rezygnowali akurat z usługi telewizji w Neostradzie, a u nas w domu była ona spięta przez urządzenie, które w ofercie TP widniało wtedy pod nazwą “Live Plug”. Jak to w takich sytuacjach bywa, przechwyciłem nieużywany sprzęt i wykorzystałem go do swoich celów. Powstanie tego zacnego urządzenia zostało zainspirowane artykułem Jakuba Furmana, a wynik działania przekształceń można obserwować tutaj.

Lista potrzebnych rzeczy

Zacznijmy od tego co najważniejsze, czyli od listy rzeczy, która będzie nam potrzebna:

  • Płytka prototypowa Arduino (w moim przypadku model Uno R3)
  • Płytka stykowa
  • Czujnik temperatury DS18B20
  • Mikroprocesor (w moim przypadku ATmega model 328-PU)
  • Moduł Ethernet ENC28J60
  • Rezystor 4,7 k
  • Kawałek kabla trójżyłowego o małym przekroju (tak by móc wystawić czujnik na zewnątrz)
  • Goldpiny x 3
  • Stara taśma IDE (np. od stacji dyskietek), tak aby móc połączyć moduł Ethernet z Arduino/ Atmegą
  • Serwera  www z obsługą: php, mysql, crontab

Większość tych rzeczy można kupić na przykład na allegro. Od siebie mogę tylko dorzucić uwagę, że warto wybrać czujnik temperatury,który będzie obudowany w kablu i wodoszczelny. Całość przedsięwzięcia (nie licząc arduino, kabelków do podłączenia i płytki stykowej) nie powinna przekroczyć 60zł.

Jeśli  chodzi natomiast, o wyświetlanie naszej temperatury  gdzieś na stronie www, należałoby jeszcze posiadać serwer do którego można podłączyć się przez ssh, z dostępem do crontab, oraz router, który będzie miał opcję współpracy z serwisem typu no-ip.org.

Schemat i podłączenie

Jeśli kupimy już wszystkie wymagane elementy, można zabrać się za ich podłączenie według tego schematu:

Schemat podłączenia

Następnie możemy przesłać na urządzenie kod, który umożliwi nam działanie termometra.

Szczególnie ważne są tutaj linijki 16 i 50, gdyż odpowiadają one za adres IP na którym będą widoczne odczytane dane. Zachęcam, aby ustawić go poza pulą serwera DHCP działającego na routerze. Jeśli wszystko działa, możemy przenieść kod na mikroprocesor, na przykład według tego poradnika:

Programowanie Atmega 328-PU

A następnie połączyć całość według schematu:

Schemat podłączenia

Właściwie na tą chwilę kończymy prace z częścią ‘namacalną’ naszego projektu. Wystarczy teraz wystawić czujnik za okno, podłączyć moduł pod router i sprawdzić,czy działa na adresie, który wcześniej wpisaliśmy w kod programu. Teraz czas na część 2, czyli udostępnianie wartości odczytanych z termometru w internecie.

Teraz,kiedy będziecie dobierać zasilanie, musicie wiedzieć, że moduł ethernet, według dokumentacji powinno się zasilać napięciem 3,3V. Ja takie zasilanie zastosowałem dla całego projektu, gdyż w przypadku zwiększenia napięcia moduł potrafi się grzać, zawieszać,czy w ogóle nie działać.

Po stronie serwera

Teraz musimy utworzyć sobie konto w serwisie no-ip.org i połączyć je ze swoim routerem (warto szukać opcji Dynamic DNS). Następnie logujemy się na serwer i  tworzymy sobie nową bazę danych (logujemy się na nią poprzez polecenie mysql, alternatywnie można też zalogować się do bazy np. z poziomu phpMyAdmin)  :

oraz skrypt, który będzie odpowiedzialny za pobieranie wartości i ich odświeżanie:

Teraz modyfikujemy zmienne w linijkach 3,9 i 15 (wpisujemy adres hosta, nazwę bazy danych i hasło, oraz nasz adres, który wybraliśmy sobie w serwisie no-ip.org). Skrypt zapisujemy z rozszerzeniem .php, i dodajemy do crontab-a poleceniem:

taką oto linijkę:

Na koniec potrzebujemy jeszcze tylko pliku index.php, który będzie odpowiedzialny za wyświetlenie wszystkich danych :

 Podsumowując

Jeśli wszystko poszło tak, jak trzeba powinniście mieć teraz przed oczami wynik działania z waszego termometru. Budowa takiego urządzenia nie jest faktycznie do końca prosta, dlatego jeśli coś wam nie poszło, czy jeśli ja gdzieś się pomyliłem – dajcie znać w komentarzach. Mnie osobiście podczas tworzenia artykułu zaciekawił brak wspracia przez fritzing dla części ENC28J60. Nigdzie w internecie nie mogłem jej znaleźć, dlatego też postanowiłem zrobić ją samemu (jest ona wyświetlana poprawnie tylko w opcji “breadboard”). Udostępniam ją do pobrania poniżej, tak samo jak i pliki źródłowe:

Ethernet ENC28j60 Fritzing Part Pliki źródłowe Artykuł bazowy

Sprawdź też

Java Odata Tutorial part 3

Hi ! Today we add producer class to our project. Lets start ! 🙂 Create …

  • Dariusz Dawidowski

    jestem pod wrażeniem tego projektu. U mnie zadziałał z małymi oporami ponieważ w linii :”float temp=-100, // wartość początkowa temperatury” powinien być średnik a nie przecinek. Robie podobny projekt ale bez serwera php wykorzystujc strone https://thingspeak.com .Efekt mojej strony testowej to http://www.dedik.hekko24.pl/sterowanie/ .Jesli chcesz podzielic sie doswiadczeniem i wiedza to odpisz derix_28@o2.pl