Schemat ideowy płytki podzielono na schematy poszczególnych bloków funkcjonalnych, które zostaną omówione oddzielnie.
Ze względu na zasilanie modułu napięciem +12 VDC z typowego zasilacza (w tym buforowego w razie aplikacji wymagającej podtrzymania zasilania) konieczne jest zapewnienie +5 V dla zasilania Raspberry Pi. W tym celu zastosowano przetwornicę obniżająca napięcie opartą o układ scalony ADP2302-50 (U40), której schemat ideowy zamieszczono na rysunku 1.
Wejście przetwornicy jest zabezpieczone przed przepięciami diodą D41. Dioda świecąca LD9 sygnalizuje doprowadzenie zasilania. Ze względu na wysoką częstotliwość kluczowania, istotny jest dobór elementów przetwornicy. Filtr wejściowy wykonano z użyciem kondensatorów o obniżonym ESR: CE40 (tantalowy) i C40 w obudowie 1812 z dielektrykiem X5R.
Podobne wymagania dotyczą filtru wyjściowego (kondensatory C42, C43), gdzie w miejsce typowego kondensatora elektrolitycznego, zastosowano nowoczesne kondensatory ceramiczne 22 mF/16 V z dielektrykiem X5R. Przetwornica jest w stanie zapewnić prąd 1,5...2 A wystarczający do zasilania Raspberry i typowych kart Wi-Fi.
Do monitorowania sygnałów cyfrowych zastosowano typowy układ separacji opartej o transoptor, filtr RC i bramkę Schmidta (rysunek 2). Układ sprzętowo eliminuje krótkie zakłócenia impulsowe ze styków mechanicznych. W szereg z diodą transoptora włączono diodę LED sygnalizującą obecność napięcia.
Do polaryzacji wejść można wykorzystać +12 V zasilające moduł lub napięcie zewnętrzne w wypadku wymaganej pełnej separacji. Wejścia przeznaczone są do sterowania w standardzie NPN. Sygnały wejściowe podzielone są na dwie grupy po cztery wejścia, umożliwia to sterowanie z dwóch osobnych potencjałów z zachowaniem izolacji.
Wyjścia cyfrowe (rysunek 3) zrealizowano w oparciu o przekaźniki. Cztery grupy składające się z przekaźnika zwiernego i przełącznego zapewniają elastyczność połączeń. Cewki przekaźników sterowane są z wyprowadzeń GPIO poprzez bufor U1 (ULN2803) zapewniający odpowiednią wydajność prądową.
Moduł wyposażono w interfejs szeregowy w standardzie RS232 oparty o układ MAX3232. Schemat interfejsu zamieszczono na rysunku 4.
Układ uzupełnia opcjonalny zegar czasu rzeczywistego DS1338 z podtrzymaniem bateryjnym (rysunek 5). Przyporządkowanie wykorzystanych przez HABoard wyprowadzeń Raspberry Pi przedstawia rysunek 6.
Montaż
Układ zmontowany jest na dwustronnej płytce drukowanej - jej schemat montażowy pokazano na rysunku 7. Ze względu na specyfikę zastosowań zastosowałem odmienną konstrukcję mechaniczną. Komputerek Raspberry Pi standardowo jest uzupełniany nakładkami rozszerzającymi jego funkcje.
W wypadku sterowania odbiornikami zasilanymi z napięcia 230 V AC lub większej liczby wyprowadzeń, taka konstrukcja jest niestabilna mechanicznie, a przez to niebezpieczna dla użytkownika. W zastosowanym rozwiązaniu, moduł HAB jest stabilną płytą bazową, mocowaną w obudowie za pomocą 8 śrub M3, a płytka Raspberry Pi jest montowana jako moduł poprzez złącze pośrednie GPIO.
Stabilność mocowania zapewniają 4 tuleje M2,5×17. Rolę łącza pośredniego pełnią dwa złącza precyzyjne kielichowe typu ZL307-2×20 o wysokości 7 mm, montowane jedno na drugim. Przy montażu w rozdzielnicy elektrycznej na szynie TS35 płytkę HAB można zamocować przy wykorzystaniu uchwytów Weidmuller typu RS100. Budowa mechaniczna zapewnia dostęp do wszystkich złącz Raspberry Pi. Wszystkie zastosowane złącza sygnałowe są rozłączane.
Wykaz elementówRezystory: (SMD 0805) Kondensatory: Półprzewodniki: Inne: |
Uruchomienie
Moduł nie wymaga uruchamiania. Należy jedynie skonfigurować system do obsługi poszczególnych peryferiów. W celu wykorzystania RTC konieczne jest dodanie obsługi magistrali I2C. W tym celu sprawdzamy czy w pliku sudo nano /etc/modules znajduje się definicja i2c-dev. Jeżeli nie, to musimy ją dodać, zapisać zmiany i zrestartować PI. Po uruchomieniu należy pobrać narzędzia odpowiadające za obsługę I2C:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
Po zainstalowaniu, w pierwszej kolejności sprawdzamy w konsoli prawidłowe działanie interfejsu I2C za pomocą polecenia sudo i2cdetect -y 1. Powinno pojawić się urządzenie pod adresem 0x68 - jest to nasz RTC (DS1338). Następnie ładujemy moduł zegara:
sudo modprobe rtc-ds1307
sudo bash echo ds1307 0x68 > /
sys/class/i2c-adapter/i2c-1/
new_device
Ustawienia czasu i daty systemowej dokonujemy poleceniem sudo date. Zapis czasu systemowego do RTC wykonujemy poleceniem sudo hwclock -w. Sprawdzenie poprawności zapisu sudo hwclock -r. Aby czas systemowy Pipo uruchomieniu Pi był aktualizowany z RTC automatycznie musimy w pliku sudo nano /etc/modules dodać linię rtc-ds1307, a w pliku sudo nano /etc/rc.local dodać linie:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
Należy je umieścić przed poleceniem exit 0. Przy kolejnym uruchomieniu PI, czas zostanie pobrany z RTC bez synchronizacji z zegarem sieciowym.
W korzystaniu z komunikacji RS232 musimy uzyskać dostęp do portu szeregowego, który jest domyślnie zablokowany przez terminal SSH. W tym celu należy edytować plik cmdline.txt $ sudo nano /boot/cmdline.txt i usunąć wpisy dotyczące konsoli console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 oraz edytować plik initab $ sudo nano /etc/initab komentując # w nim linię T0:23respawn:/sbin/getty -L ttyAMA0 115200 vt100. Po wprowadzeniu zmian, należy zrestartować Raspberry.
Dla sprawdzenia działania modułu można wykorzystać WebIOPI. W tym celu należy pobrać oprogramoeanie spod adresu http://goo.gl/CTVEnh i zainstalować je:
$ tar xvzf WebIOPi-x.y.z.tar.gz
$ cd WebIOPi-x.y.z
$ sudo ./setup.sh
Aktualna wersja 0.7.1 nie ma jeszcze obsługi rozszerzonego GPIO (plus), należy więc wykonać pewne modyfikacje plików źródłowych. W pliku ./python/utils/version.py file należy edytować linię 11 i dopisać do niej wartości wyróżnione pogrubieniem:
_MAPPING[2] = ["V33", "V50", 2, "V50", 3, "GND", 4, 14, "GND", 15, 17, 18, 27, "GND", 22, 23, "V33", 24, 10, "GND", 9, 25, 11, 8, "GND", 7, "DNC", "DNC" , 5, "GND", 6, 12, 13, "GND", 19, 16, 26, 20, "GND", 21]
Należy również edytować plik ./htdocs/webiopi.js:
Odszukać linię 76: this.PINS = Array(27); zamienić ją na this.PINS = Array(41);.
Linię 560 for (var pin=1; pin<=26; pin++) zamienić na for (var pin=1; pin<=40; pin++).
Plik należy skompilować zmiany poleceniem sudo ./setup.sh skip-apt. Po kompilacji należy skonfigurować Webiopi do obsługi portu szeregowego. W tym celu w pliku /etc/webiopi/config w sekcji DEVICE należy dodać wpis serial = Serial device:ttyAMA0 baudrate:9600 lub usunąć komentarz # jeżeli wpis istnieje, zapisać zmiany w pliku i uruchomić serwer Webioipi sudo /etc/init.d/webiopi start.
Po przejściu do przeglądarki internetowej pod adres http://localhost:8000/ (użytkownik: webiopi, hasło: raspberry) w linku GPIO-header powinna być widoczna zaktualizowana lista GPIO (rysunek 8) oraz po wybraniu linku Serial Monitor, możliwe jest sprawdzenie działania portu szeregowego rysunek 9.
Elastyczność Webiopi umożliwia wykorzystanie go w prostych aplikacjach domowej automatyki poprzez modyfikację skryptów w dołączonych przykładach, sposoby wykorzystania opisane są na stronie Wiki projektu oraz na forum.
Adam Tatuś, EP