HABoard - moduł automatyki domowej dla RPi+

HABoard - moduł automatyki domowej dla RPi+
Pobierz PDF Download icon

Moduł "automatyki domowej" dla Raspberry Pi+. Opisywany projekt ułatwia zastoswanie Raspberry Pi+ w systemach automatyki domowej. Zawiera zasilacz oraz drivery wejść/wyjść, które konwertują poziom napięcia wejściowego na bezpieczny dla naszego mikrokomputera oraz umożliwiają mu sterowanie dołączonymi urządzeniami. Rekomendacje: płytka przyda się wszystkim, którzy planują zastosowanie Raspberry Pi do sterowania dołączonymi urządzeniami.

Rysunek 1. Schemat zasilacza +5 V

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.

Rysunek 2. Schemat wejść cyfrowych

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.

Rysunek 3. Schemat wyjść cyfrowych

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ż

Rysunek 4. Schemat interfejsu RS232

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ów

Rezystory: (SMD 0805)
R1...R9, R11, R13, R15, R17, R19, R21, R23, R25: 2,2 kΩ
R10, R12, R14, R16, R18, R20, R22, R24: 10 kΩ
R40: 100 kΩ
RP10, RP11: 220 Ω (CRA06S08 rezystor PACK 4×)

Kondensatory:
C1, C18, C19, C30, C41, C50...C54: 100 nF (SMD 0805, X5R, 25 V)
C10...C17: 1 nF (SMD 0805, X5R, 25 V)
C40: 0,1 mF (SMD 1812, X5R, 50 V)
C42, C43: 22 mF (SMD 1206, X5R, 16 V)
CE40: 10 mF/35 V (SMD "C")

Półprzewodniki:
D40: SK33 (dioda Schottky)
D41: P6SMB16A (transil 16 V)
LD1...LD17: dioda LED, SMD, zielona
IS10...IS17: LTV357
U1: ULN2803 (SO18W)
U10, U11: HC132 (SO14)
U30: DS1338Z (SO8)
U40: ADP2302 (SO8TP)
U50: MAX3232 (SO16)

Inne:
BAT: bateria litowa CR1220 z podstawką do druku KEYS3000
GPIO: złącze kielichowe 7 mm, 2×20 pin - 2 szt.
IN14, IN58, OUT12, OUT34, OUT56, OUT78: złącze MC5 rozłączane, proste, kompletne, 5×5 mm
L40: 6,8 mH (dławik SMD, SDR1307, 6,8 V)
PWR: złącze MC5 rozłączane, proste, kompletne, 2×5 mm
RL1, RL3, RL5, RL7: RM96P (przekaźnik, styki przełączne, 12 VDC)
RL2, RL4, RL6, RL8: RM96Z (przekaźnik, styki zwierne, 12 VDC)
RS232: złącze MC5, rozłączane, proste, kompletne, 3×5 mm
XT: kwarc 32768 kHz (SMD)

Uruchomienie

Rysunek 5. Schemat zegara RTC

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

Rysunek 6. Przyporządkowanie GPIO

Rysunek 7. Schemat montażowy płytki automatyki dla Raspberry Pipo

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

Rysunek 8. Zaktualizowana lista GPIO

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++).

Rysunek 9. Aktywny port szeregowy

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

Artykuł ukazał się w
Październik 2015
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio październik 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje wrzesień 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich wrzesień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów