Zasilanie implantowanych urządzeń elektronicznych od zawsze było dużym problemem. Ogniwa, jakie wykorzystuje się w medycynie muszą spełniać szereg krytycznych wymagań. Z jednej strony baterie, które znają się w naszym organizmie muszą być w pełni bezpieczne dla człowieka – nie mogą np. rozszczelnić się, gdyż to doprowadziłoby do przedostania się elektrolitu do wnętrza organizmu. Z drugiej strony muszą one dostarczać sporą ilość energii, aby mogły długo zasilać dane urządzenie. Wymiana ogniw w urządzeniu implantowanym w ciele czy nawet znajdującym się w żołądku, jest niezwykle problematyczna.
Rozwiązaniem obu tych problemów jest zastosowanie systemu do zbierania energii z otoczenia. W ten sposób eliminuje się w ogóle konieczność korzystania z jakiejkolwiek baterii, a dodatkowo przedłuża się czas życia urządzenia – system może funkcjonować tak długo, jak długo występuje w otoczeniu energia, którą można pozyskać, lub dopóki coś innego nie uszkodzi się w urządzeniu.
Problemem przy pozyskiwaniu energii jest jednak fakt, że we wnętrzu człowieka nie ma zbyt wielu źródeł energii, z których można korzystać. Typowe systemy zbierania energii korzystają np. z ogniw fotowoltaicznych, modułów termoelektrycznych (modułów Peltiera) lub systemów pozyskujących energię np. z ruchu bądź wibracji lub z promieniowania radiowego. Niestety, we wnętrzu organizmu ludzkiego większość tych systemów nie będzie skutecznie działać. Światło słoneczne (ani żadne inne) w zasadzie nie dociera do wnętrza naszego organizmu. Podobnie jest z promieniowaniem radiowym – złożone w dużej mierze z wody tkanki dosyć dobrze pochłaniają energię fal radiowych, więc do wnętrza dociera ich niewiele. Pozostaje zatem wykorzystanie energii mechanicznej lub coś totalnie innego… Zaprezentowany projekt jest właśnie przykładem takiego, zupełnie nietypowego podejścia.
Typowe ogniwo galwaniczne składa się z dwóch metalowych (wykonanych z różnych metali) elektrod, zanurzonych w elektrolicie. Reakcje chemiczne zachodzące pomiędzy elektrolitem, a metalami elektrod są źródłem różnicy potencjałów, która przekłada się na wytworzenie napięcia pomiędzy elektrodami. Zamknięcie takiego obwodu spowoduje przepływ prądu. Kwaśne środowisko żołądka dostarcza elektrolitu w postaci soku żołądkowego, którego jednym z istotnych składników jest kwas solny (który nadaje wnętrzu naszego żołądka pH na poziome około 1,5). Zatem urządzenie musi tylko zanurzone w nim, odpowiednie elektrody.
Zasada działania
Ogniwo galwaniczne jest bardzo proste, jego historia sięga XVIII wieku. Badanie zjawisk galwanicznych rozpoczął w latach ’80 XVIII wieku włoski fizjolog, Luigi Galvani. Zauważył on, że mięśnie żabiego uda kurczą się pod wpływem elektryczności. Efekt występuje, gdy dotknie się je dwoma różnymi, ale połączonymi ze sobą metalami. Oznacza to, że w takim układzie – dwa metale i mięsień, płynie prąd. Około dziesięciu lat później Alessandro Volta wyjaśnił to zjawisko – wymagało ono elektrolitu, którym w przypadku żabiego udka były płyny ustrojowe. Volta nie rozumiał jeszcze stojącej za tym chemii czy fizyki, ale nie przeszkodziło mu to w zbudowaniu w 1799 pierwszej baterii elektrycznej, korzystającej z tego zjawiska.
Podobnie, jak w przypadku pierwszych ogniw elektrochemicznych, tak w opisywanym projekcie zastosowano elektrodę cynkową i miedzianą. Zanurzone są one w elektrolicie w postaci kwasu znajdującego się w żołądku. W uproszczeniu można przyjąć, że elektrolit w tej sytuacji jest mieszanką wody i kwasu solnego (HCl). Ten drugi rozdziela się na dodatnie jony wodorowe (H+) i ujemne jony chlorkowe (Cl−). Jony chlorkowe łączą się z atomami cynku, tworząc dodatnie jony cynku (Zn++). Pozostawia to wolne elektrony na elektrodzie cynkowej, nadając jej ładunek ujemny. Dodatnie jony cynku łączą się z jonami wolnego chloru, tworząc chlorek cynku (ZnCl), ciało stałe, które wytrąca się podczas reakcji elektrochemicznych. Dodatnie jony wodorkowe przemieszczają się do drugiej elektrody (miedzianej), gdzie łączą się z elektronami na powierzchni tej elektrody i stają się obojętnymi atomami wodoru, który uwalnia się podczas reakcji w fazie gazowej. Wodór zbiera się w postaci bąbelków, które unoszą się na powierzchnię elektrolitu i ulatniają. Usunięcie elektronów z elektrody miedzianej powoduje, że ma ona ładunek dodatni, a ogniwo ma potencjał równy różnicy między ładunkiem ujemnym na elektrodzie cynkowej i dodatnim na elektrodzie miedzianej. Ta różnica potencjałów wynosi zwykle około 1,1 V dla pary cynk-miedź. Zależy ona od tzw. potencjałów standardowych obu metali. W tabeli 1 zebrano przykładowe potencjały standardowe różnych metali. Napięcie ogniwa jest różnicą pomiędzy potencjałami standardowymi metali elektrod, zastosowanych do budowy danego ogniwa.
To proste ogniwo nie jest zbyt praktyczne, ponieważ elektroda miedziana zostaje szybko pokryta gazowym wodorem, co uniemożliwia jonom wodoru zabieranie kolejnych elektronów z jej powierzchni. Ten efekt ogranicza wydajność pracy ogniwa, jednak do opisywanego tutaj zastosowania ogniwo to jest dostatecznie dobre.
W zrealizowanym ogniwie zastosowano po trzy miedziane i cynkowe elektrody. Umieszczone są one na podkładzie z siatki, wykonanej z tworzywa sztucznego. Zapewnia ono mechaniczne wsparcie elektrod – są one przyszyte do tego podkładu, a jednocześnie luźne oczka siatki nie utrudniają przepływu elektrolitu wokół elektrod. Na rysunku 1 pokazano moduł elektrod, wraz ze schematycznym opisem reakcji, zachodzących na elektrodach i w elektrolicie. Poszczególne ogniwa, utworzone z par elektrod, połączone są ze sobą szeregowo, aby dać na wyjściu wyższe napięcie. Muszą one być od siebie oddzielone, co jest realizowane za pomocą przekładek z folii, które pokazano na fotografii 1.
W ramach testów autor zbudował również ogniwa magnezowo-miedziane (fotografia 2). Z uwagi na większą różnicę potencjałów standardowych teoretyczne napięcie tego ogniwa to ponad 2,7 V – wystarczyłoby pojedyncze ogniwo. Jednak z uwagi na wyższą reaktywność magnezu oraz problemy z montażem – elektrod magnezowych nie można lutować, połączenia muszą być klejone, do finalnej konstrukcji zastosowano ogniwa cynkowo-miedziane.
Komponenty elektroniczne
Na rysunku 2 pokazano schemat blokowy omawianego urządzenia. Cynkowa elektroda podłączona jest do masy, a z miedzianej elektrody pobierana jest energia do ładowania kondensatorów CSUP podtrzymujących zasilanie. Kondensatory ładowane są przez diodę, aby uniknąć sytuacji, w której prąd płynie z kondensatorów do ogniw (np. gdy koncentracja kwasu w żołądku spadnie albo powierzchnia elektrod ogniwa pokryje się innymi związkami). Napięcie z kondensatorów – VSUP, jest podawane do przetwornicy impulsowej typu boost (podnoszącej napięcie). Jej zadaniem jest stabilizacja napięcia na poziomie wymaganym przez pozostałe układy. Typowo może to być np. 1,8 V lub 3,3 V, zależnie od elementów systemu.
Opisane ogniwo może mieć szerokie spektrum zastosowań. Autor projektu zdecydował się na użycie popularnej wśród hobbystów opaski fitness, która służyła do śledzenia aktywności fizycznej. Jest ona chętnie stosowana przez hobbystów. Z jednej strony jest niedroga – kosztuje około 25 dolarów, a z drugiej strony bazuje na dobrze opisanym mikrokontrolerze, który można programować, między innymi, z poziomu środowiska Arduino IDE.
Na fotografii 3 pokazano zdjęcia płytki PCB opaski wraz z elementami oraz oznaczonymi przebiegami kluczowych sygnałów. Jej specyfikacja jest następująca:
- Wyświetlacz: ekran OLED o rozdzielczości 16×64 i przekątnej 0,69 cala;
- Mikrokontroler: Nordic nRF51822 z 258 kB pamięci raz 32 kB pamięci RAM;
- Akcelerometr: układ Kionix KX022-1020, z interfejsem SPI;
- Monitor pracy serca: moduł PixArt PAH8001 z zieloną diodą LED;
- Oryginalna bateria: ogniwo litowo-polimerowe o pojemności 40 mAh;
- Wymiary opaski: 18,0×11,2 mm, w oryginalnej obudowie wodoszczelność IP67.
W wersji dojelitowej urządzenia nie jest potrzebny ani ekran, ani ogniwo litowo-jonowe. Na fotografii 4 pokazano elementy zmodyfikowanego urządzenia. Po prawej stronie widoczna jest oryginalna płytka opaski fitness, odchudzona ze zbędnych elementów, po środku pokazano jak została dołączona dodatkowa płytka z przetwornicą DC/DC podnoszącą napięcie (na dodatkowej płytce przylutowanej na płytkę bazową), oraz 3 superkondensatory, które widać na schemacie z rysunku 2. Po lewej stronie widoczna jest plastikowa obudowa kapsułki, wykonana w technologii druku 3D.
Płytka bazowa jest nieznacznie zmodyfikowana – pozytywny biegun superkondensatorów podłączony jest do jednego z wejść mikrokontrolera, w celu monitorowania napięcia zasilania układu (poziomu naładowania baterii superkondensatorów). Do modułu dołączony jest także konwerter USB-UART, który służy jako emulator konsoli szeregowej i pozwala na komunikację systemu z komputerem. Jest to niezwykle przydatne w trakcie uruchamiania urządzenia czy wprowadzania poprawek do jego konstrukcji, w docelowym systemie UART nie jest wykorzystywany. W module dostępne są następujące wyprowadzenia GPIO:
- P2 – interfejs sterujący silnikiem wibracyjnym, niepotrzebnym w tej aplikacji. Pad tej linii znajduje się pomiędzy układem KX022 a złączem baterii,
- P18 – odkryty PAD przy złączu dla wyświetlacza OLED,
- P7, P6 i P3 – seria padów (w tej kolejności), które normalnie służą do podłączenia sensora pulsu.
Pozostałe łatwo dostępne na PCB sygnały w systemie pokazano na fotografii 5.
Firmware
Opaska fitness M3 może być programowana w środowisku Arduino IDE. Na listingu 1 znajduje się szkic programu, który obsługuje urządzenie w jego nowej aplikacji. W listingu pominięto pewne proste funkcje, pełna wersja dostępna jest w repozytorium projektu na GitHubie. Oprócz samego pliku *.ino potrzebne są dodatkowe pliki z bibliotekami dla systemu. One również zawarte są w repozytorium.
#include <SPI.h>
#include <BLEPeripheral.h>
#include <BLEUtil.h>
#include "Arduino_nRF5x_lowPower.h"
// Szeregowy port debugowy
bool debug = true;
// Ograniczenie prędkości pętli; natywnie cykl ma ok. 35 ms
int speedHz = 1;
// Natywna maksymalna prędkość pęti (62.5 ms lub 16 Hz)
float speedMs = 1000 / speedHz;
bool awake = true;
bool wakeAttached = true;
// logowanie do portu szeregowego
#define VERBOSE_SERIAL
// pin do którego podłączono linię TX konwertera USB-UART
#define PIN_SERIAL_TX 13
// przerwanie od naładowanych kondensatorów
#define SLEEP_INT 18
// ADC do pomiaru napięcia ogniwa
#define SENSE_VOLTAGE 2
// Timestamp
float clocktime;
int secondCounter = 0;
int tenSecondCounter = 0;
int cellVoltage = 0;
volatile int cycles = 0;
volatile bool int1 = false;
// inicjalizuje peryferium Bluetooth.
BLEPeripheral blePeripheral = BLEPeripheral();
// inicjalizuje usługę Bluetooth
BLEService customService = BLEService("a000");
void wakeUp() {
cycles = 0;
int1 = true;
}
void setup() {
// zarządzanie zaslaniem
nRF5x_lowPower.powerMode(POWER_MODE_LOW_POWER);
#ifdef VERBOSE_SERIAL
Serial.begin(115200);
if(debug) {
Serial.print("STARTING\t");
}
delay(50);
#endif
// wyłączenie UART aby oszczędzać energię,
// gdy deugowanie jest zbędne
#ifndef VERBOSE_SERIAL
NRF_POWER->DCDCEN = 0x00000001;
NRF_UART0->TASKS_STOPTX = 1;
NRF_UART0->TASKS_STOPRX = 1;
NRF_UART0->ENABLE = 0;
#endif
// konfiguracja pinu do wybudzaania układu z stanu uśpienia
pinMode(SLEEP_INT, INPUT);
attachInterrupt(digitalPinToInterrupt(SLEEP_INT), wakeUp, RISING);
nRF5x_lowPower.enableWakeupByInterrupt(SLEEP_INT, RISING);
// konfigurcja nazwy i UUID usługi Bluetootgh
blePeripheral.setLocalName("data");
blePeripheral.setDeviceName("smartpill");
blePeripheral.setAdvertisedServiceUuid(customService.uuid());
blePeripheral.setAppearance(0xFFFF);
// konfiguracja atrybutów peryferium Bluetooth
blePeripheral.addAttribute(customService);
// inicjalizacja Bluetooth
blePeripheral.begin();
if(debug){
Serial.println("BLE MOBILE APP PERIPHERAL");
}
delay(500);
}
void loop() {
if(wakeAttached == false){
wakeAttached = true;
}
if((clocktime + speedMs < millis())) {
clocktime = millis();
#ifdef VERBOSE_SERIAL
Serial.println(" ");
Serial.print("TIME: ");
Serial.print( clocktime/1000 );
Serial.println(" s");
#endif
// pomiar napięcia ogniwa
cellVoltage = analogRead(SENSE_VOLTAGE);
#ifdef VERBOSE_SERIAL
Serial.print("cell voltage: ");
Serial.println(cellVoltage);
#endif
blePeripheral.end();
char buffer [8];
// Zamień 10 na 16 dla systemu szesnastkowego
itoa(int(cellVoltage), buffer, 10);
blePeripheral.setLocalName(buffer);
blePeripheral.begin();
#ifdef VERBOSE_SERIAL
Serial.print("TIME LOOP: ");
Serial.print(millis() – clocktime);
Serial.print("\tSeconds: ");
Serial.print(secondCounter);
#endif
}
Aplikacja niewiele różni się od innych programów Arduino. Po inicjalizacji programu, gdzie konfigurowany jest m.in. pin odpowiedzialny za wybudzanie układu oraz moduł Bluetooth, układ zapada w stan uśpienia, aż do momentu, gdy napięcie na wejściu P18 przekroczy odpowiedni próg, który spowoduje wyzwolenie przerwania. Wzrost napięcia oznacza, że napięcie na kondensatorach systemu jest na tyle wysokie, że układ może normalnie pracować przez pewien czas.
Układ mierzy napięcie ogniwa oraz wysyła informację o nim do zewnętrznej aplikacji. System komunikacji wykorzystuje bardzo ciekawą sztuczkę, mającą pozwolić na oszczędzanie energii. Komunikacja odbywa się poprzez interfejs Bluetooth, ale nie służy on do przesyłania danych. Pomiary są kodowane w nazwie (UUID) urządzenia, dzięki czemu system nie musi czekać z przesłaniem danych do momentu, gdy połączenie zostanie nawiązane. Pozwala to włączać transceiver Bluetooth tylko na ułamek chwili, co przekłada się na znaczną oszczędność energii zasilania.
Nie ma problemu, aby rozbudować układ o pomiar innych parametrów i przesyłanie ich na zewnątrz z pomocą tego rodzaju systemu. Układ ma szereg wolnych wejść, więc możliwe jest podłączenie dodatkowych sygnałów.
Aplikacja
Aplikacja pozwala bezprzewodowo rejestrować dane z pigułki – tak ma działać ten system, ma przesyłać dane z wnętrza naszego ciała. Najważniejsze pytanie brzmi, jak to zrobić za pomocą Bluetooth Low Energy – szeroko dostępnego standardu, który nie jest nastawiony na przerywaną łączność w ułamku sekundy. Samo nawiązanie połączenia (parowanie) z komputerem PC przez BLE może zająć kilka sekund, podczas gdy w tej aplikacji założenie jest takie, aby włączyć radio w pigułce tylko na ułamek sekundy.
Na szczęście istnieje sposób przesyłania danych przez BLE bez nawiązywania połączenia: przesyłanie informacje w postaci tzw. reklam GAP. Każde urządzenie BLE stale przesyła podstawowe informacje o sobie – to właśnie widoczne jest podczas skanowania dostępnych urządzeń Bluetooth w otoczeniu. Tylko część tych informacji (UUID) jest konieczna, wypisana nazwa („macbookabc”, „fitbit123”, „smartpillxyz” itp.) jest dla wygody użytkownika. Zamiast używać tych dodatkowych informacji o nazwie do nazywania kapsułek, system wykorzystuje to pole do przesyłania danych.
Za każdym razem, gdy pigułka zgromadzi na tyle dużo energii, aby włączyć się na ułamek sekundy, zmienia swoją nazwę widoczną dla urządzeń BLE na najnowsze wartości czujnika (na razie jest to odczyt z ADC mierzący napięcie baterii galwanicznej).
Aplikacja przeznaczona do współpracy działa na smartfonie. Stale skanuje ona w poszukiwaniu nowych urządzeń Bluetooth Low Energy (zbierając informacje o reklamach GAP). Pigułka nie musi czekać na nawiązanie połączenia ze smartfonem, bo aplikacja pobiera wartości czujników z informacji – nazwy urządzenia, w momencie wykrycia zmiany przez aplikację. To drastycznie skraca czas, w którym radio Bluetooth musi być włączone na pokładzie pigułki, co ma kluczowe znaczenie dla zminimalizowania zużycia energii.
Do zbudowania hybrydowej aplikacji (na Androida i na iOS) autor użył platformy Evothings (rysunek 3) bazującej na Cordova. To wygodny sposób na pisanie aplikacji na telefony komórkowe, wykorzystując do tego narzędzia klasycznie związane z web-devem, takie jak Javascript, HTML i CSS. Wystarczy elementarna wiedza na temat budowania stron internetowych, aby przygotować własne aplikacje współpracujące z urządzeniami BLE. Kody źródłowe aplikacji na smartfona również dostępne są w repozytorium autora na GitHubie.
Analiza kodu źródłowego tej aplikacji wykracza poza ramy tego artykułu.
Podsumowanie
Zaprezentowany system pokazuje nietypowe podejście do problemu pozyskiwania energii z otoczenia. Jak się okazuje możliwe jest ekstrahowanie energii z otoczenia z naprawdę najmniej oczywistych źródeł. Tego rodzaju systemy mogą pracować przez wiele tygodni bądź miesięcy bez konieczności wymiany baterii czy dostarczania energii spoza systemu. Układ tego rodzaju można zastosować nie tylko we wnętrzu ludzkiego organizmu, ale także w dowolnych innych miejscach, gdzie mamy do czynienia z kwasami czy nawet szerzej – z roztworami, które mogą pełnić rolę elektrolitu.
Opisany produkt nie jest urządzeniem medycznym (w dowolnym znaczeniu tego słowa). O ile rozważa się faktyczne zastosowanie systemów tego rodzaju, czy nawet testowane na zwierzętach, to żadne z podobnych urządzeń medycznych, jakie udało mi się znaleźć, nie zawiera takiego systemu zasilania. Samodzielne wykonywanie pigułki jest dobrą metodą do nauki czy poznania nowych technologii, ale nie zastąpi certyfikowanych urządzeń medycznych.
Nikodem Czechowski, EP
Źródła: