Train de véhicules
Sommaire
Cahier des charges
Présentation générale du projet
L'objectif de ce projet est de développer une douzaine de robots mobiles capables de se suivre afin de former un train de véhicules. Le véhicule de tête sera téléguidé par WiFi, alors que les autres suivront le véhicule de devant de façon autonome.
Les robots seront des robots roulants à deux roues. Le corps du robot sera monté à partir de châssis à bas coût: les 2WD Robot Car chassis.
Ce châssis comprend déjà deux moteurs 6V, deux roues et un support de 4 piles 1.5V. Il faudra ajouter deux odomètres, un driver de puissance pour les moteurs, ainsi qu'un microcontrôleur. Le véhicule de tête sera commandé par un micro-contrôleur avec WiFi intégré de type ESP8266. Les autres par un Arduino Uno. Le véhicule de tête se comportera comme un point d'accès WiFi et implantera un mini-serveur Web pour permettre le contrôle via un smartphone ou un ordinateur.
Chaque véhicule possède un numéro d'identification N, et doit suivre celui de numéro N-1. Pour cela, il doit détecter et identifier un véhicule dans une zone définie. Le véhicule à suivre émet des ondes infrarouges modulées par son numéro d'identification, donc chaque robot émettra à une fréquence différente. Un capteur infrarouge doit être installé à l'avant du robot suiveur afin de récupérer ces informations tandis que l’émetteur IR sera situé à l'arrière du robot. Le suivi se fera à une distance prédéfinie. Le robot suiveur sera équipé d'un capteur ultrason pour asservir sa distance avec le véhicule suivi. Il faudra que l'arrière des véhicules soit bien plan pour que le télémètre ultra-son puisse prendre une mesure fiable.
Un véhicule suiveur doit tourner sur lui-même pour détecter les balises IR. Si une balise est détectée, on tente de l'identifier. S'il s'agit de la bonne balise, on commence la poursuite, sinon on continue à chercher les balises. Tant que la bonne balise est dans le champ de vision, il faut la garder le plus au centre. Plusieurs capteurs IR seront utilisés pour assurer la bonne direction du robot. La vitesse est régulée par rapport à la distance retournée par le télémètre. Nous utiliserons un régulateur PID pour limiter les oscillations en vitesse des robots.
Liste de matériel
Matériel | Quantité requise | Quantité disponible | A commander | Commentaires |
---|---|---|---|---|
Chassis 2WD | 4 | 4 | 0 | Corps + motoreducteurs 6V + roues + odomètres |
Piles / batteries | 4x4x1.5V | Suffisamment | 0 | |
Arduino Uno | 3 | 3 | 0 | |
ESP8266 | 1 | 1 | 0 | |
LED IR | 20 | 0 | 20 | RS [1], angle de diffusion : 130°, longueur d'onde : 880nm |
Phototransistors IR | 20 | 0 | 20 | RS [2], angle de sensibilité : 50°, gamme spectrale de sensibilité : 730-1120nm |
Ultrasons SR04 | 3 | 3 | 0 | |
Drivers moteur Pololu | 1 | 0 | 1 | GoTronic [3] |
Drivers moteur TB6612FNG | 3 | 0 | 3 | Mouser [4] |
Boutons poussoirs | 4 | 4 | 0 | |
LEDs couleur | 10 | 0 | 10 | RS [5] |
Résistances 220 Ohms CMS | 6 | 0 | 6 | Mouser [6] |
Résistances 470 kOhms CMS | 20 | 0 | 20 | Mouser [7] |
Fils m-m | 1 lot de 65 | 0 | 1 lot de 65 | Farnell [8] |
Capacités 10µF CMS | 10 | 0 | 10 | Mouser [9] |
Capacités 0.1µF CMS | 10 | 0 | 10 | Mouser [10] |
Embases CI 40 contacts 1 rangée | 4 | 0 | 4 | RS [11] |
Borniers à vis | 15 | 0 | 15 | Farnell [12] |
Cartes électroniques | 3 | 0 | 3 | A faire nous-même |
Liste des tâches
- Étudier la partie puissance
- Déterminer la source d'énergie
- Régulateur 6 V pour alim driver moteur ?
- Choix du driver moteur
- Étudier la communication infrarouge
- Circuit d'émission: LED IR + résistance
- Circuit réception: Phototransistor IR + résistance
- Déterminer la portée du signal ?
- Étudier l'influence de la lumière ambiante ?
- Étudier la directivité du signal émis ? De la détection ?
- En déduire la disposition des détecteurs
- Programmer cette communication sur Arduino
- Étude de l'ESP8266
- Nombre de GPIOs disponibles
- Comment coder ?
- Développement d'un code PID numérique
- Sur IDE, possibilité de faire une classe PID
- En code C, une librairie
Répartition du travail
Avant le début du projet, nous avons étudié les objectifs de celui-ci, imaginé et identifié quelques solutions techniques et établi une première liste de matériel.
Lundi 14-16h | Mercredi 14-18h | jeudi 10-12h | |
---|---|---|---|
Semaine 4 | 25/01: Organisation du projet | 27/01: Etude préalable de l'IR | 28/01: Liste de matériel |
Semaine 5 | 01/02: Finalisation de la liste de matériel | 03/02: Liste définitive du matériel, test des Pololu | 04/02: Suite des tests des Pololu |
Semaine 6 | 08/02: Test des capteurs ultrasons | 10/02: Prise en main de l'ESP8266 (1er upload, blink) | 11/02: Début conception circuit électronique |
Semaine 8 | 22/02: Recherches et tests Arduino (Timers, PWMs) / Cartes électroniques | 24/02: Premiers tests ESP8266 (Access point Wifi, requetes HTTP) / Cartes électroniques | 25/02: Recherches sur l'ESP8266 (Timer, Interruptions, PWM)/ Cartes électroniques |
Semaine 9 | 29/02: Tests ESP8266 (PWM, Timers) et Arduino (Définition des fonctions principales)/ Cartes électroniques | 02/03: Montage robot tête / Programmation ESP8266 (1er programme fonctionnel) et Arduino (Fonctions principales)/ Cartes électroniques | 03/03: Positionnement des phototransistors (Fréquencemètre IR) / Cartes électroniques |
Semaine 10 | 07/03: Finition des PCB | 09/03: | 10/03: |
Avancement du Projet
Travaux | Avancement | Commentaires |
---|---|---|
Étude préalable de la communication infrarouge | En cours | Montages d'émission et de réception déterminés
Émission: Puissance délivrée par Arduino suffisante, LEDs grande directivité nécessaires (130°) Réception: Bonne sensibilité, reste à définir la répartition sur le robot Influence relativement importante du bruit IR ambiant, prévoir un "chapeau" |
Étude de l'alimentation | Fait | Deux solutions confrontées:
Alim 9V (6x1.5V) et linéariseur 6V Alim 6V (4x1.5V) directe --> Solution retenue pour sa simplicité. Étude fonctionnelle à prévoir |
Électronique de puissance | Fait | Utilisation de drivers moteur Pololu TB6612FNG |
Montage général | En cours | Breadboard pour le robot de tête. Plusieurs PCB pour les robots suiveurs |
Prise en main de ESP8266 | Fait | |
Gestion informatique de la communication infrarouge | A faire | |
Asservissement PID numérique pour déplacements | A faire | |
Pilotage du robot de tête par WIFI | En cours |
1: Étude de la communication infrarouge
Émission
Nous déterminons ici le schéma de l'émission infrarouge:
La tension de commande de ce montage sera délivrée par un pin numérique de l'Arduino. Celui-ci accepte un courant max de sortie de 30mA. Nous fixons donc le courant dans le montage à environ 20mA afin de conserver une bonne puissance d'émission sans risquer d'endommager l'Arduino.
On a ,
, donc
. Nous avons
, en choisissant R à 220 Ohms, nous obtenons un courant de 18mA.
Afin que le signal infrarouge puisse être capté le mieux possible par un véhicule suiveur, nous choisissons d'émettre le signal avec une directivité très large. Les LEDS IR que nous avons sélectionnées ont donc un angle de diffusion de 130°.
Réception
Nous déterminons ici le schéma de la réception infrarouge:
La tension au collecteur du transistor est proportionnelle à l'intensité IR captée par le phototransistor. La valeur de la résistance de pull-up permet de régler le gain du montage. Celui-ci doit rester raisonnable afin de rejeter le bruit ambiant, et suffisant pour capter le signal utile, même à bonne distance. Nous avons expérimentalement déterminé R à 470 kOhms. Néanmoins, le bruit ambiant représente toujours un partie non négligeable du signal (rapport S/B ~ 2). Ce bruit étant principalement issu de l'éclairage, nous prévoyons de positionner une protection opaque au dessus de chaque récepteur.
Cette tension sera lue sur un convertisseur Analogique/Numérique de l'Arduino. Nous déterminerons ensuite une valeur seuil en dessous de laquelle on considère l'absence de signal IR, et au dessus de laquelle on considère qu'un signal est reçu.
Nous choisissons cette fois-ci une directivité restreinte pour la réception infrarouge. L'objectif étant de situer le robot à suivre, plusieurs récepteurs sont placés à l'avant. En fonction du ou desquels reçoivent le signal, il sera possible de connaître la position approximative du robot à suivre. Nous avons donc sélectionné des récepteur dont l'angle de détection est d'environ 50°.
Voici un premier schéma de disposition des récepteurs à l'avant du robot:
//Faire schéma
La position du robot émetteur sera déterminée en fonction du ou des récepteurs qui reçoivent le signal émis. Le robot suiveur sera commandé de façon à suivre le plus précisément possible le robot de tête.
2: Étude de l'alimentation et de l'électronique de puissance
Les moteurs à courant continu fonctionnent sous une tension nominale de 6V. L'Arduino peut de même être alimentée sous une tension 6V. L'alimentation par 4 piles 1.5V est donc adaptée.
Une solution alternative consistant à utiliser une source de tension plus élevée (9V) et un linéariseur 6V a été étudiée, mais rejetée car la stabilité de la tension des piles est suffisante pour notre application.
Afin de commander les moteurs en tension, nous avons sélectionné le driver Toshiba TB6612FNG, constitué de 2 hacheurs 4 cadrants. IL est particulièrement bien adapté à notre application:
- Courant < 1A
- Plage de tension d'entrée 3-13V
- Faible coût
- Faible encombrement
La datasheet du composant !!!SERA!!! disponible dans les Fichiers annexes.
Ce composant sera monté sur le PCB selon le schéma suivant:
//Schéma
3: Montage général
Nous avons convenu de réaliser des cartes électroniques pour les robots suiveurs, de façon à avoir un montage plus propre et plus stable. Les composants du robot de tête seront, quant à eux, montés sur une breadboard et reliés par des fils.
Montage des robots suiveurs
Nous allons donc réaliser plusieurs cartes électroniques, en fonction de la disposition des éléments.
A l’arrière du robot, se trouve la LED infrarouge, avec une résistance afin de limiter le courant. Cela constituera une première petite carte.
A l’avant, nous allons mettre le dispositif de détection infrarouge, avec le microcontrôleur et le driver moteur. Ce sera la carte principale. Nous y ajouterons les LEDs qui permettent de connaitre le numéro du robot, ainsi que le bouton poussoir pour en changer, et les codeuses. Initialement, le driver moteur choisi est vendu sur une carte comprenant un circuit TB6612FNG et des capacités. Nous allons recréer ce montage et l’intégrer à notre carte. Le capteur ultrason sera surélevé, de façon à ne pas être gêné par d’autres composants. Il faut donc une autre petite carte électronique.
Nous obtenons ainsi les montages suivants, réalisés sur Altium Designer :
// 3 images (captures d’Altium)
Après avoir créé les empreintes de tous les composants, nous pouvons dessiner les PCB de chaque carte.
Montage du robot de tête
Le montage de tête nécessite moins de composants. Nous pouvons utiliser juste une breadboard et des fils. // image ESP LED IR + R Driver pololu Codeuses
4: Programmation de l'ESP8266
- Prise en main
Il existe plusieurs manières de programmer l'ESP. Directement en c, mais aussi via l'IDE Arduino. Une librairie est disponible sur l'IDE pour programmer et flasher le microcontrôleur. Nous préférerons cette solution car elle est plus simple d'utilisation, et la plupart des fonctions que nous utilisons sont disponibles.
- Fonctions principales du programme:
- Recevoir des instructions de déplacement via des paquets http
- Réaliser les déplacements demandés via une régulation PID
- Émettre un identifiant via Infrarouge
5: Programmation de l'Arduino
- Arduino
- Affichage ID
- Communication IR
- Fréquencemètre numérique
- Ultrasons SRF04
- PID moteurs
- Algo de fonctionnement