Créer un site internet

III-Un modèle réduit de la voiture autonome

Dans le but de démontrer l’utilité et le fonctionnement des différents capteurs présents dans la voiture autonome, nous avons décidé de mener la conception d’un robot autonome à capteur ultrasons. Voici premièrement une description généralisée de celui-ci.

 

1) Description du robot :

 

C’est un robot autonome, il est donc capable de rouler et d’éviter les objets sur son passage tout seul. Le but de cette expérience et de modéliser sur un modèle réduit les différents principes de la vraie voiture autonome. Dans ce modèle réduit, les technologies de pointe sont remplacés par des composants électroniques comme le capteur ultrason , ou le micro-contrôleur ( cf 2ème sous-partie ) .

 

Kl

 

 

2) Description des différents composants :

 

Les différents composants ( et les images ) que nous avons acheté proviennent du site de e-commerce Bangood .

 

 

Uy

 

 

 

Composant : Microcontrôleur ( Arduino uno )

 

Description : Un microcontrôleur est un circuit intégré qui rassemble les éléments d’un ordinateur ( processeur , mémoire morte pour le programme , et vive pour les données )

 

Fonctionnement : Programmable pour effectuer des taches simples : pilotage d’un robot dans notre cas . C’est une plate-forme basée sur une interface entrée/sortie simple .

 

Application au robot : Il a pour but de contrôler le robot et de recevoir les informations des capteurs ultrasons .

 

 

Kkk

 

 

Composant : Shield moteur

 

Description : Il permet de piloter deux moteurs à courant direct ( ils sont appelés Dc motors ) à laide de la carte Arduino

 

Fonctionnement : Le shield moteur est relié au arduino , il transmet les infos reçues directement aux moteurs , servomoteurs

 

Application au robot : Le shield moteur servira à diriger les moteurs et les servomoteurs .

 

 

 

Ml

 

 

Composant : Moteur

 

Description : Objet mécanique qui engendre un mouvement

 

Fonctionnement : Il sera branché au shield et au arduino et sera alimenté par des piles

 

Application au robot : Faire tourner les roues en utilisant les informations envoyées par le microcontrôleur .

 

 

Asdfg

 

 

Composant : Châssis + quatre roues

 

Description : Palette + 4 roues

 

Fonctionnement : Mouvement prolongé grâce aux roues

 

Application au robot : Le châssis accueillera les différents composants cités ci-dessus et les roues accueilleront les 4 moteurs

 


J

 

Composant : capteur ultrason

 

Description : C’est un capteur équipé de hauts-parleurs

 

Fonctionnement : Il émet des ultrasons permettant de localiser des obstacles

 

Application au robot : Permet l’anti-collision du robot

 

 

Yjy

 

 

Composant : Cadran digital à 4 chiffres

 

Description : C’est un cadran capable d’afficher jusqu’à 4 chiffres

 

Fonctionnement : Il marche avec des Led , il suffit de lui donner une valeur à afficher

 

Application au robot : Il affichera en temps réel , la distance entre le robot et l’obstacle en centimètres

 

 

3) Programmation et Algorithmes :

 

 

Le robot de base ne possède aucun programme , aucune « connaissances ». Il faut donc implanter un programme dans le micro-contrôleur Arduino . Pour cela on utilise le logiciel de programmation Arduino où il faut programmer dans le langage C . Notre programme doit accomplir deux but principaux : Détecter les obstacle et faire fonctionner les moteurs selon une certaine logique .

Après plusieurs réflexion et test on obtient l’algorithme suivant :

 

 

 

Fzfzfzfz

 

 

 

 

 

En langage C , ça donne ça :

 

 

 

Gegeg

 

 

 

 

Mais pour savoir que la distance et en dessous ou au dessus de 2O cm , il faut programmer le capteur de sorte à ce qu’il puisse calculer cette distance . On note Δt le temps que met l’ultrason à aller et revenir et D la distance obtenue . C'est le principe de l'echolocation .On obtient la fonction suivante :

 

Jyjyj

 

EDIT : Cette formule est mal écrite, vous le verrez en faisant une analyse dimensionnelle !

En langage C , on obtient :

 

 

 

Ujujuju

 

 

D ou la distance sera affichée en cm sur le cadran digital à quatre chiffres du robot .

 

4) Expérimentations et Observations :

 

Passons maintenant aux tests , le logiciel Arduino nous permet d’afficher un moniteur virtuel , qui nous renseigne sur les différentes données : Le sens des moteurs et la distance D .

 

Voici un exemple des données présentes dans le moniteur virtuel :

 

Distance: 0.68mm (0.07cm, 0.00m)

Moteur : 1 sens : 1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 195.16mm (19.52cm, 0.20m)

Moteur : 1 sens : -1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 195.16mm (19.52cm, 0.20m)

 

Dans ce cas là , le robot ne bougeait pas , on a juste rapproché une feuille du capteur .

 

Le robot est capable de calculer la distance D à une vitesse donnée , vérifions si il y a une latence entre le moment où la distance est calculée et le moment où le robot s’arrête :

 

Distance: 302.26mm (30.23cm, 0.30m)

Moteur : 1 sens : -1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 296.99mm (29.70cm, 0.30m)

Moteur : 1 sens : -1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 216.41mm (21.64cm, 0.22m)

Moteur : 1 sens : -1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 143.99mm (14.40cm, 0.14m)

Moteur : 1 sens : 1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 70.55mm (7.06cm, 0.07m)

Moteur : 1 sens : 1 puissance : 100

Moteur : 2 sens : -1 puissance : 100

Distance: 0.00mm (0.00cm, 0.00m)

 

La distance s’affiche toutes les secondes , donc ici le test dure 6 secondes .

C’est à la 3ème seconde que la distance passe en dessous des 20 cm , l’algorithme commence . Le robot mettra 3 secondes environ pour s’arrêter dans ce cas là .

En faisant plusieurs mesures , on se rend compte que le robot à une latence entre 2 et 3 secondes .

On en déduit que le robot autonome tout comme la la voiture autonome possède des avantages mais aussi des inconvénients comme notamment cette latence .

 

 

 

Conclusion :

 

Cette modélisation de la voiture autonome à échelle réduite nous aura permis de comprendre les enjeux de la vraie voiture autonome , les problèmes qu’elle peut rencontrer . Par exemple les problèmes de latence du robot montrent que la voiture autonome nécessite un développement sérieux et rigoureux qui doit être capable d’éviter ce genre de problèmes à l’échelle humaine . La " mini " voiture autonome commence même à avoir un certain succès, certains championnats commencent à émerger...

 

http://www.leparisien.fr/high-tech/qui-deviendra-le-champion-de-france-de-mini-voitures-autonomes-19-11-2018-7946379.php

 

 

Le programme entier ( il est aussi dans le carnet de bord ) :

 

 

// PARTIE CAPTEUR #programmé par LASSUS, SAN-NICOLAS, BARBIER

const byte TRIGGER_PIN             = 2; // Broche TRIGGER
const byte ECHO_PIN = 3;    // Broche ECHO
 
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

const float VITESSE_SON = 340.0 / 1000;

// PARTIE MOTEUR


int pin1Moteur1=12; //pin de commande moteur 1

int pin2Moteur1=8; // pin de comma nde moteur 1

int pinPMoteur1=11;// pin PWM moteur 1

int pin1Moteur2=7; // pin de commande moteur 2

int pin2Moteur2=4; // pin de commande moteur 2

int pinPMoteur2=5; // pin PWM moteur 2


void setup() {

  // put your setup code here, to run once:
 
  // PARTIE CAPTEUR#programmé par LASSUS, SAN-NICOLAS, BARBIER

  Serial.begin(9600); //initialise la communication série
   
  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
  pinMode(ECHO_PIN, INPUT);

  // PARTIE MOTEUR


  pinMode(pin1Moteur1,OUTPUT);

  pinMode(pin2Moteur1,OUTPUT);

  pinMode(pinPMoteur1,OUTPUT);

  pinMode(pin1Moteur2,OUTPUT);

  pinMode(pin2Moteur2,OUTPUT);

  pinMode(pinPMoteur2,OUTPUT);

}


void loop() {

  // PARTIE CAPTEUR#programmé par LASSUS, SAN-NICOLAS, BARBIER

  /* 1. impulsion HIGH de 10µs sur la broche TRIGGER */
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
 

  long mesure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
   
 
  float distance_mm = mesure / 2.0 * VITESSE_SON;
   
  /* Affiche les résultats en mm, cm et m */
  Serial.print(F("Distance: "));
  Serial.print(distance_mm);
  Serial.print(F("mm ("));
  Serial.print(distance_mm / 10.0, 2);
  Serial.print(F("cm, "));       
  Serial.print(distance_mm / 1000.0, 2);
  Serial.println(F("m)"));
   
  delay(500);

 // PARTIE MOTEUR#programmé par LASSUS, SAN-NICOLAS, BARBIER

 
 if ( distance_mm < 200 ) {
 

  actionMoteur(1,1,100);

  actionMoteur(2,-1,100);

 
 }
 
else {


  actionMoteur(1,-1,100);

  actionMoteur(2,-1,100);
    
}

}

void actionMoteur(int moteur,int sens,int pourcentage){

  int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction

  //test numéro du moteur

  if (moteur==1){

    pin1=pin1Moteur1;

    pin2=pin2Moteur1;

    pinP=pinPMoteur1;

  }

  else {

    pin1=pin1Moteur2;

    pin2=pin2Moteur2;

    pinP=pinPMoteur2;

  }

  //test sens du moteur 1,-1 (sens contrainre) ou tout autre valeur (stoppe le moteur)

  if (sens==1){

    etat1=1;

    etat2=0;

  }

  else if (sens==-1){

    etat1=0;

    etat2=1;

  }

  else {

    etat1=0;

    etat2=0;

  }

  puissance=map(pourcentage,0,100,0,255);

  analogWrite(pinP,puissance);

  digitalWrite(pin1,etat1);

  digitalWrite(pin2,etat2);

  //affichage sur le moniteur série (facultatif)

  Serial.print("Moteur : ");

  Serial.print(moteur);

  if (sens==-1 || sens==1){

    Serial.print(" sens : ");

    Serial.print(sens);

  }

  else {

    Serial.print(" ! stop ! ");

  }

  Serial.print(" puissance : ");

  Serial.println(pourcentage);

}

Commentaires

Ajouter un commentaire

Anti-spam