Indholdsfortegnelse:

IOT pulsmåler (ESP8266 og Android App): 5 trin
IOT pulsmåler (ESP8266 og Android App): 5 trin

Video: IOT pulsmåler (ESP8266 og Android App): 5 trin

Video: IOT pulsmåler (ESP8266 og Android App): 5 trin
Video: Best Android Smartwatches in 2023 - Which Is The Best For You? 2024, Juli
Anonim
Image
Image

Som en del af mit sidste års projekt ville jeg designe en enhed, der ville overvåge din puls, gemme dine data på en server og give dig besked via besked, når din puls var unormal. Ideen bag dette projekt kom, da jeg forsøgte at bygge en fit-bit app, der giver en bruger besked, når de har et hjerteproblem, men jeg kunne ikke finde ud af at bruge oplysninger i realtid. Projektet har fire hoveddele herunder det fysiske kredsløb til måling af hjerteslag, et ESP8266 Wi-Fi-modul med signalbehandlingskode, serveren til lagring af koden og en Android-app til visning af pulsen.

En video, der beskriver det fysiske kredsløb, kan ses ovenfor. Al koden til projektet kan findes på min Github.

Trin 1: Kredsløbet

Kredsløbet
Kredsløbet

Der er to hovedmetoder til måling af et hjerteslag, men til dette projekt besluttede jeg at bruge fotoplethysmografi (PPG), der bruger en infrarød eller rød lyskilde, der brydes gennem de første par hudlag. En fotosensor bruges til at måle ændringen i lysintensitet (når blod strømmer gennem et kar). PPG -signaler er utroligt støjende, så jeg brugte et båndpasfilter til at filtrere de krævede specifikke frekvenser. Et menneskehjerte slår mellem 1 og 1,6 Hz frekvens. Den op-amp, jeg brugte, var lm324, som havde den bedste spændingsforskydning af alle op-ampere, der var tilgængelige for mig. Hvis du genskaber dette projekt, ville en præcisions op-amp være et meget bedre valg.

En forstærkning på kun to blev brugt, fordi den maksimale spændingstolerance på ESP8266 er 3,3v, og jeg ikke ville skade mit bord!

Følg kredsløbet ovenfor, og prøv at få det til at fungere på et brødbræt. Hvis du ikke har et oscilloskop derhjemme, kan du tilslutte udgangen til en Arduino og plotte den, men sørg for, at spændingen ikke er højere end arduino- eller mikrokontrollerens tolerance.

Kredsløbet blev testet på et brødbræt, og der blev observeret en ændring i output, da en finger blev placeret på tværs af LED'en og fototransistoren. Jeg besluttede derefter at lodde brættet sammen, som ikke blev vist i videoen.

Trin 2: Signalbehandlingskoden og serverkommunikation

Image
Image
Signalbehandlingskoden og serverkommunikation
Signalbehandlingskoden og serverkommunikation

Jeg besluttede at bruge Arduino IDE på ESP8266, fordi den er så let at bruge. Da signalet blev afbildet, var det stadig meget støjende, så jeg besluttede at rense det med et FIR-glidende gennemsnitsfilter med et prøvetal på ti. Jeg ændrede et eksempel på et Arduino -program kaldet "udjævning" for at gøre dette. Jeg eksperimenterede lidt for at finde en måde at måle signalets frekvens på. Impulserne var af varierende længde og amplitude på grund af, at hjertet havde fire forskellige typer pulser og egenskaberne ved PPG -signaler. Jeg valgte en kendt mellemværdi, som signalet altid krydsede som referencepunkt for hver puls. Jeg brugte en ringbuffer til at bestemme, hvornår signalets hældning var positiv eller negativ. Kombinationen af disse to tillod mig at beregne perioden mellem impulserne, når signalet var positivt og var lig med en bestemt værdi.

Softwaren producerede en temmelig unøjagtig BPM, som faktisk ikke kunne bruges. Med yderligere iterationer kunne et bedre program designes, men på grund af tidsbegrænsninger var dette ikke en mulighed. Koden kan findes i nedenstående link.

ESP8266 software

Trin 3: Server og datakommunikation

Server og datakommunikation
Server og datakommunikation

Jeg besluttede at bruge Firebase til at gemme dataene, da det er en gratis service og er meget let at bruge med mobilapps. Der er ingen officiel API til Firebase med ESP8266, men jeg fandt, at Arduino -biblioteket fungerede meget godt.

Der er et eksempelprogram, der kan findes på biblioteket ESP8266WiFi.h, som giver dig mulighed for at oprette forbindelse til en router med SSID og adgangskode. Dette blev brugt til at forbinde kortet til internettet, så data kunne sendes.

Selvom lagring af data let blev gjort, er der stadig en række problemer med at sende push -meddelelser via en HTTP POST -anmodning. Jeg fandt en kommentar til Github, som brugte en ældre metode til at gøre dette via Google cloud -beskeder og HTTP -biblioteket til ESP8266. Denne metode kan ses i koden på min Github.

På Firebase oprettede jeg et projekt og brugte API og registreringsnøgler i softwaren. Firebase cloud -beskeder blev brugt med appen for at sende push -meddelelser til brugeren. Da kommunikationen blev testet, kunne data ses i databasen, mens ESP8266 kørte.

Trin 4: Android -appen

Android -appen
Android -appen

En meget grundlæggende Android -app blev designet med to aktiviteter. Den første aktivitet loggede brugeren ind eller registrerede dem ved hjælp af Firebase API. Jeg undersøgte databladet og fandt forskellige tutorials om, hvordan du bruger Firebase med en mobilapp. Hovedaktiviteten, der viste brugerens databruger, var en hændelseslytter i realtid, så der var ingen mærkbar forsinkelse i ændringer af brugerens BPM. Push -meddelelserne blev udført ved hjælp af Firebase -cloud -beskeder, der blev nævnt tidligere. Der er mange nyttige oplysninger om Firebase -databladet om, hvordan du implementerer dette, og appen kan testes ved at sende meddelelser fra instrumentbrættet på Firebase -webstedet.

Al koden til aktiviteterne og metoderne til cloud -beskeder kan findes i mit Github -lager.

Trin 5: Konklusion

Der var nogle store problemer med måling af brugerens BPM. Værdierne varierede meget og var ikke anvendelige til at bestemme en brugers helbred. Dette kogte ned til den signalbehandlingskode, der blev implementeret på ESP8266. Efter yderligere undersøgelser fandt jeg ud af, at et hjerte har fire forskellige pulser med varierende periode, så det var ikke underligt, at softwaren var unøjagtig. En måde at bekæmpe dette på ville være at tage et gennemsnit af de fire pulser i en matrix og beregne hjertets periode over de fire pulser.

Resten af systemet var funktionelt, men dette er en meget eksperimentel enhed, som jeg ville bygge for at se, om objektet var muligt. Den ældre kode, der blev brugt til at sende push -meddelelser, vil snart være ubrugelig, så hvis du læser dette i slutningen af 2018 eller sent, ville en anden metode være nødvendig. Dette problem opstår dog kun med ESP, så hvis du ville implementere dette på en WiFi -kompatibel Arduino, ville det ikke være noget problem.

Hvis du har spørgsmål eller problemer, er du velkommen til at sende mig en besked på Instructables.

Anbefalede: