Réalisation d'un TRIPMASTER pour rallye historique de régularité

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.

Bonjour Yves,

Je travaille également sur une liaison Bluetooth entre Windev Mobile et Arduino au travers d'un module HC-05. L'application WM s'appliquera à Android, je parviens aujourd'hui à appairer correctement ma tablette au module HC-05, mais pas à envoyer une info (du type "hello") de la tablette vers Arduino.
Mon HC-05 est paramétré en 9600 bauds, et mon code Arduino reprend ce débit.

En lisant ton message, j'imagine que tu as réussi à franchir cette étape, même si dans ton cas c'est Arduino qui transmet à ta tablette. Pourrais-tu poster ton code Windev Mobile réalisant l'appairage Bluetooth et l'envoi de données?

Merci à toi,

ArduiDev

Salut,
Mon code Windev Mobile ne fait que de la récupération de données aucun envoi.

Le bouton de connexion BlueTooth :
ChaineTmp est une chaîne
ListePériphs est une chaîne
BTN_BlueTooth..Libellé=" Recherche en cours"
NomSocketBT="BT-HC05"

SI BTEtat() = btDésactivé ALORS
BTActive(Vrai)
FIN

// Recherche ARDUINO
ListePériphs = BTListePériphérique()
SI ListePériphs <> "" ALORS
POUR TOUTE CHAÎNE ChaineTmp DE ListePériphs SEPAREE PAR RC
// Récupération des valeurs
IdentifiantBT = ExtraitChaîne(ChaineTmp,1, TAB)
AdresseMACBT = ExtraitChaîne(ChaineTmp,2, TAB)
NomBT = ExtraitChaîne(ChaineTmp,3, TAB)
SI SansEspace(NomBT)="BT-HC05" ALORS
// Connexion ARDUINO
ToastAffiche("ID : "+IdentifiantBT+" MAC : "+ AdresseMACBT+" Nom : " + NomBT)
SI SocketConnecteBluetooth(NomSocketBT,"SerialPortServiceClass_UUID",AdresseMACBT) = Vrai ALORS
SocketChangeModeTransmission(NomSocketBT,SocketSansMarqueurFin)
ToastAffiche("Arduino connecté.")
BTN_BlueTooth..Libellé="BlueTooth Connecté"
SINON
Info("Connexion ARDUINO impossible",ErreurInfo(errComplet))
FIN
FIN
FIN
SINON
Info("Aucun périphérique disponible.")
BTN_BlueTooth..Libellé="Activation BlueTooth"
FIN

La récupération de données :
PROCEDURE Tour_Roue()
SI NomSocketBT<>"" ALORS
SI SocketExiste(NomSocketBT) = Vrai ALORS
Lecture_Tours_Roue = AnsiVersUnicode(SocketLit(NomSocketBT))
SI Lecture_Tours_Roue > Nb_Tour_Roue ALORS Nb_Tour_Roue=Lecture_Tours_Roue
SI ChampExiste("EXPRESS_TripMaster.NBTours") ALORS EXPRESS_TripMaster.NBTours=Nb_Tour_Roue
SI ChampExiste("EXPRESS_Etalonnage.NBTours") ALORS EXPRESS_Etalonnage.NBTours=Nb_Tour_Roue
SINON
Info("Connexion ARDUINO impossible",ErreurInfo(errComplet))
FinAutomatismeProcédure(Tour_Roue)
FIN
SINON
Info("Connexion ARDUINO impossible",ErreurInfo(errComplet))
FinAutomatismeProcédure(Tour_Roue)
FIN

A+
Yves D.