Od dłuższego czasu nosiłem się z zamiarem zrobienia własnego panelu, wyświetlającego wybrane parametry pracy komputera, który z powodzeniem mógłbym zainstalować w zatoce 5.25". Miał do tego posłużyć wcześniej zakupiony 1.8" wyświetlacz HY-1.8 SPI oraz Arduino UNO R3, odbierający dane poprzez gniazdo USB. Taki panel może okazać się również pomocny w monitorowaniu pracy domowego serwera, bez konieczności włączania monitora.
Taki był zamiar - przynajmniej do momentu, gdy musiałem oddać swój sypialniany zegarek. W finale postanowiłem więc opracować dwa tryby: nocny oraz pomiarowy.
Funkcja zegara oraz pomiaru temperatury i wilgotności
W pierwszej kolejności postanowiłem rozbudować swój Monitino o pracę w trybie nocnym, czyli prezentację wartości typowych dla zegarów: godzina, data, sekundnik, temperatura oraz wilgotność panująca w pomieszczeniu. W prawym dolnym rogu znajduje się natomiast ikona prezentująca, czy układ odbiera dane pomiarowe z USB (serduszko lub rozłączona wtyczka).
Arduino sam w sobie nie posiada zegara RTC, dlatego wykorzystałem do tego celu dość popularny układ DS1307 z możliwością podtrzymywania bateryjnego w przypadku całkowitego braku zasilania. Do pomiaru temperatury i wilgotności wybrałem banalny czujnik DHT11 komunikujący się z Arduino za pomocą interfejsu 1-Wire.
Tryb pracy monitorowania systemu
Drugi typ pracy to prezentacja podstawowych wartości systemowych takich jak: obciążenie procesora, pomiar temperatury, prędkości obrotowej wentylatora CPU oraz stan zajętości wybranych partycji dysku. Tryb ten aktywowany jest w momencie, kiedy przesyłane są dane z USB. Kiedy komputer jest wyłączony lub kiedy dane nie napływają w czasie dłuższym niż 5 sekund - ekran zostaje przełączony w tryb nocny.
W dolnej części ekranu znajdują się dwie zielone ikony symbolizujące ogólny stan wolnej przestrzeni na dysku i wysokiej temperatury procesora - kiedy przekroczy ona 65 stopni Celsjusza, zacznie migać symbol płomienia.
Aby układ działał również po wyłączeniu komputera, należy upewnić się czy wybrane przez nas gniazdo USB dostarcza nam wtedy zasilanie. Większość płyt głównych tak się właśnie zachowuje lub pozwala na ustawienie odpowiednich opcji w BIOS - np.: Wake on USB Events. Osobiście wykorzystałem do tego drugi kanał USB w gnieździe bezpośrednio na płycie głównej. Co ciekawe, nie wszystkie porty USB zapewniają nam napięcie po wyłączeniu komputera.
Podświetlanie diodami RGB
Do układu również podłączone są dwie diody RGB zmieniające kolor, w zależności od procentowego stopnia obciążenia procesora. Każdy kolor świecenia diod LED odpowiada określonemu przedziałowi procentowemu. Zdecydowałem się na diody RGB z jednego względu - posiadam obudowę, która fabrycznie posiada podświetlanie plastikowych pasków w błękitnej barwie - problem w tym, że jest to jeden kolor i nie mam na niego żadnego wpływu. Owe dwie diody RGB wykorzystam właśnie do ich wymiany i kolorowego podświetlania obudowy.
Podświetlanie obudowy w zależności od stopnia obciążenia procesora
Jako, że komputer jest włączony przeważnie przez 24h/dobę i nie każdy musi lubować się w świecących diodach po nocy, można przełączyć się w tryb nocny za pomocą przycisku S1 (patrz schemat), w którym domyślnie diody są wygaszone, a podświetlanie ekranu TFT zmniejszone jest o połowę, pozwalając bezproblemowy odczyt godziny.
Skrypt PHP
Dane wysyłane są za pomocą prostego skryptu napisanego w PHP uruchomionego w trybie CLI. Ważne jest, aby wybrać odpowiednie urządzenie, które w moim przypadku znajduje się pod /dev/ttyACM0. Należy zwrócić również uwagę na punkty montowania partycji oraz wybór odpowiednich dla nas czujników sensorsd.
- #!/usr/bin/php
- <?php
- require_once('monitino.class.php');
- require_once('php_serial.class.php');
- $simpleInfo = new Monitino();
- // Setup connection
- $serial = new phpSerial();
- $serial->deviceSet("/dev/ttyACM0");
- $serial->confBaudRate(57600);
- $serial->confParity("none");
- $serial->confCharacterLength(8);
- $serial->confStopBits(1);
- $serial->deviceOpen();
- while(true)
- {
- // Get CPU usage
- // Get sensorsd values
- // Get disk usage
- // Preapre message
- $message = "cpus:".$cpus."|cput:".$cput."|cpuf:".$cpuf;
- $message.= "|syst:".$syst."|sysh:".$sysh;
- // Send to Arduino
- $serial->sendMessage($message."n");
- echo $message."n";
- }
- ?>
Jak to działa?
Układ połączeń
Warto tutaj zwrócić uwagę na kondensator C2, dzięki któremu Arduino nie będzie się resetować w przypadku otworzenia portu USB. Dodatkowa zworka pozwoli nam na łatwe wyłączenie tej opcji w momencie, kiedy będziemy chcieli zaprogramować Arduino.
Lista cześci
- 1x Arduino UNO R3,
- 1x Wyświetlacz HY-1.8 SPI,
- 1x Zegar RTC DS1307,
- 1x Kwarc 32.768 kHz,
- 1x Bateria 3V CR2032,
- 1x Czujnik wilgotności i temperatury DHT11,
- 1x Bufor CD4050BE,
- 1x Kondensator 10uF,
- 1x Kondensator 1uF,
- 2x Rezystor 10kΩ,
- 2x Rezystor 2.2kΩ,
- 1x Rezystor 100Ω
- 3x Rezystor 56Ω,
Lista bibliotek
Uwagi końcowe
Podczas pierwszego programowania układu, należy ustawić zegar DS1307 poprzez definicję zmiennej #define RTCSet true. Kiedy zegar zostanie ustawiony, programujemy układ ponownie z ustawieniem #define RTCSet fasle.
Należy pamiętać, że przed programowaniem układu należy usunąć zworkę JP1.
W niedługim czasie będę zamawiał dwustronne płytki PCB w formacie shieldów do Arduino UNO R3 - jeśli jesteś zainteresowany proszę o kontakt. Im więcej płytek, tym będzie taniej za sztukę.
Strona projektu: https://www.jarzebski.pl/projekty/monitino-uno.html
Wpisy na podobny temat
-
24 May 2013 »
Dalsze zabawy z Monitino UNO
Arduino
-
28 Jun 2013 »
Monitino UNO 1.8 - prawie na mecie
Arduino
-
27 Jul 2013 »
Monitino UNO - montaż i urchomienie
Hardware
Arduino