Nowe technologie w fizyce biomedycznej
Spis treści
Wprowadzenie
Przedmiot "Nowe technologie w fizyce biomedycznej" to 30 godzin zajęć i 3 punkty ECTS. Jego celem jest umożliwienie studentom wykorzystania rewolucyjnych i tanich technologii, nie uwzględnianych dotychczas w programach kształcenia w UW, w działalności naukowej i gospodarczej, oraz rozbudzenie kreatywności. Adresowany jest do studentów studiów II stopnia Fizyki Medycznej i Neuroinformatyki na Wydziale Fizyki. Zajęcia mają formę zajęć warsztatowych/pracowni. Przewiduje się 7 stanowisk dla 14 studentów pracujących w parach. Pojedyncze zajęcia na pracowni trwają 2h. Program podzielony jest na 3 bloki tematyczne:
- Posturografia - 8h (4 zajęcia)
- Kamery 3D - 8h (4 zajęcia)
- Raspberry Pi - 14h (7 zajęć)
Warunkiem uczestnictwa w zajęciach jest uprzednie zaliczenie przedmiotów „Pracownia fizyczna i elektroniczna”, „Analiza sygnałów” oraz podstawowa znajomość języka Python.
Zaliczenie przedmiotu odbywa się na podstawie:
- obecności (maksymalnie 2 nieusprawiedliwione nieobecności)
- przedstawienia prezentacji z wynikami na koniec tematu: Posturografia, Kamery 3D
- projektu zaliczeniowego na koniec tematu: Raspberry Pi
Posturograf
Opis bloku tematycznego: Zajęcia warsztatowe składające się z wprowadzającego w tematykę zajęć wykładu i indywidualnych ćwiczeń wykonywanych przez studentów. Studenci w czasie zajęć przeprowadzają standardowe pomiary posturograficzne, a następnie analizują zebrane dane.
Plan zajęć
Zajęcia 1:
- Wstęp teoretyczny:
- Wii Balance Board (budowa, główne biblioteki obsługujące sensor, zastosowania)
- Projesjonalne systemy do rejestracji siły nacisku
- Równowaga a stabilność posturalna
- Podstawowe zadania posturograficzne
- Opis wybranych wskaźników do zadań posturograficznych
- Wprowadzenie do pomiarów przeprowadzanych na zajęciach (zapoznanie się z wybranymi scenariuszami oraz modułami do analizy)
- Zapoznanie się z działaniem Wii Balance Board
- Przeprowadzenie pomiarów
Media: WiiBoard.pdf Informacje wstępne oraz opis zadań
Zajęcia 2,3,4:
- Analiza zebranych danych
- Prezentacja wyników
Pomiary
Pomiary przeprowadzane są w środowisku OpenBCI. Architektura systemu oraz opis wybranych scenariuszy jest dostępny na stronie http://bci.fuw.edu.pl/wiki/Tutorials. Szczegółowe informacje dotyczące konfiguracji OpenBCI na Ubuntu 14.04 LTS można znaleźć pod adresem http://deb.braintech.pl/. Po zainstalowaniu pakietów źródła znajdą sie w katalogu /usr/share/openbci.
Z OpenBCI można również korzystać na systemie Windows -> instrukcja Media: obci_Windows.pdf
Rejestracja danych odbywa się w środowisku OpenBCI. System ten uruchamiamy wykonując w terminalu polecenie:
$ obci_gui --presets new_tech
Podczas zajęć przeprowadzone zostaną następujące pomiary:
- stanie swobodne z oczami otwartymi/zamkniętymi,
- wychylenia szybkie i "z przytrzymaniem" bez informacji zwrotnej dla badanego (w przód, w tył, w prawo, w lewo),
- wychylenia szybkie i "z przytrzymaniem" z informacją zwrotną dla badanego (w przód, w tył, w prawo, w lewo).
W wyniku każdego pomiaru otrzymujemy komplet trzech plików (lokalizacja: Katalog Domowy):
- Plik z sygnałem (.raw) zapisanym w formacie binarnym. W pliku znajdują się próbki z pięciu kanałów – wartości z czterech czujników WBB oraz momenty w czasie (w sekundach) mierzone względem pojawienia się pierwszej próbki.
- Plik z metadanymi (.xml), w którym znajdują się szczegółowe informacje dotyczące rejestracji (nazwy kanałów, częstość próbkowania, całkowita liczba próbek itp.).
- Plik ze znacznikami (.tag), w którym zapisywane są momenty kolejnych zdarzeń (np. początek i koniec wykonywania zadania) zsynchronizowane z sygnałem. Każdy znacznik posiada charakterystyczną nazwę, moment wystąpienia w sygnale, długość oraz ewentualnie opis.
W przypadku zadań z informacją zwrotną dla badanego generowane są dwa pliki ze znacznikami. Interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag.
Analiza danych
Przygotowanie danych do analizy
Pierwszym etapem analizy jest wstępne przetworzenie danych. W tym celu należy wyestymować rzeczywistą częstość próbkowania Fs (w idealnym przypadku wynosi ona 65 Hz) oraz przepróbkować sygnał do częstości fs ok. 30 Hz (wychylenia swobodne widoczne są głównie w niższych częstościach).
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from obci.analysis.balance.wii_read_manager import WBBReadManager
from obci.exps.ventures.analysis import analysis_baseline
from obci.analysis.balance.wii_preprocessing import *
from obci.analysis.balance.wii_analysis import *
def read_file(file_path, file_name, tag_format = 'obci'):
file_name = file_path+file_name
wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')
return wbb_mgr
FILE_PATH = '/home/newtech/'
FILE_NAME = 'wii_baseline_2015-03-04_15-02-01' #przykładowa nazwa pliku
#wczytanie danych
wbr_baseline = read_file(FILE_PATH, FILE_NAME)
#estymacja częstości próbkowania Fs
Fs = analysis_baseline.estimate_fs(wbr_baseline.mgr.get_channel_samples('TSS'))
#wpisanie częstości Fs do obiektu
wbr_baseline.mgr.set_param('sampling_frequency', Fs)
#przepróbkowanie z czynnikiem 2
wbr_baseline = wii_downsample_signal(wbr_baseline, factor=2, pre_filter=True, use_filtfilt=True)
#odczytanie nowej częstości próbkowania fs
fs = wbr_baseline.mgr.get_param('sampling_frequency')
Po takich operacjach dane przechowywane w obiekcie 'wbr_baseline' klasy WBBReadManager są gotowe do użycia. Klasa ta posiada metodę 'get_raw_signal', która zwraca 4-kanałową macierz z danymi z 4 czujników (są to kanały odpowiadające kolejno czujnikom: górny lewy-TL, górny prawy-TR, dolny prawy-BR, dolny lewy-BL). Można wyznaczyć wartości wychyleń w kierunkach x i y na podstawie informacji z czterech czujników (rys. 8).:
[math]x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}[/math]
[math]y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}[/math]
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:
Jednak w przypadku niektórych zadań należy jeszcze, przed wyznaczaniem x i y, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments', która zwraca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, posiada metodę 'get_samples' zwracającą dane w macierzy 7 kanałowej. W pierwszych 4 kanałach znajdują się dane z czujników TL,TR,BR,BL.
smart_tags = wii_cut_fragments(wbr_baseline, start_tag_name='ss_start', end_tags_names=['ss_stop'])
TL = smart_tags[0].get_samples()[0,:]
TR = smart_tags[0].get_samples()[1,:]
BR = smart_tags[0].get_samples()[2,:]
BL = smart_tags[0].get_samples()[3,:]
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:
- stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'
- stanie swobodne oczy zamknięte: 'ss_oczy_start', 'ss_oczy_stop'
- wychylenia szybkie bez informacji zwrotnej: 'szybkie_start', 'szybkie_stop'
- wychylenia "z przytrzymaniem" bez informacji zwrotnej: 'start', 'stop'
- stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'ss_start', 'ss_stop'
- wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych
- wychylenia "z przytrzymaniem" z informacją zwrotną: 'start_1', 'finish'
Podczas wczytywania danych z informacją zwrotną interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag. Zatem należy ustawić parametr 'tag_format' w wywołaniu funkcji read_file na 'game' (zamiast domyślnie ustawionego 'obci'). Znaczniki czasowe gry nie są zsynchronizowane z sygnałem, ponieważ gra uruchamiana jest w osobnym wątku, który nie ma możliwości komunikacji z multiplekserem. Z tego względu każdy znacznik zapisany w tym pliku posiada czas systemowy, który należy wyrównać względem pierwszej próbki w sygnale. Procedura ta została zaimplementowana w poniższej funkcji, którą należy wykonać przed przepróbkowaniem sygnału:
wbr_sway.mgr = analysis_helper.set_first_timestamp(wbr_sway.mgr)
Dalsze kroki przygotowania danych do analizy wykonujemy tak samo. Dla przypadku wychyleń "z przytrzymaniem" obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:
- 'get_end_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)
- 'get_start_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: eval(smart_tags[index].get_start_tag()['desc']['type'])['direction']
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków.
Analiza danych: stanie swobodne
W przypadku stania swobodnego z oczami zamkniętymi oraz otwartymi, studenci mają za zadanie wyznaczyć następujące wskaźniki posturograficzne:
- położenie środka równowagi COP (center of posture)
- maksymalne przemieszczenie względem położenia środka równowagi (w AP,ML oraz przestrzeni AP/ML),
- długość drogi względem położenia środka równowagi (w AP,ML oraz przestrzeni AP/ML),
- średnia prędkość przemieszczenia (w AP,ML oraz przestrzeni AP/ML),
- wskaźnik Romberga - stosunek różnicy długości drogi przy oczach zamkniętych i otwartych, do sumy długości drogi przy oczach zamkniętych i otwartych
Dokładny opis matematyczny wyżej wymienionych wskaźników znajduje się w pracy (Prieto, 1996).
Należy również przedstawić na wykresie przebieg ruchu COP oddzielnie w płaszczyźnie AP, ML oraz w przestrzeni AP/ML.
Dodatkowo studenci mają za zadanie przeprowadzić analizę rozkładu przestrzennego punktów statokinezjogramu. Statokinezjogramem lub posturogramem nazywamy wędrówkę COP w dwuwymiarowej płaszczyźnie podparcia. Kierunki na tej płaszczyźnie określa się jako AP (y) lub ML (x), przy czym ML oznacza wychylenia w płaszczyźnie czołowej (medio-lateral), a AP w płaszczyźnie strzałkowej (anterio-posterior). W celu przeprowadzenie takiej analizy, cały zakres zostaje podzielony na jednakowe komórki. Następnie obliczony zostaje histogram przestrzenny czasu przebywania w każdej z nich. Taki histogram pozwala ocenić, czy kontrola położenia referencyjnego COG (center of gravity), a tym samym pionowa orientacja ciała, jest prawidłowa. Wyznacznikiem prawidłowej kontroli jest histogram o skupionym rozkładzie i z wyraźnym maksimum. Upośledzenie kontroli objawia się tym, że histogram przestrzenny staje się rozmyty lub wyraźnie niesymetryczny (Błaszczyk, 2004).
Analiza danych: wychylenia dynamiczne
Oprócz wskaźników statycznych stabilności do oceny kontroli posturalnej wykorzystuje się również miary dynamiczne. Z punktu widzenia miar bezpośrednich, istotna jest ocena kontroli środka ciężkości ciała w czasie jego świadomego przemieszczania w wyznaczonym kierunku. W ramach pomiarów, studenci mieli za zadanie wykonać dwa rodzaje wychyleń (szybkie i "z przytrzymaniem") w dwóch warunkach: bez informacji zwrotnej dla badanego oraz z informacją zwrotną dla badanego. Dla każdego z przypadków należy wyznaczyć następujące parametry:
- wartość maksymalnego wychylenia (w określonym kierunku) względem położenia równowagi,
- wykresy składowych wychwiań względem położenia równowagi w płaszczyźnie AP, ML w zależności od czasu oraz wypadkowa trajektoria przemieszczeń COP (w dwuwymiarowej przestrzeni AP, ML).
i zbadać czy informacja zwrotna wpływa na rezultaty badanego.
Literatura:
- Błaszczyk J., Biomechanika kliniczna, PZWL, 2004
- Prieto T.E. et al., Measures of postural steadiness: differences between healthy young and elderly adults, IEEE Trans Biomed Eng, 1996, 43(9):956-66
Kamery 3D
Plan zajęć
Zajęcia 1:
- Wstęp teoretyczny:
- Budowa i zasada działania sensora Kinect.
- Opis podstawowych bibliotek wykorzystywanych do komunikacji z urządzeniem.
- Profesjonalne systemy do rejestracji ruchu
- Zastosowania w biomechanice oraz rehabilitacji.
- Zapoznanie się z działaniem sensora Kinect
- Pomiary:
- W ramach pomiarów studenci wykonają standardowy test wykorzystywany w medycynie sportowej do oceny prawdopodobieństwa urazów więzadła krzyżowego przedniego (ACL).
Media:3D_Kinect.pdf Informacje wstępne oraz opis zadań
Zajęcia 2,3,4:
- Analiza zebranych danych
- Zaprezentowanie uzyskanych wyników
Sensor Kinect
Śledzenie ruchów postaci ludzkiej w ogólności znajduje zastosowanie m.in. w analizie chodu, diagnostyce chorób związanych z układem ruchu człowieka, analizie ruchu sportowców, czy nawet w procesie animacji postaci na potrzeby produkcji filmów i gier. W tym celu wykorzystuje się głównie profesjonalne markerowe systemy śledzenia ruchu (marker-based motion capture systems) określane w skrócie jako systemy mocap. Systemy te wymagają zastosowania specjalistycznego sprzętu, a na ciele śledzonej postaci muszą zostać umieszczone odpowiednie markery, przez co rejestracja musi odbywać się w warunkach laboratoryjnych. Systemy te nie nadają się do śledzenia ruchu w czasie rzeczywistym, a przesłonięcie lub przemieszczenie markerów w trakcie ruchu może być przyczyną błędów. Z tych względów coraz większe zainteresowanie zyskują bezmarkerowe systemy śledzenia ruchu, które wykorzystują zaawansowane algorytmy analizy obrazu.
Sensor Kinect firmy Microsoft do śledzenia ruchu postaci wykorzystuje informacje z kamery głębokości. Znajduje on zastosowanie w różnego rodzaju systemach umożliwiających interakcję człowiek-komputer, ale zaczyna również budzić coraz większe zainteresowanie w dziedzinach związanych z biomechaniką i rehabilitacją. W tym celu konieczne jest jednak określenie dokładności pozycji estymowanych przy pomocy bibliotek obsługujących sensor. Problem ten został poruszony w pracy (Webster, 2014).
Budowa sensora Kinect Xbox 360 (rys. 2):
- kamera wizyjna RGB (typu CMOS, o rozdzielczości 640x480) - przesyła serię obrazów z prędkością 30 klatek na sekundę,
- kamera głębokości (typu CMOS, o rozdzielczości ~300x200) - zwraca informację o głębokości poprzez analizę zniekształconej przez obiekt wiązki promieni podczerwonych,
- emiter podczerwieni - emituje wiązkę promieni podczerwonych,
- 4 mikrofony kierunkowe - wykorzystywane przez funkcje rozpoznawania mowy,
- napęd umożliwiający ruch głowicą z akcelerometrem.
Pomiary
Rejestracja danych odbywa się w środowisku OpenBCI. System ten uruchamiamy wykonując w terminalu polecenie:
$ obci_gui
Obsługa sensora wraz z algorytmami estymacji poszczególnych pozycji anatomicznych śledzonej postaci, możliwa jest dzięki bibliotekom OpenNI i NiTE. Scenariusz do rejestracji danych przy pomocy sensora Kinect pokazany został poniżej (rys. 3). Umożliwia on rejestrację w trybie online, i wówczas zarówno obraz RGB, jak mapa głębokości mogą zostać zapisane w domyślnym formacie .oni. Dodatkowo tworzony jest plik binarny .algs z metadanymi rejestracji, gdzie zapisywane są między innymi współrzędne wyestymowanych pozycji anatomicznych. Tryb offline umożliwa odtwarzanie plików .oni oraz .algs. W przypadku rejestracji w trybie online w scenariuszu zmieniamy następujące parametry:
capture_raw = 1 – zapis obrazu do pliku .oni (0 lub 1) out_raw_file_path = test.oni – nazwa pliku .oni capture_hands = 1 – zapis pozycji rąk (0 lub 1) capture_skeleton = 1 – zapis pozycji anatomicznych (0 lub 1) out_algs_file_path = test.algs – nazwa pliku .algs z metadanymi rejestracji
Wybierając tryb offline należy podać odpowiednią ścieżkę do plików .oni oraz .algs:
in_raw_file_path = test.oni in_algs_file_path = test.algs
Wszystkie pliki zapisywane są w lokalizacji: /home/.obci/sandbox
Zeskok z następującym wyskokiem pionowym (drop vertical jump, DVJ) należy do badań przesiewowych, pozwalających oszacować ryzyko występienia urazu (w szczególności więzadła krzyżowego przedniego u kobiet) lub określić efekty rehabilitacji. Przed rozpoczęciem skoku osoba badana stoi na platformie o wysokości ok. 30 cm. Ma ona za zadanie wykonać zeskok z platformy na ziemię, a następnie maksymalny skok pionowy w górę. W dalszej analizie interesujące będą momenty: kontaktu pięt z podłożem (initial contact, IC) zaraz po wykonaniu zeskoku oraz moment maksymalnego zgięcia kolan (peak flexion, PF) zaraz po IC, ale przed oderwaniem pięt od podłoża w celu wykonania skoku pionowego.
Analiza danych
Studenci zapoznają się z modułami (napisanymi w języku programowania Python) do wczytywania oraz wstępnego przetwarzania danych. Następnie samodzielnie wyznaczą następujące wskaźniki biomechaniczne (opisane w pracy (Stone et al., 2013), którą można znaleźć pod adresem: [1]):
- knee valgus motion (KVM),
- frontal plane knee angle (FPKA) w dwóch momentach (w trakcie kontaktu pięt z podłożem zaraz po wykonaniu zeskoku oraz w trakcie maksymalnego zgięcia kolan),
- knee-to-ankle separation ration (KASR) w momencie PF,
- zmiana w czasie średniej pozycji bioder.
Wyniki opracowane powinny zostać w formie tabeli, gdzie zestawione zostaną wartości KVM, FPKA, KASR otrzymane dla każdej osoby z grupy. Trajektoria średniej pozycji bioder podczas wykonywania zadania powinna zostać przedstawiona na wykresie.
Analiza danych
Przykładowy skrypt do wczytywania wyników algorytmów śledzenia pozycji anatomicznych (wraz z metadanymi rejestracji):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import sys
sys.path.append('/usr/share/openbci/drivers/kinect/')
from KinectUtils import Serialization
class KinectDataReader(object):
def __init__(self, file_name):
super(KinectDataReader, self).__init__()
self.file_name = file_name
self.in_algs_file = open(self.file_name + '.algs', 'rb')
self._s = Serialization()
def readNextFrame(self):
return self._s.unserialize_frame(self.in_algs_file)
if __name__ == '__main__':
try:
file_name = sys.argv[1]
except Exception:
file_name = 'test'
kinect = KinectDataReader(file_name)
while True:
frame = kinect.readNextFrame()
if frame is None:
print('END OF FILE')
break
frame_index = frame[0]
hands_included = frame[1]
skeleton_included = frame[2]
frame_time = frame[3]
if skeleton_included:
skel = frame[8]
else:
skel = None
if hands_included:
hands = frame[9]
else:
hands = None
print('Idx:', frame_index, 'Time:', frame_time)
if skel is not None:
print('Skeleton: ', skel.user_x, skel.user_y, skel.user_z)
if hands is not None:
print('Hands: ', hands.hands[0].x, hands.hands[0].y, hands.hands[0].z)
Plik z metadanymi rejestracji zawiera: nagłówek, wyniki algorytmów śledzenia 15 pozycji anatomicznych, wyniki algorytmów śledzenia pozycji rąk (oddzielna opcja w scenariuszu). Pozycje anatomiczne sylwetki zapisane są w następującej kolejności:
joints = [JOINT_HEAD, JOINT_NECK, JOINT_RIGHT_SHOULDER, JOINT_LEFT_SHOULDER, JOINT_RIGHT_ELBOW, JOINT_LEFT_ELBOW, JOINT_RIGHT_HAND, JOINT_LEFT_HAND, JOINT_TORSO, JOINT_RIGHT_HIP, JOINT_LEFT_HIP, JOINT_RIGHT_KNEE, JOINT_LEFT_KNEE, JOINT_RIGHT_FOOT, JOINT_LEFT_FOOT]
Ich położenie (x,y,z) wyrażone jest w jednostkach [mm].
Literatura
- Stone E.E., Butler M., McRuer A., Gray A., Marks J., Skubic M., Evaluation of the Microsoft Kinect for Screening ACL Injury, Conference proceedings: ... Annual International Conference of the IEEE Engineering in Medicine and Biology Society, 2013:4152-5, 2013.
- Webster D., Celik O., Systematic review of Kinect applications in elderly care and stroke rehabilitation, Journal of NeuroEngineering and Rehabilitation, 11:108, 2014.
Raspberry Pi
Raspberry Pi
Raspberry Pi to mała (wymiary: 85.60 mm × 53.98 mm, przy wadze 45 gramów) platforma komputerowa stworzona przez brytyjską organizację charytatywną "Fundację Raspberry Pi" w celach edukacyjnych. Miała za zadanie ułatwić uczniom naukę programowania oraz sterowania zewnętrznymi urządzeniami.
Raspberry Pi zasilany jest napięciem 5V poprzez gniazdo microUSB. Niski pobór mocy jest jedną z przyczyn częstego wykorzystania Raspberry w robotyce. Komputer ten to w głównej mierze układ Broadcom:
- 512 MB RAMu
- procesor graficzny
- procesor taktowany zegarem 700MHz
Raspberry Pi nie posiada wbudowanego dysku twardego - korzysta z karty SD, którą wykorzystuje do załadowania systemu operacyjnego (Raspbian - specjalnie dedykowana wersja Debiana) i przechowywania danych. Do tego komputera można podłączyć urządzenia zewnętrzne poprzez łącza:
- HDMI - monitor
- ethernet - internet
- USB - klawiatura, myszka, itp.
Główną cechą Raspberry Pi jest zestaw połączeń GPIO (General Purpose Input Output), które pozwalają na wysyłanie i odbieranie sygnałów cyfrowych (z i do urządzeń zewnętrznych takich jak motorki, czujniki, diody, przełączniki itd.).
Gertboard
Gertboard jest to moduł rozszerzający możliwości komputera Raspberry Pi. Płytka ta posiada m.in.:
- sterownik silnika prądu stałego
- 12 buforowanych portów wyjścia/ wejścia
- 3 przyciski typu tact-switch
- 6 wejść typu otwarty kolektor
- dwukanałowy 10 bitowy przetwornik analogowo-cyfrowy
- dwukanałowy 8, 10 lub 12 bitowy przetwornik cyfrowo-analogowy
Płytka ta podłączana jest bezpośrednio do pinów GPIO w Raspberry, skąd też pobiera zasilanie.
Aby zasilić płytkę Gertboard napięciem 3,3 V należy umieścić złączkę w pozycji pokazanej na poniższym rysunku (prawy dolny róg płytki).
Rząd pinów GPIO (oznaczonych czarną ramką) jest "łącznikiem" płytki Gaertboard z Raspberry Pi. Mamy zatem 17 pinów, które mogą spełniać funkcje wejścia lub wyjścia dla sygnału cyfrowego (w zależności od tego do czego je podłączymy). Przykładem może być podpięcie do nich buforowanych portów wejścia/wyjścia opisanych poniżej.
Buforowane porty wejścia/wyjścia