Nowe technologie w fizyce biomedycznej: Różnice pomiędzy wersjami
Linia 656: | Linia 656: | ||
Płytka ta podłączana jest bezpośrednio do pinów GPIO w Raspberry, skąd też pobiera zasilanie. | Płytka ta podłączana jest bezpośrednio do pinów GPIO w Raspberry, skąd też pobiera zasilanie. | ||
− | [[Plik:Gertboard.png]] | + | [[Plik:Gertboard.png|400px|thumb|center|<figure id="fig:wbb"></figure>Raspberry Pi. Źródło: Gertboard User Maual]] |
<!-- | <!-- |
Wersja z 16:27, 12 lut 2017
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 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
- Kinect (budowa, biblioteki, zastosowania)
- Profesjonalne systemy do rejestracji ruchu
- 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 sensora Kinect i 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. Nie są one 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 przykładowym skrypcie do analizy.
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. 6).:
[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 wychyleń "z przytrzymaniem" z informacją zwrotną należy ustawić parametr 'tag_format' w wywołaniu funkcji read_file na 'game' (zamiast domyślnie ustawionego 'obci'). Dalsze kroki przygotowania danych do analizy wykonujemy tak samo. 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']
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),
- wykresy składowych wychwiań 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.
- Zastosowania w biomechanice oraz rehabilitacji.
- Opis podstawowych bibliotek wykorzystywanych do komunikacji z urządzeniem.
- 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)):
- 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.