Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #30 on: February 03, 2012, 06:22:56 am » |
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  ) 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
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #31 on: February 05, 2012, 02:48:23 pm » |
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"....  toujours avec les mêmes éléments à dispos 
|
|
|
|
« 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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #32 on: February 06, 2012, 04:18:10 pm » |
Sur ma planche à pain (  ), 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  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  . 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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #33 on: February 06, 2012, 04:35:23 pm » |
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 : #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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #34 on: February 06, 2012, 05:33:09 pm » |
Sur ma planche à pain (  ), 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  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  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
Jr. Member
Karma: 0
Posts: 84
|
 |
« Reply #35 on: February 07, 2012, 06:21:20 am » |
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
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #36 on: February 07, 2012, 06:24:42 am » |
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 ? #include <SdFat.h>
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #37 on: February 07, 2012, 07:09:35 am » |
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.jpgles 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
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #38 on: February 07, 2012, 07:17:29 am » |
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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #39 on: February 07, 2012, 10:16:49 am » |
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 !  retour sur le capteur pour déduction en rotation de circonférence.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #40 on: February 07, 2012, 12:33:21 pm » |
ça tournerait trop vite à l'usine à gaz !  C'est un peu ce que je pressentais 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
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
0
Offline
God Member
Karma: 0
Posts: 761
Arduino rocks
|
 |
« Reply #41 on: February 07, 2012, 12:52:46 pm » |
Yep! 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/158Exemple de code ici : http://tetalab.org/blog/38@+ Zoroastre.
|
|
|
|
|
Logged
|
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message 
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #42 on: February 07, 2012, 12:58:18 pm » |
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 peut etre !  mais déjà il faudrait m'expliquer ce que sont des "nippes" chez toi !  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
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #43 on: February 07, 2012, 01:00:48 pm » |
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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #44 on: February 07, 2012, 01:06:14 pm » |
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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
|