Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Alzheimer-Assistent

Komponenten und Verbrauchsmaterialien

Arduino MKR1000
× 1
Infineon Sensor Hub Nano
× 1
Nokia 5110 LCD
× 1
HC-05 Bluetooth-Modul
× 1
Breadboard (generisch)
× 1
Jumper (generisch)
× 1
SparkFun Drucktastenschalter 12 mm
× 1
Summer
× 1
FT1235 5W Sender
× 1
FT1236 5W Empfänger
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE
Blynk
IFTTT Maker-Dienst

Über dieses Projekt

Diese Tatsachen, die direkt von der Website der Alzheimer's Association (aufgenommen im September 2017) zitiert wurden, reichen aus, um jedem eine Vorstellung von den Problemen zu geben, die eine Person durchmachen muss, wenn sie oder ihre Angehörigen an Alzheimer leiden.

Als Hersteller habe ich darüber nachgedacht und beschlossen, ein tragbares Gerät zu bauen, ein System, das sowohl Patienten als auch ihren Betreuern helfen kann.

Dieses System sollte mindestens die folgenden Aufgaben erfüllen können:

  • Den Patienten daran erinnern, Aufgaben auszuführen, die er/sie täglich erledigen muss (wie Medikamente, Sport usw.)
  • Überwachen Sie, wo sich der Patient im Haus befindet
  • Benachrichtigen Sie die Hausmeister in Notfällen jeglicher Art
  • Zeige die Zeit an (es ist immerhin eine Uhr!)
  • Es sollte tragbar und einfach zu bedienen sein, auch für einen älteren Patienten
  • Die Kosten sollten auf einem Minimum gehalten werden

Als ich den Sensor Hub Nano von Infineon sah, schien er aufgrund seiner geringen Größe und seiner BLE-Fähigkeiten ein guter Kandidat für ein solches Projekt zu sein. Mit der genauen Druckmessung kann es verwendet werden, um zu erkennen, ob der Patient gestürzt ist und wo sich der Patient im Haus genau befindet.

Ich werde die folgenden Teile für das Bare-Bones-Projekt verwenden zu funktionieren:

  • Sensor Hub Nano von Infineon
  • Arduino MKR1000
  • HC-05 Bluetooth-Modul
  • Nokia 5110-Display

Sie werden wissen, was ich mit „Bare-Bones-Projekt“ meine, wenn Sie den Abschnitt „Alzheimer-Assistent personalisieren“ lesen.

So funktioniert's

In diesem Abschnitt werde ich kurz beschreiben, wie die Uhr funktioniert, und die Schritte skizzieren, die wir ausführen müssen, damit sie funktioniert.

Das Evaluierungsboard Sensor Hub Nano von Infineon verfügt über einen Luftdrucksensor DPS310, der seine Daten per Bluetooth durch das Evaluierungsboard sendet. Die Druck-, Höhen- und Temperaturwerte können in der Android-App von Infineon (hier herunterladen) sowie der Auswertesoftware SES2G eingesehen werden. Benutzer können mit der Bibliothek von Infineon auch Anwendungen für Android erstellen, basierend auf ihren eigenen Anforderungen.

Weitere Informationen zum Sensor Hub Nano finden Sie hier.

Aber ich möchte, dass der Alzheimer-Assistent ohne ein Android-Telefon dazwischen funktioniert. Es sollte ein Wearable sein, das sowohl eigenständig arbeiten kann als auch die Möglichkeit hat, sich mit einem Smartphone zu verbinden, um die Sensordaten anzuzeigen. Also habe ich beschlossen, dass ich aufgrund seines kleinen Formfaktors und seiner WiFi-Fähigkeit ein Arduino MKR1000-Board verwende und es auf irgendeine Weise mit dem Sensor Hub Nano verbinde.

Dies ist die Pinbelegung für den Arduino MKR1000, die Sie praktisch finden werden:

Ich hatte ein HC-05 Bluetooth-Modul und musste dieses also für die Verbindung zwischen dem Arduino MKR1000 und dem Sensor Hub Nano verwenden. Aber zuerst müssen wir den HC-05 unter Berücksichtigung der Logikpegel richtig an die Hardware-Tx- und Rx-Pins des Arduino anschließen. Mein Bluetooth-Modul arbeitet mit 3,3 V, was dem MKR1000 entspricht, sodass kein Spannungspegelumsetzer erforderlich war. Wenn Ihr Bluetooth-Modul jedoch auf 5 V-Ebene arbeitet, müssen Sie möglicherweise einen ähnlichen Pegelumsetzer wie den gezeigten verwenden.

Nach dem Abgleich der Spannungspegel müssen wir den HC-05 mit dem Sensor Hub Nano koppeln, um die Datenkommunikation zwischen ihnen zu starten, und eine einfache Möglichkeit finden, sie jedes Mal automatisch zu koppeln, wenn der Sensor Hub Nano in die Bluetooth-Reichweite des HC . gelangt -05.

Um dies zu tun, dachte ich daran, den HC-05 so zu konfigurieren, dass er als Bluetooth-Master-Gerät fungiert und ihn nur mit einer bestimmten MAC-Adresse koppelt; die des Sensor Hub Nano. Nachdem Sie es so konfiguriert haben, sucht der HC-05 nach dem Einschalten nach einem Gerät mit einer bestimmten MAC-Adresse (der des Sensor Hub Nano) und koppelt sich automatisch damit, so dass es dem Benutzer überlassen ist, zu senden und Daten empfangen.

Dies erfolgt mit AT-Modus-Befehlen für den HC-05 und wird im Abschnitt "Konfigurieren des Bluetooth-Moduls" behandelt.

Hinweis:Ich habe ein online gefundenes Dokument angehängt, das alle AT-Befehle auflistet, die der HC-05 unterstützt. Verwenden Sie sie also nach Bedarf.

Sobald es richtig gekoppelt und verbunden ist, ist das Senden von Befehlen an den Sensor Hub Nano wie ein Bluetooth-Terminal. Sie können die oben angegebenen Befehle verwenden, indem Sie sie einfach als String drucken, über den seriellen Hardware-Port, an den der HC-05 angeschlossen ist. Dies ist beispielsweise der Befehl, den Sie senden, um den Sensordatenfluss zu starten:

$start_sensor id=1 //Um den Fluss der Sensordaten zu starten 

Hier ist eine Liste der Befehle, die ich kenne:

$hello id=//Hallo
$info id=//Info
$sinfo id=1 //Sensorinfo
$set_mode sid=1;md=mode;val=bg //Niedrige Energie
$set_mode sid=1;md=prs_osr;val=16 //Standardmodus
$set_mode sid=1;md=prs_mr;val=32 //Hohe Präzision
$start_sensor id=1 //Start
$stop id=//Stop

Die vom Sensor Hub Nano kommenden Sensordaten liegen in diesem Format vor:

$1,t,36.9299,1154206 //Temperatur
$1,p,997.6813.1154206 //Druck
$1,a,130.4305.1154206 //Höhe

Hinweis:Ich möchte einen Hinweis auf Peter Smiths geben Blogpost, was mir geholfen hat, die Kommunikation mit dem Sensor Hub Nano über Bluetooth zu starten.

Sobald wir in der Lage sind, den Datenfluss aus dem Modul zu starten, benötigen wir eine Möglichkeit, die Daten daraus zu parsen. Dies war, muss ich zugeben, der schwierigste Teil des Projekts; Sobald Sie den Befehl zum Starten des Datenflusses senden, sendet der Sensor Hub Nano nur einen Datenstrom und überlässt es dem Gerät, das die Daten empfängt, alles Vernünftige daraus zu analysieren. Nachdem ich viele Methoden unterschiedlicher Komplexität ausprobiert hatte (auf die ich hier nicht eingehen werde), war dies die einfachste und effizienteste Methode, die mir eingefallen ist, um Daten vom Sensor Hub Nano zu analysieren.

void getSensorValues() { 
// Ruft die Sensorwerte vom Sensor Hub Nano über den Serial1-Port ab
String junkVal;
if (Serial1.available()) {
junkVal =Serial1.readStringUntil('\n');
junkVal =Serial1.readStringUntil('t');
t =Serial1.parseFloat();
junkVal =Serial1.readStringUntil('p');
p =Serial1.parseFloat();
junkVal =Serial1.readStringUntil('a');
a =Serial1.parseFloat();
junkVal =Serial1.readStringUntil('\n');
}
}

Ein Display wird auch mit dem Arduino verbunden, um mit dem Benutzer zu interagieren und Nachrichten anzuzeigen oder die Zeit oder die Daten des Sensors anzuzeigen (Mehr dazu, wenn Sie weiterlesen).

Sobald Sie die Daten im Arduino MKR1000 erhalten haben, können Sie die Daten aufgrund seiner drahtlosen Konnektivität an eine Reihe verschiedener IoT-Plattformen wie Cayenne oder Blynk senden.

Ich hatte mich dafür entschieden, Cayenne zu verwenden, da ich von seiner schönen Oberfläche und der einfachen Einrichtung beeindruckt war. Aber leider hatte es einige Fehler mit der MKR1000 WiFi-Verbindung, die uns daran hinderten, Pins auszuwählen. Ich sollte erwähnen, dass die Jungs von Cayenne sehr hilfsbereit waren, aber das Problem war immer noch nicht gelöst. Daher habe ich mich letztendlich für Blynk entschieden, aber sie sind in der Verwendung sehr ähnlich. Wenn Sie also nur ein paar Zeilen Arduino-Code ändern, können Sie von Blynk zu Cayenne wechseln, wenn Sie es testen möchten oder sobald das Problem behoben ist aufgelöst. Beide haben mehr oder weniger die gleichen Funktionen, es ist also nur Ihre eigene Präferenz. Der einzige Vorteil von Cayenne ist jedoch, dass Sie auch auf einem PC darauf zugreifen können, während Blynk nur auf Smartphones funktioniert.

Jetzt haben wir Daten vom Sensor Hub Nano erhalten, sie in den Arduino übertragen und auf eine IoT-Plattform (ich sage ab jetzt Blynk) übertragen, und Sie müssen den Alzheimer-Assistenten jetzt nur noch entsprechend personalisieren an Ihre eigenen Bedürfnisse angepasst werden, und das wird in einem anderen Abschnitt behandelt (Sturz- und Standorterkennung werden dort besprochen).

Hinweis:Ich habe versucht, jeden einzelnen Schritt im Detail zu dokumentieren, aber wenn Sie etwas nicht wissen (wie Code auf Ihr Arduino hochladen), wäre es eine bessere Idee, zum Arduino zu gehen Startseite , machen Sie sich eine Weile damit vertraut und kommen Sie dann dafür zurück, wenn Sie zumindest die Grundlagen kennen.

Bluetooth-Modul konfigurieren

Als erstes müssen Sie die MAC-Adresse Ihres Sensor Hub Nano Evaluation Kit ermitteln. Es wird viele verschiedene Möglichkeiten geben, dies zu tun, aber ich werde erzählen, wie ich es gemacht habe.

Koppeln Sie den Sensor Hub Nano mit Ihrem Smartphone:

Laden Sie hier die Sensor Hub Nano Evaluation App (für Android) von Infineon herunter und schalten Sie Ihren Sensor Hub Nano ein. Öffnen Sie die App und der Sensor Hub Nano wird als "IFX_NANOHUB" mit der MAC-Adresse darunter angezeigt.

Notieren Sie dies, da Sie es später brauchen werden.

Hinweis:Sie sollten den Sensor Hub Nano besser von Ihrem Smartphone trennen, wenn Sie ihn jetzt nicht verwenden, denn wenn Ihr Telefon mit Bluetooth in der Nähe ist und der Sensor Hub Nano gekoppelt ist, verbindet sich das Telefon automatisch damit . Und wenn Sie den HC-05 einrichten und versuchen, ihn mit dem Nano Hub zu koppeln, wird er einfach nicht verbunden.

Um den HC-05 in den AT-Modus zu versetzen:

Im AT-Modus können wir die Einstellungen des Bluetooth-Moduls HC-05 konfigurieren; Stellen Sie die Baudrate ein oder legen Sie fest, ob eine Verbindung als Slave- oder Master-Gerät erfolgen soll und mehr. Wir müssen einige Einstellungen für das Modul ändern, damit es Daten erfolgreich vom Sensor Hub Nano von Infineon abrufen kann.

Laden Sie zuerst die Skizze "AT Commands" auf den Arduino MKR1000 hoch. Dies ermöglicht es uns, dem Bluetooth-Modul im AT-Modus über den Arduino MKR1000 Befehle zu erteilen.

// Originalskizze aus Martyn Curreys Blog hier:
// http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/
//
// Von mir modifizierter Sketch, um mit Arduino MKR1000 zu arbeiten!
//
// Grundlegende Bluetooth-Skizze
// Verbinden Sie das HC-05-Modul und kommunizieren Sie über den seriellen Monitor
//
// Die HC-05-Standardeinstellungen beim ersten Einschalten in den Kommunikationsmodus.
// Muss in den AT-Modus versetzt werden
// Nach einem Werksreset beträgt die Standardbaudrate für den Kommunikationsmodus 38400
char c =' ';
void setup() {
// Starten Sie die serielle Kommunikation mit dem Host-Computer
Serial.begin(9600);
Serial.println("Arduino mit HC-05 ist fertig");
// Kommunikation mit dem HC-05 mit 38400 starten
Serial1.begin(38400);
Serial.println("Serial1 begann bei 38400");
}
void loop () {
// Lesen Sie weiter von HC-05 und senden Sie an Arduino Serial Monitor
if (Serial1.available ())
{
c =Serial1.read ();
Serial.write(c);
}
// Lesen Sie weiter vom Arduino Serial Monitor und senden Sie es an HC-05
if (Serial.available ())
{
c =Serial.read( );
// Spiegeln Sie die Befehle zurück auf den seriellen Monitor
// macht es einfach, den Befehlen zu folgen
Serial.write(c);
Serial1.write(c);
}
}

Verdrahten Sie dann nur das Bluetooth-Modul mit dem Arduino MKR1000 gemäß dem Diagramm.

Hinweis:Es wäre eine gute Idee, alles zuerst auf einem Steckbrett zu verkabeln und mit der richtigen Verkabelung fortzufahren, sobald Sie es richtig eingerichtet haben.

Wenn Sie versuchen, den Sensor Hub Nano und den HC-05 einzuschalten, werden Sie feststellen, dass sie sich zu diesem Zeitpunkt nicht automatisch verbinden. Das würden Sie sehen:

Um die HC-05-Einstellungen zu ändern, müssen Sie Ihr Bluetooth-Modul in den AT-Modus versetzen. Die Methode dafür hängt davon ab, welches Breakout-Board Sie haben, und Sie müssen es möglicherweise anders machen. Wenn Sie ein anderes Modul als das haben, das ich habe, gehen Sie zu Martyn Curreys Blog hier, wo Sie detaillierte Informationen darüber finden, wie Sie die HC-05-Bluetooth-Module im AT-Modus erhalten. Wenn Sie nicht weiterkommen, googeln Sie Ihr Problem oder kommentieren Sie und ich werde versuchen zu helfen.

Mein Bluetooth-Modul hat den Knopfschalter, daher muss ich die folgenden Schritte ausführen, um es in den AT-Befehlsmodus zu bringen (vergessen Sie nicht, den AT-Befehlscode auf den Arduino hochzuladen):

  • Unterbrechen Sie die Stromversorgung des Moduls. (TX- und RX-Leitungen sind noch verbunden!)
  • Drücken und halten Sie den Knopfschalter am Modul geschlossen
  • Schalte die Stromversorgung ein, während du den Knopfschalter weiterhin gedrückt hältst
  • Wenn die LED aufleuchtet, lassen Sie den Schalter los

Ein Video, das zeigt, wie man den HC-05 in den AT-Modus bringt:

Sobald Sie sich im AT-Modus befinden, werden Sie beim HC-05 einen erheblichen Unterschied im Blinkmuster der LED feststellen. Im Kommunikationsmodus blinkt die LED schnell, etwa 5 Mal pro Sekunde, während die LED im AT-Modus alle paar Sekunden einmal blinkt.

Einrichten des HC-05-Moduls:

Öffnen Sie den seriellen Monitor, stellen Sie die Baudrate auf 9600 und wählen Sie „Both NL &CR“.

Hinweis:Sie müssen es auf Newline und Carriage Return setzen, oder AT-Befehle funktionieren nicht.

Geben Sie „AT“ in den seriellen Monitor ein und Sie sollten ein „OK“ erhalten. Wenn Sie dies tun, können Sie fortfahren und die Befehle wie ich erteilen.

Grundsätzlich müssen wir diese Einstellungen im AT-Modus ändern:

  • Alle derzeit gekoppelten Geräte löschen
  • Verbinden Sie es nur mit einer angegebenen Bluetooth-MAC-Adresse
  • Setzen Sie den Bluetooth-Verbindungsmodus auf "Master"
  • Geben Sie die MAC-Adresse an, mit der wir eine Verbindung herstellen möchten
  • Stellen Sie die Baudrate auf 115200, das Stoppbit auf 2 Bit und die gerade Parität ein

Die obigen Anweisungen wurden gegeben, damit Sie sie auch dann verwenden können, wenn Sie ein anderes Bluetooth-Modul haben, indem Sie sich auf die Befehle und deren Funktionen beziehen. Aber jetzt werde ich die Befehle auflisten, die ich dem HC-05 zum Koppeln mit dem Sensor Hub Nano gegeben habe.

  • AT+RMAAD
  • AT+CMODE=0
  • AT+ROLE=1
  • AT+BIND=1234,56,abcdef (Durch die MAC-Adresse des Sensor Hub Nano ersetzen)
  • AT+UART=115200,0,0

Hier ist ein Protokoll meiner AT-Befehle als Referenz:

Sie sollten jetzt den Arduino ausstecken, um das Bluetooth-Modul auszuschalten. Dadurch wird es wieder in den Kommunikationsmodus versetzt.

Hinweis:Wenn Sie etwas in den HC-05-Einstellungen vermasseln, ist es eine gute Idee, das Modul auf die Standardeinstellungen zurückzusetzen und mit dem Befehl AT+ORGL von vorne zu beginnen

Verbindung testen:

Jetzt müssen Sie testen, ob der letzte Schritt erfolgreich war. Sie können dies tun, indem Sie den Sensor Hub Nano einschalten. Die blaue LED blinkt alle paar Sekunden sehr langsam. Schließen Sie dann Ihren Arduino an Ihren PC an und beachten Sie die Änderung der LED-Blinker sowohl am HC-05 als auch am Sesnor Hub Nano.

Schauen Sie sich das Blinken jetzt an und vergleichen Sie es mit dem Blinken zuvor:

Es gibt einen deutlichen Unterschied, und Sie sollten wissen, dass beide Module verbunden sind. Sie können jetzt zum nächsten Teil übergehen, das Projekt verdrahten und testen.

Hinweis:Wenn Sie Ihr Smartphone schon einmal mit dem Sensor Hub Nano gepaart haben, müssen Sie es möglicherweise wieder entkoppeln, da es sonst zu Verbindungsproblemen kommen würde. Es kann jeweils nur eine Verbindung zu einem Gerät hergestellt werden.

Testen des Bare-Bones-Projekts

Sobald Sie eine ordnungsgemäße Verbindung zwischen dem HC-05 und dem Sensor Hub Nano durch die LED-Blinkmuster bestätigt haben, fahren Sie mit der Einrichtung der Blynk-App auf dem Smartphone fort.

Einrichten der Blynk-App:

Laden Sie hier die Blynk-App (falls noch nicht geschehen) für Ihr iOS- oder Android-Gerät herunter und scannen Sie den QR-Code über die Blynk-App. Es repliziert automatisch die grundlegenden Widgets, die zu diesem Zeitpunkt erforderlich sind.

Sie sehen einen ähnlichen Bildschirm:

Nehmen Sie an dieser Stelle keine Änderungen vor und lesen Sie einfach weiter.

Installieren der erforderlichen Bibliotheken:

Sie müssen zwei verschiedene Bibliotheken für die Arduino-IDE installiert haben, damit der Code fehlerfrei kompiliert werden kann. Sie sind:

  • Blynk , um es mit Ihrem Smartphone zu verbinden
  • u8g2lib , für die Anzeige

Es gibt zwei Möglichkeiten, die erforderlichen Bibliotheken zu installieren. Die erste erfolgt über den ‚Library Manager‘, der in den neueren Versionen der Arduino IDE verfügbar ist, und die zweite ist die manuelle Installation. Beide Methoden werden hier im Detail beschrieben, also schau dir den Link an, da ich darauf nicht eingehen werde.

Code hochladen und testen:

Nachdem Sie die Bibliotheken installiert haben, laden Sie den beigefügten Code herunter und nehmen Sie einige Änderungen daran vor. Sie müssen Ihren Authentifizierungscode von Blynk (der Ihnen per E-Mail zugesendet wird, wenn ein neues Projekt in Blynk erstellt wird) sowie Ihre WLAN-SSID und Ihr Passwort hinzufügen. Laden Sie anschließend den Code auf den MKR1000 hoch.

Nachdem Sie den Code hochgeladen haben, verdrahten Sie die Schaltung gemäß dem Schaltplan.

Öffnen Sie dann die Blynk-App auf Ihrem Smartphone, öffnen Sie das Alzheimer-Assistenten-Projekt und drücken Sie die Play-Taste. Schließen Sie den MKR1000 an (mit HC-05 und verkabeltem Display), und Sie sollten das Logo Alzheimers Assistant auf dem Display sehen. Es bleibt für einen Moment stehen und Sie können dann die Meldung „Warten auf Sensor Hub Nano . sehen “. Schalten Sie den kleinen Schalter am Sensor Hub Nano ein, um sicherzustellen, dass Sie sich in Bluetooth-Reichweite des HC-05-Moduls befinden. Es sollte "Mit Sensor Hub Nano von Infineon verbunden" stehen ", und nach einigen Sekunden sollten Sie die Drucktemperatur- und Höhenwerte auf Ihrem Smartphone sehen.

Und nach wenigen Sekunden sehen Sie auch die Uhrzeit im 24-Stunden-Format sowie das Datum, und das synchronisiert sich mit dem Internet.

Dies ist ein Video zum Ausprobieren:

Wenn ja, herzlichen Glückwunsch, Sie haben den schwierigen Teil der Einrichtung abgeschlossen und können es jetzt für einzelne Patienten nach ihren Vorlieben personalisieren.

Personalisierung des Alzheimer-Assistenten

Was wir bisher eingerichtet haben, ruft Sensordaten von Infineons DPS310 in einem ordentlichen und eleganten Setup ab, aber um daraus etwas nützliches zu machen, müssen wir das Setup nach individuellen Anforderungen und Vorlieben konfigurieren. Daher werde ich in diesem Abschnitt über den Code sprechen und darüber, wie der Alzheimer-Assistent so modifiziert werden kann, dass er gemäß den Vorlieben jedes Benutzers funktioniert. Ich gebe das Code-Snippet für jedes "Feature" und Sie können es mit kleinen Änderungen einfach in den Hauptcode einfügen.

Hinweis:Wenn Sie sich den Code ansehen, den ich für das 'Bare-Bones-Projekt' angehängt habe, werden Sie feststellen, dass er Funktionen verwendet, die in den BlynkTimer eingeschlossen sind. Ich wäre eine gute Idee, sie zu verwenden, wenn Sie Anpassungen vornehmen möchten, da sie Aufgaben in einem bestimmten Intervall ausführen und den Blynk-Flood-Fehler verhindern können, der auftritt, wenn Ihre Hardware viele Anfragen an Blynk sendet. Außerdem ist der Code „nackte Knochen“ in dem Sinne, dass alle Funktionen vorhanden, aber nicht im Hauptcode enthalten sind; Der Benutzer muss den Hauptcode nach Bedarf bearbeiten und muss möglicherweise das Zeitintervall anpassen, in dem jede Funktion ausgeführt wird.

Das DPS310:-

Der DPS310 von Infineon ist ein kostengünstiger digitaler barometrischer Drucksensor, der eine sehr hohe Genauigkeit bei einem sehr kleinen Formfaktor bietet. Aus diesem Grund ist es perfekt in einem solchen Projekt zu verwenden, und die Werte können verwendet werden, um Stürze bei einem älteren Patienten zu erkennen oder in welchem ​​​​Raum sich der Patient genau befindet.

Hinweis:Ich habe das Smartwatch-Gehäuse noch nicht hergestellt, daher verwende ich den Sensor Hub Nano an meiner Hand, der über Bluetooth mit dem Arduino verbunden ist, wie in diesem Bild:

Sturzerkennung: Um Stürze zu erkennen, müssen wir einen Sturzwert (die Differenz des Luftdrucks zwischen zwei Messwerten über einen bestimmten Zeitraum) angeben und einen Abstand einrichten. Wenn beispielsweise die Höhenänderung zwischen zwei aufeinanderfolgenden Werten (über einen Zeitraum von sagen wir einer Sekunde) zwischen dem Fallwert ± dem Abstandswert liegt, wird ein Fall erkannt.

Ich habe ein paar Tests durchgeführt und festgestellt, dass der Fallwert 0,7 und der Abstandswert ±0,2 betragen sollte, aber sie funktionieren möglicherweise nicht in allen Situationen. Dies hat einen einfachen und verständlichen Grund:Wenn eine Person stürzt, kann dies auf viele verschiedene Arten geschehen. Daher wird die Verwendung eines sekundären Sensors (wahrscheinlich eines Beschleunigungsmessers) erforderlich sein, um eine höhere Genauigkeit des Sturzerkennungssystems zu erreichen, und dies wird in die zukünftige Arbeit aufgenommen. Aber es könnte immer möglich sein, dass es andere, genauere Algorithmen zur Erkennung von Stürzen gibt, und ich bin offen dafür, sie zu hören; Fühlen Sie sich frei zu kommentieren, wenn Sie Ideen dazu haben.

Ein Video, das die Sturzerkennung demonstriert:

Erkennen, wo sich der Patient befindet: Dies funktioniert ähnlich wie der Fallerkennungsalgorithmus. Wenn Sie beispielsweise wissen möchten, auf welcher Etage sich der Patient befindet, können Sie den aktuellen Höhenwert nehmen und vom vorherigen subtrahieren. Und vergleichen Sie dann die Differenz mit einem vordefinierten Wert. Dadurch wird angezeigt, auf welcher Etage sich der Patient befindet.

Es wäre nur eine Frage der einfachen Wenn- und Sonst-Logik, um zu bestimmen, auf welcher Etage sich der Patient befindet (Höhenwerte sind bereits im Hauptcode enthalten). Dies könnte mit den LED-Widgets in Blynk angezeigt werden.

Hinweis:Ich habe die Standorterkennung nicht in den Hauptcode aufgenommen, aber Benutzer können sie nach Bedarf hinzufügen, vergessen Sie nur nicht, sie als Blynk-Timer-Funktion zu verwenden.

Die gleiche Technik könnte auch verwendet werden, um zu erkennen, in welchem ​​Raum sich eine Person befindet. In diesem Fall wäre ein zweiter Sensor wie ein Bewegungssensor erforderlich, da sonst viele Fehlauslöser auftreten könnten.

Temperatur: Das DPS310 zeigt auch den Temperaturwert an, mit dem wir uns auf ein mögliches Missgeschick des Patienten, beispielsweise einen Brand, aufmerksam machen können. Wenn die Temperatur auf einen bestimmten Wert ansteigt, sagen wir 45℃, alarmiert dies den Hausmeister.

Da der DPS310-Sensor jedoch nicht direkt auf der Haut befestigt ist (zumindest in diesem Anwendungsfall), erhalten wir nicht die Körpertemperatur, sondern eher die Temperatur des Sensor Hub Nano.

Der Code dafür ist sehr einfach (verwende ihn überall in der Hauptschleife) und könnte etwa so aussehen:

if (t> maxTemp) { 
//Tu was du willst, wenn die Temperatur höher als das Maximum ist
}
else {
//Tu was du willst wenn die Temperatur niedriger als das Maximum ist
}

Hinweis:Alle obigen Grafiken wurden mit der SESG2-Evaluierungssoftware von Infineon erstellt.

Ein Summer und ein Schalter:-

Ich habe dies noch nicht erwähnt, aber ein Summer und ein Schalter sollten auch im System vorhanden sein und sie werden auch sehr hilfreich sein. Zum Beispiel könnte ein Summer verwendet werden, um die Aufmerksamkeit des Patienten zu erregen, wenn es zum Beispiel Zeit ist, Medikamente einzunehmen, und der Schalter könnte als Sicherheitsvorrichtung verwendet werden.

Und weil wir Blynk verwenden, könnte der Knopfschalter so eingestellt werden, dass beim Drücken eine Benachrichtigung auf dem Telefon des Hausmeisters erscheint oder dieser anruft oder eine SMS sendet (das könnte mit IFTTT erfolgen und wird später gegeben ). Dies könnte der Codeausschnitt dafür sein:

void emailOnButtonPress() 
{
// *** WARNUNG:Sie dürfen NUR EINE E-MAIL PRO 15 SEKUNDEN senden! ***
// Senden wir eine E-Mail, wenn Sie die Taste drücken
// verbunden mit dem digitalen Pin 2 Ihres Arduino
int isButtonPressed =!digitalRead(2); // Zustand invertieren, da Button "Active LOW" ist
if (isButtonPressed) // Sie können eine beliebige Bedingung schreiben, um den E-Mail-Versand auszulösen
{
Serial.println("Button wird gedrückt ."); // Dies ist im Serial Monitor zu sehen
Blynk.email("[email protected]", "Subject:Button Logger", "You just push the button...");
// Oder, wenn Sie die in der App angegebene E-Mail verwenden möchten (wie für den App-Export):
//Blynk.email("Betreff:Button Logger", "Sie haben gerade den Button gedrückt. ..");
}
}

Es wird dem Blynk-Beispielcode entnommen und verwendet einen Interrupt, um die Schaltfläche zu überprüfen. Dies kann vom Patienten verwendet werden, um den Hausmeister in jedem Notfall zu alarmieren, beispielsweise bei einem Sturz, der vom Sturzerkennungsalgorithmus nicht erkannt wurde. Den vollständigen Beispielcode erhalten Sie hier, mit dem eine E-Mail gesendet wird, sobald eine Schaltfläche gedrückt wird.

Der Summer könnte verwendet werden, um Töne zu erzeugen (mit dem Arduino-Befehl Tone() - mehr Informationen hier), um den Patienten an eine Aufgabe wie Medikamente oder Sport zu erinnern.

Das Display:-

Ein wesentlicher Teil des Projekts, den sich der Nutzer tatsächlich ansieht, ist die Anzeige. Die Displays des Nokia 5110 sind allgemein erhältlich, einfach einzurichten und günstig, aber sie sind nicht so auffällig, insbesondere wenn sie in einem solchen System verwendet werden. OLED-Displays mit einer höheren Auflösung sind eine sehr gute Alternative dazu, und Sie können den Code leicht ändern, um mit einem zu arbeiten, da ich die u8g2-Bibliothek (hier github) verwendet habe. Wählen Sie hier eines der Display-Modelle aus und fügen Sie es am Anfang der Skizze hinzu (natürlich entfernen Sie die Nokia 5110-Reihe!). You will need to wire it up according to what it is in the code and you’re ready to go. You can also use bitmap images with a higher resolution display. You can also change the font for the text on the display, select fonts from the huge list here and edit the name of the font in the code.

Note:You may have to change the pixel positions for the text in the code if you use a display with a higher resolution.

That was just a brief description of the library used to get the display working. But, now I will tell you how to edit the code to get Alzheimer's Assistant to show the time or the Sensor Hub Nano data (temperature, Altitude and pressure).

Displaying time: To display the time, you could simply use an RTC (or time keeping module) but as we're connected to the Internet, it would be much more easier to use the Internet to sync the time. And as we're using Blynk that would make it even more simpler. You just need the RTC widget in your project. Now with a few lines of code, you can automatically retrieve the time from the Blynk server (Make sure to set your timezone from the Blynk widget). The main code is set to display the time by default (not the sensor values, discussed next)

Note:The time displayed on the screen could go up or down a minute, as it is synced from the internet, but despite that, I have tested it for a long time and have found it to be very accurate (just a difference of a few seconds).

Displaying the Sensor Hub Nano data: We could just as well display data from the Sensor Hub Nano in the display. Not that it would benefit the patient, but its good for debugging purposes, should you need it. That can be done with the following code snippet:

void showSensorValues() { 
//Shows the sensor values on the display
char bufT[10];
char bufP[10];
char bufA[10];
String(t).toCharArray(bufT, 10);
String(p).toCharArray(bufP, 10);
String(a).toCharArray(bufA, 10);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x10_tf );
//Display the temperature
u8g2.drawStr(0, 10, "T:");
u8g2.drawStr(12, 10, bufT);
u8g2.drawStr(73, 10, "C");
u8g2.drawCircle(70, 4, 1, U8G2_DRAW_ALL);
u8g2.drawHLine(0, 12, 85);
//Display the pressure
u8g2.drawStr(0, 26, "P:");
u8g2.drawStr(12, 26, bufP);
u8g2.drawStr(60, 26, "mBar");
u8g2.drawHLine(0, 28, 85);
//Display the altitude
u8g2.drawStr(0, 42, "A:");
u8g2.drawStr(12, 42, bufA);
u8g2.drawStr(72, 42, "m");
u8g2.drawHLine(0, 44, 85);
//Send the values to the display
u8g2.sendBuffer();
}

Don't forget to run this command to get the sensor data below:

getSensorValues(); 

But that's not all for the display. As I said in the start, Alzheimer's Assistant should be able to remind the patient of the tasks which need to be done daily, such as when to take medications or to remind the patient to exercise.

Using Eventor widget to remind:-

For that, we will be using the Eventor widget (check here for details) in Blynk.

Add the Eventor widget into your project (It's already there if you scanned the QR code above), and just follow the screenshots to see how to set it up:

In the above example, the Eventor widget is used to set up a fall detection notification.

Using the Eventor widget to remind is done by this code:

BLYNK_WRITE(vEVENTOR_PIN) { 
//Use the Eventor widget to check if it's time to do a task (take medication in this case)
int currentValue =param.asInt(); // 0 to 1
if (currentValue ==1) {
//Do here what you want to when its time for medication
showPillReminder();
playBuzzerReminder();
//This is just a tone, I haven't made it in the main code, but you can if you want!
}
else {
//If it's not the time for medication, do nothing
}
}

And the result on the display when it's the time for medication:

The same for exercise:

This is done by typing:

showExerciseReminder(); 

Instead of:

showPillReminder(); 

The eventor widget could, as said above, be used for a number of things. For example, you could set that an increase in temperature could result in sending an e-mail, and with no code modification!

Using different modes of the Sensor Hub Nano:-

You can test out the use of different modes for the Sensor Hub Nano. Using the following commands:

sendCommand(LOW_ENERGY);
sendCommand(STANDARD_MODE);
sendCommand(HIGH_PRECISION);

Using Blynk to switch modes could be more efficient. For that, set up your Blynk app like this:

As this had no use for me, I did not add it it in the main code, but you could always do so as needed (The commands are present, you just need to add them with a bit of logic in the main sketch).

Using Blynk and IFTTT:-

Blynk can allow any Arduino project to easily harness the power of IFTTT.

This is because you can use Blynk to send a webhook request to the IFTTT Webhooks channel (previously called Maker channel), and you could create an IFTTT applet which waits for the webhook to be triggered (from the Blynk and Arduino side) and you could get it to trigger anything else in response to that.

A simple example on how to use IFTTT and Blynk with webhooks :

The Blynk webhook widget could be used to send a webhook request like this:

This is the IFTTT webhook channel:

And using webhooks to trigger IFTTT is not the only method. IFTTT can also be triggered by using Blynk to send emails and tweets.

You have now made an applet. Time to test it.

Open "Services" in IFTTT and then select "Webhooks". Go to "Settings" and there you will see a URL. Copy that and open it in a new tab. There, instead of {event}, type the event name (which you set earlier). That was "button_pressed" for me, and so when I click on "Test it", this is the result after a few seconds:

Now that you have confirmed the Webhook works, you can just write the URL in the Blynk webhook settings and get a GET or POST request (through the Blynk webhook widget)

And, instead of SMS, you could just as well use phone calls, or even Twitter and Facebook, if you want, and it's just as simple That is the power of IFTTT.

It's the same thing as my smart home controller project here, and I also discussed it in detail there, but it is a great thing which I couldn't go by without mentioning.

Final Touches

By now, almost all of the electronics part of the project is complete, but a few things still remain. Read on for them, and in the end, I will list the future work which should be done to improve this project.

Battery and charging:

The MKR1000 has a port for a LiPo battery, which means you could attach one. But I don't have one at the moment so I will not be going into that but you should check out the website for the Arduino MKR1000 if you need information on that.

For charging, you have two options, using the MKR1000 USB port directly, and the other one is to use wireless charging, if you have it. I will be using the wireless charging for it. This is because I already have a wireless charging receiver and transmitter made by Futara Elettronica.

To use the receiver and transmitter, it's just a simple matter of providing the specified voltage to the transmitter. That will be the 'dock', where you can place Alzheimer's Assistant to charge. At the receiver side, you will just have to cut and attach a spare USB micro B cable (which goes to the MKR1000 USB port) and connect the other side to VCC and ground by looking at the pinout.

Just look at the images below to see how to wire it up:

And the end result:

The Enclosure:

As with every project, an enclosure is required for this too, and this how I intend Alzheimer's Assistant to look like:

Note:I do not yet have the privilege of a laser cutter or 3D printer, so the STL file is just intended for showing how the final project looks like and it's not to scale.

This concludes the documentation for Alzheimer's Assistant, but I would still like to include the future work section to describe the things which I very much wanted to do for the project, but couldn't, due to some reason or the other.

Future work:

As I said before, these are the things which I wanted to include in the project, which I will add in future, should I get the time:

  • Making a proper enclosure for it. Now I am just testing it on a breadboard but if I get access to a laser cutter or 3D printer I will update the documentation with that.
  • Using a Bluetooth 4.0 module instead of this one.
  • Or even better, using just the DPS310 Sensor instead of the Sensor Hub Nano. This would decrease the cost for the project overall, as it will eliminate the use of the Sensor Hub Nano and the bluetooth module; the DPS310 itself is a available for cheap. It's a matter of editing the main code to get temperature, pressure and altitude values from the DPS310 only, the rest of the part is done.
  • Using a secondary sensor to work along with the DPS310 for fall detection and the location detection. This would decrease the occurrence of both, false positive and false negative alerts. Most probably an accelerometer and a motion detector will be needed for both.
  • Adding a pulse sensor. I did not have one, so I couldn't add that. It should be a great addition to the project.
  • Using a higher resolution display, preferably an OLED. With that, graphics can also be included and that would be pretty neat.
  • Working on improving the battery life for the project. This can be done by using a deep sleep mode in the MKR1000, but I haven't used it in the code yet.

Thanks for reading, and hope you liked my project. Feel free to give me your opinions and ideas about the project.

Code

  • AT Commands
  • Alzheimer's Assistant
AT CommandsArduino
This code is used to configure the HC-05 in AT mode. Details on how to get in AT mode are given in the project description
// Original sketch from Martyn Currey's blog here:// http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode///// Sketch modified by me to work with Arduino MKR1000!//// Basic Bluetooth sketch// Connect the HC-05 module and communicate using the serial monitor//// The HC-05 defaults to commincation mode when first powered on.// Needs to be placed in to AT mode// After a factory reset the default baud rate for communication mode is 38400char c =' ';void setup() { // start the serial communication with the host computer Serial.begin(9600); Serial.println("Arduino with HC-05 is ready"); // start communication with the HC-05 using 38400 Serial1.begin(38400); Serial.println("Serial1 started at 38400");}void loop() { // Keep reading from HC-05 and send to Arduino Serial Monitor if (Serial1.available()) { c =Serial1.read(); Serial.write (c); } // Keep reading from Arduino Serial Monitor and send to HC-05 if (Serial.available()) { c =Serial.read(); // mirror the commands back to the serial monitor // makes it easy to follow the commands Serial.write(c); Serial1.write(c); }}
Alzheimer's AssistantArduino
The main code for the project, used once you've configured and got the HC-05 to work with Sensor Hub Nano
//Including required libraries#include #include #include #include #include #include // You should get Auth Token in the Blynk App.// Go to the Project Settings (nut icon).char auth[] =""; //Enter your Blynk auth token here// Your WiFi credentials.// Set password to "" for open networks.char ssid[] ="";char pass[] ="";//Defining Sensor Hub Nano board commands#define HELLO "$hello id="#define INFO "$info id="#define SENSOR_INFO "$sinfo id=1"#define LOW_ENERGY "$set_mode sid=1;md=mode;val=bg"#define STANDARD_MODE "$set_mode sid=1;md=prs_osr;val=16"#define HIGH_PRECISION "$set_mode sid=1;md=prs_mr;val=32"#define START "$start_sensor id=1"#define STOP "$stop id="//Defining fall and clearance thresholds//You may need to change them, but I found these values to be good#define FALL 0.7#define CLEARANCE 0.2//Defining Blynk virtual pins#define vTEMPERATURE_PIN V0#define vPRESSURE_PIN V1#define vALTITUDE_PIN V2#define vEVENTOR_PIN V3#define vFALL_PIN V4//Declaring required variablesfloat t, p, a, previousA;//Boolean which tells tells if a fall is detected or notboolean fallState;//Variables needed for the fall detection algorithmunsigned long previousMillis =0;const long interv al =1000;//BTconnected is false when not connected and true when connectedboolean BTconnected =false;//Defining BT state and LCD backlight pinsint btStatePin =9;int backlightPin =2;BlynkTimer timer;WidgetRTC rtc;//Nokia 5110 Display wiringU8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 7, /* data=*/ 8, /* cs=*/ 3, /* dc=*/ 5, /* reset=*/ 4);void setup() { //Initialize both serial ports:Serial.begin(115200); Serial1.begin(115200); //Setup the timed fuctions timer.setInterval(1000L, sendSensorValues); timer.setInterval(3000L, showTimeAndDate); //Setting up required inputs and outputs pinMode(btStatePin, INPUT); pinMode(backlightPin, OUTPUT); digitalWrite(backlightPin, LOW); u8g2.begin(); showStartMessage(); Verzögerung (2000); // wait until the bluetooth module has made a connection while (!BTconnected) { if (digitalRead(btStatePin) ==HIGH) { BTconnected =true; } else { showWaitingFor(); } } initSensorHub(); Blynk.begin(auth, ssid, pass); rtc.begin(); setBlynkWidgets(); showTimeAndDate(); sendCommand(START);}void loop() { Blynk.run(); timer.run(); getSensorValues(); checkIfFalling();}void sendCommand (String sensorCommand) { //This function sends commands through the bluetooth module on the hardware serial port to the the Sensor Hub Nano //For example:"sendCommand(START);", starts the flow of data from the sensor //The full list of commands I know are defined at the top of the sketch Serial1.println(sensorCommand);}void initSensorHub() { //Initialise the Sensor Hub Nano, and give an error if there is any problem String junkVal; sendCommand(INFO); while (Serial1.find("IFX_NanoHub") ==false) { sendCommand(INFO); Serial.println("ERROR"); showErrorMessage(); } junkVal =Serial1.readStringUntil('\n'); junkVal =""; showConnectedMessage(); delay(1500);}void getSensorValues() { //Retrieves the sensor values from the Sensor Hub Nano through the Serial1 port String junkVal; if (Serial1.available()) { junkVal =Serial1.readStringUntil('\n'); junkVal =Serial1.readStringUntil('t'); t =Serial1.parseFloat(); junkVal =Serial1.readStringUntil('p'); p =Serial1.parseFloat(); junkVal =Serial1.readStringUntil('a'); a =Serial1.parseFloat(); junkVal =Serial1.readStringUntil('\n'); }}void sendSensorValues() { //Sending the sensor values to the Blynk server Blynk.virtualWrite(vTEMPERATURE_PIN, t); Blynk.virtualWrite(vPRESSURE_PIN, p); Blynk.virtualWrite(vALTITUDE_PIN, a);}void checkIfFalling() { //Algorithm to check if the patient is falling unsigned long currentMillis =millis(); if ((currentMillis - previousMillis)>=interval) { float diff =previousA - a; if ((diff>=(FALL - CLEARANCE)) &&(diff <=(FALL + CLEARANCE))) { fallState =true; //Here insert what you need to do if fall is detected, such as sending a notification or email with Blynk //Or you could also use IFTTT to call or send an sms to alert the caretaker (more info in the project documentation) Serial.println("Falling"); showFallMessage(); //In this example, vFALL_PIN (virtual pin 4) is set to 255 if fall is detected Blynk.virtualWrite(vFALL_PIN, 255); //You can send a notification using only the notification widget too! //Blynk.notify("DPS310 detected a fall!"); } previousA =a; previousMillis =currentMillis; fallState =false; //Set vFALL_PIN to 0 if a fall isn't detected Blynk.virtualWrite(vFALL_PIN, 0); }}void showStartMessage() { //Shows the start-up message u8g2.clearBuffer(); u8g2.drawRFrame(3, 7, 75, 31, 7); u8g2.setFont(u8g2_font_prospero_bold_nbp_tf); u8g2.drawStr(8, 19, "Alzheimer's"); u8g2.drawStr(12, 35, "Assistant"); u8g2.sendBuffer();}void showWaitingFor() { //Shows the waiting for Sensor Hub Nano message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_prospero_bold_nbp_tf); u8g2.drawStr(9, 15, "Waiting for"); u8g2.drawStr(8, 28, "Sensor Hub"); u8g2.drawStr(22, 41, "Nano !!!"); u8g2.sendBuffer();}void showConnectedMessage() { //Shows the connected message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(0, 10, "Connected to"); u8g2.drawStr(8, 22, "Infineon's"); u8g2.drawStr(7, 34, "Sensor Hub"); u8g2.drawStr(29, 46, "Nano"); u8g2.sendBuffer();}void showErrorMessage() { //Shows the error message u8g2.clearBuffer(); // clear the internal memory u8g2.setFont(u8g2_font_fub14_tf); // choose a suitable font u8g2.drawStr(9, 30, "ERROR"); // write something to the internal memory u8g2.sendBuffer(); // transfer internal memory to the display}void showSensorValues() { //Shows the sensor values on the display char bufT[10]; char bufP[10]; char bufA[10]; String(t).toCharArray(bufT, 10); String(p).toCharArray(bufP, 10); String(a).toCharArray(bufA, 10); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tf ); //Display the temperature u8g2.drawStr(0, 10, "T:"); u8g2.drawStr(12, 10, bufT); u8g2.drawStr(73, 10, "C"); u8g2.drawCircle(70, 4, 1, U8G2_DRAW_ALL); u8g2.drawHLine(0, 12, 85); //Display the pressure u8g2.drawStr(0, 26, "P:"); u8g2.drawStr(12, 26, bufP); u8g2.drawStr(60, 26, "mBar"); u8g2.drawHLine(0, 28, 85); //Display the altitude u8g2.drawStr(0, 42, "A:"); u8g2.drawStr(12, 42, bufA); u8g2.drawStr(72, 42, "m"); u8g2.drawHLine(0, 44, 85); //Send the values to the display u8g2.sendBuffer();}void showFallMessage() { //Show the fall detected message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(27, 20, "Fall"); u8g2.drawStr(13, 32, "Detected!"); u8g2.sendBuffer(); delay(1000);}void showPillReminder() { //Show the pill reminder message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(0, 20, "Time to take"); u8g2.drawStr(5, 32, "your pills!"); u8g2.sendBuffer();}void showExerciseReminder() { //Show the exercise reminder message u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x13B_tf); u8g2.drawStr(16, 20, "Time to"); u8g2.drawStr(12, 32, "exercise!"); u8g2.sendBuffer();}void showTimeAndDate() { //Displays the time and date from the RTC widget in Blynk in 24 hours format if (year() ==1970) { //Serial.println("Time not yet synced"); } else if (year() !=1970) { char bufHours[3]; char bufColon[2]; char bufMinutes[3]; char bufDate[11]; String currentHours =String(hour()); String colon =":"; String currentMinutes =String(minute()); String currentDate =String(day()) + "/" + month() + "/" + year(); String(currentHours).toCharArray(bufHours, 3); String(colon).toCharArray(bufColon, 2); String(currentMinutes).toCharArray(bufMinutes, 3); String(currentDate).toCharArray(bufDate, 11); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_inr33_mf); u8g2.drawStr(30, 30, bufColon); u8g2.setFont(u8g2_font_logisoso32_tn); u8g2.drawStr(0, 32, bufHours); u8g2.drawStr(45, 32, bufMinutes); u8g2.setFont(u8g2_font_saikyosansbold8_8n); u8g2.drawHLine(0, 35, 85); u8g2.drawStr(0, 46, bufDate); u8g2.sendBuffer(); }}BLYNK_WRITE(vEVENTOR_PIN) { //Use the Eventor widget to check if it's time to do a task (take medication in this case) int currentValue =param.asInt(); // 0 to 1 if (currentValue ==1) { showPillReminder(); //Serial.println("Time to take your pills"); } else { //Serial.println("Not the time to take pills"); }}void setBlynkWidgets() { //This sets the colour of each widget in the Blynk app //You may remove this from the sketch if you want to set colours manually through the Blynk app //You could also specifiy the hex value of each colour you need //Set temperature widget color to white Blynk.setProperty(vTEMPERATURE_PIN, "color", "#FFFFFF"); //Set pressure widget color to blue Blynk.setProperty(vPRESSURE_PIN, "color", "#00BBFF"); //Set altitude widget color to yellow Blynk.setProperty(vALTITUDE_PIN, "color", "#FFFF00");}BLYNK_CONNECTED() { //Synchronize time on connection, if connection drops rtc.begin();}

Kundenspezifische Teile und Gehäuse

This is just to show how I intend the enclosure to look like. It's not at all to scale!

Schaltpläne

This diagram is used when getting your HC-05 in AT mode and configuring it, using the Arduino MKR1000. Fritzing diagram for the bare-bones project to function Document listing AT commands for the HC-05

Herstellungsprozess

  1. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Digital Dice
  4. DIY 37 LED-Roulette-Spiel
  5. ATtiny85 Mini Arcade:Schlange
  6. Tragbarer Reichweitendetektor
  7. Arduino Audio Reactive Desk Light
  8. Smart Face Tracking Roboterauto
  9. Personal Healthcare Assistant PHA
  10. Galvanisieren mit Kupfer