page3 - elaasahli85/proj_IOT GitHub Wiki

💻 Programme Arduino et communication MQTT

1. Présentation

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.

2. Environnement de développement

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.

3. Calcul de la fréquence cardiaque

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.

4. Gestion du bouton

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.

5. Commande de la LED et du buzzer

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().

6. Communication MQTT

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.

⚠️ **GitHub.com Fallback** ⚠️