Projet: robot qui s'oriente vers un son

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.

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.

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)

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!

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

Thab:
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 :wink:

Thab:
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 :stuck_out_tongue:
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?

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

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: dsinθ=dtv

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 ?

Thab:
Alors on a la relation: dsinθ=dtv

restons courtois ^^ je pige rien aux math

Thab:
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.

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

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

Thab:
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.

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.

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 .

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.

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:

Sinon sais-tu si un servo SG90 sera suffisant pour faire tourner mon robot en terme de puissance? J'imagine que mon robot aura des dimensions du style 30x30 cm , je le dis un peu au pif mais c'est de cet ordre de grandeur sinon les micros risquent d'être pas assez espacés pour percevoir une bonne différence de temps .

Je me demande si va pas falloir refaire un post ^^
Tu as même le code!
je me creuse à réfléchir pour rien, tu as tout pré-mâché!

Dans le doc, c'est un robot qui se déplace, pas une tête qui se tourne.
Le SG90 n'a qu'à peine plus d'un kilo/cm de couple. C'est un petit servo.

Avec les éléments que tu as maintenant tu peux créer ton projet.
Maintenant ce qu'il faut c'est un plan de montage, des datasheets de matos et un code...

Les micros contiennent toujours des composants. Certains sont même amplifiés (condensed). Des amplis existent pour les petits modules.

Si ça a déjà été fait, tu n'auras pas de mal.
Mon doute c'est que le son se déplace vite et qu'on n'atteigne pas la résolution nécessaire pour être précis.

Un arduino ne fait qu'une seule chose à la fois (très vite). Comparer trois capteurs, c'est utiliser les interruptions en réduisant au mieux le décalage entre les 3 relevés.

C'est bien ça, il ne se tourne pas, mais à part ça c'est en effet très similaire.

T'as raison j'ai mon idée de ce qu'il faut faire, la raison pour laquelle je viens demander de l'aide c'est surtout pour le choix du matériel, par exemple quel servomoteur utiliser, quel micro, je viens plus pour ce genre de trucs.
La précision est en effet la priorité et j'espère que ça ira...

Si le SG90 n'est pas assez puissant, en connais-tu un qui le sera?

Merci de ton aide

Il y en a des dizaines de modèles.
Dans la description, tu vois le couple et ces trucs
exemple du MG995, très commun
Ca va de 1 à plusieurs milliers d'euros...

Définis ton besoin.
Ta contrainte, c'est l'écartement de tes micros, le poids des micros, les gadgets autour.
Ma tête de robot est faite dans une tête d'ampoule en acrylique, ça pèse rien. Ca tient avec de la colle chaude, la partie inférieure c'est un emballage de cosmétique.
C'est une partie importante, tu dois l'évaluer.

Le petit SG90 a de la poigne, il résiste bien à la main, super compact, mais si on force ça pète. Aussi, il met presque une seconde à faire 180°. Il existe la version MG90s (metal), un chouillat plus rapide, plus costaud, plus de couple. Tout dépend du poids...
Plus c'est lourd, plus faut de couple et viser un full metal gear (engrenages tout métal, c'est mon côté américain, ça)

Plus de la moitié des servos, c'est des copies. Te ruine pas sur ebay...

Une RC en virage, c'est vingt kilos sur la direction (mesuré par un copain en RC brushless). Le choix dépend des contraintes.

Par contre, pour le servo, prends un 3 fils .... sinon c'est plus compliqué à câbler et ça va pas mieux pour ton projet