Aller au contenu


Photo
- - - - -

Capteur Ultrason seed studio et while(1)


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 Kelias

Kelias

    Membre

  • Membres
  • 27 messages

Posté 22 septembre 2013 - 08:13

Bonsoirr a tous !

Je me suis lancé aujourd'hui dans le montage de mon premier vrai robot avec mon raspberry pi

Il possede pour le moment un capteur ultrasonique numerique de Seedstudio.

Afin de tester le capteur j'ai utiliser le code c++ de titou90 de pcimpact




Le code fonctionne mais, au bout d'un certain temps il ne me renvoie plus rien, alors que le capteur émet toujours ! ( je sent les impulsions sur ma main), et il renvoie une valeur de temps en temps...

J'ai overclocké mon rpi en pensant que sa resolverait le probleme mais ça n'a rien changé...

Quelqu'un a une idée sur la cause du probleme ?

Modifié par Kelias, 23 septembre 2013 - 06:42 .


#2 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 22 septembre 2013 - 10:29

Bonsoirr a tous !

Je me suis lancé aujourd'hui dans le montage de mon premier vrai robot avec mon raspberry pi

Il possede pour le moment un capteur ultrasonique numerique de Seedstudio.

Afin de tester le capteur j'ai utiliser le code c++ de titou90 de pcimpact

[color=#880000]#include[/color] [color=#008800]<stdio.h>[/color][color=#880000]#include[/color] [color=#008800]<sys/time.h>[/color][color=#880000]#include[/color] [color=#008800]<wiringPi.h>[/color][color=#000088]using[/color] [color=#000088]namespace[/color] std[color=#666600];[/color][color=#000088]void[/color] sendPulse[color=#666600]([/color][color=#000088]int[/color] pin[color=#666600]);[/color][color=#000088]double[/color] getDistanceCentimeters[color=#666600]([/color][color=#000088]int[/color] pin[color=#666600]);[/color][color=#000088]int[/color] main[color=#666600]([/color][color=#000088]void[/color][color=#666600])[/color][color=#666600]{[/color]    [color=#000088]int[/color] sigIO [color=#666600]=[/color] [color=#006666]7[/color][color=#666600];[/color]    [color=#000088]double[/color] distanceCm [color=#666600]=[/color] [color=#006666]0[/color][color=#666600];[/color]    [color=#000088]if[/color] [color=#666600]([/color]wiringPiSetup[color=#666600]()==-[/color][color=#006666]1[/color][color=#666600])[/color] [color=#666600]{[/color][color=#000088]return[/color] [color=#006666]0[/color][color=#666600];}[/color]    [color=#000088]while[/color][color=#666600]([/color][color=#006666]1[/color][color=#666600])[/color] [color=#666600]{[/color]	[color=#880000]// Emission de l'impulsion[/color]	sendPulse[color=#666600]([/color]sigIO[color=#666600]);[/color]	[color=#880000]// Calcul de la distance par rapport au retour de l'impulsion[/color]	distanceCm [color=#666600]=[/color] getDistanceCentimeters[color=#666600]([/color]sigIO[color=#666600]);[/color]	printf[color=#666600]([/color][color=#008800]"Distance evaluee : %.2f cm\n"[/color][color=#666600],[/color] distanceCm[color=#666600]);[/color]	delay[color=#666600]([/color][color=#006666]500[/color][color=#666600]);[/color] [color=#880000]// on attend 500ms entre chaque lecture.[/color]    [color=#666600]}[/color]    [color=#000088]return[/color] [color=#006666]0[/color][color=#666600];[/color][color=#666600]}[/color][color=#000088]void[/color] sendPulse[color=#666600]([/color][color=#000088]int[/color] pin[color=#666600])[/color] [color=#666600]{[/color]    [color=#880000]// le port GPIO est configuré en ecriture[/color]    pinMode[color=#666600]([/color]pin[color=#666600],[/color]OUTPUT[color=#666600]);[/color]    digitalWrite[color=#666600]([/color]pin[color=#666600],[/color] [color=#006666]0[/color][color=#666600]);[/color] [color=#880000]// On reinitialise a 0[/color]    delayMicroseconds[color=#666600]([/color][color=#006666]2[/color][color=#666600]);[/color]    digitalWrite[color=#666600]([/color]pin[color=#666600],[/color] [color=#006666]1[/color][color=#666600]);[/color] [color=#880000]// On emet l'impulsion[/color]    delayMicroseconds[color=#666600]([/color][color=#006666]5[/color][color=#666600]);[/color]    digitalWrite[color=#666600]([/color]pin[color=#666600],[/color] [color=#006666]0[/color][color=#666600]);[/color] [color=#880000]// On reinitialise a 0[/color][color=#666600]}[/color][color=#000088]double[/color] getDistanceCentimeters[color=#666600]([/color][color=#000088]int[/color] pin[color=#666600])[/color] [color=#666600]{[/color]    timeval t1[color=#666600],[/color] t2[color=#666600];[/color]    [color=#000088]double[/color] elapsedTime[color=#666600];[/color]    [color=#880000]// le port GPIO est configuré en lecture[/color]    pinMode[color=#666600]([/color]pin[color=#666600],[/color]INPUT[color=#666600]);[/color]    [color=#880000]// attente du retour de l'impulsion[/color]    [color=#000088]while[/color] [color=#666600]([/color]digitalRead[color=#666600]([/color]pin[color=#666600])[/color] [color=#666600]==[/color] [color=#006666]0[/color][color=#666600])[/color] [color=#666600]{[/color] delayMicroseconds[color=#666600]([/color][color=#006666]1[/color][color=#666600]);[/color] [color=#666600]}[/color]    [color=#880000]// calcul de la longueur de l'impulsion[/color]    gettimeofday[color=#666600](&[/color]t1[color=#666600],[/color] NULL[color=#666600]);[/color]    [color=#000088]while[/color] [color=#666600]([/color]digitalRead[color=#666600]([/color]pin[color=#666600])[/color] [color=#666600]==[/color] [color=#006666]1[/color][color=#666600])[/color] [color=#666600]{[/color] delayMicroseconds[color=#666600]([/color][color=#006666]1[/color][color=#666600]);[/color] [color=#666600]}[/color]    gettimeofday[color=#666600](&[/color]t2[color=#666600],[/color] NULL[color=#666600]);[/color]    elapsedTime [color=#666600]=[/color] [color=#666600]([/color]t2[color=#666600].[/color]tv_usec [color=#666600]-[/color] t1[color=#666600].[/color]tv_usec[color=#666600]);[/color]    [color=#000088]return[/color] [color=#666600]([/color]elapsedTime [color=#666600]/[/color] [color=#006666]58[/color][color=#666600]); [/color][color=#666600][font=arial, verdana, tahoma, sans-serif]}[/font][/color]


Le code fonctionne mais, au bout d'un certain temps il ne me renvoie plus rien, alors que le capteur emet toujours ! ( je sent les impulsions sur ma main), et il renvoie une valeur de temps en temps...

J'ai overclocké mon rpi en pensant que sa resolverait le probleme mais ça n'a rien changé...

Quelqu'un a une idée sur la cause du probleme ?


Ton code est illisible.
Tu sens les ultrasons sur ta main ? Euuuuh ... tu as une oreille à la place de la peau ?

Par ailleurs, il vaut mieux éviter de faire des boucles infinies dans ton code mais prévoir une condition d'arrêt qui permet de quitter la boucle proprement.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#3 Kelias

Kelias

    Membre

  • Membres
  • 27 messages

Posté 23 septembre 2013 - 06:49

Ton code est illisible.


J'ai mis un lien vers le code que j'ai utilisé pour les tests

Tu sens les ultrasons sur ta main ? Euuuuh ... tu as une oreille à la place de la peau ?


Aussi étonnant que cela puisse paraître, oui je sens un léger impact régulier, d’ailleurs si je le tourne vers mon portable, sa fait un leger tac tac tac comme si j'entendais l'onde taper sur le plastique

Par ailleurs, il vaut mieux éviter de faire des boucles infinies dans ton code mais prévoir une condition d'arrêt qui permet de quitter la boucle proprement.


Je l'ai aussi fait avec une boucle for, mais le probleme reste present, j'aurais voulu trouver la source de ce plantage pour, au mieux, l'eviter, au pire le détecter et lui demander de s'arreter

#4 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 23 septembre 2013 - 06:24

Aussi étonnant que cela puisse paraître, oui je sens un léger impact régulier, d’ailleurs si je le tourne vers mon portable, sa fait un leger tac tac tac comme si j'entendais l'onde taper sur le plastique

Ca me semble assez anormal dans le fonctionnement du capteur, ce genre de perception. Effectivement, il semble que ça soit possible (http://www.ncbi.nlm.nih.gov/pubmed/7759656). Mais est-ce que ça ne serait pas le signe d'une fréquence / amplitude mal réglée ?

Je l'ai aussi fait avec une boucle for, mais le probleme reste present, j'aurais voulu trouver la source de ce plantage pour, au mieux, l'eviter, au pire le détecter et lui demander de s'arreter

Ca marche aussi avec une boucle while, la condition d'arrêt :)
Que veut dire 'ne renvoie plus rien' dans ta phrase ? Plus aucune distance ne s'affiche dans ton terminal sur la Pi ? Ou alors, cette distance est toujours nulle, constante, incohérene avec la position de ta main ?
As-tu testé si le pin de la Raspberry était toujours en bon état ?
Au bout de combien de tour de boucle ce plantage apparaît ? Est-ce que c'est toujours la même valeur ?
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#5 Kelias

Kelias

    Membre

  • Membres
  • 27 messages

Posté 23 septembre 2013 - 07:02

Ca me semble assez anormal dans le fonctionnement du capteur, ce genre de perception. Effectivement, il semble que ça soit possible (http://www.ncbi.nlm..../pubmed/7759656). Mais est-ce que ça ne serait pas le signe d'une fréquence / amplitude mal réglée ?


Actuellement je ne sent plus rien... mais le plantage continue

Ca marche aussi avec une boucle while, la condition d'arrêt Image IPB
Que veut dire 'ne renvoie plus rien' dans ta phrase ? Plus aucune distance ne s'affiche dans ton terminal sur la Pi ? Ou alors, cette distance est toujours nulle, constante, incohérene avec la position de ta main ?
As-tu testé si le pin de la Raspberry était toujours en bon état ?
Au bout de combien de tour de boucle ce plantage apparaît ? Est-ce que c'est toujours la même valeur ?


J'ai essayé le pin ( ici le 7) dans une autre application et il fonctionnait correctement.
Il n'affiche plus rien dans le terminal, il passe une ligne et n'affiche rien. Dans le programme de mon robot, il ne prenait plus en compte l'obstacle.
J'ai créé une boucle qui lance 50 impulsions. Il plante a un tour de boucle différent a chaque fois(le 4e,le15e) et des fois non.

J'ai essayé de remplacer le pin 7 par le pin 11 ( je sais pas pourquoi je ne l'ai pas fait avant Image IPB), pour le moment sa a l'air de fonctionner, ce serait donc l'origine du probleme ?

EDIT: j'ai réssayé mon robot, fonctionnement optimal avec le pin 11, probleme resolu !

Modifié par Kelias, 23 septembre 2013 - 07:09 .





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users