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_IN1etPIN_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 :
Ucomme montee ;Dcomme descente ;Scomme stop ou sauvegarde si un numero suit ;Pcomme 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.