Faire un conteur de temps ?

Portrait de Vincent

Bonjour,

J'aimerai faire un conteur de temps pour savoir a quelle vitesse roule (en moyenne, donc) un véhicule donc le conteur est cassé.

En gros: voici un schéma:

jk.png

Pour ce qui est de la détection du passage, je pensais mètre 2 électrodes en papier d'aluminium que ferai un contact, signalant le passage du véhicule.

Pour l'électrode 1, la relier à l'arduino directement, il serait donc positionné à l'électrode 1.

Pour l'électrode 2, j'ai 100 m de câble de téléphone en 2 fils .

Le plus important pour moi est de savoir le temps qui sépare le passage du détecteur 1 au 2.

Il serai super d'afficher cela sur un écran LCD ou un 7 segments de 4 afficheurs en 1.

Je suis donc coincé au niveau du code.

Merci par avance 

Au revoir.

Portrait de brossden

Tien Vincent est de retour

Toujours fâché avec l'orthographe !

J"ai bien aimé le retour que tu as fais de l"aide concernant :

Faire un diagramme sur LibreOffice Calc avec les données de l'enregistreur

J'espère que tu auras une âme charitable qui saura t'aider. Juste une suggestion pas besoin de mettre des électrodes à 100 mètres l'une de l'autre, 1 mètre suffit largement à estimer la vitesse  avec une précision de 0,36 km/h si tu utilises une base de temps au 1/10000 de seconde Arduino sait gérer le 1/1000000 de seconde tu as de la marge ! ce qui donne une précision de 3.6 cm/h pas mal non ? sur 1 mètre ce n'est plus une moyenne mais une vitesse instantanée !

Bonne journée

Au revoir.

Portrait de Vincent

Bonjour, 

Oui, je reviens, toujours avec mes problèmes d'orthographe depuis la maternelle, en 6 ème, j'ai été reconnu DYS. Merci...

Je ne sais pas, mais il faudrait donc que je place mon conteur à l'endroit ou la vitesse serait maximale !

Il serait trop compliqué pour le code de les mettre à 50 m ?

J'aimerai plus de précision au niveau du code arduino !

Enfin, ce n'est pas la précision qui m'importe.

Merci bien par avance !

Portrait de brossden

Vincent

Il ne faudrait pas confondre aide et service de développement !

Bonne journée à tous

Portrait de Vincent

Bonjour,

Dans ce cas là, ce serait plus développement public alors ;)

Dés idées pour le code alors ?

Portrait de brossden

Ben non ce n'est pas un service de développements gratuit !

C'est un site d'entraide pour ceux qui ont des difficultés dans leur projet.

Bonne journée !

Portrait de Vincent

Bon, je ne sais plus quoi faire donc...

Portrait de brossden

Donc ? (donc quoi ????)

Disons que jusqu'à maintenant je ne t'ai jamais vu proposer une ligne de code, si tu veux de l'aide il te faut faire quelques efforts et commencer à proposer quelque chose !

Je peux quand même t'aider pour ton projet pour ce qui est de la logique.

Tu peux utiliser la fonction millis() qui renvoie le temps en millisecondes le temps depuis lequel ta carte Arduino est sous tension. Donc si tu utilises comme algorithme que  lorsque le capteur de début de ta piste de 50m modifie l'état de l'entrée d'un premier port, tu mets en mémoire la valeur  double MilDeb = millis(). Puis en fin de piste le capteur de fin modifie l'état de l'entrée d'un second port tu mets en mémoire la valeur  double MilFin = millis(). Tu pourras obtenir le temps en millisecondes que ton véhicule à mis en 50 m de distance par la formule Int Chrono = MilFin - MilDeb. Je doute fort que tu puisses obtenir autant de précision avec un système aussi simple. Alors maintenant à ton clavier pour passer de l'algorithme au code puis à la réalisation de TON projet. Je pense que tu sauras comment faire pour déduire une vitesse en Kilomètres /Heure grâce a ce temps(Chrono)  et à la distance (50 mètres) entre les capteurs  !

Tu obtiendras  le tableau suivant :

MilliSec    Mètres    Vitesse    
1800    50    100,0    Km/h
1900    50    94,7    Km/h
2000    50    90,0    Km/h
2100    50    85,7    Km/h
2200    50    81,8    Km/h
2300    50    78,3    Km/h
2400    50    75,0    Km/h
2500    50    72,0    Km/h
2600    50    69,2    Km/h
2700    50    66,7    Km/h
2800    50    64,3    Km/h
2900    50    62,1    Km/h
3000    50    60,0    Km/h
3100    50    58,1    Km/h
3200    50    56,3    Km/h
3300    50    54,5    Km/h
3400    50    52,9    Km/h
3500    50    51,4    Km/h
3600    50    50,0    Km/h
3700    50    48,6    Km/h
3800    50    47,4    Km/h

Mais il est possible d'obtenir une précision 1000 fois plus grande !!! (avec le même matériel et un algorithme un peu plus compliqué !

Il te serait alors possible d'obtenir une précision de 0.003 Km/h pour une distance de 1 mètre entre les deux capteurs à une vitesse de 100 Km/h pas mal non  !!!

Bonne journée à tous

PS j'ai constaté mon erreur et j'ai remis les bonne valeur dans le tableau

Portrait de Vincent

Si je ne sais rien faire, il faut bien que j'apprenne avec de l'aide avant...

Je vais y réfléchir plus tard, je n'ai plus trop le temps avec cette fin d'année scolaire.

Merci quand même

Au revoir.

Portrait de brossden

Regarde les vidéos d'Alex tu pourras difficilement trouver mieux ! Ceux sont de petits bjjoux ces vidéos.

Commence par celle-ci :

Interrupteurs-et-acquisition-numerique

Portrait de brossden

Je vais être sympa voilà la solution ! Mais c'est la dernière fois tant que tu paresseras !

vue_plan.jpg

Vue en plan de l'installation técharger ici :  Vue en Plan

vue_3d.jpg

Vue en D de l'installation à télécharger ici :  Vue 3D

Pour ceux qui veulent le plan AutoCad :  Vitesse.dwg

Et le programme version affichage sur moniteur Port Com:

double MilDeb = 0 ;
double MilFin = 0 ;
double Distance = 50;
int PortDeb = 10 ;
int PortFin = 11 ;
double Chrono = 0 ;
double Vitesse = 0 ;

void setup() {
  pinMode(PortDeb, INPUT_PULLUP);
  pinMode(PortFin, INPUT_PULLUP);
  Serial.begin(115200);

  // put your setup code here, to run once:

}

void loop() {
  Serial.println("Attente Capteur Début");
  while (MilDeb == 0) {
    if (digitalRead(PortDeb) == HIGH) {
      MilDeb = millis();
    }
  }

  Serial.println("Attente Capteur Fin");
  while (MilFin == 0) {
    if (digitalRead(PortFin) == HIGH) {
      MilFin = millis();
    }
  }

  //if (MilDeb > 0 & MilFin > 0) {
  Chrono = MilFin - MilDeb;
  Vitesse = (3600 * Distance) / Chrono;
  Serial.print(Chrono);
  Serial.println(" Millisecondes");
  Serial.println("  ");
  Serial.print(Vitesse);
  Serial.println(" Km/H");
  Serial.println("  ");
  Serial.print("Pour un nouvel essais remettre ");
  Serial.print("les capteurs dans leur l'état initial");
  while (MilDeb > 0 & MilFin == 0) {
    int x = 1;
  }

  while ((digitalRead(PortDeb) == HIGH) || (digitalRead(PortFin) == HIGH)) {

  }
  delay(1000);

  for (int N = 0; N < 5; N++)
    Serial.println(" ");
  Serial.println("Tout est Ok !");
  Serial.println(" ");
  MilDeb = 0 ;
  MilFin = 0 ;
}

Bonne Journée à tous

Portrait de brossden

Quel soit le programme liaison port Com ou écran LCD à la fin de chaque test il suffit de réparer les rubans en Alu pour que le programme soit prêt à faire un nouveau contrôle de vitesse !

De plus il est tout à fait possible de remplacer les rubans Alu par des câbles électrique munis à leurs extrémités des fiches bananes par exemple, ce qui évitera de détruire à chaque fois les capteurs !!

Voici la version avec écran LCD :

ce système peut aussi servir à chronométrer un 100 mètres à pieds par exemple en modifiant la valeur de la distance par 100 dans ce cas.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
long MilDeb = 0 ;
long MilFin = 0 ;
double Distance = 50;
int PortDeb = 10 ;
int PortFin = 11 ;
long Chrono = 0 ;
double Vitesse = 0 ;

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   * DBSoft *   ");
  lcd.setCursor(0, 1);
  lcd.print("Controle Vitesse");
  pinMode(PortDeb, INPUT_PULLUP);
  pinMode(PortFin, INPUT_PULLUP);
  delay(1000);
}

void loop() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Attente Capteur");
  lcd.setCursor(0, 1);
  lcd.print(" Debut de Piste");
  while (MilDeb == 0) {
    if (digitalRead(PortDeb) == HIGH) {
      MilDeb = millis();
    }
  }
  lcd.setCursor(0, 1);
  lcd.print("  Fin de Piste");
  while (MilFin == 0) {
    if (digitalRead(PortFin) == HIGH) {
      MilFin = millis();
    }
  }
  Chrono = MilFin - MilDeb;
  Vitesse = (3600 * Distance) / Chrono;
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temps: ");
  lcd.print(Chrono);
  lcd.print(" ms");
  lcd.setCursor(0, 1);
  lcd.print("Vit :");
  lcd.print(Vitesse);
  lcd.print(" Km/H");
  while (MilDeb > 0 & MilFin == 0) {
    int x = 1;
  }
  while ((digitalRead(PortDeb) == HIGH) || (digitalRead(PortFin) == HIGH)) {
  }
  delay(1000);
  MilDeb = 0 ;
  MilFin = 0 ;
}

Portrait de Vincent

Bonjour,

D'abord, merci beaucoup pour ces codes.

Je vais les tester dans l'après-midi.

Mais pour mes capteurs, vous n'avez pas compris comment j'aurais voulu faire

(Ce n'est pas grave, je vais utiliser les fiches bananes).

Voici un schéma de mon idée de base (que ja vais abandonner, donc)

schema_rapide.png

Ja vais tester lorsque j'aurais pu trouver le l'essence avec de l'huile pour le véhicule !

En attendant, je vais mettre en place le système et tester en petit en modifiant la valeur de la distance, que je remettrais à la bonne, soit 50m.

Comme j'ai plus d'espace de disponible, je vais également tester sur 200m.

Merci énormément

Bonne journée

Je vous tiens au courant

MERCI !

Au revoir

Portrait de brossden

Ton système de feuilles qui se touchent .... Bonne chance !

Au fait je viens de rendre compte que tu es sur ce site depuis 2 ans et un trimestre et tu n'es pas foutu d'écrire une ligne de code ???

Moi j'appelle un mec comme toi une grosse feignasse ! Et en plus au moins deux fautes à chaque phrase