Bonjour à tous,
Je suis nouveau sur arduino, je cherche à faire un robot qui s'oriente vers le son qu'il reçoit (dans un plan horizontal de 180°)
Ma méthode est simple et fonctionne (j'en ai déjà vu des exemples) : je met deux micros
avec une tension seuil, quand la tension seuil d'un micro est dépassée, je note (avec la fonction micros() ) l'instant de dépassement, ensuite je fais la différence des deux instants, puis je retrouve l'angle avec:
cos(a)d=vdt
avec a l'angle que forment les micros avec la source sonore (je considère que les deux ont le même, sinon la formule ne marche pas) , d la distance entre les deux micros , dt la différence de temps et v la célérité du son dans l'air.
Ensuite , dans une deuxième partie que je n'aborde pas pour l'instant, je demande au servomoteur de m'amener à l'angle trouvé.
J'ai pour matériel une arduino uno, un servomoteur de course -90°/+90° , deux micros
Je viens à vous concernant le code:
Je me suis familiarisé avec les fonctions basiques d'arduino seulement et je suis face
à un petit (j'espère) pb: Je crains que dans la loop(), relever le temps quand le micro est "HIGH" ne suffise pas, puisque , les deux micros ne recevant pas le son au même moment, je devrais refaire plusieurs fois la loop() et à chaque fois, le temps s'actualisera, puisque le micro va rester HIGH, alors le premier instant auquel l'intensité sonore a été dépassé pour un des micros (le premier à recevoir le son) sera remplacé par le second instant relevé, puis le troisième, ect... si bien qu'au final le programme ne s'exécutera que lorsque les deux micros reçoivent du son, alors la différence de temps calculée sera nulle, ce qui ne m'avance pas...
J'ai une idée, mais je n'ai jamais programmé en arduino donc je ne sais pas vraiment si ça marche:
"j'ai sauté les affectations liées aux branchements, ect...", on a l'angle a et les grandeurs définies précédemment dt, v, et d
d=0,3
v=340
dt=0
if pinmicro1==High
t1=micros()
while pinmicro2==Low
dt=micros()-t1
"de même dans le sens inverse"
if pinmicro2==High
t2=micros()
while pinmicro1==Low
dt=micros()-t2
a=arcos(v*dt/d) (on peut appeler arcos sur arduino??)
"Puis on commande le servomoteur de nous amener à l'angle voulu mais comme je vous ai dit je ne me préoccupe pas de cette partie-là pour l'instant (je devrais?)
Auriez-vous un avis sur la question? Pensez-vous que mon code marche? Si oui est-il améliorable? Sinon que devrais-je faire?
Désolé j'ai probablement fait des erreurs de syntaxe , oublié des analogRead où ce genre de choses...
Merci beaucoup de votre temps.