Viewing 19 reply threads
  • Author
    Posts
    • #5049
      ╔ Jack ╗
      Moderator

      Voici un tuto expliquant comment brancher un HP sur un arduino nano dédié ( non relié a myrobotlab ) afin d’avoir une synchronisation parfaite entre la bouche du inmoov et les paroles.
      Comment cela fonctionne ?
      C’est tres simple , chaque son envoie une impulsion sur une entrée analogique de l’arduino qui actionne instantanément le servo.

      Ce qu’il faut :

      –> un arduino nano
      –> un petit HP avec ampli
      ————————————————————————————————–
      les branchements :

      http://img15.hostingpics.net/pics/832542branchementparoleinmoov.jpg
      ————————————————————————————————–
      le script arduino :

      // code pour Parole du Inmoov !! le son du PC doit etre suffisemment fort

      #include <Servo.h>

      // Définition des constantes

      #define VOICEservoPin 6 // pin du servo bouche
      #define VOICEHPpin 3 // pin du HP

      //déclaration des variables

      Servo VOICEmyservo;

      int VOICESecondDetection = 1; //
      int VOICEval = 0; // variable to store the read value
      int VOICEi = 0;
      int VOICEpos = 55; // variable to store the servo position
      int VOICEBoucheStatus = 0;
      int VOICEActionBouche = 0;

      unsigned long timeofdetect;
      char VOICEdelayFlag = 0;
      unsigned long VOICEdelay = 1;
      unsigned long VOICEtime;

      void setup()

      {

      analogReference(EXTERNAL);
      pinMode(VOICEservoPin, OUTPUT);
      Serial.begin(9600);

      VOICEmyservo.attach(VOICEservoPin);
      VOICEmyservo.write(55);

      }

      void loop()

      // debut VOICE
      { if (VOICEdelayFlag == 0) {
      VOICEval = analogRead(VOICEHPpin);

      if (VOICEval < 630 || VOICEval > 680 ) // recherche valeur entre 665 et 680 ( a ajuster si besoin )

      {
      VOICEBoucheStatus = 1; // bouche fermée

      }
      else // tant que

      {
      VOICEi++; // la valeur entre 630 et 680 est pas trouvée
      }

      if (VOICEi >= VOICESecondDetection)
      {
      VOICEi = 0;
      VOICEBoucheStatus = 0;

      }

      }
      if (VOICEBoucheStatus == 0 && VOICEActionBouche == 0) {
      if (VOICEdelayFlag == 0) {
      VOICEmyservo.write(95);
      VOICEtime = millis();
      VOICEdelayFlag = 1;
      }
      delay(40); //1

      if (VOICEtime + VOICEdelay < millis() and VOICEdelayFlag == 1) {
      VOICEmyservo.write(55);
      VOICEtime = millis();
      VOICEdelayFlag = 2;
      }
      delay(40); //2

      if (VOICEtime + VOICEdelay < millis() and VOICEdelayFlag == 2) {
      VOICEActionBouche = 1;
      VOICEtime = millis();
      VOICEdelayFlag = 0;
      }
      }

      if ((VOICEBoucheStatus == 1 && VOICEActionBouche == 1) or VOICEdelayFlag == 3)
      {
      if (VOICEdelayFlag == 0) {
      VOICEdelayFlag = 3;
      VOICEmyservo.write(55);
      VOICEtime = millis();
      delay(40); // 3
      }
      if (VOICEtime + VOICEdelay < millis()) {
      VOICEActionBouche = 0;
      VOICEtime = millis();
      VOICEdelayFlag = 0;
      }

      }

      // fin de VOICE

      }

    • #5056
      lecagnois
      Participant

      Bonjour a tous

      Je confirme le montage rends la bouche parfaitement synchro , c est impressionnant
      j ai utilisé un arduno uno (que j avais dans un fond de tiroir) et des HP à 7 euros trouvés dans une grande surface .

    • #5057
      anthony
      Moderator

      Merci pour le tuto !
      Lecagnois le rendu est vraiment super, avec le petit plus dans les yeux aussi

      Il y a moyen d’optimiser je pense en calquant l’amplitude de l’ouverture de la bouche, sur l’intonation des mots.
      Au lieu de spécifier une valeur fixe d’ouverture du servo on lui met une valeur dynamique basé sur le voltage fluctuant en entrée . La commande map est notre amie
      A voir si le servo arrive à suivre la cadence

      position_du_servo=map(val_relevée, MIN_voltage, MAX_voltage, posMin_servo, posMax_servo);

      https://github.com/MyRobotLab/pyrobotlab/blob/master/home/moz4r/INO/mouthcontrol_hardware.ino

      • #5096
        Sebastien
        Participant

        Bravo pour toutes ces avancées sur l’animation de la bouche.
        Pour faire avancer le Schmilblick, voici une approche un peu différente utilisant le calcul du RMS du signal audio. Cela pose d’autres problèmes… notamment de décalage et un rendu un peu différent…
        Le servo moteur de la mâchoire est un peu faiblar en plus…

        Les explications sur le principe de fonctionnement.
        http://quai-lab.com/synchroniser-bouche-dun-robot-humanoide/

    • #5060
      ╔ Jack ╗
      Moderator

    • #5062
      Pierrick
      Participant

      Un grand merci pour ce tuto Jack.
      Le béotien que je suis se demande quand même où modifier ses min/max sachant que bouche fermée j’ai 60 et ouverte 100 dans MRL?
      Oui j’en suis (que)là!!!!

    • #5063
      ╔ Jack ╗
      Moderator

      Pas de soucis , et je n’ai aucun mérite , j’ai démarré comme toi il y a peu de temps et j’en suis arrivé à ce résultat grâce à des amis qui sont ici car aucune connaissance en arduino , électronique et programmation il y a quelques mois !! mais on apprend vite avec ce inmoov ! 😀
      Pour répondre à ta question , toutes les valeurs ou tu vois 55 dans le script modifie les par 60 et la valeur 95 tu la modifie par 100 🙂 ( ou tu laisse 95 ou tu met moins si tu veux qu’elle s’ouvre moins fort , c’est a toi a ajuster selon ton envie et ton montage )

    • #5066
      Pierrick
      Participant

      Super çà fonctionne, me reste à jouer avec la plage des 630-680 pour voir ce que celà impacte!
      Merci

    • #5067
      ╔ Jack ╗
      Moderator

      en fait , cette plage donne les valeurs entre lequel se situe le niveau de ton HP quand il n’y a pas de sons , quand un son est detecté cela te fait sortir de cette plage et c’est à ce moment précis et que cela fait déclencher ton servo. plus tu resserres la plage , plus ce sera précis au niveau de la detection du son mais plus ce sera sujet aux ” faux sons ” , selon ton HP et la source qui envoie le son ces valeurs peuvent être un chouilla différente d’une personne a l’autre 🙂

    • #5107
      sylvain
      Participant

      Bonjour

      Vraiment intéressant et bravo pour la synchro
      J’en suis pas encore arrivé au stade de la tête loin de la mais je me pose une question
      Le servo qui fait bouger la mâchoire fait du bruit et je trouve ça très agaçant, je l’ai remarqué dans différente vidéo.
      N’y a-t-il pas un ou des servos moins bruyant ou existe-t-il d’autres possibilités pour faire fonctionner la mächoire
      Est ce que le bruit du servo ne pose pas de soucis avec la détection du son

      Merci,

    • #5112
      anthony
      Moderator

      En effet il y a du boulot chez quai-lab . Ce sont des informations très intéressantes !
      Justement pour la réactivité des servos ainsi que le bruit généré, je pensais à un truc : Un système d’électro aiment pour faire bouger la mâchoire, en lieu et place du servo. Une fois bien calibré cela pourrait s’avérer plus réactif et surtout sans bruit. Qu en pensez vous

    • #5116
      Sebastien
      Participant

      Merci.
      Pour le bruit comme l’indique Antony, à part remplacer le servo moteur par un moteur pas à pas ou bien des electro aimant je ne vois pas d’autres options.
      Je n’ai pas vérifié sur Internet, mais sur un stock d’electro aimant issu de démontage de photocopieurs et autres matériels que nous avons au Lab, je ne tombe que sur des tensions > = à 24 volts.
      Je ne sais pas s’il existe des modèles en 6V avec assez de couple et 10 à 15 mm de course.
      A creuser en tout cas…
      Tu as raison, le bruit des moteurs parasite le micro d’InMoov. Cela peut doit pouvoir s’arranger en filtrant le signal issu du micro pour le nettoyer de ce bruit spécifique, et en isolant le micro, les alimentations avec des capacités etc…
      Dans la pratique, les ordres sont souvent donnés avec InMoov en mode attente.

    • #5117
      Gael Langevin
      Keymaster

      Que de belles approches! Nous avons donc maintenant trois façon de pouvoir activer la mâchoire avec la voix. L’amplitude d’ouverture est un peu plus restreinte sur vos systeme que sur le principe du script de Joel Hacket, c’est lié je pense à la rapidité nécessaire pour formuler les mots. Par contre la précision des mouvements est franchement mieux.

      J’ai une question qui n’a rien à voir avec la voix mise à part l’amplificateur. J’aurais pu ouvrir un post sur le forum général, mais cela vient un peu dans votre topic.

      Sur InMoov02, j’ai un retour du bruit des servo moteurs qui arrive dans l’amplificateur, ce qui fait que lorsqu’InMoov parle, on entends également les servo moteurs qui sont amplifiés.
      Étrangement, j’ai le même circuit sur InMoov01 sans ce phénomène.
      L’ampli utilise la même source(batterie 6V) que les servos. Je passe le son sortie du PC par une clef SoundCard USB qui va directement à l’input de l’ampli. Mes HPs sont ensuite connectés aux output de l’ampli.
      Une idée?

    • #5118
      Dominique
      Participant

      Gael,

      Je pense qu’il serait préférable de séparer l’alimentation de l’électronique et des servomoteurs.

      Essaie d’utiliser une batterie 6V pour les servo moteurs et une autre pour l’électronique.

      A+
      Dom.

    • #5121
      Gael Langevin
      Keymaster

      Lors de mes tests, j’ai effectivement séparé les deux, servo et électronique, en utilisant deux batteries. Dans ce cas pas de souci.
      Sauf qu’InMoov fonctionne avec une batterie qui alimente l’électronique de la NervoBoard, qui elle même alimente les Arduino et les servomoteurs. L’amplificateur a sa propre ligne d’alimentation directement à la batterie.
      Quel type de diode puis-je utiliser pour éviter un effet loop du courant?
      diode inmoov

    • #5128
      Sebastien
      Participant

      Gaël, as tu essayé d’alimenter l’ampli avec une “power bank” de tél portable. J’ai été obligé d’en passer par là car j’amplifiais plus de parasite que de son… ça à bien améliorer les choses (config : sortie en direct du son de la tablette vers ampli, et ampli sur power banque 5v).

      Sinon peut être aussi faire des tests en débranchant un par un les servos moteurs au cas ou le bruit viennent particulièrement d’un modèle mal isolé…

      Pour les diodes je ne savait pas qu’on pouvait les utiliser dans ce but (filtrage : capacités ou inductances).

    • #5132
      sylvain
      Participant

      Bonjour

      ne peut-on pas déplacer le servomoteur de la mâchoire dans un autre endroit par exemple le corps et utiliser un système de câblage du style des doigts ou bien des tiges qui passeraient dans le cou, pour éviter de parasiter le micro
      Je ne suis pas encore arrivé au stade du cou et de la tête mais il me semble que la pièce qui sert de trachée est creuse ne peut-on pas passer par là.
      Et je pensais aussi au lieu d’avoir tout la mâchoire à ouvrir ne peut-on pas faire une sorte de bouche
      Ça serait moins dur à bouger et utiliser un servomoteur plus petit qui pourrait faire moins de bruit
      Le problème c’est que dans la doc technique des servos le bruit n’est pas indiqué.

    • #5133
      Dominique
      Participant

      Bonjour,

      Gael, je crée ce soir un nouveau poste avec schémas.

      Personnellement, je compte faire une isolation galvanique entre l’alimentation des servomoteurs et l’électronique en utilisant des opto-coupleurs.

      De cette façon, ils n’y aura plus de parasites ou de pointe de courant dans la masse électronique (cela peut créer des reboots intempestif des arduinos par exemple…).

      A+
      Dom

    • #5137
      Dominique
      Participant

      Pour répondre à ta question concernant les diodes, des 1N4007 feront très bien l’affaire, à mettre en série avec l’alimentation de ton ampli, anode coté positif de l’alimentation, cathode sur le positif de l’ampli. Tu devrait aussi mettre une capa d’au moins 100µF entre + et – de l’ampli.

      PS: je ne trouve pas le moyen d’insérer des images sur ce forum. Si quelqu’un à un tuto…

      A+

    • #5283

      Peut être qqs idées ici:
      https://openclassrooms.com/courses/programmez-vos-premiers-montages-avec-arduino/le-moteur-a-courant-continu-partie-1-transistors-et-sorties-pwm

      Dominique je serai aussi intéressé par ce schéma.
      Sinon 100µF entre + et – de l’ampli ce n’est pas assez. Je choisirai plutôt des condos de 1000 µF miniatures câblés physiquement tt près de l’étage de puissance et pour les diodes il faut quelque chose de plus rapide que les 1NXXXXX et mettre en parallèle des diodes Schottky rapides type D2-PAK. Pourquoi en parallèle, pour réduire la résistance interne de ces diodes.
      Excepté de renvoyer du courant, est-ce que les moteurs induisent des parasites ou une baisse de tension ?
      Amicalement.
      Sy.
      J’espère avoir bien compris, sinon zappez.

    • #14014
      Pierrot59
      Participant

      Bonjour,
      Je suis tout nouveau sur InMoov et le lien du schéma de connexion entre l’arduino et le Haut Parleur n’est plus visible, pouvez-vous le poster à nouveau s’il vous plait ?
      Il est à connecter sur la pin D3 mais avant ou après l’ampli ? à travers condensateur ? Diode ?
      Merci d’avance

      • This reply was modified 5 years, 2 months ago by Pierrot59.
      • This reply was modified 5 years, 2 months ago by Pierrot59.
      • #16931
        gregory chelli
        Participant

        Je cherche egalement le shema, quelqu un l’aurait svp? tout a l heure j ai reussi a faire fonctionner le script avec une carte hw 720 que j’ai branche en entree au jack de mon ordi, et les 2 sorties, une pour un hp l’autre pour le pin a3 et le gnd. Ca faisait effectivement bouger le servo selon le son. maintenant ca ne fonctionne plus. j’ai besoin du shema merci.

Viewing 19 reply threads
  • You must be logged in to reply to this topic.