Firmware
May 29, 2025 · View on GitHub
English | 简体中文 | Deutsch | Français | Español | 한국어
Nous utilisons une unité de microcontrôleur (MCU) pour agir comme un pont entre le corps du robot et le smartphone. Nous fournissons notre firmware pour l'Arduino Nano avec un microcontrôleur ATmega328P ainsi que pour le kit de développement ESP32.
Fonctionnalités
La tâche principale du MCU est de gérer le contrôle de bas niveau du véhicule et de fournir des lectures des capteurs montés sur le véhicule. Le MCU reçoit les commandes du véhicule et les signaux des indicateurs via la connexion série. Il convertit les commandes en signaux PWM pour le contrôleur de moteur et bascule les LED selon le signal de l'indicateur. Le programme Arduino suit également les rotations des roues en comptant les interruptions des capteurs optiques sur les roues avant gauche et droite. Il calcule la tension de la batterie par une moyenne mobile pondérée des mesures au niveau du circuit diviseur de tension. Il peut également mesurer la distance aux obstacles devant la voiture avec un capteur ultrasonique optionnel. Ces mesures sont renvoyées à l'application Android via le lien série.
Configuration
Tout d'abord, vous devez configurer votre matériel au début du code. Si vous avez fait la construction DIY (en utilisant le pilote de moteur L298N), réglez OPENBOT DIY. Si vous avez utilisé le PCB personnalisé, vérifiez la version et réglez soit OPENBOT PCB_V1 soit OPENBOT PCB_V2. Si vous avez un kit OpenBot, réglez OPENBOT RTR_TT. Si vous avez adapté un camion RC, réglez OPENBOT RC_CAR. Si vous utilisez la version DIY plus petite pour l'éducation, réglez OPENBOT LITE. Si vous utilisez le kit OpenBot prêt à l'emploi avec des moteurs 520, réglez OPENBOT RTR_520. Si vous avez construit le véhicule tout-terrain, vous devez régler OPENBOT MTV. Pour faire fonctionner l'OpenBot DIY avec l'ESP32, réglez OpenBot DIY_ESP32.
Bluetooth
Vous pouvez également faire fonctionner l'OpenBot via Bluetooth, pour cela vous pouvez activer le Bluetooth en réglant BLUETOOTH 1 (désactiver : 0). Pour que le Bluetooth fonctionne, vous avez besoin d'OpenBot avec des cartes ESP32 comme (RTR_520, MTV, DIY_ESP32).
Configuration
Ensuite, vous devez configurer les fonctionnalités que vous souhaitez activer. Les fonctionnalités désactivées ne sont pas compilées pour économiser de la mémoire et accélérer le code. Si un drapeau n'est pas défini, la fonctionnalité sera désactivée. Chaque modèle a des paramètres par défaut que vous devrez peut-être modifier en fonction de votre configuration.
- Activez le diviseur de tension en réglant
HAS_VOLTAGE_DIVIDER 1(désactiver : 0). Si vous avez un diviseur de tension, vous devez également spécifier leVOLTAGE_DIVIDER_FACTORqui est calculé comme (R1+R2)/R2,VOLTAGE_MINqui est la tension minimale pour entraîner les moteurs,VOLTAGE_LOWqui est la tension minimale de la batterie etVOLTAGE_MAXqui est la tension maximale de la batterie. - Activez les LED indicatrices en réglant
HAS_INDICATORS 1(désactiver : 0). - Activez les capteurs de vitesse avant/arrière en réglant
HAS_SPEED_SENSORS_FRONT 1/HAS_SPEED_SENSORS_BACK 1(désactiver : 0). - Activez le capteur ultrasonique en réglant
HAS_SONAR 1(désactiver : 0). Activez le filtre médian pour les mesures sonar en réglantUSE_MEDIAN 1(désactiver : 0). - Activez le capteur de pare-chocs qui est utilisé pour détecter les collisions en réglant
HAS_BUMPER 1(désactiver : 0). - Activez l'affichage OLED en réglant
HAS_OLED 1(désactiver : 0). - Activez les LED avant/arrière/statut en réglant
HAS_LEDS_FRONT 1/HAS_LEDS_BACK 1/HAS_LEDS_STATUS 1(désactiver : 0).
Dépendances
Si vous avez activé les capteurs de vitesse ou le capteur ultrasonique, vous devez installer la bibliothèque PinChangeInterrupt. L'Arduino Nano n'a que deux broches d'interruption externes (D2 et D3) et D3 est également l'une des six broches qui supportent le PWM. Heureusement, il dispose également de trois interruptions de port qui couvrent toutes les broches de l'Arduino. Cette bibliothèque analyse ces interruptions de port permettant à toutes les broches de l'Arduino d'être utilisées comme interruptions.
Si vous avez activé l'OLED, vous devez installer les bibliothèques Adafruit_SSD1306 et Adafruit_GFX Library.
Vous pouvez installer des bibliothèques en suivant ces étapes :
- Ouvrez le gestionnaire de bibliothèques :
Outils:arrow_right:Gérer les bibliothèques - Entrez le nom de la bibliothèque dans la barre de recherche.
- Sélectionnez la dernière version et cliquez sur installer. Si vous avez déjà installé la bibliothèque, elle s'affichera et vous pourrez peut-être la mettre à jour.
Clone chinois Nano (par exemple, lien US)
Vous devrez peut-être télécharger les pilotes WCH340 du fabricant de la puce (chinois) :
Kit de développement ESP32
Pour installer la carte ESP32 dans votre IDE Arduino, suivez ces instructions :
- Dans votre IDE Arduino, allez à Fichier > Préférences :
- Entrez https://dl.espressif.com/dl/package_esp32_index.json dans le champ “URL du gestionnaire de cartes supplémentaires” comme indiqué dans la figure ci-dessous. Ensuite, cliquez sur le bouton “OK” :
Remarque : si vous avez déjà l'URL des cartes ESP8266, vous pouvez séparer les URL par une virgule comme suit :
https://dl.espressif.com/dl/package_esp32_index.json,
http://arduino.esp8266.com/stable/package_esp8266com_index.json
3. Ouvrez le gestionnaire de cartes. Allez à Outils > Carte > Gestionnaire de cartes :
- Recherchez ESP32. Recherchez “ESP32 par Espressif Systems“ et assurez-vous de sélectionner la version 2.0.17 dans le menu déroulant. Toute version 3.x.x ne fonctionnera pas ! Cliquez sur installer :
- Vous devriez maintenant avoir tout pour flasher avec succès la carte ESP32 de votre OpenBot en utilisant l'environnement de développement Arduino.
- Pour flasher l'OpenBot avec votre nouveau code, sélectionnez simplement ESP32 Dev Module dans le menu Outils > Carte > ESP32 Arduino. Notez que du contenu supplémentaire ainsi que des solutions de dépannage du processus de flashage ESP32 peuvent être trouvés dans le lien suivant lien.
Si vous avez des problèmes de téléchargement, essayez de réduire le débit en bauds. Allez dans outils et sélectionnez la vitesse de téléchargement à 115200.
Téléchargement
Paramètres (configuration Arduino nano)
Outils:arrow_right:Carte:arrow_right:Arduino AVR Boards:arrow_right:Arduino NanoOutils:arrow_right:Processeur:arrow_right:ATmega328P (Old Bootloader)Outils:arrow_right:Port:arrow_right:*Sélectionnez le port USB*
:memo: REMARQUE : Actuellement, la plupart des cartes Arduino Nano bon marché sont livrées avec l'ancien bootloader. Cependant, selon le vendeur, vous pouvez également en obtenir un avec le nouveau bootloader. Donc, si vous ne parvenez pas à télécharger le firmware, il est probable que vous deviez changer le processeur en ATmega328P.
Paramètres (configuration ESP32)
Outils:arrow_right:Carte:arrow_right:ESP32 Arduino:arrow_right:ESP32 Dev ModuleOutils:arrow_right:Port:arrow_right:*Sélectionnez le port USB*
Téléchargement du firmware
Le firmware peut maintenant être téléchargé via Croquis :arrow_right: Téléverser ou en appuyant sur le bouton de téléchargement (flèche droite).

Test
Cette section explique comment tester toutes les fonctionnalités de la voiture après que le firmware a été flashé avec succès.
- Confirmez que :
- les roues ne sont pas connectées à la voiture
- l'Arduino est connecté à l'ordinateur
- le port USB correct est sélectionné
- Ouvrez le moniteur série :
Outils:arrow_right:Moniteur série
Envoi de messages à l'OpenBot
Vous pouvez également envoyer des messages à l'Arduino en tapant une commande dans le champ de saisie en haut, puis en appuyant sur envoyer. Les commandes suivantes sont disponibles (à condition que les fonctionnalités nécessaires soient prises en charge par le robot) :
c<gauche>,<droite>où<gauche>et<droite>sont tous deux dans la plage [-255,255]. Une valeur de0arrêtera les moteurs. Une valeur de255applique la tension maximale entraînant les moteurs à pleine vitesse en avant. Des valeurs inférieures entraînent des tensions et des vitesses proportionnellement plus faibles. Les valeurs négatives appliquent les tensions correspondantes en polarité inverse entraînant les moteurs en marche arrière.i<gauche>,<droite>où<gauche>et<droite>sont tous deux dans la plage [0,1] et correspondent aux LED indicatrices gauche et droite. Par exemple,i1,0allume l'indicateur gauche,i0,1l'indicateur droit eti1,1les deux indicateurs. Les feux indicateurs activés clignoteront une fois par seconde. Une valeur dei0,0éteint les indicateurs. Un seul état à la fois est possible.l<avant>,<arrière>où<avant>et<arrière>sont tous deux dans la plage [0,255] et correspondent à la luminosité des LED avant et arrière.s<temps_ms>où<temps_ms>correspond au temps en ms entre les mesures sonar déclenchées (par défaut = 1000). Après la lecture sonar, le message est envoyé au robot. S'il expire, laMAX_SONAR_DISTANCEspécifiée est envoyée.w<temps_ms>où<temps_ms>correspond au temps en ms entre les mesures d'odométrie des roues envoyées au robot (par défaut = 1000). La vitesse des roues est surveillée en continu et le régime est calculé comme une moyenne sur l'intervalle de temps spécifié.v<temps_ms>où<temps_ms>correspond au temps en ms entre les mesures de tension envoyées au robot (par défaut = 1000). La tension est surveillée en continu et filtrée via un filtre de moyenne mobile de taille 10. En plus de définir l'intervalle de temps pour les lectures de tension, l'envoi de cette commande déclenchera également des messages qui rapportent la tension minimale pour entraîner les moteurs (vmin:<valeur>), la tension minimale de la batterie (vlow:<valeur>) et la tension maximale de la batterie (vmax:<valeur>).h<temps_ms>où<temps_ms>correspond au temps en ms après lequel le robot s'arrêtera si aucun nouveau message de battement de cœur n'a été reçu (par défaut = -1).b<temps_ms>où<temps_ms>correspond au temps en ms après lequel le déclencheur de pare-chocs sera réinitialisé (par défaut = 750).n<couleur>,<état>où<couleur>correspond à une LED de statut (b= bleu,g= vert,y= jaune) etétatà sa valeur (0= éteint,1= allumé).fenverra une demande à l'OpenBot pour retourner un message avec le type de robot et ses fonctionnalités, par exemple mesure de tension (v), indicateurs (i), sonar (s), capteurs de choc (b), odométrie des roues (wf,wb), LED (lf,lb,ls), etc. Par exemple, pour la versionRTR_V1d'OpenBot, le message ressemblerait à ceci :fRTR_V1:v:i:s:b:wf:wb:lf:lb:ls:.
Réception de messages de l'OpenBot
Selon votre configuration, vous pouvez voir différents messages.

- Les messages qui commencent par
vrapportent la tension de la batterie. Si vous connectez la batterie à la voiture (c'est-à-dire allumez l'interrupteur), elle devrait afficher la tension de la batterie. Si vous déconnectez la batterie (c'est-à-dire éteignez l'interrupteur), elle devrait afficher une petite valeur. - Les messages qui commencent par
wrapportent les lectures des capteurs de vitesse mesurées en tours par seconde (rpm). Chaque trou dans le disque encodeur incrémentera un compteur de plus/moins un selon la direction. Vous pouvez définir le nombre de trous avec le paramètreDISK_HOLES. Si vous utilisez le disque standard avec 20 trous, il y aura 20 comptes pour chaque révolution de la roue. - Les messages qui commencent par
srapportent l'espace libre estimé devant le capteur ultrasonique en cm. - Les messages qui commencent par
brapportent les collisions. Les codeslf(avant gauche),rf(avant droit),cf(avant centre),lb(arrière gauche),rb(arrière droit) indiquent quel capteur a déclenché la collision.
Procédure de test
Avant de continuer, assurez-vous que les pneus sont retirés. Vous aurez besoin du moniteur série ouvert pour envoyer des commandes et vous verrez les messages reçus de votre OpenBot. Si vous avez installé l'affichage OLED, vous verrez également le statut du véhicule affiché là dans un format plus lisible par l'homme. La procédure de test suivante peut être utilisée pour tester toutes les fonctionnalités de la voiture :
- Allumez la voiture et observez la tension de la batterie (le nombre après le
v). Vous pouvez vérifier la lecture avec un multimètre et ajuster leVOLTAGE_DIVIDER_FACTORsi nécessaire. - Si vous avez installé un capteur ultrasonique :
- Tenez votre main devant le capteur et déplacez-la d'avant en arrière. Vous devriez voir les lectures (le nombre après le
s) changer en conséquence. - Nous avons observé que le capteur ultrasonique est très sensible aux vibrations ! Il est donc conseillé de s'assurer que vous obtiendrez des lectures fiables pendant le fonctionnement en effectuant le test suivant :
- Placez l'OpenBot avec le capteur ultrasonique installé de manière à ce qu'il y ait au moins 200 cm d'espace libre devant lui. Vous devriez voir une lecture de
200ou plus. - Observez les lectures sur le moniteur série pendant un certain temps, puis entrez la commande
c128,128. - Si les lectures du capteur changent de manière significative, vous devrez amortir les vibrations transmises au capteur ultrasonique depuis le châssis (par exemple, ajouter du silicone, ajuster la position de montage).
- Placez l'OpenBot avec le capteur ultrasonique installé de manière à ce qu'il y ait au moins 200 cm d'espace libre devant lui. Vous devriez voir une lecture de
- Tenez votre main devant le capteur et déplacez-la d'avant en arrière. Vous devriez voir les lectures (le nombre après le
- Si vous avez installé les capteurs de vitesse :
- Assurez-vous d'avoir suffisamment d'espace libre devant le capteur ultrasonique. La lecture (le nombre après le
s) doit être au moins supérieure à laSTOP_DISTANCEqui est10par défaut. - Envoyez la commande
c128,128. Les moteurs commenceront à tourner à vitesse lente (50% PWM). Les lectures des capteurs de vitesse (valeurs après lew) sont rapportées en rpm et devraient être comprises entre 250 et 300 pour la version RTR_TT selon l'état de charge de la batterie. Si vous utilisez la version DIY ou une batterie plus faible, les valeurs peuvent être inférieures. Vérifiez que tous les moteurs tournent en avant et que les lectures des capteurs de vitesse sont positives. - Essayez d'envoyer différentes commandes et observez les lectures des capteurs de vitesse. Par exemple, la commande
c-128,-128fera tourner tous les moteurs en arrière à vitesse lente (50% PWM). La commandec255,-255fera tourner les moteurs gauches en avant et les moteurs droits en arrière à vitesse rapide (100% PWM). La commandec-192,192fera tourner les moteurs gauches en arrière et les moteurs droits en avant à vitesse normale (75% PWM).
- Assurez-vous d'avoir suffisamment d'espace libre devant le capteur ultrasonique. La lecture (le nombre après le
- Arrêtez les moteurs en envoyant la commande
c0,0ou en tenant votre main devant le capteur ultrasonique. - Si vous avez installé les LED indicatrices, envoyez la commande
i1,0et observez l'indicateur gauche clignoter. Envoyez ensuite la commandei0,1et observez l'indicateur droit clignoter. Enfin, éteignez l'indicateur en envoyant la commandei0,0.
Mode sans téléphone
Avant de tester la voiture avec un smartphone qui a l'application OpenBot installée, vous pouvez également tester la voiture sans téléphone d'abord. Réglez simplement l'option NO_PHONE_MODE sur 1. La voiture roulera maintenant à vitesse normale (75% PWM) et ralentira à mesure qu'elle détecte des obstacles avec le capteur ultrasonique. Une fois qu'elle se rapproche du TURN_THRESHOLD (par défaut : 50 cm), elle commencera à tourner dans une direction aléatoire et allumera la LED de ce côté. Si l'espace libre estimé devant la voiture tombe en dessous du TURN_THRESHOLD, elle reculera lentement et les deux LED s'allumeront. Notez que la voiture et l'Arduino doivent être alimentés. L'Arduino peut être alimenté en connectant la broche 5V à la sortie 5V du pilote de moteur L298N, ou en connectant le câble USB à une source d'alimentation (par exemple, téléphone).
Avant de faire rouler la voiture, nous vous recommandons de retirer les pneus, de connecter l'Arduino à un ordinateur et d'observer le moniteur série comme dans la section Test. La sortie sur le moniteur série est un peu plus facile à analyser (même que l'OLED) et montre la tension de la batterie, le régime pour les moteurs gauche et droit et l'espace libre estimé devant la voiture. Vous pouvez déplacer un grand objet d'avant en arrière devant le capteur ultrasonique et observer la vitesse des moteurs changer.
:warning: AVERTISSEMENT : Si vous n'avez pas installé de capteur ultrasonique ou s'il est désactivé, la voiture roulera simplement en avant à vitesse normale (75% PWM) et finira par entrer en collision. Même avec le capteur installé, la voiture peut parfois entrer en collision en raison de lectures bruyantes.
Utilisation d'autres MCU (exigences)
Vous pouvez utiliser tout autre MCU avec les fonctionnalités suivantes :
- 1x USB-to-TTL Serial (communication avec le smartphone)
- 4x sortie PWM (contrôle des moteurs)
- 1x broche analogique pour la surveillance de la batterie
- 2x broche numérique pour les capteurs de vitesse
- 1x broche numérique pour le capteur ultrasonique (optionnel)
- 2x broche numérique pour les LED indicatrices (optionnel)
Suivant
Compilez et exécutez l'application Android