- Sélection des pièces pour le robot auto-équilibré
- Impression 3D et assemblage de notre robot auto-équilibrant
- Schéma
- Code du robot auto-équilibré
- Fonctionnement du robot auto-équilibrant Arduino
Après avoir été inspiré par les moteurs RYNO et autres scooters auto-équilibrés de Segway, j'ai toujours voulu construire quelque chose de mon propre robot Arduino Segway. En réfléchissant pendant un moment, j'ai décidé de construire un robot auto-équilibrant en utilisant Arduino. De cette façon, je serais en mesure de saisir le concept sous-jacent derrière tous ces scooters et d'apprendre comment fonctionne l' algorithme PID.
Une fois que j'ai commencé à construire, j'ai réalisé que ce bot était un peu un défi à construire. Il y a tellement d'options à sélectionner et par conséquent, les confusions commencent à bien sélectionner les moteurs et restent jusqu'au réglage des valeurs PID. Et il y a tellement de choses à considérer comme le type de batterie, la position de la batterie, l'adhérence de la roue, le type de pilote de moteur, le maintien du CoG (centre de gravité) et bien plus encore.
Mais laissez-moi vous le dire, une fois que vous l'aurez construit, vous conviendrez que ce n'est pas aussi difficile que cela puisse paraître. Alors avouons-le, dans ce tutoriel, je vais documenter mon expérience dans la construction du robot auto-équilibrant. Vous pourriez être un débutant absolu qui ne fait que commencer ou avoir atterri ici après une longue frustration de ne pas faire fonctionner votre bot. Cet endroit vise à être votre destination finale. Alors, commençons……
Sélection des pièces pour le robot auto-équilibré
Avant de vous dire toutes les options pour construire le bot, permettez-moi de lister les éléments que j'ai utilisés dans ce projet de robot auto-équilibré
- Arduino UNO
- Motoréducteurs à courant continu (couleur jaune) - 2Nos
- Module de commande de moteur L298N
- MPU6050
- Une paire de roues
- Batterie Li-ion 7,4 V
- Fils de connexion
- Corps imprimé en 3D
Vous pouvez mélanger et choisir l'un des composants ci-dessus en fonction de la disponibilité pour créer votre propre kit de robot auto-équilibrant, assurez-vous simplement que les composants répondent aux critères suivants.
Contrôleur: Le contrôleur que j'ai utilisé ici est Arduino UNO, pourquoi parce qu'il est simplement facile à utiliser. Vous pouvez également utiliser un Arduino Nano ou un Arduino mini mais je vous recommande de vous en tenir à UNO car nous pouvons le programmer directement sans aucun matériel externe.
Moteurs: Le meilleur choix de moteur que vous pouvez utiliser pour un robot auto-équilibré sera sans aucun doute le moteur pas à pas. Mais pour garder les choses simples, j'ai utilisé un moteur à engrenages CC. Oui, il n'est pas obligatoire d'avoir un stepper; le bot fonctionne également bien avec ces moteurs à engrenages CC de couleur jaune bon marché et couramment disponibles.
Pilote de moteur: Si vous avez sélectionné les moteurs à engrenages CC comme le mien, vous pouvez soit utiliser le module de pilote L298N comme moi, soit même un L293D devrait fonctionner très bien. En savoir plus sur le contrôle du moteur CC à l'aide de L293D et Arduino.
Roues: Ne sous-estimez pas ces gars-là; J'ai eu du mal à comprendre que le problème venait de mes roues. Assurez-vous donc que vos roues ont une bonne adhérence sur le sol que vous utilisez. Surveillez attentivement, votre prise ne doit jamais permettre à vos roues de jouer sur le sol.
Accéléromètre et gyroscope: Le meilleur choix d'accéléromètre et de gyroscope pour votre bot sera le MPU6050. N'essayez donc pas d'en construire un avec un accéléromètre normal comme ADXL345 ou quelque chose du genre, cela ne fonctionnera tout simplement pas. Vous saurez pourquoi à la fin de cet article. Vous pouvez également consulter notre article dédié sur l'utilisation du MPU6050 avec Arduino.
Batterie: Nous avons besoin d'une batterie aussi légère que possible et la tension de fonctionnement doit être supérieure à 5V pour pouvoir alimenter directement notre Arduino sans module de suralimentation. Le choix idéal sera donc une batterie Li-polymère de 7,4 V. Ici, depuis que j'avais une batterie Li-ion de 7,4 V facilement disponible, je l'ai utilisée. Mais rappelez-vous qu'un Li-po est plus avantageux qu'un Li-ion.
Châssis: Un autre endroit où vous ne devez pas faire de compromis est le châssis de votre bots. Vous pouvez utiliser du carton, du bois, du plastique avec tout ce qui vous convient. Mais assurez-vous simplement que le châssis est solide et ne doit pas bouger lorsque le robot essaie de s'équilibrer. J'ai conçu mon propre châssis sur Solidworks en déduisant des autres bots et je l'ai imprimé en 3D. Si vous avez une imprimante, vous pouvez également imprimer la conception, les fichiers de conception seront joints dans l'en-tête à venir.
Impression 3D et assemblage de notre robot auto-équilibrant
Si vous avez décidé d'imprimer en 3D le même châssis que j'utilise pour construire mon bot, les fichiers STL peuvent être téléchargés à partir de thingiverse. J'ai également ajouté les fichiers de conception avec lui afin que vous puissiez également le modifier selon les préférences de votre personnel.
Les pièces n'ont pas de structures en surplomb, vous pouvez donc les imprimer facilement sans aucun support et un remplissage de 25% fonctionnera bien. Les conceptions sont assez simples et toute imprimante de base devrait pouvoir la gérer facilement. J'ai utilisé le logiciel Cura pour découper le modèle et j'ai imprimé à l'aide de mon Tevo Tarantula, les paramètres sont indiqués ci-dessous.
Vous devrez imprimer la partie du corps ainsi que quatre pièces de montage du moteur. L'assemblage est assez simple; Utilisez des écrous et des boulons de 3 mm pour fixer le moteur et les cartes en place. Après l'assemblage, il devrait ressembler à celui illustré ci-dessous.
La conception réelle a été prévue avec le module de lecteur L298N dans le rack inférieur, l'Arduino et la batterie au-dessus, comme indiqué ci-dessus. Si vous suivez le même ordre, vous pouvez visser directement la carte dans les trous fournis et utiliser une étiquette métallique pour la batterie Li-po. Cet arrangement devrait également fonctionner, sauf pour les roues super simples que j'ai dû changer plus tard.
Dans mon bot, j'ai échangé la position de la batterie et de la carte Arduino UNO pour faciliter la programmation et j'ai également dû introduire une carte de performance pour terminer les connexions. Donc, mon bot ne ressemblait pas à ce que j'avais prévu au stade initial. Après avoir terminé les tests de programmation de câblage et tout, mon robot à deux roues ressemble enfin à ceci
Schéma
Faire les connexions pour ce robot à équilibrage automatique basé sur Arduino est assez simple. Il s'agit d'un robot auto-équilibré utilisant Arduino et MPU6050, nous devons donc interfacer le MPU6050 avec Arduino et connecter les moteurs via le module de pilote de moteur. L'ensemble de l'installation est alimenté par la batterie li-ion de 7,4 V. Le schéma de circuit correspondant est illustré ci-dessous.
L'Arduino et le module de pilotage du moteur L298N sont directement alimentés via la broche Vin et la borne 12V respectivement. Le régulateur embarqué sur la carte Arduino convertira l'entrée 7.4V en 5V et l'ATmega IC et le MPU6050 seront alimentés par celui-ci. Les moteurs à courant continu peuvent fonctionner de la tension 5V à 12V. Mais nous connecterons le fil positif 7.4V de la batterie à la borne d'entrée 12V du module de commande de moteur. Cela fera fonctionner les moteurs avec 7,4 V. Le tableau suivant répertorie la manière dont le module de pilote de moteur MPU6050 et L298N est connecté à Arduino.
Broche de composant |
Broche Arduino |
MPU6050 |
|
Vcc |
+ 5V |
Sol |
Gnd |
SCL |
A5 |
SDA |
A4 |
INT |
D2 |
L298N |
|
EN 1 |
D6 |
EN 2 |
D9 |
IN3 |
D10 |
IN4 |
D11 |
Le MPU6050 communique avec Arduino via l'interface I2C, nous utilisons donc les broches SPI A4 et A5 d'Arduino. Les moteurs CC sont connectés respectivement aux broches PWM D6, D9 D10 et D11. Nous devons les connecter aux broches PWM car nous contrôlerons la vitesse du moteur à courant continu en faisant varier le cycle de service des signaux PWM. Si vous n'êtes pas familier avec ces deux composants, il est recommandé de lire le didacticiel d'interfaçage MPU6050 et de pilote de moteur L298N.
Code du robot auto-équilibré
Nous devons maintenant programmer notre carte Arduino UNO pour équilibrer le robot. C'est là que toute la magie opère; le concept sous-jacent est simple. Nous devons vérifier si le bot est penché vers l'avant ou vers l'arrière en utilisant le MPU6050 et ensuite s'il est penché vers l'avant, nous devons faire pivoter les roues vers l'avant et s'il est penché vers l'arrière, nous devons faire pivoter les roues. dans le sens inverse.
Dans le même temps, nous devons également contrôler la vitesse à laquelle les roues tournent, si le robot est légèrement désorienté de la position centrale, les roues tournent lentement et la vitesse augmente à mesure qu'il s'éloigne de la position centrale. Pour réaliser cette logique, nous utilisons l'algorithme PID, qui a la position centrale comme point de consigne et le niveau de désorientation comme sortie.
Pour connaître la position actuelle du robot, nous utilisons le MPU6050, qui est un accéléromètre à 6 axes et un capteur gyroscopique combinés. Afin d'obtenir une valeur de position fiable du capteur, nous devons utiliser la valeur de l'accéléromètre et du gyroscope, car les valeurs de l'accéléromètre présentent des problèmes de bruit et les valeurs du gyroscope ont tendance à dériver avec le temps. Nous devons donc combiner les deux et obtenir la valeur du tangage et du roulis de lacet de notre robot, dont nous n'utiliserons que la valeur de lacet.
Sonne un peu de tête qui tourne, non? Mais ne vous inquiétez pas, grâce à la communauté Arduino, nous avons des bibliothèques facilement disponibles qui peuvent effectuer le calcul PID et également obtenir la valeur de lacet du MPU6050. La bibliothèque est développée respectivement par br3ttb et jrowberg. Avant de continuer, téléchargez leurs bibliothèques à partir du lien suivant et ajoutez-les à votre répertoire lib Arduino.
github.com/br3ttb/Arduino-PID-Library/blob/master/PID_v1.h
github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
Maintenant que nous avons les bibliothèques ajoutées à notre IDE Arduino. Commençons la programmation de notre robot auto-équilibrant. Comme toujours, le code complet du robot d'équilibrage MPU6050 est donné à la fin de cette page, je n'explique ici que les extraits les plus importants du code. A dit plus tôt, le code est construit sur l'exemple de code MPU6050, nous allons simplement optimiser le code pour notre objectif et ajouter le PID et la technique de contrôle pour notre robot auto-équilibrant.
Nous incluons d'abord les bibliothèques nécessaires au fonctionnement de ce programme. Ils incluent la bibliothèque I2C intégrée, la bibliothèque PID et la bibliothèque MPU6050 que nous venons de télécharger.
#include "I2Cdev.h" #include
Ensuite, nous déclarons les variables nécessaires pour obtenir les données du capteur MPU6050. Nous lisons à la fois le vecteur de gravité et les valeurs de quaternion, puis calculons la valeur du tangage et du roulis de lacet du bot. Le tableau float ypr contiendra le résultat final.
// Contrôle / état MPU vars bool dmpReady = false; // défini sur true si l'initialisation DMP a réussi uint8_t mpuIntStatus; // contient l'octet d'état d'interruption réel du MPU uint8_t devStatus; // retourne l'état après chaque opération du périphérique (0 = succès ,! 0 = erreur) uint16_t packetSize; // taille attendue du paquet DMP (la valeur par défaut est de 42 octets) uint16_t fifoCount; // compte de tous les octets actuellement dans FIFO uint8_t fifoBuffer; // tampon de stockage FIFO // orientation / mouvement vars Quaternion q; // conteneur quaternion VectorFloat gravity; // vecteur de gravité float ypr; // Conteneur de lacet / pas / roulis et vecteur de gravité
Vient ensuite le segment très important du code, et c'est là que vous passerez beaucoup de temps à régler le bon ensemble de valeurs. Si votre robot est construit avec un très bon centre de gravité et que les composants sont disposés symétriquement (ce qui dans la plupart des cas ne l'est pas), la valeur de votre point de consigne sera de 180. Sinon, connectez votre bot au moniteur série Arduino et inclinez-le jusqu'à vous trouvez une bonne position d'équilibrage, lisez la valeur affichée sur le moniteur série et c'est votre valeur de consigne. La valeur de Kp, Kd et Ki doit être ajustée en fonction de votre bot. Aucun bots identiques n'aura les mêmes valeurs de Kp, Kd et Ki donc il n'y a pas d'échappatoire. Regardez la vidéo à la fin de cette page pour avoir une idée de la manière d'ajuster ces valeurs.
/ ********* Réglez ces 4 valeurs pour votre BOT ********* / double setpoint = 176; // définit la valeur lorsque le bot est perpendiculaire au sol à l' aide du moniteur série. // Lisez la documentation du projet sur circuitdigest.com pour savoir comment définir ces valeurs double Kp = 21; // Définit ce premier double Kd = 0,8; // Définit ce deuxième double Ki = 140; // Définissez enfin ceci / ****** Paramètre de fin de valeurs ********* /
Dans la ligne suivante, nous initialisons l'algorithme PID en passant les variables d'entrée input, output, set point, Kp, Ki et Kd. Parmi ceux-ci, nous avons déjà défini les valeurs des points de consigne Kp, Ki et Kd dans l'extrait de code ci-dessus. La valeur d'entrée sera la valeur actuelle de lacet qui est lue à partir du capteur MPU6050 et la valeur de sortie sera la valeur calculée par l'algorithme PID. Donc, fondamentalement, l'algorithme PID nous donnera une valeur de sortie qui devrait être utilisée pour corriger la valeur d'entrée pour qu'elle soit proche du point de consigne.
PID pid (& entrée, & sortie, & point de consigne, Kp, Ki, Kd, DIRECT);
Dans la fonction de configuration vide, nous initialisons le MPU6050 en configurant le DMP (Digital Motion Processor). Cela nous aidera à combiner les données de l'accéléromètre avec les données du gyroscope et fournira une valeur fiable de lacet, de tangage et de roulis. Nous n'entrerons pas beaucoup dans ce sujet car cela dépassera largement le sujet. Quoi qu'il en soit, un segment de code que vous devez rechercher dans la fonction de configuration correspond aux valeurs de décalage du gyroscope. Chaque capteur MPU6050 a ses propres valeurs de décalages.Vous pouvez utiliser cette esquisse Arduino pour calculer la valeur de décalage de votre capteur et mettre à jour les lignes suivantes en conséquence dans votre programme.
// fournissez ici vos propres décalages gyroscopiques, mis à l'échelle pour la sensibilité min. mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1688);
Nous devons également initialiser les broches Digital PWM que nous utilisons pour connecter nos moteurs. Dans notre cas, il s'agit de D6, D9, D10 et D11. Nous initialisons donc ces broches car les broches de sortie les rendent BAS par défaut.
// Initialise les broches de sortie du moteur pinMode (6, OUTPUT); pinMode (9, SORTIE); pinMode (10, SORTIE); pinMode (11, SORTIE); // Par défaut, éteignez les deux moteurs analogWrite (6, LOW); analogWrite (9, LOW); analogWrite (10, LOW); analogWrite (11, LOW);
Dans la fonction de boucle principale, nous vérifions si les données du MPU6050 sont prêtes à être lues . Si oui, nous l'utilisons pour calculer la valeur PID, puis afficher la valeur d'entrée et de sortie du PID sur le moniteur série juste pour vérifier comment le PID répond. Ensuite, en fonction de la valeur de la sortie, nous décidons si le bot doit avancer ou reculer ou rester immobile.
Puisque nous supposons que le MPU6050 retournera 180 lorsque le bot est debout. Nous obtiendrons des valeurs de correction positives lorsque le bot tombe vers l'avant et nous obtiendrons des valeurs négatives si le bot tombe vers l'arrière. Nous vérifions donc cette condition et appelons les fonctions appropriées pour faire avancer ou reculer le bot.
while (! mpuInterrupt && fifoCount <packetSize) { // pas de données mpu - exécution des calculs PID et sortie vers les moteurs pid.Compute (); // Imprime la valeur de l'entrée et de la sortie sur le moniteur série pour vérifier son fonctionnement. Serial.print (entrée); Serial.print ("=>"); Serial.println (sortie); if (input> 150 && input <200) {// Si le Bot tombe if (output> 0) // Falling vers l'avant Forward (); // Faire tourner les roues vers l'avant else if (output <0) // Tomber vers l'arrière Reverse (); // Faire tourner les roues vers l'arrière } else // Si le Bot ne tombe pas Stop (); // Tenez les roues immobiles }
La variable de sortie PID détermine également la vitesse de rotation du moteur. Si le bot est sur le point de tomber, nous apportons une correction mineure en tournant lentement la roue. Si ces corrections mineures fonctionnent et toujours si le bot tombe, nous augmentons la vitesse du moteur. La valeur de la vitesse de rotation des roues sera déterminée par l'algorithme PI. Notez que pour la fonction Reverse, nous avons multiplié la valeur de la sortie par -1 afin de pouvoir convertir la valeur négative en positive.
void Forward () // Code pour faire tourner la roue vers l'avant { analogWrite (6, output); analogWrite (9,0); analogWrite (10, sortie); analogWrite (11,0); Serial.print ("F"); // Informations de débogage } void Reverse () // Code pour faire tourner la roue vers l'arrière { analogWrite (6,0); analogWrite (9, sortie * -1); analogWrite (10,0); analogWrite (11, sortie * -1); Serial.print ("R"); } void Stop () // Code pour arrêter les deux roues { analogWrite (6,0); analogWrite (9,0); analogWrite (10,0); analogWrite (11,0); Serial.print ("S"); }
Fonctionnement du robot auto-équilibrant Arduino
Une fois que vous êtes prêt avec le matériel, vous pouvez télécharger le code sur votre carte Arduino. Assurez-vous que les connexions sont correctes car nous utilisons une batterie Li-ion avec une extrême prudence. Vérifiez donc les courts-circuits et assurez-vous que les bornes n'entreront pas en contact même si votre bot subit de petits impacts. Allumez votre module et ouvrez votre moniteur série, si votre Arduino peut communiquer avec succès avec le MPU6050 et si tout fonctionne comme prévu, vous devriez voir l'écran suivant.
Ici, nous voyons les valeurs d'entrée et de sortie de l'algorithme PID au format input => output . Si le bot est parfaitement équilibré, la valeur de sortie sera 0. La valeur d'entrée est la valeur actuelle du capteur MPU6050. L'alphabet «F» représente que le bot avance et «R» représente que le bot est en marche arrière.
Pendant les étapes initiales du PID, je recommande de laisser votre câble Arduino connecté au bot afin que vous puissiez facilement surveiller les valeurs d'entrée et de sortie et il sera également facile de corriger et de télécharger votre programme pour les valeurs Kp, Ki et Kd. La vidéo ci-dessous montre le fonctionnement complet du bot et montre également comment corriger vos valeurs PID.
J'espère que cela vous aidera à construire votre propre robot auto-équilibrant si vous rencontrez un problème pour le faire fonctionner, laissez vos questions dans la section commentaires ci-dessous ou utilisez les forums pour des questions plus techniques. Si vous voulez plus de plaisir, vous pouvez également utiliser la même logique pour construire un robot d'équilibrage de balle.