22 mai 2026

6. Firmware C/Arduino : traitement embarqué et sécurité

Lecture serie, boutons physiques, watchdog Bluetooth, profils EEPROM et pilotage moteur : explication accessible du firmware embarque.

ArduinoCFirmwareEEPROMWatchdog

6. Firmware C/Arduino et traitement embarque

Le firmware de la banquette se trouve dans Banquette_ATmega.ino. Il est ecrit avec Arduino IDE, donc dans un style C/C++ simplifie. Son role est plus critique que celui de l'application : c'est lui qui agit reellement sur le moteur.

Les entrees et sorties

Le firmware utilise cinq broches principales :

  • PIN_IN1 et PIN_IN2, pour piloter le pont en H ;
  • BP_MONTE, pour lire le bouton physique de montee ;
  • BP_DESCEND, pour lire le bouton physique de descente ;
  • PIN_POT, pour lire la position de la banquette avec un potentiometre.

Le moteur est commande en changeant l'etat de PIN_IN1 et PIN_IN2. Un sens active une broche, l'autre sens active l'autre broche, et l'arret met les deux a LOW.

Initialisation

Au demarrage, le firmware ouvre la liaison serie :

Serial.begin(9600);
Serial.setTimeout(20);

Le timeout court est important. Certaines commandes utilisent Serial.parseInt(), et cette fonction peut attendre des chiffres. En limitant l'attente a 20 ms, le programme reste reactif.

Les broches sont ensuite configurees, puis le moteur est coupe avec stopMotor().

Lecture des commandes Bluetooth

Le module HC-05 transmet les commandes au port serie. Le firmware lit le premier caractere :

char cmd = Serial.read();

Ensuite, il interprete :

  • U comme montee ;
  • D comme descente ;
  • S comme stop ou sauvegarde si un numero suit ;
  • P comme chargement de profil si un numero suit.

Cette logique est compacte, mais elle suffit au besoin. Le protocole est facile a tester avec un terminal serie et facile a expliquer.

Boutons physiques

Les boutons physiques peuvent commander la banquette sans passer par l'application. Ils ont une priorite temporaire : si le bouton de montee est actif, le firmware monte ; sinon, si le bouton de descente est actif, le firmware descend.

C'est utile pour garder un controle local du systeme. Cela permet aussi de tester la partie moteur meme si l'application ou le Bluetooth n'est pas encore pret.

Watchdog Bluetooth

Le firmware contient une securite logicielle : si le mode courant est U ou D et qu'aucune commande recente n'a ete recue depuis plus d'une seconde, le moteur est coupe.

Cette securite protege contre plusieurs cas :

  • application fermee pendant un mouvement ;
  • perte Bluetooth ;
  • telephone bloque ;
  • commande non repetee.

L'application envoie donc U ou D toutes les 100 ms pendant un appui maintenu. Si cette repetition s'arrete, le firmware reprend la main et stoppe le mouvement.

Profils EEPROM

Quand l'application envoie S3, le firmware sauvegarde la position actuelle dans l'emplacement 3. Il lit la position avec :

analogRead(PIN_POT)

Puis il l'ecrit dans l'EEPROM. L'EEPROM garde les donnees meme apres coupure de courant.

Quand l'application envoie P3, le firmware relit la position sauvegardee et passe en mode automatique. Il compare la position actuelle et la cible, puis monte ou descend jusqu'a etre dans la tolerance.

Securite du mode profil

Le mode profil utilise deux protections :

  • une tolerance de position, pour ne pas chercher une precision impossible ;
  • un temps maximum de mouvement, pour eviter de forcer si la position n'est jamais atteinte.

Si le mouvement dure plus de 10000 ms, le firmware coupe le moteur et quitte le mode profil.

Points a surveiller

Le firmware est lisible et fonctionnel, mais plusieurs ameliorations peuvent etre envisagees :

  • ajouter des fins de course physiques ;
  • renvoyer un accuse de reception a l'application ;
  • afficher ou transmettre la position actuelle ;
  • calibrer les valeurs min/max du potentiometre ;
  • verifier plus strictement les commandes recues.

La base actuelle est toutefois solide pour un projet scolaire : les commandes sont simples, le comportement est explicable, et la securite principale ne depend pas uniquement de l'application mobile.