Go Down

Topic: Réalisation d'un TRIPMASTER pour rallye historique de régularité (Read 255 times) previous topic - next topic

Yves13011

Salut,
Ne voulant pas investir dans un TRIPMASTER à plus de 1.000€, j'ai décidé de le réaliser sur une tablette sous Android. Pour cela il fallait pouvoir faire de l'acquisition de données sur la tablette par l'intermédiaire d'un capteur magnétique installé sur la roue arrière.
J'ai donc choisi le matériel suivant :
1 carte Arduino Mega pour l'acquisition de donné.
1 carte HC-05 pour la liaison BlueTooth entre la carte Arduino et la tablette
1 écran LCD (non obligatoire)
1 alimentation 12v/5v pour la carte Arduino
1 tablette sous Android
1 capteur magnétique de compteur de vélo (déjà installé sur la BETA)
Ensuite il fallait d'une part programmer la carte Arduino en langage C, je remercie Loic de Infobarque.fr qui m'a beaucoup aidé dans la réalisation du programme Arduino et d'autre part créer une application Android pour la tablette, ce que j'ai fait avec Windev Mobile.
A ce jour l'ensemble fonctionne correctement en simulation sur un vélo, reste à l'installer dans la Lancia BETA et passer en teste routier.
Si cela vous intéresse je peux donner le application ou le programme source Windev Mobile qui m'a permis cette réalisation.

Le code source Arduino :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>        // Ecran LCD
LiquidCrystal_I2C lcd (0x20,16,2);    // adresse 0x20, 16 caractères, 2 lignes
#include <SoftwareSerial.h>           // Serie BlueTooth
SoftwareSerial BT_Serial(10, 11);     // RX | TX

const byte pin_capteur=19;            // broche du capteur magnetique RX1 19
int val_capteur;                      // valeur du capteur magnetique
unsigned long nb_tours_roue=0;         // variable nombre de tours de roue
char nb_tours_roue_char[16];           // CHAR nombre de tours de roue
float perimetre_roue=1.80000;         // perimetre roue en metre 99,9999
unsigned long distance=0;             // distance parcourue en mètre 99.999
const byte RAZ = 10;                 // broche bouton remise zero compteur pin 10 et GND
volatile byte top = 0;
int compteur_anti_rebond = 1;        // à modifier suivant le capteur

void setup() {
   // initialisation LED port 13
  pinMode(13, OUTPUT);
  // Ouvre la voie serie USB à 9600 bits par seconde
  Serial.begin(9600);
  // Ouvre la voie avec BlueTooth à 9600 bits par seconde
  BT_Serial.begin(9600);
 
  // initialisation ecran LCD
  lcd.init();                   
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("RAZ compteur");
  delay(5000);
  lcd.clear();

  pinMode(RAZ,INPUT_PULLUP);
   
  // initialisation broche capteur
  pinMode(pin_capteur,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(pin_capteur), TOP, RISING);
}

void loop() {
  if (digitalRead(RAZ) == LOW) nb_tours_roue = 0;
  affichage();
  digitalWrite(13, LOW);     // LED on
}


// Fonction d'interruption pour le comptage du nombre de tours de roue
void TOP() {
   top++ ;
  digitalWrite(13, HIGH);    // LED on
}

void affichage(){
   if(top >= compteur_anti_rebond ){
    nb_tours_roue++;
    top = 0;
  }
 
//  Serial.println(nb_tours_roue);      // envoi au port USB nombre de tours de roue
//  BT_Serial.write(nb_tours_roue);     // envoi un caractère
//  BT_Serial.print(nb_tours_roue);     // envoi des chaines de caractères
//  BT_Serial.println(nb_tours_roue);   // envoi des chaines de caractères
  BT_Serial.println(nb_tours_roue);     // envoi BlueTooth nombre de tours de roue

  lcd.setCursor(0, 0);
  lcd.print("Nbr : ");
  lcd.print(nb_tours_roue);           // affichage nombre tours de roue sur LCD
  lcd.setCursor(0, 1);
  distance = nb_tours_roue * perimetre_roue;
  lcd.print("Dist : ");
  lcd.print(distance);                // affichage distance sur LCD

}

A+
Yves D.

Go Up