Go Down

Topic: Projet: robot qui s'oriente vers un son (Read 2385 times) previous topic - next topic

Thab

Bonjour à tous,
J'aimerais réaliser le projet Arduino suivant:
Créer un robot (ou plutot une tete de robot) qui s'oriente vers les sons qu'il reçoit.
Il s'agit de détecter des sons dépassant une certaine intensité (sinon c'est vite n'importe quoi).
Il s'agirait (tel que je le conçois mais je suis à l'écoute de toute alternative) d'utiliser 3 microphones : deux à l'avant et un à l'arrière :
 je calcule la différence de temps d'arrivée du son entre les deux premiers , ce qui me donne l'angle de provenance du son (et donc la localisation dans un plan de 180°) , puis en  comparant l'intensité ou le temps d'arrivée de ces deux-là avec le troisième je détermine si le son vient de derrière ou de devant.
Pour calculer la difference de temps d'arrivée, deux options s'offrent à moi:

-amplifier le son reçu pour ensuite le comparer à une tension seuil , et ce à chaque microphone , et faire la différence entre les moments où la tension a "basculé" à chaque microphone

-mesurer le déphasage entre les deux signaux obtenus (pour cela il faut multiplier puis sommer termes à termes les deux listes d'intensité obtenues par une méthode plus complexe et bien plus calculatoire) et ensuite remonter au retard à partir de là, ce qui est possible pour les sons pas trop aigus .

Je pense me tourner vers la première méthode qui me semble plus simple à mettre en œuvre , la deuxième étant de plus , m'a-t-on dit , compliquée à utiliser sur Arduino du fait de la puissance de calcul demandée .

Il s'agit ensuite d'asservir en position angulaire mon robot de fortune .

Si j'ai une bonne idée de ce que je compte faire , je suis malheureusement très limité par mon manque de connaissance d'arduino...

Je suis donc face à plusieurs problèmes :

-je n'ai que peu d'idée quant à quels composants électroniques choisir et quel montage électrique employer, je me dis vaguement qu'utiliser 2 amplificateurs opérationnels, un en tant qu'amplificateur et un second en tant que comparateur , devrait faire l'affaire afin d'obtenir les temps d'arrivée du son à chacun des microphones...

-j'ai cru comprendre que l'asservissement en position angulaire était quelque chose de compliqué sur 360° en particulier et ne sait donc pas trop comment m'y prendre ...

Merci beaucoup de votre aide.


kammo

Bonjour
Ton projet ressemble comme deux gouttes d'eau à un tournesol, enfin un tracker solaire.

Le son est aussi diffus que la lumière, mais se déforme selon la fréquence et l'environnement. je ne pense pas qu'on puisse aussi facilement avec un seul échantillon localiser un son de manière fiable.

Le son peut venir de 3 axes:
Gauche/droite
haut/bas
Avant/arrière

Un claquement de mains ne permettras probablement pas d'un seul coup de lui faire tourner la tête pile au bon endroit. Il va devoir écouter un temps, faire des moyennes et les comparer, et chercher. Comme un tracker solaire. Et recommencer.
Tout dépend de ce que tu veux: un truc précis (micros directionnels et d'ambiance) ou un petit projet de principe.

pour lui faire tourner la tête, des servos premier prix iront bien si tu fais pas un robot taille réelle.
Un robot qui sert à rien mais qui tourne la tête

Des modules micro sensibles c'est pas bien cher.
pour ce qui est des seuils de sensibilité, ça se fait par du code, voire en plus avec un potentiomètre pour le calibrer selon que tu es dans ton salon à deux heures du mat' ou en classe juste avant la sonnerie ><
ca peut se faire aussi automatiquement, à toi de voir ce que tu veux à la fin et le smoyens que tu veux te donner.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

lesept

Une autre solution, très en vogue en ce moment, serait de programmer une intelligence artificielle.

Faut pas avoir peur, une IA c'est juste un programme (il y a des bibliothèques que le font pour toi) auquel tu vas apprendre à reconnaître une situation et à agir en conséquence. Par exemple, tu fais un bruit à droite et tu lui dit que ce qu'il vient d'entendre c'est un bruit à droite donc il faut tourner la tête vers la droite. A force, il comprend tout seul et reconnait un bruit qui vient de la droite.

Et puis pareil pour la gauche, devant et derrière.

Bibliothèques :
Neurona
Neuroduino

Un projet robotique : AIDuino

Bon c'est peut-être un peu compliqué, une autre solution ici (et google : arduino sound locator)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

kammo

Il est fort l'eucalyptus!
je te rappellerai ce moment si un jour tu me dis que j'utilise une usine à gaz pour faire une bricole ^^

Soundtracker moi j'dis, sur le principe du SunTracker, et basta hop, non mais!
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Thab

Bonjour et merci de votre aide,

Je cherche à faire un robot qui s'oriente vers le son en 2D (donc pas de mesure de la hauteur), ce qui peut en effet se faire simplement à partir de la mesure du retard ( et d'une légère approximation)
Je cherche en effet kammo à faire un robot qui tourne la tête vers le son et qui ne sert pas vraiment à grand-chose (dans un premier temps du moins)

L'idée de l'IA est très amusante en effet mais je pense essayer pour l'instant de passer par de l'électronique classique (il est grand temps que j'apprenne à m'en servir).

Ce que tu décris , kammo , comme solutions (potentiomètres , micros, ect...) correspond bien à l'idée que j'ai en tête de ce que je vais faire, apres le probleme est que je n'y connais rien quant à quels composants acheter et quels montages effectuer , c'est surtout pour cela que je m'en remet à votre aide ...

L'asservissement en position angulaire à l'aide d'un servomoteur m'a été présenté  comme plutot simple du moins pour une course de 180°, pas 360, mais c'est un probleme secondaire , je veux surtout, pour l'instant, que ça marche même si ça ne doit être que sur un plan de face .

Merci beaucoup

kammo

ce qui peut en effet se faire simplement à partir de la mesure du retard
Même pas, si je pense aux tournesols, c'est que la méthode est simple:
deux capteurs, je reçois le signal du capteur G et le signal du capteur D
Si D>G alors bouger vers D
Sinon bouger vers G
et on recommence

J'ai un micro, je vais regarder à quoi ressemble le signal. Mais plutôt que de calculer des retards et tout ça, je comparerais simplement les intensités des signaux ;)

L'asservissement en position angulaire à l'aide d'un servomoteur m'a été présenté  comme plutot simple du moins pour une course de 180°, pas 360, mais c'est un probleme secondaire , je veux surtout, pour l'instant, que ça marche même si ça ne doit être que sur un plan de face .

Merci beaucoup
Pff nan c'est pareil :p
En fait on peut calibrer ça. Ca se règle.
Je me demande quand même pourquoi un son pourrait arriver de l'arrière...
Imaginons un cas de figure:
je me mets face au robot, toi derrière.
Je me décale légèrement, comme ça, pour l'emmerder. je ne lui fais pas exactement face.
On tape dans les mains tous les deux en même temps et avec la même intensité (on s'est entraînés bien sur lol)
Le robot TE cherchera alors que je suis le plus près de sa face avant. Mon claquement lui semble moins fort car géographiquement je suis plus loin des capteurs que toi, mais paradoxalement, moi je lui fais face. Pour me trouver il ne doit faire que quelques degrés, pour TE trouver, un demi tour complet. Paradoxe (ou je me trompe)
Il va servir à quoi ce machin?
Si tu veux aller encore plus vite à comparer les données, plutôt que de lui faire tourner la tête dans tous les sens, à tâtons, tu peux aussi multiplier les capteurs. On commande au servo d'aller dans la position qui correspond à CE capteur.


Tu veux bien préciser un peu le projet? Tu veux qu'il ressemble à quoi?
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

kammo

Je viens de tester deux micros.
Le premier, sourd comme un pot, poubelle.
Le second marche, mais, pour avoir fait du son à une époque, le bruit ambiant est vraiment complexe à approcher. Notre énorme cerveau (sisi faut avouer) fait un tri énorme. L'alarme du voisin, je l'entends plus, le vent, les oiseaux, j'en fais abstraction.

Voici le 'bruit' ou le 'silence' dans mon salon, fenêtre ouverte, mais rien de particulier:

230
232
240
239
239
237
241
236
235
235
231
231
234

Un relevé par seconde. C'est proche, mais pas stable parfaitement.
Sauf qu'à un moment, j'ai parlé.

Tout ça pour dire:
-soit tu trouves des micros sensibles
-soit faudra lui hurler dessus
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Thab

Je n'ai aucun projet quant à son utilité / apparence , je veux juste que ce truc (ca peut même être un rouleau de sopalin) tourne vers le son qu'il reçoit.

J'ai en tête une méthode assez simple (style tournesol) mais qui n'a besoin que d'entendre une fois le son (pendant une courte période pas plus): il ne s'embête pas trop , il regarde à quel instant son micro 1 reçoit un son ,pareil pour le 2 et fait la difference des deux (j'avais pensé à un truc du style
if 1 detected : t1=micros() ) pareil pour le 2 puis je fais la difference des deux .
Ensuite c'est de la trigo:
Soit d la distance entre les deux micros
Soit dt la difference de temps entre les deux micros
Soit v la vitesse du son dans l'air
Soit θ l'angle de provenance de la source sonore par rapport au robot
On fait l'hypothèse que l'angle θ est le même aux deux micros , ce qui revient à négliger d devant la distance source-robot .
Alors on a la relation: d*sinθ=dt*v

L'analyse des différences d'intensité , si on la veut fructueuse, est bien plus complexe.

Je compte, du moins pour l'instant, faire marcher mon robot dans un cadre simple: un seul son, qu'il doit localiser dans un plan 2D.

Après tout , si un humain reçoit deux sons de même intensité au même moment , sait-il lequel privilégier ?


kammo

Alors on a la relation: d*sinθ=dt*v
restons courtois ^^ je pige rien aux math

Après tout , si un humain reçoit deux sons de même intensité au même moment , sait-il lequel privilégier ?
La différence, c'est que notre cerveau doit correspondre à une palette de core i7 mis bout à bout, donc oui, on sait faire ça ^^ Surtout, quand on chuchotte, on se concentre et on entend (d'ailleurs on lit aussi les expressions, sur les lèvres, gestes. Dans la foule, on arrive à distinguer le boxon de la voix du copain.
Là on en est loin.

Ton idée de chronométrer les écarts est futée. On le fait bien avec les ultrasons, pourquoi pas. Mais un module ultrasons comme le HC-SR04 PRODUIT LE SON QU'IL ECOUTE.
Si je crie face à une montagne, je peux chronométrer le temps mis par l'écho, parce que je sais que je viens de balancer un son, et je sais le reconnaître.
le problème avec ce projet, c'est qu'il faudra nécessairement un seuil de détection, vu que le robot NE SAIT PAS ce qu'il attend comme son, et qu'il serait bien incapable de les reconnaître, c'est le seuil de l'intensité sonore qui déclenche la fonction. Note pour plus tard, ta lecture se fera alors plutôt en digital qu'en analogique je pense. Mes micro le permettent.

Tu veux pas faire un tournesol plutôt ? ^^

Tu as combien de temps pour ce projet?

Alors à ce moment-là tu vas devoir jouer avec les interruptions je pense.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Thab

Tiens je ne savais pas que le cerveau humain savait faire ca, on est vraiment forts hehe
J'ai une dizaine de jours environ (c'est terrible je sais je panique) mais je peux y consacrer l'intégralité de mes journées , il faut surtout que je puisse commander mes composants au plus vite pour ne pas trop les attendre...
Dans mon projet il serait intéressant pour certaines raisons extérieures que j'utilise la formule que je t'ai décrite (le projet à pour but de s'inspirer de cet aspect la méthode humaine à savoir la détermination d'un retard)  plutot qu'un tournesol.
Le temps qu'a mit le son à arriver depuis la source ne m'intéresse pas tellement , tant que je peux comparer les temps aux deux micros .
Tu as raison , je n'y connaît rien à l'électronique mais j'ai en effet besoin d'un seuil et d'une information binaire : son détecté ou non .

J'imagine que ce type de fonction est utilisée assez fréquemment, mais je n'en sais rien au fond...
 Saurais-tu m'indiquer quel composants/type de circuit utiliser ? (J'imagine bien un AO pour amplifier puis un potentiomètre/AO pour comparer mais je n'ai pas d'idée précise vu que je ne connais rien à l'électronique pratique , je sais juste lire un schéma ).
Merci

kammo

Pour l'arduino, au choix, ça sera tout pareil. Si tu as une bread board, une NANO ou une UNO c'est parfait. Au pire des câbles Dupont en prenant soin de ne pas poser l'arduino sur un tas de fils dénudés (il se reconnaîtra^^)

Côté servo, un SG90 ça coûte rien, ça ira très bien. La différence entre les servos, c'est leur couple, leur vitesse, ensuite leur rotation.
Un servo 360 c'est pas donné, mais il doit y avoir une vingtaine de tuto sur youtoube pour hacker un SG90. Le souci, c'est que je ne pense pas du tout qu'un servo hacké marche encore en PWM pour lui indiquer une position, puisque le potentiomètre qui est dedans ne peut pas tourner indéfiniment, lui. Mais à vérifier, j'ai pas vérifié ce point.

Pour les micros, j'ai des modules standards chinois à un ou deux euros, à voir si ça marche pour ton projet

la méthode humaine à savoir la détermination d'un retard)  plutot qu'un tournesol.

Nan^^
Je tourne la tête vers toi si tu prononces mon nom, parce que je filtre les sons, mon cerveau reconnaît mon nom, c'est inconscient.
je tourne la tête vers une porte qui claque parce que le son est fort, et que je sais d'où il vient d'après l'intensité reçue à chaque oreille. Si ça va fort à droite, ça vient de la droite.
Notre boîte cranienne nous aide aussi à ça, elle résonne. On reconnaît aussi la réverbe, on la distingue d'un son direct. On utilise aussi nos yeux pour comprendre l'environnement et en déduire d'où ça peut venir. je suis face à un mur, ya un bruit, c'est sûr, ça vient pas de devant...
Je ne pense pas qu'on mesure le temps mis au son pour arriver aux oreilles pour le comparer ensuite.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

kammo

Pour préciser ce que j'entends par analogique ou par digital:

un micro comme ceux que j'ai à la maison

Ont voit quatre pattes:
-une pour le 5v
-une pour la masse GND
-une analogique
-une digitale

Celle qu'on voit, A0, renvoie en temps réel une tension. On la lit avec une entrée analogique de l'arduino. De là, si tu veux un seuil, tu dois chercher les sons dont l'intensité est supérieure à ton seuil S
Si A0>S alors on atteint un seuil.

La boîte bleue avec une vis en laiton correspond à la patte D0 qu'on ne voit pas sur la photo.
On y règle avec un tournevis le seuil à atteindre. On lit ça avec une entrée digitale de l'arduino.
Quand on lit cette entrée, elle renvoie 0 si on n'atteint pas le seuil, et 1 si on l'atteint ou dépasse.
Pas besoin de faire un calcul Si D0>S puisque la vis le fait pour toi.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Thab

Les micros sont donc directement munis d'un seuil de détection et peuvent fonctionner ainsi? Quand je parlais de montage j'imaginais qu'il fallait faire un montage pour que le micro marche comme je lui demande en fait, tous les projets que j'ai vus demandaient des AO ,condensateurs, resistances, ect...

Alors tu as partiellement raison : le cerveau humain utilise les réverbérations et intensités , mais ce procédé est assez complexe (pour ne pas dire que j'y comprends rien) et clairement trop pour un projet de faible envergure comme le mien. Mais le cerveau humain mesure le déphasage entre les deux sons reçus aux deux oreilles et c'est ce qu'il utilise majoritairement pour déterminer la provenance dans le plan horizontal, cette méthode est mise en défaut pour les sons aigus parce qu'alors le cerveau ne peut plus correctement relier le déphasage à un retard puis à un angle (en fait il localise plusieurs angles potentiels), et c'est pourquoi lorsqu'on entend un son aigu on lui trouve plusieurs sources .

kammo

Ya aussi une question de longueurs d'ondes. De loin repérer un son aigu c'est facile. C'est comme ça qu'on localise une explosion, non pas par le bruit sourd et intense, mais par celui de la détonation.

Dans tous les cas, on ne peut rien appliquer de tout ça ici.

Honnêtement, même si ta méthode est bien plus classe, je me demande si c'est faisable à ce degrés de précision avec des micros chinois.

Ma méthode c'est celle du tâton, de la déduction, mais elle requiert que les micros soient en mouvement, donc sur la tête du robot.

Du premier coup, tu es proche du but, selon l'environnement.
Par contre je suis plus proche du but après plusieurs échantillons, pourvu qu'ils soient originels du même point ^^

Pour les deux projets, il faudrait le même matériel.
Je ne vois pas de quoi tu parles quand tu dis qu'il faut souder des trucs pour le micro.
Si tu as un modèle en tête, balance parce que ça évitera de partir sur de mauvaises bases.
Si tu as des liens d'un projet proche et qui marche, je veux bien le lire aussi.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Thab

J'ai trouvé un projet qui marche et qui m'a pas mal inspiré , il utilise la méthode du retard mais lui se dirige vers le son , ce n'est pas exactement la même chose mais les bases sont les mêmes , et c'est ce projet qui me fait penser que dans les micros des schémas électriques doivent être effectués .
C'est assez bien expliqué, en anglais par contre:

https://drive.google.com/file/d/0B_9bbqvqxo2MTDhrcXQyU0NZVkk/view

Go Up