Moduły rozszerzeń dla Raspberry Pi. cz. 4

Moduły rozszerzeń dla Raspberry Pi. cz. 4
Pobierz PDF Download icon
Komputerek Raspberry Pi staje się coraz popularny, zakres jego aplikacji rośnie niemal w tempie, geometrycznym. Oprócz typowych funkcji multimedialnych coraz częściej budowane są różne aplikacje sterujące, między innymi do zastosowania w automatyce domowej. Dla ułatwienia ich wykonywania opracowano szereg modułów rozszerzeń. Również my mamy propozycję dla użytkowników Raspberry Pi. Rekomendacje: płytki rozszerzają możliwości aplikacji Raspberry Pi, ułatwiają jego zastosowanie w układach sterujących.

RaspbPI_LCD. Płytka interfejsu użytkownika

Rysunek 1. Schemat ideowy modułu RaspPI_LCD

AVT-5431 Podstawowe informacje:

  • Napięcie zasilania 5 V DC.
  • Wyświetlacz 2×16 znaków.
  • Klawiatura z 5 przyciskami.
  • Wbudowany zegar RTC.
  • Kompatybilny z RaspberryPI ver. 2.

Przedstawiona płytka umożliwia rozszerzenie funkcjonalności GPIO Raspberry PI o możliwość pokazywania komunikatów na wyświetlaczu LCD zgodnym z HD44780, pięcioprzyciskową klawiaturę, zegar czasu rzeczywistego RTC oraz wyprowadzenie magistrali I²C i interfejsu szeregowego.

Schemat płytki rozszerzeń RaspPI_LCD pokazano na rysunku 1. Jest ona kompatybilna z Raspberry Pi Rev2 (512 MB) o rozmieszczeniu wyprowadzeń GPIO pokazanym w tabeli 1.

Rysunek 2. Schemat montażowy modułu RaspPI_LCD

Jako wyświetlacz zastosowano tani moduł alfanumerycznego wyświetlacza LCD o rozdzielczości 16×2 znaki wykonany w technologii COG, co pozwala zmniejszyć wymiary płytki. Wyświetlacz LCD jest zasilany z napięcia +5 V. Jest sterowany interfejsem 4-bitowym tylko w trybie zapisu. Co prawda wyświetlacz jest zasilany z 5 V, ale akceptuje sygnały sterujące o poziomie 3,3 V upraszczając interfejs. Potencjometr RV1 umożliwia ustawienie kontrastu. Płytkę wyposażono w 5-przyciskową klawiaturę (SW1...SW5). Rezystory ograniczają prąd w wypadku pomyłkowego wysterowania GPIO w trybie wyjścia i zwarciu któregoś z przycisków. Na płytce zamontowano również zegar czasu rzeczywistego DS1307 lub DS1338-33 (U2). Układ współpracuje z podtrzymująca bateria litowa typu CR1220 i typowym kwarcem zegarkowym. Zwora RTC umożliwia wybór napięcia zasilania U2 pomiędzy 5 V dla DS1307 lub 3,3 V dla zgodnego DS1338-33.

Tabela 1. Przyporządkowanie sygnałów GPIO1 – P1 (kolorem szarym zaznaczono wyprowadzenia używane przez RaspbPI_LCD)

Dioda PW sygnalizuje załączenie zasilania, kondensatory C1...C3 filtrują zasilanie, przycisk RST umożliwia restart Raspberry. Dodatkowo, płytka jest wyposażona w złącza rozszerzeń I²C i S3V umożliwiające wyprowadzenie zgodne z Arduino Bricks magistrali I²C i interfejsu szeregowego Raspberry PI. Uwaga! Sygnały GPIO mają napięcie 3,3 V. Doprowadzenie wyższego napięcia może spowodować uszkodzenie GPIO.

Schemat montażowy RaspPI_ LCD pokazano na rysunku 2. Montaż jest typowy i nie wymaga opisu. Aby zapewnić stabilność mechaniczną i odciążyć delikatne wyprowadzenia LCD, przed przylutowaniem warto przykleić go do płytki kawałkiem samoprzylepnej, piankowej taśmy dwustronnej.

Uruchomienie układu wymaga skonfigurowania RaspberryPI. Należy sprawdzić czy mamy aktualną wersję oprogramowania i wykonać ewentualną aktualizację do najnowszej wersji. W celu obsługi RTC jest konieczne dodanie obsługi interfejsu I²C. 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ę I²C: 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 I²C:
sudo i2cdetect -y 1
Powinno pojawić się urządzenie pod adresem 0x68, jest to nasz RTC – DS1307. 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, a sprawdzenie poprawności zapisu sudo hwclock –r. Aby po uruchomieniu PI czas systemowy był automatycznie aktualizowany z RTC musimy dodać w pliku sudo nano /etc/modules linię
rtc-ds1307 i w pliku sudo nano /etc/rc.local
dodać linie:
echo ds1307 0x68 > /sys/class/i2c-adapter/
i2c-1/new_device
sudo hwclock –s
przed poleceniem exit 0. Przy kolejnym uruchomieniu PI, czas zostanie pobrany z RTC bez synchronizacji z zegarem sieciowym.

Obsługę klawiatury można sprawdzić tak jak w opisie wcześniejszych modułów z WebIOPI. Opis obsługi wyświetlacza zależy od preferowanego języka Python/C lub WiringPI. Dokładne opisy można znaleźć w sieci na Github oraz stronach poświęconych PI np. http://goo.gl/PdPGlS lub http:// goo.gl/ZLCrFS.

Wykaz elementów

Rezystory:
R1: 2,2 kΩ (SMD 0805)
R2...R6: 330 Ω (SMD 0805)
RV1: 10 kΩ

Kondensatory:
C1, C3: 100 nF (SMD 0805)
C2: 10 µF (SMD 0805)

Półprzewodniki:
U2: DS1307 (SO8)

Inne:
BAT: bateria CR1220 z podstawką KEYS3000
GPIO: złącze żeńskie IDC26
I²C, S3V: złącze szpilkowe SIP4 2,54 mm
LCD: wyświetlacz LCD 2×16 np. COG LCDAC-C1602A-YGN NO/-E6 PBF
LD: dioda LED 3 mm
RES: złącze żeńskie SIP2
SW1...SW5, RST: mikroprzycisk 6×3 mm
XT: 32768 kHz (kwarc zegarkowy)

RaspbPI_Relay. Płytka przekaźników

Rysunek 3. Schemat ideowy RaspPI_Relay

AVT-5432 Podstawowe informacje:

  • Zasilanie 5 V DC.
  • 4 przekaźniki, złącza śrubowe.
  • Napięcie przełączane do 24 V DC.
  • Kompatybilna z RaspberryPI ver. 2.

Płytka umożliwia rozszerzenie funkcjonalności GPIO Raspberry PI o dodatkowe dwa wyjścia przekaźnikowe i cztery wejścia cyfrowe z optoizolacją. Idealnie nadaje się do małego sterowania-monitorowania poprzez WWW lub dla układów domowej automatyki.

Płytka jest kompatybilna z Raspberry Pi Rev2. o przyporządkowaniu sygnałów GPIO- -P1 zamieszczonym w tabeli 1.

Schemat ideowy płytki z przekaźnikami pokazano na rysunku 2. Sygnały wejściowe są doprowadzone do złącza IN, wejścia współpracują z sygnałami czujników w konwencji NPN, które dla poprawnej pracy wymagają zasilania 18...32 V (VCOM). Jeżeli jest konieczne uzyskanie innego zakresu napięcia sterującego, wystarczy zmienić wartość rezystorów ograniczających prąd dla zapewnienia ok. 10 mA dla diod LED transoptorów. Aktywne wejście sygnalizuje poziom świeceniem odpowiedniej diody LED.

Elementy RC na wejściu bramki NAND z wejściem Schmidta, odpowiadają za odfiltrowanie zakłóceń sygnałów doprowadzonych do GPIO. Przekaźniki sygnałów wyjściowych są sterowane są poprzez klucze tranzystorowe Q1...Q2. Diody LD1...LD2 sygnalizują zasilanie cewki. Styki przekaźników wyprowadzone są na złącze OUT. Uwaga! Układ i współpracujące RaspberryPI nie są przystosowane do napięć sieci 230 V AC. Ze względu na bezpieczeństwo, do sterowania układów zewnętrznych zaleca się napięcie bezpieczne o wartości nieprzekraczającej 24 V AC/DC.

Układ uzupełnia przycisk RES umożliwiający restart RaspberyPI. Dodatkowo, na złącza SIP wyprowadzone są sygnały magistrali I²C i interfejsu szeregowego dla zewnętrznych modułów rozszerzeń z wyprowadzeniami zgodnymi z Arduino oraz modułami I²C opisywanymi w Elektronice Praktycznej. Sygnały są zgodne z logiką napięciową 3,3 V.

Schemat montażowy modułu RaspPI_ Relay pokazano na rysunku 4. Montaż jest typowy i nie wymaga opisu. Dla zapewnienia stabilności mechanicznej zaleca się zamocowanie płytki z przekaźnikami do RaspberryPI za pomocą tulejki dystansowej M3×10(12), zapobiega to wyłamywaniu złącza GPIO podczas manipulacji przy złączach IN/OUT.

Rysunek 4. Schemat montażowy RaspPI_Relay

Rysunek 5. Obsługa modułu przekaźników poprzez WebIOPi

Rysunek 6. Efekt działania skryptu z listingu 1

Dla szybkiego sprawdzenia modułu polecam użycie WebIOPi (http://goo.gl/ y2Wty5). Oprogramowanie pobiera i instaluje się za pomocą poleceń:
wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz
tar xvzf WebIOPi-0.6.0.tar.gz
cd WebIOPi-0.6.0
sudo ./setup.sh

Listing 1. Skrypt relay.py do sterowania przekaźnikami

Uruchomienie serwera sudo /etc/ init.d/webiopi start. Po przejściu do przeglądarki internetowej pod adres http:// localhost:8000/ (użytkownik: webiopi, hasło: raspberry) lub z innego komputera http://:8000/, wybraniu linku GPIO Header, ustawieniu trybu pracy pinów GPIO 17, 18, 22, 27 jako wejścia, a GPIO 24, 25 jako wyjścia, powinny być widoczne odczyty z wejść (rysunek 5) oraz powinna być możliwa zmiana stanu wyjść.

Moduł można wykorzystać znacznie ciekawiej korzystając z możliwości uruchamiania skryptów języka Python przez webiopi. W tym celu jest konieczne przygotowanie skryptu relay.py (listing 1). Realizuje on typowe w automatyce sterowanie stabilne SR cewkami przekaźników za pomocą dwóch chwilowych przycisków START i STOP. Wejścia DI1 i DI3 załączają przekaźniki REL1, REL2, wejścia DI2 i DI4 wyłączają. Stan wejść i przekaźników jest prezentowany za pomocą konsoli. W wypadku uruchamiania skryptu nie jest wymagane wcześniejsze uruchomienie serwera webiopi, zostanie on każdorazowo uruchomiony automatycznie.

W celu uruchomienia skryptu relay.py w terminalu wpisujemy komendę $ sudo webiopi –s relay.py. Uruchomiony skrypt można przerwać klawiszami CTRL+C. Efekt działania skryptu pokazano na rysunku 6. Sprawdzony, uruchomiony i oprogramowany moduł gotowy jest do przejęcia kontroli nad światem lub przynajmniej internetowym ekspresem do kawy...

Tabela 1. Przyporządkowanie sygnałów GPIO1 - P1 (kolorem szarym zaznaczono wyprowadzenia używane przez RaspbPI_Relay)

Wykaz elementów

Rezystory: (SMD 1206)
R2, R4, R5, R7, R9, R11: 10 kΩ
R6, R8, R10, R12: 470 Ω
R1, R3: 2,2 kΩ

Kondensatory:
C1: 100 nF (SMD 1206)
C2...C5: 1 nF (SMD 1206)

Półprzewodniki:
D1, D2: LL4148 (dioda uniwersalna SMD)
IS1...IS4: LTV357 (transoptor SMD)
LD1...LD6: dioda LED SMD, 2 mA
Q1, Q2: BC847 (SOT-23)
U1: HC132 (SO-14)

Inne:
GPIO: złącze IDC26, przelotowe
I²C, S3V: złącze szpilkowe, męskie
IN, OUT: złącze śrubowe
J1: złącze męskie SIP2
OUT: złącze śrubowe kompletne
RES: przycisk 6×3 mm
RL1, RL2: przekaźnik RM40P-5V

LED8_PWM_Expander

AVT-5433 Podstawowe informacje:

  • Kompatybilny z Arduino, RaspberryPI i innymi.
  • Układ scalony ekspandera PCA9634.
  • Zasilanie 5 V DC.
  • 8 wyjść PWM np. do sterowania diodami LED.
  • Funkcjonalny interfejs I²C.

Przedstawiony moduł umożliwia rozszerzenie możliwości płytek uruchomieniowych, szczególnie Raspberry PI wyposażonego tylko w jeden kanał PWM. Dodatkowe 8 kanałów PWM o rozdzielczości 8 bitów jest przeznaczone głównie do sterowania diodami LED RGB(Y), ale nadają się także do innych aplikacji np. sterowania prędkością obrotową silników DC.

Schemat ideowy ekspandera zaprezentowano na rysunku 7. Sercem modułu jest układ PCA9634, jego schemat blokowy przedstawia rysunek 8. PCA9634 wchodzi w skład szerokiej rodziny kontrolerów LED z interfejsem I²C firmy NXP. Układ ma możliwość ustalania adresu za pomocą wyprowadzeń A0...A6. Dostępne jest 126 adresów I²C, kilka adresów jest zarezerwowane dla sterowania globalnego.

Rysunek 7. Schemat ideowy ekspandera PWM

Adres 0x03 jest zarezerwowany dla instrukcji zerowania, natomiast adres 0x70 dla jednoczesnego sterowania wszystkimi kanałami PWM wszystkich układów PCA9634 dołączonych do szyn I²C. Ułatwia to oprogramowanie układów wyświetlaczy składających się z kaskady PCA9634, gdyż wszystkie układy – niezależnie od adresu fizycznego – reagują na wspólną komendę, co znacząco odciąża interfejs I²C i ułatwia sterowanie. Możliwe jest także definiowanie adresów podrzędnych, grupujących sterowane kanały PWM, ułatwiających np. tworzenie ekranów z diod LED RGB.

Oprócz indywidualnego sterowania przebiegiem PWM na każdym z wyjść jest możliwe sterowanie grupowe (np. w celu regulowania jasności świecenia wszystkich diod LED) oraz praca przerywana z regulowaną częstotliwością i wypełnieniem. Każde z wyjść może być ustawione lub wyzerowane, jest możliwa sprzętowa negacja wyjścia dla pracy z zewnętrznym buforem oraz konfiguracja wyjścia jako otwarty dren lub totem-pole. Wewnętrzny oscylator i dzielniki programowane upraszczają aplikację PCA9634. Układ ma wejście sprzętowe OE umożliwiające sterowanie buforem wyjściowym, które w modelu nie jest używane. Układ funkcjonuje poprawnie w zakresie napięcia zasilania 2,5...5,5 V.

Tabela 1 - rejestry konfiguracyjne PCA9634 oraz Tabela 2 - najważniejsze bity konfiguracyjne PCA9634

Rejestry konfiguracyjne umieszczono w tabeli 1. W zależności od potrzeb jest możliwa komunikacja z poszczególnymi rejestrami poprzez adresowanie poszczególnych rejestrów (ze wskazaniem konkretnego rejestru, zgodnie z rysunkiem 9). Drugim sposobem jest adresowanie grupowe wszystkich rejestrów, jak pokazano na rysunku 10. Ostatnim sposobem jest adresowanie grupowe rejestrów PWM po wcześniejszej konfiguracji układu przedstawione na rysunku 11.

Odczyt odbywa się podobnie. Dokładniejsze informacje oczywiście zamieszczone są w nocie katalogowej. Najważniejsze bity konfiguracyjne dla podstawowego trybu pracy przedstawia tabela rys. 7.

Montaż układu jest typowy i nie wymaga opisu. Zastosowano płytkę dwustronną, rozmieszczenie elementów pokazano na rysunku 12. Wyprowadzenie I²C jest zgodne ze standardem Arduino. Pozostałe sygnały wyprowadzono na złącza szpilkowe o rastrze zgodnym z płytkami prototypowymi i stykowymi. Poprawnie zmontowany układ nie wymaga uruchamiania. Dioda PWR sygnalizuje załączenie zasilania. Przed uruchomieniem jest konieczne ustawienie adresu poprzez zlutowanie odpowiednich punktów A0...A6 ze zwróceniem uwagi na adresy zarezerwowane i ewentualne kolizje z innymi układami I²C. Prototyp miał ustawiony adres 0x61 (A0, A5, A6=VCC, reszta GND) i taki obsługuje przykładowy szkic.

Rysunek 8. Struktura wewnętrzna PCA9634 (za notą NXP)

Dla szybkiego sprawdzenia podstawowych możliwości PCA9634 przygotowałem szkic dla Arduino/Energii (listing 2). Program konfiguruje rejestry PCA w trybie zapisu grupowego z automatyczną inkrementacją adresu. Następnie są konfigurowane kanały PWM. Pomiędzy wyjścia LEDx a masę układu są włączone diody świecące z rezystorami ograniczającymi prąd. Pętla kolejno zwiększa wypełnienie kanałów LED0...LED7. Następnie PCA jest konfigurowany do pracy z globalnym PWM jednocześnie ściemniając wszystkie kanały PWMx. Ostatnim krokiem jest konfiguracja dla trybu "migania" globalnego, z ustawionym wypełnieniem 50% (GRPPWM) i czasem 1 s (GRPFREQ).

W przypadku współpracy z Raspberry PI najłatwiej sprawdzić poprawność pracy modułu korzystając z bibliotek I²C i konsoli. Oczywiście, nic nie stoi na przeszkodzie w napisaniu skryptu w Pythonie lub programu w C, ale te kilka komend dla szybkiego sprawdzenia można wydać z linii poleceń. W celu użycia PCA9634 jest konieczne dodanie obsługi magistrali I²C (jeżeli nie zrobiono tego wcześniej). 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ć Raspberry PI.

Rysunek 9. Adresowanie indywidualne rejestrów (za notą NXP)

Rysunek 10. Adresowanie grupowe rejestrów (za notą NXP)

Rysunek 11. Adresowanie grupowe rejestrów PWM (za notą NXP)

Po uruchomieniu należy pobrać narzędzia odpowiadające za obsługę I²C:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools

Rysunek 12. Schemat montażowy ekspandera PWM

Po zainstalowaniu i restarcie, w pierwszej kolejności sprawdzamy w konsoli prawidłowe działanie I²C sudo i2cdetect -y 1. Powinno pojawić się urządzenie pod adresem 0x61 (lub innym ustawionym zworkami A6...0) – jest to nasz PCA9634. Jeżeli zdefiniowane zostały adresy globalne i została uaktywniona funkcja ich wykorzystania, powinny być także widoczne. Korzystając z polecenia sudo i2cset -y 1 Adres_I2C, Adres_Rejestru, Dana_Do_Zapisu możemy kolejno skonfigurować rejestry PCA np. w celu sprawdzenia działania układu. Po pomyślnych testach, moduł można zastosować we własnej aplikacji.

Wykaz elementów

Listing 2. Program testowy dla PCA9634, dla Arduino/Energia

Rezystory: (SMD 0805)
R1: 2,2 kΩ
R2, R3: 10 kΩ

Kondensatory:
C1: 100 nF (SMD 0805)

Półprzewodniki:
U1: PCA9634PW (SSOP20)
LD: dioda LED SMD

Inne:
A0...A6: 0 V (SMD 0805, zwora)
I²C: złącze EH4, kątowe
J1, J2: złącze szpilkowe, męskie, 8-pin

Dodatkowe materiały na CD lub FTP:
ftp://ep.com.pl, user: 08252, pass: 852rja63

Adam Tatuś, EP

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

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik styczeń 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio styczeń 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje styczeń 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna styczeń 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 styczeń 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów