Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Lekomat - urządzenie do dozowania leków

zoon 03 Lip 2019 01:49 2595 11
  • Wstęp
    Lekomat - urządzenie do dozowania leków Lekomat - urządzenie do dozowania leków
    Lekomat to urządzenie służące do wydawania osobie niedowidzącej leków o określonych godzinach.
    Pomysł skonstruowania takiego urządzenia podrzuciła mi moja lepsza połówka a powstał z potrzeby chwili - senior będący pod naszą opieką dostał zalecenie otrzymywania leków w porze naszej nieobecności.
    Testowaliśmy wcześniej takie rozwiązanie ale obsługa okazała się zbyt skomplikowana, przyciski małe i nieczytelne a sposób wydawania leków nieprzyjazny dla seniora z niepełnosprawnościami.

    Opis konstrukcji
    Lekomat - urządzenie do dozowania leków Lekomat - urządzenie do dozowania leków Lekomat - urządzenie do dozowania leków Lekomat - urządzenie do dozowania leków
    Obudowa powstała na bazie drewnianego pudełka do decoupage'u. Składa się z trzech części: boczne są komorami na zasobniki na leki zaś centralna zawiera elektronikę sterującą i elementy wykonawcze (serwomechanizmy odpowiedzialne za otwieranie pokryw komór). Aby to uzyskać przeciąłem pokrywę na trzy części, wzmocniłem je listewkami a do części bocznych dodałem elementy służące do naciskania wyłączników krańcowych. Wszystkie elementy drewniane polakierowałem lakierem bezbarwnym. Ślizgi i przedłużenia ramion serwomechanizmów wyciąłem z laminatu i połączyłem za pomocą sprężyn, zastosowałem nowe zawiasy. Do centralnej części pokrywy przymocowałem boczki wycięte z tworzywa sztucznego i wykorzystałem wewnętrzne rowki pudełka (które oryginalnie służyły jako prowadnice do drewnianych przekładek) aby zamocować centralny moduł na wcisk. Wywierciłem w niej otwory na przycisk oraz buzzer. W dolnej części pudełka wywierciłem otwory na diody sygnalizacyjne, enkoder obrotowy, zasilanie, kabel USB oraz nóżki. Wyciąłem w niej również otwór na wtyczkę taśmową IDC służącą jako złącze dla wyświetlacza, którego czarną obudowę wydrukowałem z PLA. W bocznych komorach umieściłem zielone moduły na zasobniki, również wydrukowane z PLA i wyposażone w naciskane przez kieliszki dźwignie przenoszące nacisk na krańcówki. Jako zasobników na leki użyłem kieliszków do wódki 25 ml firmy Krosno z serii Basic Glass.

    Elektronika
    Schemat i PCB:
    Lekomat - urządzenie do dozowania leków Lekomat - urządzenie do dozowania leków

    Spis elementów:
    - Arduino Nano 3.0
    - 2 szt. serwo TowerPro MG-996R
    - LCD5110/PCD8544
    - Tiny RTC DS1307
    - stabilizator 3,3V
    - enkoder obrotowy
    - buzzer
    - 4 szt. LED
    - tranzystor npn
    - dioda prostownicza
    - kondensator elektrolityczny
    - oporniki
    - podświetlany przycisk
    - gniazdo zasilania
    - 4 szt. wyłączniki krańcowe
    - zasilacz 7,5V

    Był to mój pierwszy projekt w środowisku Arduino (pierwsze moduły Uno i Nano kupiłem we wrześniu 2017), nie programowałem też wcześniej w C. Początkowo próbowałem użyć wersji Uno z keypadem i wyświetlaczem znakowym ale gabaryty tego zestawu powodowały, że nie mogłem znaleźć pasującej obudowy. Po sugestii siostry zakupiłem w Empiku pudełko i wiedziałem już, że muszę oszczędzać miejsce - stąd wykorzystanie Arduino Nano, enkodera obrotowego i wyświetlacza od Nokii. W trakcie testów okazało się też, że początkowo zastosowane serwomechanizmy SG90 są zbyt słabe - po zmianie na MG-996R w centralnej części zrobiło się jeszcze ciaśniej. Planowałem połączenie urządzenia z siecią WiFi ale okazało się, że w Nano jest za mało pamięci na moje pomysły i w końcu nawet nie zamontowałem modułu ESP-015.

    W każdej z komór bocznych zamontowałem moduł odpowiadający z detekcję i sygnalizację: otwartej pokrywy oraz obecności zasobnika z lekami (po otwarciu pokrywy wnętrze podświetla jedna dioda a druga na zewnątrz sygnalizuje obecność kieliszka). Aby zaoszczędzić ilość pinów Arduino wykorzystywanych do komunikacji z modułem zastosowałem sztuczkę - LEDy o różnych kolorach oraz rezystory o różnych wartościach dające w rezultacie wyjściowy sygnał o kombinacji poziomów dających się stosunkowo łatwo wykryć na pinie analogowym.

    Urządzenie zasilane jest napięciem 7,5V ze względu na zasilanie serwomechanizmów. Pozostała część pracuje pod napięciem 3,3V (zastosowałem osobny stabilizator). Układ zmontowałem na płytce uniwersalnej.

    Na głównym ekranie urządzenia umieszczone są następujące informacje: aktualny czas, następne zdarzenie (godzina i strona podajnika) oraz statusy obu podajników. Naciśnięcie enkodera powoduje wejście do menu (po podaniu hasła). W menu można ustawiać i sprawdzać poszczególne elementy Lekomatu, otwierać i zamykać pokrywy itd.

    Link

    W momencie nadejścia zaprogramowanej godziny Lekomat zaczyna cyklicznie błyskać (wyświetlaczem oraz górnym przyciskiem) i piszczeć, należy wówczas nacisnąć górny przycisk - otwiera się wtedy odpowiednia pokrywa. Jeśli przez kilka sekund użytkownik nie wyjmie kieliszka - alarm rozlega się powtórnie.

    Link

    Lekomat można załadować w prosty sposób: wkładając kieliszek do pustej komory a następnie naciskając górny przycisk.

    Link

    Oprogramowanie
    Oczywiście używałem środowiska Arduino. Korzystałem też z edytora menu ale bibliotekę przerobiłem tak aby zamiast dwulinijkowego LCD obsługiwała LCD Nokii. Również obsługę enkodera musiałem zmienić ponieważ podczas normalnego użytkowania następował konflikt z serwomechanizmami (o ile pamiętam chodziło o programowanie timerów w Arduino Nano). Do tego RTClib oraz Adafruit_GFX i Adafruit_PCD8544.

    Sporo korzystałem z programów przykładowych dostarczonych wraz z bibliotekami oraz filmów, głównie na kanale educ8s.

    Podsumowanie
    Myślę, że łączny koszt elementów i materiałów zużytych do zbudowania obecnej wersji Lekomatu wyniósł około 200 zł. Zadebiutował on "produkcyjnie" pod sam koniec 2017 roku i po drobnych poprawkach oprogramowania działa po dziś dzień. Jedyną jak na razie usterką (która wystąpiła po ok. roku działania) było uszkodzenie jednego z serwomechanizmów - po jego wymianie urządzenie działa bezproblemowo. Drobną uciążliwością jest niedokładność RTC - w ciągu miesiąca potrafi się rozregulować o kilka minut. Jak się okazało przestawianie zegara jest stosunkowo najczęściej używaną funkcją menu bo na co dzień nie ma potrzeby wchodzenia do niego - większość działań wykorzystuje górny przycisk i czujniki. W planach na niesprecyzowaną przyszłość mam wykonanie kolejnej wersji Lekomatu - tym razem synchronizującej czas z internetem i prezentującej rejestr zdarzeń za pomocą przeglądarki.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Poziom 10  
    Offline 
    zoon napisał 7 postów o ocenie 17, pomógł 0 razy. Mieszka w mieście Lublin. Jest z nami od 2006 roku.
  • PCBway
  • PCBway
  • #5
    ex-or
    Poziom 20  
    zoon napisał:
    Drobną uciążliwością jest niedokładność RTC - w ciągu miesiąca potrafi się rozregulować o kilka minut.[...]W planach na niesprecyzowaną przyszłość mam wykonanie kolejnej wersji Lekomatu - tym razem synchronizującej czas z internetem[...]

    Alternatywą na szybki upgrade może być wymiana DS1307 na DS3231, który jest bardzo dokładny i rzekomo zgodny programowo.
  • #6
    rb401
    Poziom 34  
    ex-or napisał:
    rzekomo zgodny programowo


    Spojrzałem do dokumentacji i wygląda że w dużej części masz rację. Podstawowe rejestry od odczytu i zapisu czasu są na tym samym adresie i tego samego formatu. Inne funkcje już nie.
    Czyli jeśli jakieś urządzenie używa tylko tych podstawowych funkcji RTC, to podmiana DS1307 na o niebo lepszy DS3231 jest możliwa bez ingerencji w program.
    Warto wiedzieć jakby co.

    Co do DS3231 to akurat "odkopałem" moduł, który trzy i pół roku temu dla testów ustawiłem na dokładny czas i po paru sprawdzeniach odłożyłem na później. Sprawdziłem jaki czas ma teraz i okazało się że odchylił się tylko o 15 sekund !!! 8-O, co uważam za rewelacyjny wynik. Tak się zastanawiam czy w świetle takich właściwości DS3231, jest jakikolwiek sens bawić się w synchronizację czasu z internetem, w zastosowaniach jak w projekcie z tego wątku.





    Co do projektu lekomatu, to bardzo mi się podoba staranne wykonanie i to że jest to faktycznie użyteczna konstrukcja, ułatwiająca życie w takich trudnych okolicznościach.
    Może niezbyt podoba mi się gwałtowne otwieranie w momencie gdy naciskany jest przycisk, co już wspomniał kolega pietszyk. Według mnie występuje tu ryzyko zahaczenia ręką w pokrywkę i z tego powodu wymaga pewnej ostrożności od użytkownika.
    Ale według mnie, dużo istotniejszym problemem jest tutaj, to że brakuje tu niezależności od zasilania z sieci. Czyli jednak jakiś akumulator i tryb oszczędzania energii, gdy braknie sieci. Mogła by być wtedy ograniczona funkcjonalność (np. brak świecenia wyświetlacza, obsługi menu itp.) ale uważam że leki powinny jednak w sytuacji awaryjnej być wydane w założonym czasie bez względu na okoliczności.
  • #7
    zoon
    Poziom 10  
    Dziękuję za wszystkie dotychczasowe uwagi. Nad użyciem poleceń głosowych (w formie np. modułu odtwarzacza MP3 i głośnika podłączonego kablem albo przez BT) zastanawiałem się już wcześniej, zwłaszcza gdy kilkuminutowe piszczenie buzzera nie budziło użytkownika.

    ex-or napisał:
    rzekomo zgodny programowo


    rb401 napisał:
    Spojrzałem do dokumentacji i wygląda że w dużej części masz rację. Podstawowe rejestry od odczytu i zapisu czasu są na tym samym adresie i tego samego formatu. Inne funkcje już nie.
    Czyli jeśli jakieś urządzenie używa tylko tych podstawowych funkcji RTC, to podmiana DS1307 na o niebo lepszy DS3231 jest możliwa bez ingerencji w program.
    Warto wiedzieć jakby co.

    Co do DS3231 to akurat "odkopałem" moduł, który trzy i pół roku temu dla testów ustawiłem na dokładny czas i po paru sprawdzeniach odłożyłem na później. Sprawdziłem jaki czas ma teraz i okazało się że odchylił się tylko o 15 sekund !!! 8-O, co uważam za rewelacyjny wynik. Tak się zastanawiam czy w świetle takich właściwości DS3231, jest jakikolwiek sens bawić się w synchronizację czasu z internetem, w zastosowaniach jak w projekcie z tego wątku.


    Faktycznie, układ wygląda obiecująco - zamówiłem już taki moduł i na pierwszy rzut oka wygląda na to, że aktualnie używana biblioteka RTClib od Adafruit obsługuje go - wystarczy tylko zmienić w źródle jedną linijkę definiującą zmienną rtc.

    rb401 napisał:
    Co do projektu lekomatu, to bardzo mi się podoba staranne wykonanie i to że jest to faktycznie użyteczna konstrukcja, ułatwiająca życie w takich trudnych okolicznościach.
    Może niezbyt podoba mi się gwałtowne otwieranie w momencie gdy naciskany jest przycisk, co już wspomniał kolega pietszyk. Według mnie występuje tu ryzyko zahaczenia ręką w pokrywkę i z tego powodu wymaga pewnej ostrożności od użytkownika.


    Wydaje mi się, że konieczność naciśnięcia guzika na środkowej części powoduje, że ręka jest poza zasięgiem pokrywy ale spytam użytkownika i sam też poobserwuję urządzenie pod tym kątem.

    rb401 napisał:
    Ale według mnie, dużo istotniejszym problemem jest tutaj, to że brakuje tu niezależności od zasilania z sieci. Czyli jednak jakiś akumulator i tryb oszczędzania energii, gdy braknie sieci. Mogła by być wtedy ograniczona funkcjonalność (np. brak świecenia wyświetlacza, obsługi menu itp.) ale uważam że leki powinny jednak w sytuacji awaryjnej być wydane w założonym czasie bez względu na okoliczności.


    Jak dotąd nie było to u nas problemem - od wielu lat nie miewaliśmy przerw w zasilaniu, co najwyżej krótkie zaniki (ale to też rzadko). Za jakiś czas zakład energetyczny ma przełączyć linię napowietrzną zasilania na podziemną i pewnie tego dnia podłączę lekomat do UPSa :-) Sprawdzę jednak dobowy pobór energii aby się przymierzyć do tego. Trochę mnie martwi akumulatorowe zasilanie serwomechanizmów, bo dla MG996R maksymalny prąd to 2,5A a typowy to 900 mA przy 6V.
  • #8
    rb401
    Poziom 34  
    zoon napisał:
    Wydaje mi się, że konieczność naciśnięcia guzika na środkowej części powoduje, że ręka jest poza zasięgiem pokrywy ale spytam użytkownika i sam też poobserwuję urządzenie pod tym kątem.


    Tu chyba dużo zależy jak blisko jest osoba, na jakiej wysokości jest przycisk itp. .
    Nieco obawiam się że osoba praworęczna przy naciskaniu przycisku i w pewnej konfiguracji może ręką przyblokować otwierającą się prawą pokrywkę. A nie wiem jak długo wysterowywujesz to serwo bo nie masz krańcówki od pełnego otwarcia, tak że nie bardzo jest jak wykryć taką sytuację programowo i zareagować.
    Ale z drugiej strony jest też kwestia wypracowania nawyku przy obsłudze, by trzymać rękę tak a nie inaczej. Tak że możliwe że problem jest z mojej strony trochę "wydumany".


    zoon napisał:
    Trochę mnie martwi akumulatorowe zasilanie serwomechanizmów, bo dla MG996R maksymalny prąd to 2,5A a typowy to 900 mA przy 6V.


    Tak zauważyłem na Aliexpress że są ciekawe moduły przetwornic z Li-ion na 6V, dość wydajne prądowo (do znalezienia pod kodami DD0612SA i DD03AJTA).
  • #9
    michas
    Poziom 23  
    Bardzo fajny projekt :) możnaby użyć kieliszki zgodnie z ich pierwotnym przeznaczeniem i zawsze zaczynać dzień w dobrym humorze :)

    Pozdrawiam
    Michał
  • #10
    realzolw
    Poziom 8  
    chyba bezpieczniej by bylo jakby przycisk byl z boku
  • #11
    kula14
    Poziom 9  
    bardzo pożyteczne urządenie zwłaszcza gdy ma się w domu seniora
  • #12
    zoon
    Poziom 10  
    rb401 napisał:
    zoon napisał:
    Wydaje mi się, że konieczność naciśnięcia guzika na środkowej części powoduje, że ręka jest poza zasięgiem pokrywy ale spytam użytkownika i sam też poobserwuję urządzenie pod tym kątem.


    Tu chyba dużo zależy jak blisko jest osoba, na jakiej wysokości jest przycisk itp. .
    Nieco obawiam się że osoba praworęczna przy naciskaniu przycisku i w pewnej konfiguracji może ręką przyblokować otwierającą się prawą pokrywkę. A nie wiem jak długo wysterowywujesz to serwo bo nie masz krańcówki od pełnego otwarcia, tak że nie bardzo jest jak wykryć taką sytuację programowo i zareagować.
    Ale z drugiej strony jest też kwestia wypracowania nawyku przy obsłudze, by trzymać rękę tak a nie inaczej. Tak że możliwe że problem jest z mojej strony trochę "wydumany".


    Spytałem użytkownika - powiedział, że się nauczył otwierać tak, aby nie blokować pokryw. Na pytanie czy wolałby aby otwieranie było wolniejsze odpowiedział, że "dobrze jest jak jest" :-)

    Wysterowuję serwomechanizmy wysyłając kąt otwarcia (ustawia się go dla każdej pokrywy osobno w menu), biblioteka sama się martwi o ustawienie odpowiedniego PWM a serwomechanizm o to aby ten kąt utrzymać.

    rb401 napisał:
    zauważyłem na Aliexpress że są ciekawe moduły przetwornic z Li-ion na 6V, dość wydajne prądowo (do znalezienia pod kodami DD0612SA i DD03AJTA).


    Dzięki za cynk, obadam przy okazji.

    michas napisał:
    Bardzo fajny projekt :) możnaby użyć kieliszki zgodnie z ich pierwotnym przeznaczeniem i zawsze zaczynać dzień w dobrym humorze :)


    Tylko zawartość należałoby jakoś zabezpieczać przed parowaniem ;-)

    realzolw napisał:
    chyba bezpieczniej by bylo jakby przycisk byl z boku


    Może tak, ale wtedy istniałoby niebezpieczeństwo przesunięcia urządzenia (np. poza stół).

    kula14 napisał:
    bardzo pożyteczne urządenie zwłaszcza gdy ma się w domu seniora


    Ech, coraz częściej dochodzę do wniosku, że i mi by się przydał :-)