Pages: 1 2 [3] 4 5 ... 21   Go Down
Author Topic: [Projet] Montage de mesure de stabilité  (Read 19366 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En utilisant le même code (juste changé les nº des entrés) sur le sérial monitor, j'ai une valeur comprise entre ~250 et 750 (je vois pas bien, ça va trop vite  smiley-sweat) lorsque je bouge et ce pour chaque axes...
bonjour
pour les gyro, et pour des data exploitables, il faut faire un calage zero plate forme immobile.
regarde ce site , il y a surement des trucs intéressants pour toi, et des bouts de codes à récupérer, meme si la connections là se fait en pseudo I2C.

http://www.pobot.org/Gyroscope-Wii-Motion-Plus.html

Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci Artouste, pour le point "0" je ferai une mesure posé bien à plat sur la table, ensuite je modifierai le code afin que les plus fortes et plus faible valeurs soient gardées dans une variable afin de faciliter la lecture.

Pour le moment le plus urgent est que je puisse totaliser les kms que je vais effectuer et la vitesse max atteinte.

Ce petite changement est du à la dernière modification de mon tricycle et j'aimerais avoir le total de kms parcouru avec ce vélo, car pour l'instant je n'ai qu'un approximation qui est entre 300 et 400 kms.

Et si la météo le permet, je recommence le vélo-taf dans 8 jours...

Donc 8 jours pour mettre au point ce "tachygraphe-mètre"....   smiley-mr-green  toujours avec les mêmes éléments à dispos smiley-lol

« Last Edit: February 05, 2012, 03:16:06 pm by Jean-François » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sur ma planche à pain ( smiley-lol), la SDcard avec le convertisseur de tension, le GPS, et à coté l'écran LCD :



Comme vous pouvez le constater mon appartement se déplace à 1,61 km/h  smiley-lol
L'altitude est complétement fausse (245)...

Donc, pour le moment, j'ai de quoi afficher une vitesse, noter sur la SD les points de mon trajet...

A froid il faut des fois plus de 5 minutes pour accrocher un satellite.... pas trop envie d'attendre assis dans mon vélo ce soit OK avec le GPS pour démarrer.
Donc en gros l'idée serait de mettre un capteur sur un des roues pour la vitesse.
Ce capteur serait étalonné pour le départ par calcul de la circonférence de la roue et blablalbla  smiley-lol.
Par contre, je ne sais pas quel type de capteur utiliser et sur quoi le mettre.
La seule roue qui me donnerais une valeur correcte est la roue arrière, mais cette roue n'a pas de vis sur un circonférence... ou de disque perforé... est ce que la valeur d'une nippe (l'écrou qu tient le rayon sur la jante) serait suffisant pour influencer un capteur X (lequel ? capteur de luminosité, effets de hall ?...)

« Last Edit: February 06, 2012, 04:35:01 pm by Jean-François » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il faut également que je modifie mon sketch pour que la distance parcourue soit sauvegardée sur la SD toutes les secondes dans un fichier en effaçant la valeur précedente.

Pour l'instant, j'ai ça :

Code:
#include <SdFat.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD

SdFat sd;
SdFile myFile;
const int chipSelect = 53;

const int RS=2; //declaration constante de broche
const int E=3; //declaration constante de broche
const int D4=4; //declaration constante de broche
const int D5=5; //declaration constante de broche
const int D6=6; //declaration constante de broche
const int D7=7; //declaration constante de broche

LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// Création d'un objet LiquidCrystal = initialisation LCD en mode 4 bits

int CRC=0;

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of NewSoftSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 2(rx) and 3(tx).
*/

//const int groundpin = 18;
//const int powerpin = 19;


TinyGPS gps;


void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);

void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
  // Initialize SdFat or print a detailed error message and halt
  // Use half speed like the native library.
  // change to SPI_FULL_SPEED for more performance.
  // if (!sd.init(SPI_FULL_SPEED, chipSelect)) sd.initErrorHalt();
 if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt();
 
lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes

delay(10); // pause rapide pour laisser temps initialisation

lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.setCursor(0, 0) ; //
lcd.print("                   ") ; // affiche la chaîne texte - message de test
lcd.setCursor(0, 1) ; //
lcd.print("                   ") ; // affiche la chaîne texte - message de test
lcd.setCursor(0, 0) ; //
lcd.print("recherche de") ; // affiche la chaîne texte - message de test
lcd.setCursor(0, 1) ; //
lcd.print("satellites") ; // affiche la chaîne texte - message de test
 
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();
 
  while (millis() - start < 100)
  {
    if (feedgps())
      newdata = true;
  }
 
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
 // Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  //Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
 
  feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors

  gps.f_get_position(&flat, &flon, &age);
  //Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
  //Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.get_datetime(&date, &time, &age);
  //Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): "); Serial.print(time);
  //Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  //Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  //Serial.print("  Time: "); Serial.print(static_cast<int>(hour)); Serial.print(":"); Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second)); Serial.print("."); Serial.print(static_cast<int>(hundredths));
  //Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");
 
  feedgps();

  //Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): "); Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  //Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): "); printFloat(gps.f_course()); Serial.println();
  //Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");  printFloat(gps.f_speed_mph());
  //Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

//  feedgps();

 // gps.stats(&chars, &sentences, &failed);
//  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: "); Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
 
  Serial.print("Date: "); Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(static_cast<int>(month)); Serial.print("/"); Serial.println(year);
  Serial.print("Time: "); Serial.print(static_cast<int>(hour)); Serial.print(":"); Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second)); Serial.print("."); Serial.println(static_cast<int>(hundredths));
  Serial.print ("latitude");
  Serial.println (flat,5);
  Serial.print ("longitude");
  Serial.println (flon,5);
 
lcd.setCursor(0, 0) ;
lcd.print("                   ") ; // affiche la chaîne texte - message de test
lcd.setCursor(0, 1) ;
lcd.print("                   ") ; // affiche la chaîne texte - message de test
   
lcd.setCursor(0, 0) ;
lcd.print(flat,5) ; // affiche la chaîne texte - message de test
lcd.setCursor(10, 0) ;
lcd.print(second,DEC) ; // affiche la chaîne texte - message de test
lcd.setCursor(13, 0) ;
lcd.print(int(gps.f_course())) ; // affiche la chaîne texte - message de test
lcd.setCursor(10, 1) ;
lcd.print(gps.f_speed_kmph()) ; // affiche la chaîne texte - message de test
lcd.setCursor(0, 1) ;
lcd.print(flon,5) ; // affiche la chaîne texte - message de test

 if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END)) {
    sd.errorHalt("opening test.txt for write failed");
  }

  // if the file opened okay, write to it:
  Serial.print("Writing to test.txt...");
  myFile.print(static_cast<int>(day)); myFile.print("/"); myFile.print(static_cast<int>(month)); myFile.print("/"); myFile.print(year);
  myFile.print(";");
  myFile.print(static_cast<int>(hour)); myFile.print(":"); myFile.print(static_cast<int>(minute)); myFile.print(":"); myFile.print(static_cast<int>(second)); myFile.print("."); myFile.print(static_cast<int>(hundredths));
  myFile.print(";");
  myFile.print(flat,5);
  myFile.print(";");
  myFile.print(flon,5);
  myFile.print(";");
  myFile.print(int(gps.f_course()));
  myFile.print(";");
  myFile.println(gps.f_speed_kmph());

  // close the file:
  myFile.close();
  Serial.println("done.");
 
}


bool feedgps()
{
  while (Serial1.available())
  {
    if (gps.encode(Serial1.read()))
      return true;
  }
  return false;
}
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sur ma planche à pain ( smiley-lol), la SDcard avec le convertisseur de tension, le GPS, et à coté l'écran LCD :



Comme vous pouvez le constater mon appartement se déplace à 1,61 km/h  smiley-lol
L'altitude est complétement fausse (245)...

Donc, pour le moment, j'ai de quoi afficher une vitesse, noter sur la SD les points de mon trajet...

A froid il faut des fois plus de 5 minutes pour accrocher un satellite.... pas trop envie d'attendre assis dans mon vélo ce soit OK avec le GPS pour démarrer.
...
La seule roue qui me donnerais une valeur correcte est la roue arrière, mais cette roue n'a pas de vis sur un circonférence... ou de disque perforé... est ce que la valeur d'une nippe (l'écrou qu tient le rayon sur la jante) serait suffisant pour influencer un capteur X (lequel ? capteur de luminosité, effets de hall ?...)
bonsoir

Le  GPS  (segment civil) n'est pas la "panacée", mais une simple et agréable aide à la navigation, encore plus pour ce qui concerne "la vitesse"  et selon la méthode de calcul/restitution (dérivée d'orthodromie ou doppler  , +/- moyenné ou pas)   de V , il traine des aberrations +/- "importantes" sur la durée selon les constructeurs/intégrateurs de chips GPS.

Pour des petits parcours de l'ordre de la 10zaine de km (ce qui semble etre le sujet)
un,deux,...  pulse capteur par tour d'une roue dont la circonférence est connue à +- Delta petit x , n'est pas et de loin une mauvaise solution pour appréhender le besoin.
Ca permet même avec un peu de soft et à acquisition à taux faible de calculer les "accélérations"

techno la plus simple AMHA ici, un  simple capteur hall fixe , aimants fixés sur la partie mobile et un peu de calibration préalable.

Pour ce qui est du déplacement apparent de ton appartement, c'est du cumulé d'acquisition  smiley-mr-green
C'est souvent "impressionnant" pour ceux qui ne sont pas "dans la finesse" du gps de voir ce que rend une déviation map pour un récepteur à poste fixe
évoqué sur un autre topic
http://arduino.cc/forum/index.php/topic,79047.msg664375.html#msg664375





 
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Concernant l'écriture des données sur la carte, tu n'as pas intérêt à utiliser la librairie SD standard d'Arduino mais directement celle sur laquelle elle est basée, sdfatlib, dont l'auteur fournit entre autre un example "fastDataLogger" qui atteint des débits ahurissants (d'ailleurs je me souviens avoir vu une fois un projet où quelqu'un enregistrait carrément de la voix sur la SD avec un micro et un Arduino).
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

tu n'as pas intérêt à utiliser la librairie SD standard d'Arduino mais directement celle sur laquelle elle est basée, sdfatlib,

C'est pas déjà celle là que j'utilise ?

Code:
#include <SdFat.h>
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Donc en gros l'idée serait de mettre un capteur sur un des roues pour la vitesse.

retour sur le capteur mécaniquement embarqué
Reflexion rapide
Tu n'a pas de "changement de vitesse" ?
un bon endroit est peut être d'utiliser ton pignon de renvoi ?
qq photos supplémentaires de cette partie ?
http://cjoint.com/12fe/BBhm21COrZH_renvjf01.jpg
les lumières visibles (flèches bleues) "tournent" ?
Si oui , utiliser une "fourche optique DIY "  (mais peut être probleme d'encrassement)
ou mieux un capteur à réluctance variable (détection magnétique des lumières") pour "toper" la distance est peut etre pas si compliqué à mettre en œuvre avec une precision et résolution acceptables
A suivre
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, ce pignon-tandem tourne, mais il va probablement être changé prochainement par un autre système qui n'aura pas ces ajours.
De plus, le moyeu arrière est un Nexus 7.... vitesses intégrées donc il faudrait en plus détecter sur quel rapport on se trouve.

Edit:
Je posterai des photos supplémentaires ce soir.
« Last Edit: February 07, 2012, 07:29:29 am by Jean-François » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, ce pignon-tandem tourne, mais il va probablement être changé prochainement par un autre système qui n'aura pas ces ajours.
De plus, le moyeu arrière est un Nexus 7.... vitesses intégrées donc il faudrait en plus détecter sur quel rapport on se trouve.

Edit:
Je posterai des photos supplémentaires ce soir.
alors oublie
ça tournerait trop vite à l'usine à gaz !  smiley-mr-green
retour sur le capteur pour déduction en rotation de circonférence.

Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ça tournerait trop vite à l'usine à gaz !  smiley-mr-green

C'est un peu ce que je pressentais  smiley-sweat
 
retour sur le capteur pour déduction en rotation de circonférence.

Est ce possible de mettre un émetteur lumineux et un capteur à hauteur des nippes il y en à 36 (normalement !), et le ø des nippes fait ~5mm pour une circonférence de jante de 2.07 mètres.

Donc en gros à 50km/h   500*50*36 / 3600 >>>> 250 top/Seconde

Si je ne me trompe pas dans mon calcul, j'ai même de la marge à 100km/h  smiley-lol
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Quote
Est ce possible de mettre un émetteur lumineux et un capteur à hauteur des nippes

Pourquoi pas plus simplement un aimant sur la jante et un capteur à effet hall sur la fourche.

capteur discret dans ce genre : http://www.adafruit.com/products/158

Exemple de code ici : http://tetalab.org/blog/38

@+

Zoroastre.
Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Est ce possible de mettre un émetteur lumineux et un capteur à hauteur des nippes il y en à 36 (normalement !), et le ø des nippes fait ~5mm pour une circonférence de jante de 2.07 mètres.

Donc en gros à 50km/h   500*50*36 / 3600 >>>> 250 top/Seconde

Si je ne me trompe pas dans mon calcul, j'ai même de la marge à 100km/h  smiley-lol

peut etre !  smiley  mais déjà il faudrait m'expliquer ce que sont des "nippes"  chez toi !  smiley-mr-green
je n'ai pas ça en stock dispo au dico
http://atilf.atilf.fr/dendien/scripts/tlfiv5/search.exe?25;s=1420508610;cat=0;m=nippes;
les rayons des roues ?
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai déjà un capteur hall... ce de rajouter un aimant sur ma jante.

Est ce que c'est possible de "mesurer" un éventuelle perturbation du champ magnétique provoquée par le passage des nippes/rayons entre un aimant et le capteur (ces deux dernier étant fixés au cadre) ?
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

il faudrait m'expliquer ce que sont des "nippes"  chez toi !  smiley-mr-green
je n'ai pas ça en stock dispo au dico
http://atilf.atilf.fr/dendien/scripts/tlfiv5/search.exe?25;s=1420508610;cat=0;m=nippes;
les rayons des roues ?


Des nippes c'est ce qui tient le rayon sur la jante :



Les nippes sont généralement en laiton ou plus rarement en inox (en laiton sur la photos) et les rayons en inox.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Pages: 1 2 [3] 4 5 ... 21   Go Up
Jump to: