page3 - elaasahli85/proj_IOT GitHub Wiki
Le programme Arduino assure l'acquisition du signal ECG, l'estimation de la fréquence cardiaque, la lecture du bouton physique et la commande de la LED et du buzzer.
La communication Wi-Fi et MQTT permet à la carte d'échanger des données et des commandes avec Node-RED.
Le projet utilise PlatformIO avec une carte Arduino UNO R4 WiFi et la bibliothèque PubSubClient.
Fichier platformio.ini :
[env:uno_r4_wifi]
platform = renesas-ra
board = uno_r4_wifi
framework = arduino
monitor_speed = 115200
lib_deps =
knolleary/PubSubClient
La bibliothèque WiFiS3 est adaptée à la connectivité Wi-Fi de cette carte.
Le programme lit la valeur analogique du capteur ECG sur A0. Deux seuils permettent de détecter le franchissement du signal :
- seuil haut :
550 - seuil bas :
500
Lorsque le signal dépasse le seuil haut, le programme détecte un battement. Il attend que le signal repasse sous le seuil bas avant de détecter le suivant.
Extrait simplifié :
if (!aboveThreshold && ecgValue > ECG_THRESHOLD_HIGH) {
aboveThreshold = true;
unsigned long interval = now - lastBeatTime;
if (interval >= MIN_BEAT_INTERVAL &&
interval <= MAX_BEAT_INTERVAL) {
currentBPM = 60000UL / interval;
}
lastBeatTime = now;
}
if (ecgValue < ECG_THRESHOLD_LOW) {
aboveThreshold = false;
}
Le programme conserve les valeurs comprises entre 30 et 150 BPM. Si les électrodes sont détectées comme décrochées, ou si aucune mesure valide n'est obtenue pendant 3 secondes, le BPM est remis à zéro.
Le bouton est configuré en INPUT_PULLUP : l'appui correspond donc à un niveau logique bas.
Un anti-rebond de 50 ms évite de détecter plusieurs appuis pour une seule pression. Lorsqu'un appui est confirmé, l'Arduino publie le message PRESS sur MQTT. Node-RED utilise cet événement pour changer l'état du système.
La LED est commandée selon le BPM reçu de Node-RED : sa cadence de clignotement dépend de cette valeur.
Le buzzer est commandé par le message reçu sur le topic d'alarme. Avec la commande ON, le programme génère un bip d'environ 150 ms par seconde. Avec la commande OFF, l'alarme s'arrête.
Le programme utilise millis() pour gérer les temporisations, sans bloquer la boucle principale avec des delay().
Le broker utilisé est broker.emqx.io, sur le port 1883.
| Topic | Sens | Contenu |
|---|---|---|
| arduino/ecg/bpm | Arduino → Node-RED | Fréquence cardiaque en BPM |
| arduino/ecg/button | Arduino → Node-RED | Événement PRESS |
| arduino/ecg/status | Arduino → Node-RED | État ONLINE à la connexion |
| arduino/ecg/led_bpm | Node-RED → Arduino | Valeur BPM utilisée pour la LED |
| arduino/ecg/alarm_enable | Node-RED → Arduino | Commande ON ou OFF du buzzer |
Les valeurs sont transmises sous forme de texte dans les messages MQTT.