- Składniki wymagane do przypomnienia medycyny automatycznej przy użyciu Arduino
- Przypomnienie o medycynie Arduino przy użyciu obwodu Arduino
- Działanie automatycznego systemu przypominania o lekach
- Programowanie Arduino UNO dla przypomnienia o medycynie
Jeśli chodzi o naszych bliskich, zawsze chcemy, aby byli zdrowi i sprawni. Ale co się stanie, jeśli zachorują i zapomną o lekarstwie na czas. Martwilibyśmy się, prawda? W szpitalach jest wielu pacjentów i trudno każdemu pacjentowi przypomnieć o przyjmowaniu leków na czas. Tradycyjne sposoby wymagają ludzkich wysiłków, aby przypomnieć im o przyjmowaniu leków na czas. Era cyfrowa nie następuje po tym i możemy do tego używać maszyn. Aplikacja Smart Medicine Reminder jest bardzo szeroka i może być wykorzystywana przez pacjentów w domu, lekarzy w szpitalach oraz w wielu innych miejscach. Jeśli chodzi o przypominanie, istnieje wiele sposobów, aby to przypomnieć:
- Pokaż to na wyświetlaczu
- Wyślij powiadomienie na e-mail lub telefon
- Korzystanie z aplikacji mobilnych
- Alarm dźwiękowy
- Korzystanie z Bluetooth / Wi-Fi
- Zadzwoń
- Przypomnij o następnym czasie leku, przypominając jednocześnie aktualny czas
W zależności od potrzeb możemy łączyć sposoby. Aby uprościć sprawę, utworzyliśmy proste przypomnienie o medycynie za pomocą Arduino, które przypomina nam o przyjmowaniu leków 1 lub 2 lub 3 razy dziennie. Przedział czasowy można wybrać za pomocą przycisków. Pokazuje również aktualną datę i godzinę. Rozszerzymy go dalej o artykuły przychodzące do projektu IoT, w których do użytkownika zostanie wysłane powiadomienie e-mail lub SMS. To przypomnienie o lekach można również zintegrować z systemem monitorowania pacjenta.
Składniki wymagane do przypomnienia medycyny automatycznej przy użyciu Arduino
- Arduino Uno (możemy używać również innych płyt Arduino, takich jak Pro mini, Nano)
- Moduł RTC DS3231
- Wyświetlacz LCD 16x2
- Brzęczyk
- Led (dowolny kolor)
- Płytka prototypowa
- Wciskać przyciski
- Potencjometr 10 K.
- Rezystory 10K, 1K
- Przewody połączeniowe
Przypomnienie o medycynie Arduino przy użyciu obwodu Arduino
Pełny schemat obwodu do budowy inteligentnego pudełka na leki przy użyciu Arduino pokazano poniżej
Poniżej znajdują się połączenia pinowe Arduino z różnymi urządzeniami peryferyjnymi
Piny Arduino Piny peryferyjne
- 2 -----------------------------> D7 wyświetlacza LCD 16x2
- 3 -----------------------------> D6 wyświetlacza LCD 16x2
- 4 -----------------------------> D5 wyświetlacza LCD 16x2
- 5 -----------------------------> D4 wyświetlacza LCD 16x2
- 7 -----------------------------> 3. przycisk
- 8 -----------------------------> 2. przycisk
- 9 -----------------------------> 1. przycisk
- 11 -----------------------------> EN pin wyświetlacza LCD 16x2
- 12 -----------------------------> Pin RS wyświetlacza LCD 16x2
- 13 -----------------------------> + Ve Pin brzęczyka i diody
- A0 -----------------------------> Przycisk zatrzymania
- A4 -----------------------------> SDA z DS3231
- A5 -----------------------------> SCL z DS3231
- 3,3 V -----------------------------> Vcc DS3231
- Gnd -----------------------------> Gnd
W tym projekcie dotyczącym przypomnienia o medycynie, RTC DS3231 jest połączony za pośrednictwem protokołu I2C z Arduino Uno. Możesz również użyć RTC IC DS1307 do odczytu czasu za pomocą Arduino. RTC DS3231 ma również wbudowaną pamięć 32k, która może służyć do przechowywania dodatkowych danych. Moduł RTC zasilany jest z pinu 3,3 V Arduino uno. Wyświetlacz LCD 16x2 jest połączony za pomocą SPI. Buzze R służy do ostrzegania i przypomnieć, że nadszedł czas, aby wziąć lekarstwo. Używane są cztery przyciski, z których każdy ma inną funkcję wyboru. Pierwszy przycisk służy do przypomnienia o przyjęciu leku raz dziennie. Drugi przycisk służy do przypomnienia dwa razy dziennie, a trzeci przycisk służy do przypomnienia trzy razy dziennie. Czwarty przycisk służy do wyłączania brzęczyka, gdy użytkownik usłyszy ostrzeżenie.
Działanie automatycznego systemu przypominania o lekach
Pill Reminder Alarm jest zasilany za pomocą zasilanie 5V. Kiedy po raz pierwszy uruchamia się, wyświetla powitalny masaż jako „ Welcome to Circuit Digest ”. Ekran LCD jest ustawiony na cykliczne wyświetlanie trzech ekranów. W 1 st pokazuje ekran masować jak „ zachować zdrowie, Get Well Soon ”. Drugi ekran to ekran pomocy, który mówi, aby nacisnąć przycisk wyboru, aby wybrać dowolny przedział czasowy do przypomnienia (raz / dwa / trzy razy dziennie). Przedział czasowy można zmienić w programie i odpowiednio skonfigurować. W tej chwili ustawiliśmy to na trzy czasy, tj. 8:00, 14:00 i 20:00.
Podzieliliśmy przedziały czasowe na trzy tryby. Tryb 1 wybiera lekarstwo raz dziennie o 8 rano, gdy użytkownik naciśnie pierwszy przycisk. Tryb 2 wybiera wziąć lekarstwo dwa razy / dzień o 8 rano i 8 wieczorem, gdy użytkownik naciśnie klawisz 2 nd naciśnięcie przycisku. Tryb 3 wybiera brać leki trzy razy / dzień o 8 rano i 8 wieczorem, 2pm jeśli użytkownik naciśnie 3 rd przycisku.
Możemy również dodać funkcję drzemki brzęczyka na 10 minut (brak w tym projekcie). Gdy użytkownik wybierze żądane gniazda za pomocą przycisków, dane wprowadzone przez użytkownika są rejestrowane, a czas jest pobierany z RTC. Gdy czas zostanie dopasowany do wybranego przedziału czasowego, brzęczyk zacznie brzęczeć. Użytkownik może zatrzymać brzęczyk naciskając przycisk STOP. Ten sam proces jest kontynuowany dla następnego przypomnienia o slocie. Cały proces jest pokazany w wideo podanym na końcu tego artykułu.
Programowanie Arduino UNO dla przypomnienia o medycynie
Bardzo łatwo jest napisać program po przemyśleniu sposobów przypominania o przyjmowaniu tabletek. Tutaj pokaże przypomnienie na wyświetlaczu, brzęczy brzęczyk i wskaże to za pomocą diody LED. Ma również opcję wyboru trzech przedziałów czasowych (raz / dwa / trzy razy dziennie), a gdy nadejdzie czas, zacznie ostrzegać pacjenta za pomocą brzęczyka. Wtedy cały system będzie wyglądał następująco:
Użytkownik otrzymuje instrukcje pomocy na wyświetlaczu> Użytkownik wybiera przedziały czasowe (raz / dzień, dwa razy / dzień, trzy razy / dzień)> Wydrukuj komunikat potwierdzający na wyświetlaczu> Rozpoczęto odliczanie czasu> Brzęczyk i dioda LED włączają się, gdy czas zgadza się z miejscem wybranym przez użytkownika> Użytkownik zatrzymuje się o naciśnięcie przycisku stop> Koniec
Możemy zmienić program i sprzęt, jeśli chcemy dodać więcej funkcji. Aby to zrozumieć w dużo prostszy sposób, podzieliliśmy program na małe funkcje. Funkcje są łatwe do zrozumienia i wdrożenia. Kompletny program jest podany na końcu tego projektu. Zacznijmy od programu.
Ponieważ użyliśmy innych urządzeń peryferyjnych, takich jak wyświetlacz LCD 16x2, RTC DS3231, więc najpierw musimy dołączyć biblioteki. Wymagana biblioteka to:
Biblioteka EEPROM służy do śledzenia wybranych przez użytkownika danych wejściowych, jeśli Arduino nie jest włączone. A kiedy użytkownik włączy Arduino, uzyskuje poprzedni stan przycisków za pomocą biblioteki EEPROM. Biblioteka Wire.h jest używana, ponieważ moduł RTC DS3231 jest komunikowany za pomocą I2C.
Zawsze sprawdź, czy RTC jest prawidłowo podłączony lub czy nie jest uszkodzony, ponieważ RTC będzie odgrywać ważną rolę w utrzymywaniu czasu całego systemu przypominania.
if (! rtc.begin ()) {// sprawdź, czy rtc jest podłączony Serial.println ("Nie można znaleźć RTC"); podczas gdy (1); } if (rtc.lostPower ()) { Serial.println ("Utrata zasilania RTC, ustawmy czas!"); }
Regulację czasu można przeprowadzić na dwa sposoby: automatycznie przy użyciu czasu kompilacji systemu lub wprowadzając go ręcznie. Po ustawieniu czasu skomentuj poniższe linie, chyba że chcesz ponownie zmienić czas RTC.
rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52));
Ta instrukcja przełącznika służy do odczytywania poprzednio zapisanego stanu przycisku i wznawiania tego stanu po odpowiednim i dokładnym czasie przypomnienia.
val2 = EEPROM.read (addr); // odczytaj poprzednio zapisaną wartość przycisku, aby rozpocząć od miejsca, w którym został poprzednio pozostawiony switch (val2) { przypadek 1: Serial.println ("Ustaw na 1 / dzień"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; przerwa; przypadek 2: Serial.println ("Ustaw na 2 / dzień"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; przerwa; przypadek 3: Serial.println ("Ustaw na 3 dni"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; przerwa; }
Ta instrukcja jest używana do pobrania milis, które będą używane do synchronizacji i kontroli zdefiniowanego interwału cyklicznego wyświetlania ekranu.
currentMillisLCD = millis (); // start milisek dla przełączania ekranu LCD w określonych odstępach czasu
Zacznij czytać piny cyfrowe podłączone do przycisków.
push1state = digitalRead (push1pin); push2state = digitalRead (push2pin); push3state = digitalRead (push3pin); stopinState = digitalRead (stopPin);
Poniższa funkcja służy do odczytu stanu przycisku i zapisania go do pamięci EEPROM. Za każdym naciśnięciem przycisku stan jest zapisywany do pamięci EEPROM. Drukuje również komunikat na wyświetlaczu LCD o wyborze danych wejściowych użytkownika. Podobnie używane są funkcje push2 () i push3 () .
void push1 () {// funkcja ustawiania przypomnienia raz / dzień if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write (addr, 1); Serial.print ("Napis Push1:"); Serial.println (EEPROM.read (addr)); // do debugowania pushVal = 1; // zapisz stan push button-1 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Zestaw przypomnień"); lcd.setCursor (0, 1); lcd.print ("Raz / dzień!"); opóźnienie (1200); lcd.clear (); } }
Funkcja poniżej służy do wyłączania brzęczyka i diody. Zawsze dobrze jest dawać sugestie. Wydrukuj sugestię na wyświetlaczu „Weź lekarstwa z ciepłą wodą”.
void stopPins () {// funkcja zatrzymująca brzęczenie, gdy użytkownik naciśnie przycisk zatrzymania if (stopinState == 1) { // stopinState = 0; // pushPressed = true; pushpressed = 1; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Weź lekarstwa"); lcd.setCursor (0, 1); lcd.print ("z ciepłą wodą"); opóźnienie (1200); lcd.clear (); } }
Poniższa funkcja jest niezależna od trzymania czasu, ale zawsze wyświetla trzy ekrany, co pomaga użytkownikowi. Ponieważ dbamy o pacjentów, wydrukujmy powitanie, ponieważ wiemy, że wsparcie emocjonalne jest bardzo pomocne w szybszym leczeniu pacjentów. Możesz wybrać własną kreatywną wiadomość. Załóżmy wydrukować wiadomość jako „Bądź zdrowy, Get well soon”.
Drugi ekran służy do przekazywania pacjentom instrukcji „Naciśnij przyciski, aby przypomnieć…”. Trzeci ekran służy po prostu do pokazania aktualnej daty i godziny.
void changeScreen () {// funkcja dla Screen Cycling // Rozpocznij przełączanie ekranu co zdefiniowany interwałLCD if (currentMillisLCD - previousMillisLCD> intervalLCD) // zapisz ostatnią zmianę ekranu { previousMillisLCD = currentMillisLCD; ekrany ++; if (ekrany> maxScreen) { ekrany = 0; // wszystkie ekrany powyżej -> zacznij od pierwszego } isScreenChanged = true; } // Rozpocznij wyświetlanie bieżącego ekranu, jeśli (isScreenChanged) // zaktualizuj ekran tylko wtedy, gdy ekran zostanie zmieniony. { isScreenChanged = false; // reset dla następnej iteracji przełącznik (ekrany) { case getWellsoon: gwsMessege (); // wyzdrowiej szybko wiadomość przerwa; sprawa HELP_SCREEN: helpScreen (); // instrukcja podziału ekranu ; przypadek TIME_SCREEN: timeScreen (); // wydrukowanie daty i godziny ; domyślnie: // NIE USTAWIONE. przerwa; } } }
Ta funkcja jest używana do rozpoczęcia brzęczenia i migania diody LED jednocześnie, jeśli nadszedł wybrany czas.
void startBuzz () {// funkcja rozpoczynająca brzęczenie, gdy czas osiągnie zdefiniowany przedział // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink"); unsigned long currentMillis = millis (); if (currentMillis - previousMillis> = interval) { previousMillis = currentMillis; // zapisz ostatnie mrugnięcie diodą LED Serial.println ("Start Buzzing"); if (ledState == LOW) {// jeśli dioda LED jest wyłączona, włącz ją i odwrotnie: ledState = HIGH; } else { ledState = LOW; } digitalWrite (ledPin, ledState); } } else if (pushpressed == 1) { Serial.println ("pushpressed is true"); ledState = LOW; digitalWrite (ledPin, ledState); } }
Ta funkcja służy do porównywania wybranego przez użytkownika przedziału czasowego o 8 rano i zaczyna brzęczenie brzęczyka i miganie diody LED, aż użytkownik naciśnie przycisk stop. Podobnie funkcje void at2pm () i void at8pm są używane do uruchamiania brzęczyka i są kierowane o godzinie 14:00 i 20:00.
void at8am () {// funkcja, aby rozpocząć brzęczenie o 8 rano DateTime now = rtc.now (); if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// ///////////////////////////////////////////////// startBuzz (); ////////////////////////////////////////////////// /// } } } }
W ten sposób możesz po prostu utworzyć własne przypomnienie o medycynie automatycznej za pomocą Arduino. Możesz również użyć ESP8266 z Arduino, aby uczynić go projektem IoT, który będzie mógł wysyłać ostrzeżenie e-mail do użytkownika.
Pełny kod i film demonstracyjny znajduje się poniżej.