Innholdsfortegnelse:

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

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

Video: IOT pulsmåler (ESP8266 og Android App): 5 trinn
Video: Pixel Watch vs. Fitbit Sense 2 in UNDER 60 SECONDS! 2024, Juli
Anonim
Image
Image

Som en del av mitt siste års prosjekt ville jeg designe en enhet som ville overvåke pulsen din, lagre dataene dine på en server og varsle deg via varsel når pulsen din var unormal. Ideen bak dette prosjektet kom da jeg prøvde å bygge en fit-bit-app som varsler en bruker når de har et hjerteproblem, men jeg kunne ikke finne ut en måte å bruke sanntidsinformasjon på. Prosjektet har fire hoveddeler inkludert den fysiske kretsen for måling av hjerteslag, en ESP8266 Wi-Fi-modul med signalbehandlingskode, serveren for lagring av koden og en Android-app for å vise pulsen.

En video som beskriver den fysiske kretsen kan sees ovenfor. All koden for prosjektet finner du på min Github.

Trinn 1: Kretsen

Kretsen
Kretsen

Det er to hovedmetoder for å måle et hjerteslag, men for dette prosjektet bestemte jeg meg for å bruke fotoplethysmografi (PPG) som bruker en infrarød eller rød lyskilde som brytes gjennom de første hudlagene. En fotosensor brukes til å måle endringen i lysintensitet (når blod strømmer gjennom et kar). PPG -signaler er utrolig støyende, så jeg brukte et båndpassfilter for å filtrere ut de spesifikke frekvensene som kreves. Et menneskehjerte slår mellom 1 og 1,6 Hz frekvens. Op-forsterkeren jeg brukte var lm324 som hadde den beste spenningsforskyvningen av alle op-forsterkere som var tilgjengelige for meg. Hvis du gjenskaper dette prosjektet, vil en presisjonsforsterker være et mye bedre valg.

En gevinst på bare to ble brukt fordi maksimal spenningstoleranse på ESP8266 er 3,3v, og jeg ville ikke skade kortet mitt!

Følg kretsen ovenfor og prøv å få den til å fungere på et brødbrett. Hvis du ikke har et oscilloskop hjemme, kan du koble utgangen til en Arduino og plotte den, men sørg for at spenningen ikke er høyere enn arduino- eller mikrokontrollerens toleranse.

Kretsen ble testet på et brødbrett og en endring i utgangen ble observert da en finger ble plassert over LED og fototransistor. Jeg bestemte meg deretter for å lodde brettet sammen som ikke ble vist i videoen.

Trinn 2: Signalbehandlingskoden og serverkommunikasjon

Image
Image
Signalbehandlingskoden og serverkommunikasjon
Signalbehandlingskoden og serverkommunikasjon

Jeg bestemte meg for å bruke Arduino IDE på ESP8266 fordi den er så enkel å bruke. Da signalet ble avsatt var det fremdeles veldig bråkete, så jeg bestemte meg for å rydde opp med et FIR-filter for glidende gjennomsnitt med et prøvetall på ti. Jeg modifiserte et eksempel på et Arduino -program som heter "smoothing" for å gjøre dette. Jeg eksperimenterte litt for å finne en måte å måle frekvensen på signalet. Pulsen var av varierende lengde og amplitude på grunn av at hjertet hadde fire forskjellige typer pulser og egenskapene til PPG -signaler. Jeg valgte en kjent mellomverdi som signalet alltid krysset som et referansepunkt for hver puls. Jeg brukte en ringbuffer for å bestemme når signalets helling var positiv eller negativ. Kombinasjonen av disse to tillot meg å beregne perioden mellom impulsene når signalet var positivt og var lik en bestemt verdi.

Programvaren produserte en ganske unøyaktig BPM som faktisk ikke kunne brukes. Med flere iterasjoner kan et bedre program utformes, men på grunn av tidsbegrensninger var dette ikke et alternativ. Koden finner du i lenken nedenfor.

ESP8266 programvare

Trinn 3: Server og datakommunikasjon

Server og datakommunikasjon
Server og datakommunikasjon

Jeg bestemte meg for å bruke Firebase til å lagre dataene, siden det er en gratis tjeneste og er veldig enkel å bruke med mobilapper. Det er ingen offisiell API for Firebase med ESP8266, men jeg syntes Arduino -biblioteket fungerte veldig bra.

Det finnes et eksempelprogram på biblioteket ESP8266WiFi.h som lar deg koble til en ruter med SSID og passord. Dette ble brukt til å koble kortet til internett slik at data kunne sendes.

Selv om det enkelt var å lagre data, er det fortsatt en rekke problemer med å sende push -varslene via en HTTP POST -forespørsel. Jeg fant en kommentar til Github som brukte en eldre metode for å gjøre dette via Google cloud -meldinger og HTTP -biblioteket for ESP8266. Denne metoden kan sees i koden på min Github.

På Firebase opprettet jeg et prosjekt og brukte API og registreringsnøkler i programvaren. Firebase cloud -meldingen ble brukt med appen for å sende push -varsler til brukeren. Da kommunikasjonen ble testet, kunne data sees i databasen mens ESP8266 kjørte.

Trinn 4: Android -appen

Android -appen
Android -appen

En veldig grunnleggende Android -app ble designet med to aktiviteter. Den første aktiviteten logget på brukeren eller registrerte dem ved hjelp av Firebase API. Jeg undersøkte databladet og fant forskjellige opplæringsprogrammer om hvordan du bruker Firebase med en mobilapp. Hovedaktiviteten som viste brukerens databruker en sanntids hendelseslytter, så det var ingen merkbar forsinkelse i endringer i brukerens BPM. Push -varslene ble utført ved bruk av Firebase -nettskymeldinger som ble nevnt tidligere. Det er mye nyttig informasjon på Firebase -databladet om hvordan du implementerer dette, og appen kan testes ved å sende varsler fra dashbordet på Firebase -nettstedet.

All koden for aktivitetene og metodene for nettskymeldinger finner du i mitt Github -depot.

Trinn 5: Konklusjon

Det var noen store problemer med måling av brukerens BPM. Verdiene varierte sterkt og var ikke brukbare for å bestemme brukerens helse. Dette kom ned til signalbehandlingskoden som ble implementert på ESP8266. Etter ytterligere undersøkelser fant jeg ut at et hjerte har fire forskjellige pulser med varierende periode, så det var ikke rart at programvaren var unøyaktig. En måte å bekjempe dette på er å ta et gjennomsnitt av de fire pulser i en matrise og beregne hjertets periode over de fire pulser.

Resten av systemet var funksjonelt, men dette er en veldig eksperimentell enhet som jeg ønsket å bygge for å se om objektet var mulig. Den eldre koden som ble brukt til å sende push -varsler, vil snart være ubrukelig, så hvis du leser dette sent i 2018 eller sent, vil en annen metode være nødvendig. Dette problemet oppstår bare med ESP, så hvis du ønsket å implementere dette på en WiFi -kompatibel Arduino, ville det ikke være noe problem.

Hvis du har spørsmål eller problemer, vennligst send meg en melding på Instructables.

Anbefalt: