Documentation visuelle
Les images suivantes ont été ajoutées au projet et illustrent le robot ainsi que les membres de l'équipe Nova Tech.
– Modélisation 3D du robot.
Présentation et objectifs
Le projet consiste à concevoir un robot autonome capable de :
- Suivre une ligne noire tracée sur une piste.
- Détecter et contourner les obstacles rencontrés.
- Rester performant, précis et réactif.
- Permettre à l'équipe Nova Tech de viser la victoire au concours UCAO TECH.
Liste du matériel
Matériel requis selon le cahier de charge.
| Composant | Qté | Rôle |
|---|---|---|
| Carte Arduino UNO | 1 | Contrôle principal du robot |
| Moteurs à courant continu | 2 | Déplacement |
| Driver moteur | 1 | Interface de puissance |
| Capteurs infrarouges | 3 | Suivi de ligne |
| Fils jumper + breadboard | 1 set | Connexions |
| Interrupteur | 1 | Mise sous tension |
| Piles / batteries | 2 | Alimentation |
| Roues | 3 | Mobilité |
| Châssis | 1 | Structure |
| Pistolet à colle, scotch, vis, écrous | — | Assemblage |
Technologie principale utilisée : Arduino.
Financement
Le budget projet inclut les coûts obligatoires et les dépenses de fonctionnement.
| Poste | Montant | Détails |
|---|---|---|
| Inscription concours UCAO TECH | 20 000 FCFA | Coût fixe |
| Achat matériel robot | Variable | Composants électroniques et mécaniques |
| Transport | Variable | Déplacements équipe et logistique |
Capteurs — Vue d'ensemble
Le robot utilise 3 capteurs infrarouges pour détecter la ligne noire (gauche, centre, droite), plus un module dédié à l'évitement d'obstacles.
Schéma de la barrette
Position : Gauche Centre Droite
| | |
════════════●══════════●═════════●════════
Sortie analogique : noir / blanc
Décision : correction gauche, droite ou maintien
Principe de décision
Le microcontrôleur compare les trois lectures IR et corrige les moteurs :
si capteur_gauche détecte la ligne → tourner à gauche si capteur_droite détecte la ligne → tourner à droite si capteur_centre détecte la ligne → avancer si obstacle détecté → contourner l'obstacle
Calibration et Ajustement des Seuils
Les capteurs IR retournent une valeur analogique entre 0 et 1023. Il est important de calibrer les seuils pour bien distinguer la ligne noire du fond blanc.
Procédure de calibration
- Placer le robot sur une surface blanche (fond).
- Mesurer les valeurs analogiques pour les 3 capteurs (afficher via Serial.println).
- Placer le robot sur la ligne noire.
- Mesurer à nouveau les 3 valeurs.
- Calculer le seuil comme la moyenne :
seuil = (valeur_blanche + valeur_noire) / 2 - Utiliser ces seuils dans la logique de détection.
Code exemple
// Seuils calibrés (à adapter selon votre robot) const int SEUIL = 500; void readSensors() { left = analogRead(IR_LEFT); center = analogRead(IR_CENTER); right = analogRead(IR_RIGHT); // 1 = ligne détectée, 0 = pas de ligne detecL = (left > SEUIL) ? 1 : 0; detecC = (center > SEUIL) ? 1 : 0; detecR = (right > SEUIL) ? 1 : 0; }
Logique de Contrôle des Moteurs
Sur l'Arduino UNO avec 3 capteurs IR, le contrôle est simple : chaque configuration de capteurs correspond à une action moteur.
Table de vérité
| Gauche | Centre | Droite | Action |
|---|---|---|---|
| 0 | 1 | 0 | Avancer tout droit |
| 1 | 0 | 0 | Tourner à gauche |
| 0 | 0 | 1 | Tourner à droite |
| 1 | 1 | 0 | Tourner légèrement à gauche |
| 0 | 1 | 1 | Tourner légèrement à droite |
| 1 | 1 | 1 | Peut être la ligne — avancer |
| 0 | 0 | 0 | Perte de ligne |
Implémentation
void followLine() { readSensors(); if (detecL && !detecC && !detecR) { setMotors(80, 200); // Tourner à gauche } else if (!detecL && !detecC && detecR) { setMotors(200, 80); // Tourner à droite } else { setMotors(150, 150); // Avancer } }
Vitesses adaptatives
Optionnel : augmenter la vitesse en ligne droite, la réduire en virage :
int vitesseBase = 180; int reductionVirage = 40; // En virage : réduire la vitesse if (detecL || detecR) { vitesseBase = 140; }
- Seulement si le robot a un biais constant d'un côté.
- Commencer très bas : Ki = 0.0001.
- Augmenter doucement. L'anti-windup est critique ici.
Profils sauvegardés
| Profil | Kp | Ki | Kd | Usage |
|---|---|---|---|---|
| Safe | 0.10 | 0.0001 | 1.5 | Premiers tests, piste inconnue |
| Normal | 0.15 | 0.0001 | 2.5 | Entraînement standard |
| Aggressif | 0.22 | 0.0002 | 3.8 | Compétition, piste connue |
Stratégie Vitesse
La vitesse de base n'est pas fixe : elle s'adapte en fonction de la déviation de la ligne.
Principe
- Ligne droite (erreur faible) → vitesse maximale.
- Virage (erreur élevée) → vitesse réduite progressivement.
- Transition douce pour éviter les à-coups mécaniques.
int vitesseAdaptative(float erreur) { float absErr = abs(erreur); if (absErr < 500) return MAX_SPEED; // 255 - ligne droite if (absErr < 1500) return MED_SPEED; // 200 - virage léger if (absErr < 2500) return SLOW_SPEED; // 150 - virage serré return MIN_SPEED; // 100 - urgence }
Programmation Arduino
Le programme embarqué est développé en langage Arduino (C++ simplifié) pour l'Arduino UNO.
Structure du programme
Le programme comprend :
- setup() : Initialisation des pins et des capteurs.
- readSensors() : Lecture des 3 capteurs IR (Gauche, Centre, Droit).
- followLine() : Logique de suivi de la ligne noire.
- avoidObstacle() : Logique d'évitement d'obstacle.
- controlMotors() : Pilotage des 2 moteurs DC (vitesse + direction).
- loop() : Boucle principale répétée continuellement (~100 Hz).
Configuration des pins Arduino
// Capteurs infrarouges const int IR_LEFT = A0; const int IR_CENTER = A1; const int IR_RIGHT = A2; // Moteur gauche const int MOT_L_IN1 = 8; const int MOT_L_IN2 = 9; const int MOT_L_PWM = 10; // Moteur droit const int MOT_R_IN1 = 11; const int MOT_R_IN2 = 12; const int MOT_R_PWM = 5; // Détecteur d'obstacle (capteur IR numérique) const int OBSTACLE_PIN = 2;
Déploiement
- Télécharger l'IDE Arduino officiel (arduino.cc).
- Sélectionner "Arduino UNO" dans Outils → Carte.
- Charger votre sketch (.ino).
- Cliquer "Vérifier" pour compiler, puis "Téléverser" pour charger dans le microcontrôleur.
- Ouvrir le Moniteur série (9600 baud) pour suivre l'exécution.
Tests et Optimisation
Procédure systématique pour tester et affiner les performances du robot avant la compétition.
Étapes de test
- Test de ligne droite : Robot suit une ligne noire d'1 mètre sans obstacle. Vérifier la stabilité (pas d'oscillation).
- Test de virages : Ajouter une courbe à 90° puis en S. Mesurer le temps et la trajectoire.
- Test d'obstacle : Placer un obstacle à 10 cm. Vérifier que le robot le détecte et s'arrête ou contourne.
- Test de performance : Chronomètrer le parcours complet de la piste UCAO TECH.
- Test d'endurance : Répéter 5 fois consécutives, noter les variations de temps.
Enregistrement des résultats
Pour chaque session de test, documenter :
- Date et heure du test.
- Tension batterie (V) au début et à la fin.
- Conditions d'éclairage et état de la piste.
- Paramètres du firmware (seuils capteurs, vitesses).
- Temps d'exécution et nombre d'erreurs (sorties de ligne, non-détection obstacle).
- Observations qualitatives et ajustements effectués.
Ces données permettent d'optimiser progressivement le robot et de détecter les problèmes intermittents.
Maintenance et Vérifications
Procédures pour garder le robot en état optimal avant la compétition.
Check-list pré-compétition
| Vérification | Fréquence | Criticité |
|---|---|---|
| Tension batterie > 7.0V | Avant chaque session | Critique |
| Capteurs IR propres (pas de poussière/traces) | Avant chaque test | Haute |
| Roues intactes, pas d'usure excessive | Chaque semaine | Haute |
| Vis du châssis bien serrées | Chaque semaine | Moyenne |
| Connexions électriques (pas de corrosion) | Toutes les 2 semaines | Moyenne |
| Soudures intactes sur la breadboard | Toutes les 2 semaines | Moyenne |
| Firmware chargé et testé | Avant compétition | Critique |
Entretien des batteries
Les batteries alcalines perdent de la charge progressivement. Signes de remplacement :
- Tension inférieure à 7.0V (mesurer avec un multimètre).
- Robot visiblement plus lent (moins de couple moteur).
- Comportement instable après 30 minutes d'utilisation.
Dépannage
Solutions rapides aux problèmes courants rencontrés avec l'Arduino UNO et le robot.
| Problème | Cause probable | Solution |
|---|---|---|
| Robot oscille sur la ligne | Seuil détection trop sensible | Augmenter le seuil d'au moins 50 valeurs analogiques |
| Robot se désaxe en virage | Moteurs déséquilibrés (vitesses différentes) | Ajuster les PWM par calibrage individuel des moteurs |
| Capteurs donnent des valeurs erratiques | Bruit électrique des moteurs, capteurs sales | Nettoyer les capteurs, ajouter des condensateurs près de la breadboard |
| Un moteur ne tourne pas | Faux contact, batterie faible, ou pin PWM cassée | Vérifier les soudures, mesurer la tension batterie, tester avec un autre pin |
| Arduino ne reconnaît pas le chargement | Câble USB défectueux ou port COM non sélectionné | Essayer un autre câble USB, redémarrer l'IDE Arduino |
| Obstacle détecté tous les 2 secondes sans raison | Capteur obstacle trop sensible ou objet réfléchissant à proximité | Réduire la sensibilité ou éloigner les objets parasites |
| Robot très lent malgré batterie correcte | Friction mécanique ou dégâts moteur | Vérifier les roues (pas d'obstruction), tester les moteurs séparément |