Entrer des données perso

Portrait de wolfram69

Entrer des données perso

Portrait de Mini babouin

Mini babouin

dim, 11/24/2019 - 10:14

Bonjour,

J'utilise un capteur US pour mesurer la vitesse du son, cela marche relativement bien, bien qu'il me faudrait faire une moyenne des valeurs transmises par Arduino.

Mon problème principal est le suivant: je souhaiterais entrer à la main une distance et que lorsque j'appuie sur Entrée, Arduino me prenne 10 ou 20 valeurs ...

Merci

Portrait de wolfram69

wolfram69

dim, 11/24/2019 - 16:22

On peut connaître ton code qui marche à peu prêt ?

Portrait de Mini babouin

Walter

dim, 11/24/2019 - 17:45

Bonjour, si tu veux pouvoir entrer des valeurs via ton PC, il faire dialoguer l'arduino et ton PC avec la liaison séries.
Un tuto ici pour être en attente sur la liaison séries.

il doit normalement suffire de remplacer "// Process command in sdata." par une boucle d'un code qui fait 10 à 20 mesures.

Sur quoi ou quel code bloque tu exactement?

Portrait de Mini babouin

Mini babouin

dim, 11/24/2019 - 20:31

Bonjour Walter,

Lorsque je place mon capteur face à une surface, mon E/R US me renvoie bien une distance.

Mon objectif serait de réussir à entrer dans le moniteur série la distance à laquelle se trouve mon capteur du mur, et d'enregistrer le temps renvoyé par la carte Arduino pour calculer la vitesse, mais je ne sais pas comment entrer ces distances pour les récupérer ensuite et traiter tout ça par la suite.

Cordialement.

Portrait de Mini babouin

Walter

lun, 11/25/2019 - 09:38

Oui c'est bien ce que j'avais cru comprendre.
Le code que je t'ai indiqué permet de récupérer ce que tu va entrée sur le moniteur série, caractère par caractère.
Dans un premier temps cela te permettra de savoir lorsque tu appuiera sur la touche entrée dans le moniteur série(caractère \r, windows envoyant deux caractères \r\n, pour faire le retour à la ligne).

Une fois ça fait tu pourra passer à entrée un nombre et le récupère sur ton arduino caractère pour reconstruire la chaîne et la "parser" en entier.

suis je bien claire dans mes explications?

Portrait de Mini babouin

Mini babouin

lun, 11/25/2019 - 19:27

Bonsoir Walter,

Merci de te pencher sur mon problème.

Je n'ai pas trouvé le code dont tu parles.

Remarque, contrairement à ce que dit Wolfram, je ne souhaite pas un code mais plutôt des idées de recherche.

Donc n'ayant pas vu ton code, je n'ai pas de piste de recherches.

Cordialement

Portrait de Mini babouin

Walter

lun, 11/25/2019 - 22:23

je te remet le lien à cliquer qui était sur le "ici" de mon message.
 

Portrait de wolfram69

wolfram69

mer, 11/27/2019 - 08:19

Walter

Ce babouin n'est pas quelqu'un d'intéressant, je lui ai donné la solution mais soit il ne l'a pas lue, soit il ne l'a pas comprise, soit il attend un code tout fait et dès qu'il aura ce qu'il veut il détruira ce sujet pour ne pas laisser de trace pour éviter qu'un prof tombe sur ce site, car je subodore que ceux sont des questions que lui pose un professeur sinon à quoi servirait de calculer la vitesse du son si ce n'est un exercice scolaire ?

Tu lui as aussi donné la solution par deux fois mais ce n'est pas ce qu'il attend !

Par contre je réserve une petite surprise à ce petit malin !

Portrait de Mini babouin

Walter

mer, 11/27/2019 - 09:50

C'est claire que cela ressemble a un exercice scolaire.
Après ne fournissant pas de code, il faudra quand même qu'il comprenne ce qu'il fait pour le mettre en forme pour son cas d'école.
 

Portrait de wolfram69

wolfram69

mer, 11/27/2019 - 10:58

Merci d'aller dans mon sens, surtout que les tricheurs dans ce genre peuvent avoir leur diplôme en étant nul de chez nul par rapport à d'autres élèves plus honnêtes !

Portrait de wolfram69

wolfram69

dim, 11/24/2019 - 19:04

J'ai écris un code qui n'utilise pas pulseIn() mais des interruptions et j'obtiens une plus grande précision avec une stabilité dans les mesures inférieure au 1/10 de mm sur 30 cm ! Le diviseur est 50.8 qui correspond à deux pouces, un aller et un retour.

Pour ce qui est de transmettre une valeur par la console série rien de bien difficile avec les fonctions Serial.available() et Serial.read(), je ne vois pas où réside la difficulté !

Pour estimer la distance avec une plus grande précision il est possible d'utiliser un module laser pour arduino à un prix de 4.00€ environ avec le VL53L0X. voir le mini Lidar d'une portée jusqu'à environ 12 mètres.

Portrait de Mini babouin

Mini babouin

dim, 11/24/2019 - 20:31

Quant à Wolfram69, laisse tomber. Les interventions de Walter me paraissent plus constructives.

Portrait de Mini babouin

Mini babouin

dim, 11/24/2019 - 20:33

.

Portrait de wolfram69

wolfram69

mer, 11/27/2019 - 10:53

La vitesse du son varie avec la température de l'air suivant la formule   ainsi que de l'altitude

Altitude en m

en °C

en kPa

en m·s−1

en kg·m−3

0

15,00

101,33

340,3

1,225

200

13,70

98,95

339,5

1,202

400

12,40

96,61

338,8

1,179

600

11,10

94,32

338,0

1,156

800

9,80

92,08

337,2

1,134

1 000

8,50

89,88

336,4

1,112

2 000

2,00

79,50

332,5

1,007

3 000

-4,49

70,12

328,6

0,909

4 000

-10,98

61,66

324,6

0,819

6 000

-24,0

47,22

316,5

0,660

8 000

-36,9

35,65

308,1

0,526

10 000

-49,9

26,50

299,5

0,414

12 000

-62,9

19,40

295,1

0,312

Donc il faut aussi intégrer cette valeur qui fait quand même une variation de presque 3.5% par rapport au bord de la mer !

Bonne journée

Portrait de wolfram69

wolfram69

lun, 11/25/2019 - 07:05

Oui je savais bien que tu attendais un code tout fait, par ce que tu n'as certainement rien écris, mais là tu peux toujours attendre avec tes façons de faire bonne continuation avec Walter !

Portrait de Mini babouin

Mini babouin

jeu, 11/28/2019 - 18:54

Croyez ce que vous voudrez...

Voici mon code. Et pour info, moi j'ai une autre formule pour la vitesse du son ...

const int tempSensor=A0; 
float vout; 

int usEcho = 7;
int usTrig = 8;

unsigned long duree;
float distance;

void setup() 
{
Serial.begin(9600);
  
pinMode(tempSensor,INPUT); 
pinMode(usEcho, INPUT);   
pinMode(usTrig, OUTPUT);  
digitalWrite(usTrig,LOW);
}

void loop()
{

float tempDegre;
vout=analogRead(tempSensor); 
vout=(vout*5*100)/1024;
tempDegre = vout;
  
digitalWrite(usTrig, HIGH);
delayMicroseconds(10);
digitalWrite(usTrig, LOW);

float vitesse_son = (0.6*tempDegre) + 331.5;
duree = pulseIn(usEcho, HIGH);
duree = duree / 2;

distance = (duree * vitesse_son)/10000;

Serial.print("Température = ");
Serial.print("\t");
Serial.print(tempDegre);

//Serial.print("\t");
//Serial.print("vitesse =  ");
//Serial.print("\t");
//Serial.print(vitesse_son);

Serial.print("\t");
Serial.print("duree =  ");
Serial.print("\t");
Serial.print(duree);

Serial.print("\t");
Serial.print("Distance =  ");
Serial.print("\t");
Serial.print(distance);

Serial.println();

delay(1000); //Delay of 1 second for ease of viewing }
  
}

Ce code a été éprouvé, il fonctionne très bien.

Moi ce que je voulais, c'était savoir comment récupérer d et ensuite tracer d = v * t, ce qui ressemble de très près à une fonction linéaire du type y = ax avec le coefficient directeur qui est la vitesse du son ...

Laissez tomber, je chercherai ailleurs...

Portrait de Mini babouin

Mini babouin

jeu, 11/28/2019 - 18:59

Et pour info je suis né en novembre 1965. Donc plus d'école, j'ai viens d'avoir 54 ans.

Portrait de Mini babouin

Mini babouin

jeu, 11/28/2019 - 18:59

Et tu vois Walter, pas de copie... je n'utilise même pas ta formule pour ma vitesse du son ...

Portrait de Mini babouin

Walter

ven, 11/29/2019 - 09:12

Non je vois pas, mais comme je ne t'ai pas donné de formule, c'est peut être normal :)

Ce que l'on croit ou pas a peu d'importance, c'est bien pour ça que je t'ai copier/coller un lien qui répond à ta problématique.
De même si tu éprouve des difficultés à mettre en place la solution, je serais ravi d'essayer de t'aider à surmonter cette difficulté.

As tu essayé le code que je t'ai indiqué?

Portrait de wolfram69

wolfram69

ven, 11/29/2019 - 12:19

nouveau

Mini babouin tu fais preuve de bonne volonté, j'en fait de même, voici la solution.

J'ai même rajouté une preuve pour démontrer qu'un réel (float, ou entier + décimales) peut être envoyé sous forme de chaîne de caractères et divisé ici par trois !

Attention j'ai réglé le nombre de bauds à 115200, 9600 étant trop long à réagir !

String Chaine;
float Valeur;
void setup() {
  Serial.begin(115200);
}

void loop() {
  if (Serial.available() > 0) {
    delay(10);
    Chaine = Serial.readString();
    Serial.print("Chaine lue = ");
    Serial.println(Chaine);
    Valeur = Chaine.toFloat();
    Serial.print("Valeur de la Chaine lue = ");
    Serial.println(Valeur);
    Serial.print("La preuve Valeur /3 donne "+String(Valeur)+" /3 = ");
    Serial.println(Valeur / 3);
  }
}

Résutat avec 123.45 depuis la console Série :

Chaine lue = 123.45

Valeur de la Chaine lue = 123.45
La preuve Valeur /3 donne 123.45 /3 = 41.15

N.B: La valeur saisie est arrondie à deux décimales, mais il est possible, si les besoins l'exigent, par programmation de monter jusqu'à 7 décimales au moins !

Dans ton code j'ai noté plusieurs incohérences, entre autres une entrée analogique ne se déclare pas :

pinMode(tempSensor,INPUT);

le calcul "float vitesse_son = (0.6*tempDegre) + 331.5;" avant l'instruction 'pulseIn' diminue la précision du montage

Il vaut mieux utiliser l'entrée 2 pour pulseIn

D'où sort ta formule : "float vitesse_son = (0.6*tempDegre) + 331.5;" qui me semble complètement farfelue sachant que si c'est une extrapolation du tableau que je t'ai donné plus haut, ce dernier tient compte de la densité de l'air qui varie avec l'altitude ce qui explique que dans le vide la vitesse est zéro !

De plus quel capteur de température utilises tu ? Il te donne une tension de 0 à 5 volts et pour quelles températures ?

Ceux sont ici un extrait des quelques bizarreries que j'ai pu remarquées.

Mais le plus gros c'est que tu dis vouloir calculer la vitesse du son alors que tu calcules la distance car la vitesse du son tu la calcules ( avec ta théorie ) par la formule :

"float vitesse_son = (0.6*tempDegre) + 331.5;" 

J'avoue que je ne pige pas tout !

Portrait de wolfram69

Sujet de Mini babouin créer et supprimé par lui même

Je vous laisse juge de la valeur de ce personnage qui lorsqu'il a ce qu'il attendait ici supprime tout de son sujet certainement en se désinscrivant pour se réinscrivant tout de suite derrière ! enfin j'imagine qu'il pratique de la sorte !

Portrait de Walter

Lol, deuxième fois que Mini babouin supprime sans réel raison et explication son post.

Portrait de wolfram69

Et oui mais là il ne pourra plus !