Inhoudsopgave:

IOT-hartslagmeter (ESP8266 en Android-app): 5 stappen
IOT-hartslagmeter (ESP8266 en Android-app): 5 stappen

Video: IOT-hartslagmeter (ESP8266 en Android-app): 5 stappen

Video: IOT-hartslagmeter (ESP8266 en Android-app): 5 stappen
Video: Commercial Smartwatch VS DIY Heart Rate Monitor 2024, Juli-
Anonim
Image
Image

Als onderdeel van mijn afstudeerproject wilde ik een apparaat ontwerpen dat je hartslag zou bewaken, je gegevens op een server zou opslaan en je via een melding zou informeren wanneer je hartslag abnormaal was. Het idee achter dit project kwam toen ik probeerde een fit-bit-app te bouwen die een gebruiker waarschuwt wanneer ze een hartprobleem hebben, maar ik kon geen manier bedenken om realtime informatie te gebruiken. Het project bestaat uit vier hoofdonderdelen inclusief het fysieke circuit voor het meten van de hartslag, een ESP8266 wifi-module met signaalverwerkingscode, de server voor het opslaan van de code en een Android-app voor het weergeven van de hartslag.

Een video met details over het fysieke circuit is hierboven te zien. Alle code voor het project is te vinden op mijn Github.

Stap 1: Het circuit

Het circuit
Het circuit

Er zijn twee hoofdmethoden om een hartslag te meten, maar voor dit project heb ik besloten om fotoplethysmografie (PPG) te gebruiken, waarbij een infrarood- of rode lichtbron wordt gebruikt die door de eerste paar huidlagen wordt gebroken. Een fotosensor wordt gebruikt om de verandering in lichtintensiteit te meten (wanneer bloed door een vat stroomt). PPG-signalen zijn ongelooflijk luidruchtig, dus ik heb een banddoorlaatfilter gebruikt om de specifieke vereiste frequenties uit te filteren. Een menselijk hart klopt tussen 1 en 1,6 Hz frequentie. De op-amp die ik gebruikte was de lm324 die de beste voltage-offset had van alle op-amps die voor mij beschikbaar waren. Als je dit project nabootst, zou een precisie-op-amp een veel betere keuze zijn.

Een winst van slechts twee werd gebruikt omdat de maximale spanningstolerantie op de ESP8266 3,3v is en ik mijn bord niet wilde beschadigen!

Volg het bovenstaande circuit en probeer het werkend te krijgen op een breadboard. Als je thuis geen oscilloscoop hebt, kun je de uitgang aansluiten op een Arduino en deze plotten, maar zorg ervoor dat de spanning niet hoger is dan de tolerantie van de arduino of microcontroller.

De schakeling werd getest op een breadboard en er werd een verandering in de output waargenomen wanneer een vinger over de LED en de fototransistor werd geplaatst. Ik besloot toen om het bord aan elkaar te solderen, wat niet in de video werd getoond.

Stap 2: De signaalverwerkingscode en servercommunicatie

Image
Image
De signaalverwerkingscode en servercommunicatie
De signaalverwerkingscode en servercommunicatie

Ik besloot om de Arduino IDE op de ESP8266 te gebruiken omdat het zo gemakkelijk te gebruiken is. Toen het signaal werd geplot, was het nog steeds erg luidruchtig, dus ik besloot het op te schonen met een FIR-filter met voortschrijdend gemiddelde met een steekproefnummer van tien. Ik heb hiervoor een Arduino-voorbeeldprogramma met de naam "smoothing" aangepast. Ik heb een beetje geëxperimenteerd om een manier te vinden om de frequentie van het signaal te meten. De pulsen waren van verschillende lengte en amplitude vanwege het hart met vier verschillende soorten pulsen en de kenmerken van PPG-signalen. Ik koos een bekende middelste waarde die het signaal altijd kruiste als referentiepunt voor elke puls. Ik gebruikte een ringbuffer om te bepalen wanneer de helling van het signaal positief of negatief was. Door de combinatie van deze twee kon ik de periode tussen de pulsen berekenen wanneer het signaal positief was en gelijk was aan een specifieke waarde.

De software produceerde een vrij onnauwkeurige BPM die eigenlijk niet kon worden gebruikt. Met extra iteraties kon een beter programma worden ontworpen, maar vanwege tijdgebrek was dit geen optie. De code is te vinden in onderstaande link.

ESP8266-software

Stap 3: De server en datacommunicatie

De server en datacommunicatie
De server en datacommunicatie

Ik besloot Firebase te gebruiken om de gegevens op te slaan, omdat het een gratis service is en heel gemakkelijk te gebruiken is met mobiele apps. Er is geen officiële API voor Firebase met de ESP8266, maar ik vond dat de Arduino-bibliotheek heel goed werkte.

Er is een voorbeeldprogramma te vinden in de ESP8266WiFi.h-bibliotheek waarmee u verbinding kunt maken met een router met de SSID en het wachtwoord. Dit werd gebruikt om het bord met internet te verbinden, zodat gegevens konden worden verzonden.

Hoewel het opslaan van gegevens eenvoudig was, zijn er nog een aantal problemen met het verzenden van de pushmeldingen via een HTTP POST-verzoek. Ik vond een opmerking over de Github die een verouderde methode gebruikte om dit te doen via Google-cloudberichten en de HTTP-bibliotheek voor ESP8266. Deze methode is te zien in de code op mijn Github.

Op Firebase heb ik een project gemaakt en de API en registratiesleutels in de software gebruikt. De firebase cloud messaging werd gebruikt met de app om pushmeldingen naar de gebruiker te sturen. Toen de communicatie werd getest, waren de gegevens in de database te zien terwijl de ESP8266 actief was.

Stap 4: De Android-app

De Android-app
De Android-app

Er is een zeer eenvoudige Android-app ontworpen met twee activiteiten. De eerste activiteit heeft de gebruiker aangemeld of geregistreerd met behulp van de Firebase API. Ik heb de datasheet onderzocht en verschillende tutorials gevonden over het gebruik van Firebase met een mobiele app. De belangrijkste activiteit die de gebruiker van de gegevens van de gebruiker een realtime gebeurtenislistener liet zien, dus er was geen merkbare vertraging in wijzigingen in de BPM van de gebruiker. De pushmeldingen werden gedaan met behulp van Firebase-cloudberichten die eerder werden genoemd. Er is veel nuttige informatie in de Firebase-datasheet over hoe u dit kunt implementeren en de app kan worden getest door meldingen te verzenden vanaf het dashboard op de Firebase-website.

Alle code voor de activiteiten en de methoden voor de cloudberichten zijn te vinden in mijn Github-repository.

Stap 5: Conclusie

Er waren enkele grote problemen met het meten van de BPM van de gebruiker. De waarden varieerden sterk en waren niet bruikbaar om de gezondheid van een gebruiker te bepalen. Dit kwam neer op de signaalverwerkingscode die op de ESP8266 was geïmplementeerd. Na aanvullend onderzoek kwam ik erachter dat een hart vier verschillende pulsen heeft met verschillende perioden, dus het was geen wonder dat de software onnauwkeurig was. Een manier om dit tegen te gaan zou zijn om het gemiddelde van de vier pulsen in een array te nemen en de periode van het hart over die vier pulsen te berekenen.

De rest van het systeem was functioneel, maar dit is een zeer experimenteel apparaat dat ik wilde bouwen om te zien of het object mogelijk was. De oude code die werd gebruikt om pushmeldingen te verzenden, zal binnenkort onbruikbaar zijn, dus als u dit eind 2018 of laat leest, is een andere methode vereist. Dit probleem doet zich echter alleen voor met de ESP, dus als je dit op een WiFi-compatibele Arduino zou willen implementeren, zou dat geen probleem zijn.

Als je vragen of problemen hebt, stuur me dan gerust een bericht op Instructables.

Aanbevolen: