Radar mobile

On se pose toujours la question « Quelle est la voiture la plus rapide ? ». Parfois la différence est si grande que la réponse est facile. Mais parfois, c’est pas facile. On peut aussi se poser la question suivante : « Quel est le pilote le plus rapide ? » avec la même voiture. J’avais réalisé un montage électronique piloté par un Rasberry Pi mais ce n’était pas simple à installer, enfin il fallait quelques minutes. Je souhaitais réaliser un système plus rapide, plus flexible et pas trop chère. Mon choix s’est porté sur un Arduino Nano avec lequel j’avais déjà fait quelques montages.

Matériel :

  • 1 arduino Nano (3€)
  • 1 support arduino nano (2€)
  • 1 alim 9V (2€)
  • 2 capteurs proximité infrarouge ( 3€ les 10)
  • 1 ecran LCD (3,5€)
  • 3 lots de 4 fils Dupont (1€)

Principe :

Deux capteurs de proximité détectent la voiture, l’Arduino informé du passage de la voiture, note l’heure de passage avec une précision de la microseconde. Ensuite le micro contrôleur calcule la différence entre les deux temps, ce qui donne la durée. Sachant la distance entre les 2 capteurs, il calcule la vitesse. Ensuite l’information est envoyé à l’écran LCD. Comme l’afficheur est grand, on calcule et affiche le nombre de tours (ou de mesures), le minimum, le maximum et la moyenne des valeurs.

Pour que tous les éléments ne se baladent pas, j’ai tout mis dans une boite. Le petit déjeuné du matin a été très utile dans mes recherches. Cette boite jaune est l’élément idéal avec son couvercle et sa taille.

Le couvercle permet de fixer les capteurs, et pourra être facilement retiré. Le coté de la boite accueillera l’afficheur. Le fond de la boite sera percé pour laisser passer la cordon d’alimentation.

A ce stade, visuellement, le défaut que je lui trouve c’est cette couleur jaune uni, il faudra que je trouve des autocollants pour personnaliser ce radar.

A l’intérieur, on voit que c’est simple, il y a justes quelques fils entre chaque éléments. Ci-dessous, on aperçoit les 2 capteurs fixés sur des cornières en plastique.

Voici le plan de montage des éléments, notez qu’il faut faire attention aux numéros de broches de branchement des capteurs. Il faut être cohérent avec celles indiquées dans le programme.

Voici le programme pour l’Arduino.

//Libraries 
#include <Wire.h>  
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address, if it's not working try 0x27.

const int sensorPin = A0;
int outputValue = 0;
const int IR1 = 4;
const int IR2 = 5;

int compteur1 = 1;      // variable enregistre un passage compteur 1
int compteur2 = 1;      // variable enregistre un passage compteur 2
long temps1=millis();    // Variable prise de temps pour IR 1
long temps2=millis();    // Variable prise de temps pour IR 2
long temps3 = 0;         // Variable pour le calcul du temps reel passe
float V = 0.0;            // Variable Vitesse
float TTS = 0.0;          // Variable temps passe en secondes
float VKM = 0.0;          // Variable vitesse en KM/H
float VKMN = 0.0;         // Variable vitesse en N
float VKMH0 = 0.0;        // Variable vitesse en H0

float V_min = 99999999;        // Vitesse min
float V_max = 0.0;        // Vitesse max
float V_moy = 0.0;        // Vitesse moy
float V_som = 0.0;        // Vitesse som

String texte="";
int tours=0;

void setup(){
  lcd.begin(20,4);   // iInit the LCD for 16 chars 2 lines
  lcd.backlight();   // Turn on the backligt (try lcd.noBaklight() to turn it off)
  lcd.setCursor(0,0); //First line
  lcd.print("*** attente  ***");
  lcd.setCursor(0,1); //Second line
  lcd.print("*** vehicule ***");
  lcd.setCursor(0,2); //3eme line
  lcd.print("***   SLOT   ***");
  lcd.setCursor(0,3); //4eme line
  lcd.print("***  RACING  ***");
  // capteurs
  pinMode(IR1,INPUT);
  pinMode(IR2,INPUT);
  //Serial.begin(9600);
}

void loop(){
  
  int valIR1 = digitalRead(IR1);  
  // Lecture de broche A2 et mise du resultat dans la variable valIR1
  int valIR2 = digitalRead(IR2);   
  // Lecture de broche A3 et mise du resultat dans la variable valIR2
 
   if(valIR1 == LOW && compteur1 == 1 && compteur2 == 1) {  
   // Si passage devant IR1 ET compteur1 = 1 alors ....
   temps1=micros();       // enregistrement dans temps1 de la valeur millis
   compteur1 = compteur1 + 1;   
  // On rajoute +1 a compteur1 ce qui empeche le remplacement de la valeur de temps1   
  //Serial.print(temps1);
  //Serial.println();
   } 
 
   if(valIR2 == LOW && compteur2 == 1 && compteur1 == 2) {   
   // Si passage devant IR2 ET compteur2 = 1 alors .... 
   temps2=micros();      // enregistrement dans temps1 de la valeur millis    
   compteur2 = compteur2 + 1; 
  // On rajoute +1 a compteur2 ce qui empeche le remplacement de la valeur de temps2    
  //Serial.print(temps2);
  //Serial.println();
   }

   if(compteur1 > 1 && compteur2 > 1) {   
       // Si les valeurs de Compteur1 ET de compteur2 sont differente de 1 alors le calcul peut debuter
      tours=tours+1;
       temps3 = (temps2 - temps1);       
       // temps en millisecondes passez entre les deux capteurs
  //Serial.print(temps3);
  //Serial.println();
  //Serial.print("----");
  //Serial.println();

     
       TTS = ((float)temps3 / 1000000.0);          
       // conversion milisecondes en secondes
     
       V = (0.05 / (float)TTS)*100;               
       // calcul de d/t, ma distance est ici de 5 cm, soit 0,05 m
       // en cm/s
      V_som =V_som+V;
      V_moy=V_som/tours;
      if(V < V_min) {
        V_min=V;
      }
      if(V > V_max) {
        V_max=V;
      }
      //texte=String(V)+"cm/s -"+String(tours)+"    ";
      affichage(String(V),String(tours),String(V_min),String(V_max),String(V_moy));
      delay(500);  // delais de 10 secondes avant reprise du programme 
        // Pour permettre la liberation de la zone IR
     
        compteur1=1;  // Variable remise a 1
        compteur2=1;  // Variable remise a 1
        temps1 = 0;   // Variable remise a 0
        temps2= 0;    // Variable remise a 0
   }
 
  //delay(10);
  
}

void  affichage(String vitesse,String tours,String V_min, String V_max ,String V_moy) {

  lcd.backlight(); 
  //lcd.noBacklight();
  
  lcd.clear();
  lcd.setCursor(0,0); //First line
  lcd.print(vitesse+"cm/s");
  lcd.setCursor(0,1); //Second line
  lcd.print(tours+" tours");
  lcd.setCursor(0,2); //3eme line
  lcd.print(V_min+" a "+V_max);
  lcd.setCursor(0,3); //4eme line
  lcd.print("Moy. "+V_moy);
  
}

Si vous souhaitez plus d’informations sur la mise en oeuvre pour envoyer le programme à l’Arduino, vous pouvez consulter l’Article suivant : https://www.framboise314.fr/commencer-avec-larduino/

Donc voilà, vous disposez d’un radar qu’il suffit de placer sur le bord de la piste puis de brancher au secteur. Il est aussi possible d’utiliser une pile 9V et un petit adaptateur pour alimenter l’Arduino, mais l’autonomie ne sera pas très longue.