Innehållsförteckning:

IOT pulsmätare (ESP8266 och Android App): 5 steg
IOT pulsmätare (ESP8266 och Android App): 5 steg

Video: IOT pulsmätare (ESP8266 och Android App): 5 steg

Video: IOT pulsmätare (ESP8266 och Android App): 5 steg
Video: Heart Rate Monitor - QT C++ QML ESP8266 MAX30100 2024, Juli
Anonim
Image
Image

Som en del av mitt sista års projekt ville jag designa en enhet som skulle övervaka din puls, lagra dina data på en server och meddela dig via meddelande när din puls var onormal. Idén bakom detta projekt kom när jag försökte bygga en fit-bit-app som meddelar en användare när de har ett hjärtproblem men jag kunde inte komma på ett sätt att använda information i realtid. Projektet har fyra huvuddelar inklusive den fysiska kretsen för att mäta hjärtslaget, en ESP8266 Wi-Fi-modul med signalbehandlingskod, servern för att lagra koden och en Android-app för att visa pulsen.

En video som beskriver den fysiska kretsen kan ses ovan. All kod för projektet finns på min Github.

Steg 1: Kretsen

Kretsen
Kretsen

Det finns två huvudmetoder för att mäta ett hjärtslag men för detta projekt bestämde jag mig för att använda fotoplethysmografi (PPG) som använder en infraröd eller röd ljuskälla som bryts genom de första hudlagren. En fotosensor används för att mäta förändringen i ljusintensitet (när blod strömmar genom ett kärl). PPG -signaler är otroligt bullriga så jag använde ett bandpassfilter för att filtrera bort de specifika frekvenser som krävs. Ett mänskligt hjärta slår mellan 1 och 1,6 Hz frekvens. Op-amparen jag använde var lm324 som hade den bästa spänningsförskjutningen av alla op-ampere som var tillgängliga för mig. Om du återskapar detta projekt är en precisionsförstärkare ett mycket bättre val.

En förstärkning på endast två användes eftersom den maximala spänningstoleransen på ESP8266 är 3,3v och jag ville inte skada mitt kort!

Följ kretsen ovan och försök att få den att fungera på ett brödbräda. Om du inte har ett oscilloskop hemma kan du ansluta utgången till en Arduino och plotta den men se till att spänningen inte är högre än arduino- eller mikrokontrollerns tolerans.

Kretsen testades på ett brödbräda och en förändring i utmatningen observerades när ett finger placerades över lysdioden och fototransistorn. Jag bestämde mig sedan för att löda ihop brädan som inte visades i videon.

Steg 2: Signalbehandlingskoden och serverkommunikation

Image
Image
Signalbehandlingskoden och serverkommunikationen
Signalbehandlingskoden och serverkommunikationen

Jag bestämde mig för att använda Arduino IDE på ESP8266 eftersom det är så lätt att använda. När signalen plottades var det fortfarande mycket bullrigt så jag bestämde mig för att städa upp det med ett FIR-rörligt medelvärdesfilter med ett provtal på tio. Jag modifierade ett exempel Arduino -program som heter "utjämning" för att göra detta. Jag experimenterade lite för att hitta ett sätt att mäta signalens frekvens. Pulserna var av varierande längd och amplitud på grund av att hjärtat hade fyra olika typer av pulser och egenskaperna hos PPG -signaler. Jag valde ett känt mellanvärde som signalen alltid korsade som referenspunkt för varje puls. Jag använde en ringbuffert för att avgöra när signalens lutning var positiv eller negativ. Kombinationen av dessa två gjorde det möjligt för mig att beräkna perioden mellan pulserna när signalen var positiv och var lika med ett specifikt värde.

Programvaran producerade en ganska felaktig BPM som faktiskt inte kunde användas. Med ytterligare iterationer kan ett bättre program utformas men på grund av tidsbrist var detta inget alternativ. Koden finns i länken nedan.

ESP8266 programvara

Steg 3: Server- och datakommunikationen

Server och datakommunikation
Server och datakommunikation

Jag bestämde mig för att använda Firebase för att lagra data eftersom det är en gratis tjänst och är mycket lätt att använda med mobilappar. Det finns inget officiellt API för Firebase med ESP8266 men jag tyckte att Arduino -biblioteket fungerade mycket bra.

Det finns ett exempelprogram som finns på ESP8266WiFi.h -biblioteket som låter dig ansluta till en router med SSID och lösenord. Detta användes för att ansluta kortet till internet så att data kunde skickas.

Även om det enkelt gick att lagra data finns det fortfarande ett antal problem med att skicka push -meddelanden via en HTTP POST -begäran. Jag hittade en kommentar på Github som använde en äldre metod för att göra detta via Googles molnmeddelanden och HTTP -biblioteket för ESP8266. Denna metod kan ses i koden på min Github.

På Firebase skapade jag ett projekt och använde API och registreringsnycklar i programvaran. Firebase molnmeddelanden användes med appen för att skicka push -aviseringar till användaren. När kommunikationen testades kunde data ses i databasen medan ESP8266 kördes.

Steg 4: Android -appen

Android -appen
Android -appen

En mycket grundläggande Android -app designades med två aktiviteter. Den första aktiviteten loggade in användaren eller registrerade dem med Firebase API. Jag undersökte databladet och hittade olika självstudier om hur du använder Firebase med en mobilapp. Den huvudsakliga aktiviteten som visade användarens dataanvändare är en realtidshändarlyssnare så det var ingen märkbar fördröjning i ändringarna av användarens BPM. Push -aviseringarna gjordes med hjälp av Firebase molnmeddelanden som nämndes tidigare. Det finns mycket användbar information om Firebase -databladet om hur man implementerar detta och appen kan testas genom att skicka meddelanden från instrumentpanelen på Firebase -webbplatsen.

All kod för aktiviteterna och metoderna för molnmeddelanden finns i mitt Github -arkiv.

Steg 5: Slutsats

Det fanns några stora problem med att mäta användarens BPM. Värdena varierade mycket och var inte användbara för att bestämma användarens hälsa. Detta kom ner till signalbehandlingskoden som implementerades på ESP8266. Efter ytterligare forskning fick jag reda på att ett hjärta har fyra olika pulser med varierande period så det var inte konstigt att programvaran var felaktig. Ett sätt att bekämpa detta skulle vara att ta ett genomsnitt av de fyra pulserna i en array och beräkna hjärtats period över de fyra pulserna.

Resten av systemet fungerade men det här är en mycket experimentell enhet som jag ville bygga för att se om objektet var möjligt. Den gamla koden som användes för att skicka push -meddelanden kommer snart att vara oanvändbar, så om du läser detta i slutet av 2018 eller sent skulle en annan metod behövas. Detta problem uppstår dock bara med ESP, så om du ville implementera detta på en WiFi -kompatibel Arduino skulle det inte vara några problem.

Om du har några frågor eller problem är du välkommen att meddela mig på Instructables.

Rekommenderad: