All about Robot Cars - part 1

Au cours des quatre prochaines semaines, notre blog se concentrera sur les petits véhicules électriques de tous les côtés. Vous serez étonné du nombre de combinaisons possibles pour l'équipement de ces petites voitures dites "robots". Nous commencerons par l'équipement de base, où vous pourrez choisir entre le kit à deux roues avec roue d'appui et celui à quatre roues. Les petits moteurs à courant continu sont les mêmes chez presque tous les fournisseurs, mais en ce qui concerne les microcontrôleurs, toute la gamme, du Raspberry Pis à l'AVR (compatible Arduino) et à l'Espressif, est disponible avec des qualités et des défauts différents. 

Pour le premier test, vous pouvez préprogrammer les commandes de conduite comme avec le Lego ® Boost. Mais cela devient vite ennuyeux. Une télécommande est nécessaire. Avec le Raspberry Pi, vous pouvez utiliser un clavier sans fil sur le port USB. Les MCU compatibles WLAN peuvent être contrôlés par un contrôleur sur le réseau, tel que le smartphone, même avec Blynk. Pour conclure sa série de blogs MQTT, Jörn Weise va contrôler un simple robot roulant à l'aide de son courtier Raspberry Pi . Et nous vous montrerons comment construire et programmer une télécommande radio avec une carte microcontrôleur avec ATmega328P, ATmega16U2, compatible avec Arduino UNO R3.

Enfin, nous voulons imiter les grands modèles et enseigner à notre Robot Car la conduite autonome. Grâce aux capteurs de distance, nous pouvons programmer un arrêt d'urgence ou éviter des obstacles. Avec les capteurs IR, nous pouvons suivre une ligne ou rouler très précisément à petits pas, par exemple pour nous garer en marche arrière.

C'est parti pour les premières mesures :

Il vous faut d'abord un châssis à 2 ou 4 roues/moteurs. Nous n'avons actuellement pas les kits de retour dans notre assortiment ; c'est pourquoi nous faisons ici référence à Amazon.

Avantages et inconvénients des deux-roues avec roue d'appui : très mobiles, peuvent tourner sur place. Mais en raison de la construction (disons bon marché) des moteurs ou de petites bosses sur le sol, il est difficile de courir droit.

 


Avantages et inconvénients des quatre-roues : Meilleure marche en ligne droite, un moteur à l'arrêt est poussé, plus d'espace pour les MC et les batteries. Mais la ligne droite est acquise avec de grands rayons de courbure. Et quatre moteurs ont besoin de deux fois plus de courant que les batteries.

 


Avec le mot-clé batteries rechargeables, nous sommes à l'origine de l'alimentation électrique de nos voitures robots. Comme vous pouvez le voir sur les photos, les kits contiennent un support pour 4 piles Mignon/batteries rechargeables. Cela peut être suffisant pour les premières tentatives, mais vous atteindrez très vite les limites. Les piles Mignon ne délivrent que 1,2 à 1,25 V par cellule, presque trop peu pour nos microcontrôleurs. Et aussi les moteurs, de loin les plus gros consommateurs d'énergie, comme un peu plus "d'entrain". Un support pour 6 piles Mignon est préférable. Une alimentation électrique séparée pour les moteurs et les microcontrôleurs est également recommandée, car un moteur brièvement bloqué peut rapidement provoquer un redémarrage non souhaité de l'unité MCU.

La plupart des lecteurs savent que les microcontrôleurs ne peuvent pas alimenter directement les moteurs et que la vitesse du moteur est contrôlée par modulation de largeur d'impulsion (PWM). Nous avons donc besoin d'un contrôleur de moteur qui, contrôlé par le MCU avec PWM, achemine l'alimentation électrique externe vers les moteurs. Dans le cas le plus simple, il peut s'agir d'un CI portant le nom L293D. Cependant, il est recommandé d'utiliser des boucliers ou des HAT équipés d'une ou deux de ces puces, qui sont branchés directement sur le microcontrôleur correspondant. Nous expliquerons en détail dans un blog le fonctionnement de cette puce, appelée "H-bridge".

Ensuite, nous devons décider quel micro ordinateur ou micro contrôleur choisir. Là encore, il y a des avantages et des inconvénients à chacune des différentes solutions.

Si vous avez besoin de beaucoup de puissance de calcul, utilisez un micro-ordinateur, par exemple de la famille des Raspberry Pi : Raspberry Pi 3B, 3B+, 3A+, 4B ou Zero WH sont recommandés. Avantages : Plus grande puissance de calcul, WLAN, Bluetooth, contrôle par clavier, nombreux capteurs, appareil photo ( !), PWM pour les servomoteurs. Le language de programmation est Python avec le très puissant module de programme gpiozero. Le MotoZero de ThePiHut est un contrôleur de moteur peu coûteux au format pHAT (Pi Zero) pour quatre moteurs. Et il existe d'autres contrôleurs de moteur basés sur le L293D. Mais il ne faut pas en cacher les inconvénients : Les RasPis ont besoin d'environ 1 minute pour démarrer à partir de la carte µSD et veulent exactement 5,0 à 5,1 volts sans interruption.

Les plus insensibles pour l'alimentation électrique sont les microcontrôleurs compatibles Arduino avec les processeurs Atmel, par exemple notre carte microcontrôleur avec ATmega328P, ATmega16U2, compatible avec Arduino UNO R3, pour laquelle il existe le protecteur de moteur correspondant. Cette combinaison offre plus de connectivité pour les capteurs, le croquis est compilé dans IDE Arduino et notre Robot Car est prêt à partir dès la mise sous tension. Cependant, en raison du manque de capacité WLAN, nous sommes privés de cette option de contrôle dans cette variante par ailleurs robuste et conviviale pour les débutants. Mais un remède est une télécommande radio avec 433MHz ou 2,4GHz.

Les MCU de l'Espressif sont livrés avec un WLAN prêt à l'emploi : Qu'il s'agisse de la ESP8266-12F ou de la ESP32, les Minis sont également adaptées à notre Robot Car. Mais ici aussi, comme pour le RasPis, un convertisseur DC-DC doit être utilisé pour une alimentation électrique stable.  Parce que par exemple deux batteries LiPo 18650 délivrent 7,4 à 8,4 V, 6 batteries Mignon environ 7,2 à 7,5 V, c'est trop pour notre Micro Controller, même si celles-ci ont des régulateurs de tension partiellement intégrés. (Il s'agit principalement des 3,3 V internes).

De quoi d'autre avons-nous besoin ? Si les câbles pour l'alimentation des moteurs ne sont pas encore soudés, il faut un fer à souder pour cela. Sinon, toutes les connexions sont vissées ou bouchées avec des câbles de raccordement. Pour fixer le compartiment des piles et les différents éléments, je recommande d'utiliser du ruban adhésif double face et des attaches auto-adhésives en velcro ou en câble.


Dans cette introduction générale, je voudrais rafraîchir les connaissances de base sur les moteurs à courant continu et la modulation de largeur d'impulsion.

Les moteurs à courant continu ont deux connexions pour le plus et le moins. La polarité détermine le sens de rotation du moteur. L'inversion de la polarité fonctionne alors avec le pont en H déjà mentionné ci-dessus. Voici le principe de fonctionnement du moteur à courant continu :

 

Image de Kampert/Scherbeck : Comprendre l'électronique avec Raspberry Pi

L'image de gauche montre les pôles opposés, qui déplacent le curseur en position horizontale grâce à la force de Lorentz. L'image du milieu montre cette position horizontale, où le flux de courant est interrompu, mais où le rotor continue à se déplacer en raison de l'inertie. Peu de temps après, les essuie-glaces touchent les autres contacts du collecteur (photo de droite). Le champ magnétique du rotor est inversé, et les mêmes pôles se repoussent désormais. La rotation se poursuit.

À titre d'exemple, je montre le blindage du moteur L293D pour Arduino Uno et les microcontrôleurs compatibles, où il est possible de connecter jusqu'à 4 moteurs aux bornes à vis. Si le sens de rotation ne correspond pas, il suffit d'inverser la polarité du connecteur du moteur correspondant. Sur l'image ci-dessous à gauche se trouvent les raccords à vis pour l'alimentation électrique externe. Vous n'avez pas à vous soucier des connexions du microcontrôleur - il suffit de le brancher et de lire l'affectation des broches des moteurs pour le croquis dans la fiche technique. Vous pouvez également voir la connexion optionnelle de deux servomoteurs en haut à gauche.

 


Toutes les cartes de pilotage de moteur avec le L293D sont compatibles avec le PWM. Ces ponts électroniques en H peuvent donc non seulement changer le sens de rotation, mais aussi contrôler la vitesse des moteurs.

PWM signifie Pulse Width Modulation en allemand et pulse width modulation en anglais (synonyme de PDM pour Pulse Duration Modulation ou modulation de durée d'impulsion) et cela signifie qu'au lieu d'une tension continue constante, nous émettons des impulsions, c'est-à-dire que nous allumons et éteignons toujours le courant. Cependant, cela arrive si vite qu'on ne le voit pas. Comme au cinéma ou à la télévision, où respectivement 24 ou 25 images/seconde font un film à notre œil. La fréquence de mise sous tension et hors tension en une seconde (le taux ou la fréquence) est l'un des paramètres de notre PWM. Ici, nous pouvons utiliser les préréglages respectifs.

Le deuxième paramètre est le rapport entre la durée de l'impulsion et la durée totale d'un cycle, qui consiste en une impulsion + une pause. Ce paramètre est appelé le cycle d'utilisation.

 


Qu'est-ce que cela signifie pour nos moteurs à courant continu ? Ils reçoivent la pleine tension avec l'impulsion, alors que le courant ne circule que pro rata temporis en fonction du cycle de fonctionnement. Cela signifie que le moteur reçoit moins d'énergie électrique.

La programmation est assez simple : nous utilisons la fonction analogWrite(), avec la syntaxe analogWrite(pin, value), où pin est le numéro de broche, sans le définir comme sortie avant, et value est un entier entre 0 et 255 (pour PWM 8 bits), donc par exemple 25% est égal à 63.

Après avoir appelé analogWrite(), la fonction génère une onde carrée continue avec un cycle spécifié jusqu'à ce que le prochain appel à analogWrite() (ou digitalRead() ou digitalWrite()) soit effectué sur la même broche.

Voir la page de référence arduino.cc pour plus de détails, 
https://www.arduino.cc/reference/de/language/functions/analog-io/analogwrite/
où j'ai copié l'exemple de code suivant, qui est particulièrement intéressant car la variable d'entrée analogique a une résolution de 10 bits (max. 1023), alors que la valeur de sortie peut être de 255 maximum.

Le code règle la sortie sur la broche 9 de la LED proportionnellement (facteur 4) à la valeur lue sur un potentiomètre à A3. La LED ici est représentative de notre moteur.

int ledPin = 9; // LED connectée à la broche numérique 9int analogPin = 3; // Potentiomètre connecté à la broche 3 int val = 0; // Variable pour stocker la valeur lue void setup () {pinMode (ledPin, OUTPUT); // définit la broche comme sortie.} Void loop () {val = analogRead (analogPin); // Lit la valeur de la broche analogWrite (ledPin, val / 4); // analogRead: valeurs de 0 à 1023, analogWrite: valeurs de 0 à 255}


C'est presque aussi facile dans le language de programmation Python sur le Raspberry Pi, du moins si vous utilisez le module gpiozero. Cela sera montré dans un prochain blogpost.


J'espère avoir piqué votre curiosité et vous nous suivrez au cours des prochaines semaines alors que l'équipe de blogueurs montrera différents points de vue sur le contrôle et la régulation des Robot Cars.



3 commentaires

Guido Jensen

Guido Jensen

Cooles Project, werds jetzt doch mal probieren.

UND…ist das DER Walter Goegebeur :-)) ?

Guido

Volkert Braren

Volkert Braren

Vernünftig funktionierende Stützrollen hab ich noch nicht gefunden. An Teppichen und kleinen Stufen bleiben die gern hängen. Stattdessen setze ich ein Servo mit kleiner Möbelrolle ein. Steuerung mit der Motorsteuerung synchronisiert.
Geradeauslauf verbessern mit Tachorädern an den Motorachsen.
Grüße, Volkert

Walter Goegebeur

Walter Goegebeur

Darauf freue ich mich sehr. Es ist super das Sie sich um aktuelle Themen kümmern und uns mit Denkanstöße fördern und das für günstige Preise. Vielen Dank.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés