Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Discussions


Index du Forum » Discussions » Calcul de distance par le son
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Calcul de distance par le son

Posté le 27/11/2014 18:36

Salut tout le monde,
En ce moment je suis pas trop la communauté parce que j'ai pas trop le temps avec les cours (et surtout cette me*** de philo ).
Heuresement y'a le projet ed SI mais je bloque un peu dessus alors je viens voir ici si quelqu'un aurait une idée pour m'aider.

Donc voila, je cherche a reperer un "robot" mobile dans un espace definit. Le probleme c'est que cet espace aux dimensions connues c'est en exterieur et pour etre precis, dans l'idée c'est une plage...
Donc les systemes de reperages "confiventionnels" et que l'on peut croiser sur les robots ne peuvent pas marcher (par exemple detections des murs, ...) et que le robot est trop petit pour utiliser le systeme GPS (resolution ~5m)qui aurait été de toute facon trop cher. Aussi, mettre des poteaux avec des "fils" pour encadrer la zone ne convient pas a cause du perimetre trop grand.
Donc j'ai proposé de faire un systeme de triangulation par le son a mon groupe. J'en avait un peu parlé avec Fab sur le chat et entre temps j'ai un peu avancé.
Le shema du principe:

Donc en noir, on a les limites du terrain dans lequel on veut se deplacer.
Aux angles, on a les balises. Là j'en ai mis 4 même si 3 voir 2 suffiraient pour le probleme mais comme ca on gagne en precision. Et puis on est pas obligé de les mettre aux angles d'un regtangle ou du terrain.
Le point noir, c'est notre robot.
Les cercles sont les cercles sur lesquelles le robot peut etre. En pointillés les rayons de ces cercles dont la longueur est connue.

Alors voila comment je voyait les choses. Le robot a un recepteur (micro) et regarde a une frequence si il y a un bip ou non. La frequence varie selon les poteaux qui emmetent a une frequence fixe (par exemple B1 emet a 10kHz, B2 a 11kHz, ...). Une fois reperé par rapport aux emmeteurs, le robot se visualise virtuellement les poteaux dont la position est connue sur le terrain et sait donc ou il est a quelques dm pres.
Donc sur ce principe j'ai commencé avec un PC et Processing a étudier si cette solution etait faisable avec le support fiable du PC et un seul emetteur, une carte arduino.
Ca rend deja pas mal, j'arrive a lire sur une frequence donné si il y a du son ou non, mais le probleme apparait apres, a cause des horloges.
En effet, pour savoir la distance entre l'emmeteur et le recepteur, il me faut savoir le temps qu'a mit le son a faire la distance entre les deux. Et pour savoir cette distance, vu que l'emmeteur et le recepteur ne sont pas relié, j'ai donné a l'emmeteur une frequence fixe d'emission (actuellement, je fais des tests avec 2 500 ms de pause pour 500ms d'emmission, a une frequence sonore de 9kHz), et sur le PC, j'ai fait une petite interface pour recuperer ces valeurs. Jusque la tout allait bien mais le soucis, c'est que la carte arduino n'a pas une horloge fiable, son heure derive au cours du temps et donc elle n'emet plus au bon moment ce qui me fait gagner plusieurs metres par minutes (1ms equivalent environ a 30cm, ca monte vite).

Donc si quelqu'un a une idée pour regler le probleme, une autre solution pour se reperer, ou pour revoir le systeme d'emmission/reception, je suis prenneur


Drake Hors ligne Membre Points: 203 Défis: 3 Message

Citer : Posté le 27/11/2014 18:47 | #


pourquoi pas essayer de connecter la carte arduino avec une horloge externe ?

se week-end arrivé de mon nouveau jeu blind, (oui il a mit pas mal de temps a arriver mais l'optimisation a pris pas mal de temps puis j'avais pas beaucoup de temps a moi)



Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 27/11/2014 19:01 | #


Tu veux dire genre brancher direct une montre par exemple ?
Et comment je pourrais recuperer l'heure alors ?
A la limite je pourrais me demerder avec une casio
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 27/11/2014 19:56 | #


Pour gérer le temps, la carte arduino possède une fonction qui te donne le temps écoulé depuis que tu l'as allumée: millis(), regarde ici: http://arduino.cc/en/Reference/Millis
Si tu veux avoir l'heure en permanence, utilise un module RTC (Real Time Counter) que tu peux trouver à moins de 10€.
Scientifix Hors ligne Membre Points: 762 Défis: 30 Message

Citer : Posté le 27/11/2014 20:01 | #


Je sais pas si cet article peut aider : http://fr.wikipedia.org/wiki/G%C3%A9olocalisation_en_int%C3%A9rieur y'a des idées sympa
JE SERAI ABSENT POUR 2 ANS A+

Je suis fan de Mathématiques et de Sciences en général (d'où mon nom ). Consultez mes programmes en rapport avec les Maths
--------------------------------------------------------

Calculatrice : Graph 75
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 27/11/2014 20:04 | #


Oui j'utilise deja cette fonction, et je suis meme passé a la micros.
Le code:
#define BUZZER 2 //broche + buzzer
#define ZERO 5 // broche - buzzer

unsigned long temps;

void setup()
{
    pinMode(BUZZER, OUTPUT); // le buzzer en sortie
    pinMode(ZERO, OUTPUT);
    digitalWrite(ZERO, LOW); //met le zero volt sur le - du buzzer
    Serial.begin(115200);
}

void loop()
{
  Serial.println(micros());
  
  Serial.println("\t BRUIT !");
  tone(BUZZER, 9000);
  temps = (micros()+(203000*micros())/100000000);
  while((micros()+(203000*micros())/100000000) - temps < 500000);
  
  Serial.println("\t SILENCE !");
  noTone(BUZZER);
  temps = (micros()+(203000*micros())/100000000);
  while((micros()+(203000*micros())/100000000) - temps < 2000000);
  
}

J'ai été obligé de virer les delay().
Mais j'observe encore un decalage, malgre le rajout des 203 millisecondes toutes les 100 secondes (que j'avais observé avec processing)
Scientifix Hors ligne Membre Points: 762 Défis: 30 Message

Citer : Posté le 27/11/2014 20:07 | #


T'as déjà testé ou pas ? Parce que d'après ce que je lis ça devrait bien fonctionner ton histoire
JE SERAI ABSENT POUR 2 ANS A+

Je suis fan de Mathématiques et de Sciences en général (d'où mon nom ). Consultez mes programmes en rapport avec les Maths
--------------------------------------------------------

Calculatrice : Graph 75
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 27/11/2014 20:09 | #


Le probleme c'est pas que ca tourne pas
C'est que ca se decale

Pour ce qui est du indoor, nous c'est en outdoor et on a pas forcement le budget
Ninestars Hors ligne Membre Points: 2257 Défis: 22 Message

Citer : Posté le 27/11/2014 23:12 | #


C'est super interressant ça.
Je peux proposer une solution, à voir si ca fonctionne ou pas. Dans l'idée tu rajoutes un nouvelle émmeteur à une fréquence différente qui te sers à resynchroniser ton horloge. Dès que tu entends le bip à X Hertz, tu "remets" à zéro ton horloge. Comme ça ta différence de synchronisation ne s'accentue pas.
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1235 Défis: 54 Message

Citer : Posté le 28/11/2014 06:55 | #


Mon père avait eu un soucis similaire avec une arduino aussi, un décalage progressif, c'est dommage quand même... Je lui demanderai comme il s'en est sorti, je ne me souviens plus ^^...
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
Fabcvlr Hors ligne Membre Points: 2193 Défis: 41 Message

Citer : Posté le 28/11/2014 08:37 | #


Salut Theprog, tu peux monter en fréquence, ça réduira la longueur d'onde donc ça augmentera la précision.
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 28/11/2014 08:48 | #


va dans les ultrasons (ça éloignera les chiens )
Dark storm Hors ligne Membre d'honneur Points: 11105 Défis: 176 Message

Citer : Posté le 28/11/2014 08:50 | #


L'idée de 9* me paraît pas mal
En effet, il faut te touver de quoi synchroniser toutes les horloges, celle du robot aussi. Tu peux essayer de trouver des shields de type Xbee qui émettent assez loin il me semble. Genre le robot, synchronisé en RTC (la je pense que t'aura pas le choix) envoie toutes les secondes de quoi synchroniser les émetteurs.

En tout cas le problème est très intéressant
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 28/11/2014 21:26 | #


Merci pour vos réponses
On a quand même mis en place une solution de "secours ", une boussole électronique pour savoir la direction dans laquelle on va, reste a fixer les limites.

Enfin bon sur le problème du son, si j'ai bien compris ton idée 9*, tu voudrais mettre sur les emmetteurs un récepteur qui recevrait un signal du robot et qui enverrai la réponse, un peu comme pour simuler le principe des capteurs a ultrasons "normaux" qui envoie sur un mur, analyse le temps que met le son a se réfléchir et a venir et ainsi déterminer la distance ?
C'est pas con, je vais sûrement moins me faire chier mais niveau matos, ça va être plus dur Parce que du coup il me faut mini 4 arduinos, et encore parce que je sais pas si je peux réussir a lire a une fréquence comme sur l'ordinateur avec l'arduino ...

Pour ce qui est de monter en fréquence, c'est prévu mais pour le moment j'ai pas de récepteur ni d'émetteur donc je me contente d prouver ce que je peux dans l'audible
Ninestars Hors ligne Membre Points: 2257 Défis: 22 Message

Citer : Posté le 29/11/2014 00:56 | #


Ce n'est pas exactement ça On synchronise l'horloge du robot avec un 4eme émetteur.
J'y ai réfléchi... En fait je pense pas que ce soit possible de cette façon puisque la distance avec ce nouvel émetteur rentre en compte dans la synchronisation et cette distance est inconnue...
OH mais attend ! J'ai une super idée !
Tu utilises 1 seule borne émettrice mais avec 3 micros sur le robot, et tu peux déterminer la direction de ta source grâce à la différence de temps de quand tu reçois le signal entre chaque micro. Le problème reste qu'on ne peut pas connaitre la distance à l'émetteur, on peut juste déterminer la droite et la direction de l'émetteur...
Mais dans ce cas tu peux mettre un émetteur sur le robot et un micro sur la borne pour faire l'effet "écho" dont tu as parlé juste avant. Mais ça te fait 2 arduino, c'est déjà mieux que 4
Dark storm Hors ligne Membre d'honneur Points: 11105 Défis: 176 Message

Citer : Posté le 30/11/2014 16:34 | #


Ben perso je voyais bien le coup de l'echo fonctionner :
Toutes les secondes (ou moins), tu envoies une fréquence que chaque balise reçoit (10kHz par exemple). Une fois que chaque balise reçoit le signal, elle émet une réponse sur une fréquence perso (la balise 1 sur 11kHz, la deux sur 12, etc.). Ton Arduino robot récupère alors le temps de réponse, d'où tu peux avoir la distance entre chaque balise.

Du coup, ça fait une arduino pour le robot, et une par balise => 3 minimum, plus pour la précision
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 28/03/2015 12:01 | #


Bon au final, on a carrement simplifié le reperage (et du coup abandonné la triangulation) en tout cas pour le moment.
Le robot ne sait plus ou il est exactement, en fait il a une bousolle, va dans une direction pendant x tours de roues, fait un virage a 90, fait y tours de roues, etc.
Ca nous a simplifié le bordel (plus qu'une seule arduino) et normalement ca devrait marcher (j'espere ).
En plus, pour faire l'interface, je vais tenter de faire un truc avec la casio comme il nous restait que 2 pin sur une Uno apres avoir mis les capteurs, les hacheurs, ... Je sais pas comment mes profs vont le prendre
Legolas Hors ligne Ancien rédacteur Points: 3266 Défis: 104 Message

Citer : Posté le 28/03/2015 12:33 | #


Bonne idée la casio ! Je pense qu'ils vont être surpris !
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis




LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 25 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd