Skocz do zawartości

Termo Malinka - projekt termometru


Bartt

Pomocna odpowiedź

 

Ostatnio wpadłem na pomysł zbudowania termometru "bazującego" na Raspberry Pi. Nie zamierzałem stworzyć takiego "typowego" termometru tylko coś więcej !

Założenia

Postawiłem sobie kilka założeń:

  1. możliwość odczytu obecnej temperatury za pomącą pierścienia led 
  2. możliwość pracy na baterii
  3. możliwość odczytu temperatury na innym urządzeniu

Połączenie wszystkich elementów

Pierwszym krokiem było złożenie wszystkiego w całość co szczerze mówiąc było najprostszym etapem. 

  1. Podpiąłem termometr do malinki (jak to zrobić to chyba oczywiste więc nie będę szczegółowo tego tłumaczył)
    • Jedyne co ważne to to żeby termometr był podpięty na wystarczająco długim przewodzie, jeśli chcemy żeby termometr znajdował się daleko od malinki (np. na dworze)
  2. Trochę trudniej było w przypadku ledów, ale po paru chwilach podłączyłem je do malinki w ten sposób:
    • IN - GPIO18   (istnieje możliwość podpięcia tego elementu pod inny port GPIO, ważne jest żeby później wpisać w napisanym przez nasz skrypcie pod który podłączyliśmy) 
    • VCC - wyjście 5V malinki (producent nie zaleca zasilania pierścienia z malinki w przypadku większych ilości ledów jednak w przypadku dwunastu nie powinno nic się stać)
    • GND - GND
    • Pierścień posiada jeszcze trzy wyjścia ale nie będą mi potrzebne (służą do łączenia większej ilości takich pierścieni) 
    • IMG_20190129_122259.thumb.jpg.d55d1fdf98c68b247504c8a40c9e2b97.jpg
  3. Jako zasilanie wewnętrzne wykorzystałem starty power bank Nokii. Raspberry PI pobiera bardzo mało prądu więc nie potrzebujemy jakiejś dużej pojemności.

 

IMG_20190129_120118_HDR.thumb.jpg.59520d9057bd92059054156113991ae5.jpg

Całość po złożeniu wyglądała miej więcej tak

Instalowanie Sterowników

Największym wyzwaniem okazał się jednak Software. Sama instalacja wszelkich sterowników i bibliotek już na początku zajęła dość sporo czasu a później czekało mnie jeszcze napisanie programu i stworzenie witryny www co też było dosyć czasochłonne. Po aktualizacji oprogramowania najpierw zrobiłem:

  1. Pierwszym etapem było zainstalowanie sterowników do termometru komendą:
    • sudo pip3 install w1thermsensor

       

  2. Następnie zainstalowałem  Circut Pythona oraz biblioteki do ledów.
    • pip3 install adafruit-blinka
      sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel

       

  3. Po sprawdzeniu czy wszystko działa prawidłowo zabrałem się za pisanie kodu

 

Tworzenie Oprogramowania

  1. Pierwszym krokiem w tym kierunku było stworzenie programu który odpalał odpowiednie piksele jeśli temperatura była wyższa niż zakładana, w przeciwnym wypadku poszczególne ledy były wyłączane
    import board
    import neopixel
    import time
    from w1thermsensor import W1ThermSensor 
    
    
    
    pixels = neopixel.NeoPixel(board.D18, 12)
    temp = W1ThermSensor()
      
    while times != 40:
        dtemp = temp.get_temperature()
        print(dtemp)
        time.sleep(4)
        times += 1
        if dtemp >=18:
            pixels[2] = (0,0,10)
        else:
            pixels[2] = (0,0,0)
        if dtemp >= 19:
            pixels[3] = (2,2,8)
        else:
            pixels[3] = (0,0,0)
        if dtemp >= 20:
            pixels[4] = (4,4,6)
        else:
            pixels[4] = (0,0,0)
        if dtemp >= 21:
            pixels[5] = (6,6,4)
        else:
            pixels[5] = (0,0,0)
        if dtemp >= 22:
            pixels[6] = (8,8,2)
        else:
            pixels[6] = (0,0,0)
        if dtemp >= 23:
            pixels[7] = (10,10,0)
        else:
            pixels[7] = (0,0,0)
        if dtemp >= 24:
            pixels[8] = (10,8,0)
        else:
            pixels[8] = (0,0,0)
        if dtemp >= 25:
            pixels[9] = (10,6,0)
        else:
            pixels[9] = (0,0,0)
        if dtemp >= 26:
            pixels[10] = (10,4,0)
        else:
            pixels[10] = (0,0,0)
        if dtemp >= 27:
            pixels[11] = (10,2,0)
        else:
            pixels[11] = (0,0,0)
        if dtemp >= 28:
            pixels[0] = (10,0,0)
        else:
            pixels[0] = (0,0,0)
    time.sleep(5)
    print("end")
    pixels.fill((0, 0, 0))
    • Na początku zaimportowałem potrzebne moduły
    • następnie zdefiniowałem liczbę pikseli oraz port GPIO
    • Kolejnym krokiem była pętla while która wykonywała 40 pomiarów co 4 sekundy 
    • Na końcu "zgasiłem" wszystkie piksele, gdybym tego nie zrobił nadal pozostawały by włączone
  2. Następnie zabrałem się za postawienie serwera na mojej malince
    • sudo apt install apache2 -y

       

  3. Oraz zainstalowałem potrzebne w tym wypadku PHP
    • sudo apt install php -y

       

  4. Największym problemem było dla mnie pokazywanie temperatury w przeglądarce a zrobiłem to w bardzo prosty sposób:
    • Dodałem do kodu w Pythonie fragment który zapisuje w pliku obecną temperaturę    
    • plik = open("dane.txt", "w")
      dtemp=str(dtemp)
      plik.write(dtemp)
      plik.close
    •    Ważne było aby zamienić typ zmiennej przechowującej dane o temperaturze na Str. Ten element kodu musi znajdować się na samym końcu pętli.Następnie stworzyłem stronę, gdzie na końcu dodałem polecenie odczytania tego pliku. W innym wypadku program wyrzuci błąd.
    • Wybrałem "W" jako tryb otwierania pliku gdyż wraz z otwarciem kasuje on całą zawartość pliku co jest konieczne w tej sytuacji (dodatkowo jeśli plik nie istnieje skrypt utworzy go)
  5. Ostatnim już krokiem jest stworzenie witryny www.
    • Ja postawiłem na pełną prostotę żeby nie obciążać za bardzo malinki, oprócz tego skraca to proces wczytywania strony
    • na samym dole znajduje się fragment PHP który wczytuje zawartość pliku txt który zoistał wcześniej utworzony. Jeśli plik znajduje się w innym folderze trzeba podać dokładny adres tego pliku.
    • Dodałem tam jeszcze funkcją automatycznego odświeżania strony co pięć sekund, dzięki czemu nie musi tego robić użytkownik. 
    • <!DOCTYPE html>
      <html>
      	<head>
      	<meta charset="utf-8">
      		<title>Termometr</title>
      	<style>
      	#all
      	{margin-left: auto;
      	padding:0px;
      	margin-right: auto;}
      	
      	#gora
      	{ margin:0px;
      	text-align: center;
      	color: black;
      	padding: 10px; 
      	}
      	</style>
      	</head>
      		<body bgcolor= "white">
      
      			
      			<div id="all">
      				<div id="gora">
      					<h1>Termo Malinka</h1>
      				</div>
      					
      			
      			
      			</div>
      		<font size='24'>
      		
      		<?php
      			echo "Temperatura: ";
      			require_once('dane.txt');
      			echo " ℃";
      			header('refresh:5;');
      		?>
      		</font>
      		
      		</body>
      </html>

       

  6. Wszystko wstawiłem do folderu /var/www/html (zapisanie tam danych wymaga uprawnień roota)i  uruchomiłem skrypt pythona. 
  7. Ważne jest to żeby komputer na którym chcemy sprawdzić temperaturę był podłączony do tej samej sieci lokalnej co malinka. Istnieje też możliwość udostępnienia to każdemu użytkownikowi internetu ale nie widziałem takiej potrzeby.
    • IMG_20190129_111709_HDR.thumb.jpg.fd5dedfd91776dede3babeb188699f55.jpg
  8. Wszystko włożyłem do obudowy z drewna
  9. Efekt możecie zobaczyć poniżej  ⬇

 

IMG_20190131_115909.thumb.jpg.d47b670128fe61e42abb19fa58a7b777.jpgzrzut.thumb.jpg.2ddf2f2ff6932701dde13ca8bfcbf9d6.jpgIMG_20190131_120105.thumb.jpg.ec5bdcef9d1902e38e590541d383296e.jpg

 

Edytowano przez Bartt
zmiana obudowy
  • Lubię! 1
Link do komentarza
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Właśnie zaakceptowałem opis. Dziękuję za przedstawienie projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum. Zaznaczam jednak, że projekt ten jest na granicy naszej akcji rabatowej (głównie mam tu na myśli jakość obudowy), ale może kogoś to zainspiruje do wykonania bardziej trwałej wersji takiego termometru 😉

  • Lubię! 1
Link do komentarza
Share on other sites

Niby wszystko można zbudować na malince, ale po co od razu strzelać z armaty do komara?

Na taki projekt to nawet najprostrze arduino jest przerostem formy nad treścią.

Można to jednak potraktować bardziej jako naukę programowania malinki i okiełznania jej możliwości. Niemniej moim zdaniem, to o wiele za mało na Rasp pi Zero. Ja na tej maszynce w wersji W mam postawiony soft do kontroli frezarki CNC, wraz z działającym systemem, dostepem zdalnym przez VNC i wszystko działa stabilnie i z zadowalającą wydajnością...

Życzę kolejnych udanych projektów z wykorzystaniem już zdobytej wiedzy.

Pozdrawiam 🙂

Edytowano przez lukaszd82
  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.