Inhoudsopgave:
- Stap 1: Het circuit
- Stap 2: De signaalverwerkingscode en servercommunicatie
- Stap 3: De server en datacommunicatie
- Stap 4: De Android-app
- Stap 5: Conclusie
Video: IOT-hartslagmeter (ESP8266 en Android-app): 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
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
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
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
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
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:
IoT Power Module: een functie voor het meten van IoT-vermogen toevoegen aan My Solar Charge Controller: 19 stappen (met afbeeldingen)
IoT Power Module: een functie voor het meten van IoT-vermogen toevoegen aan My Solar Charge Controller: Hallo allemaal, ik hoop dat jullie allemaal geweldig zijn! In deze instructable ga ik je laten zien hoe ik een IoT Power Measurement-module heb gemaakt die de hoeveelheid stroom berekent die wordt gegenereerd door mijn zonnepanelen, die wordt gebruikt door mijn zonnelaadcontroller t
IoT Basics: uw IoT verbinden met de cloud met behulp van Mongoose OS: 5 stappen
IoT Basics: uw IoT verbinden met de cloud met behulp van Mongoose OS: als u een persoon bent die van knutselen en elektronica houdt, komt u vaker wel dan niet de term Internet of Things tegen, meestal afgekort als IoT, en dat het verwijst naar een reeks apparaten die verbinding kunnen maken met internet! Zo iemand zijn
ESP8266 NODEMCU BLYNK IOT-zelfstudie - Esp8266 IOT Blunk en Arduino IDE gebruiken - Led's bedienen via internet: 6 stappen
ESP8266 NODEMCU BLYNK IOT-zelfstudie | Esp8266 IOT Blunk en Arduino IDE gebruiken | LED's bedienen via internet: Hallo jongens, in deze instructables zullen we leren hoe we IOT kunnen gebruiken met onze ESP8266 of Nodemcu. We zullen daarvoor de blynk-app gebruiken. Dus we zullen onze esp8266/nodemcu gebruiken om de LED's via internet te bedienen. Dus de Blynk-app wordt verbonden met onze esp8266 of Nodemcu
Hoe de Android-applicatie te verbinden met AWS IOT en de API voor spraakherkenning te begrijpen: 3 stappen
Hoe de Android-applicatie te verbinden met AWS IOT en de spraakherkenning-API te begrijpen: deze tutorial leert de gebruiker hoe de Android-applicatie te verbinden met de AWS IOT-server en de spraakherkenning-API te begrijpen die een koffiemachine bestuurt. De applicatie bestuurt de koffiemachine via de Alexa Spraakservice, de ka
IoT Analoge Input - Aan de slag met IoT: 8 stappen
IoT Analoge Input - Aan de slag met IoT: Inzicht in analoge inputs is een cruciaal onderdeel om te begrijpen hoe de dingen om ons heen werken, de meeste, zo niet alle sensoren zijn analoge sensoren (soms worden deze sensoren omgezet naar digitaal). In tegenstelling tot digitale ingangen die alleen aan of uit kunnen staan, is analoge ingang