Welcome to Synthiam!

Program robots using technologies created from industry experts. ARC is our free-to-use robot programming software that makes features like vision recognition, navigation and artificial intelligence easy.

Get Started
Asked — Edited

Talking Servo / Inmoov Mouth Closed After Sentence

Hello,

i have a problem with my inmoov.

I add a "talking servo" i adjust the servo - everything is fine i have only one problem:

After a sentence the inmoov leave is mouth open. Nevermind how long or short the sentence is... the mouth is in the end still open.

I cant find any option to say after a sentence got to this servo postion.


User-inserted image



Thanx for help.


Boris

#28  
PS:

i made a new project- only with the talking servo!

I plugged 1x Towardpro MG996 and this servo turn to the left , if a sentence is spoken. ( Invert not work!)
I checked with 2 diffrent MG996 - all do the same

i plugged 1x Hitec HSB-9380 and this servo turn to the right, if a sentence is spoken (Invert also not works)
I checked with 2 diffrent HSB-9380 - all do the same


So i found out, that diffrent servos are turning in diffrent positions.

One to the left - one to the right!

But on all no "Invert Function" will work!


So i need that my HSB9380 is turning to the left and not to the right! But how?

Boris
#29  
@nomad... he is using "talk servo" which is a new text to speech control ... it is irrelevant that he uses say, saywait, sayezb, sayezbwait... Doesn't matter which one he uses
PRO
Belgium
#30  
richard r

ah thanks for telling
#31  
Ok, that is strange.... how is it possible that the servo is working backwards? With my inMoov 50=closed mouth and 115=open mouth... @Boris 180 is open mouth for you?
#32  
When you first installed your Jaw servo did you set it to 90 degrees? If you didn't that may be your problem - it might be maxing out so it can't "invert"?
#33  
@Boris... as Bob mentioned you need to set your servo to 90 so you have jaw movement on either side (open and closed)... The jaw doesn't have much range of movement... as I mentioned for me 50 is fully closed and 115 is wide open....
#34  
@richard


Quote:

@Boris 180 is open mouth for you?



With 180 is full closed

with 155 is open!

Boris
#35  
@Boris... sorry I meant 180 is closed for you.... It should be the other way around... 90 is the middle travel for the jawpistonV1.stl Meaning when the servo is set to 90 you should see the jawpistonV1 at around mid point of travel... Closed should be less than 90 (mine is 50) and wide open should be more than 90 (mine is 115 for safety)
#36  
Hi Richard,


but think about this info:

The MG996 is turning to the left

The HSB-9380 is turning to the right!


So i am wondering, that servos can turn to diffrent positions on the D9 connection

Other test!


I plugged a Hitec HS-311 @talking servo and funny its also turing to the right.
I plugged a Hitec HS805BB @talking servo and also turing to the right!
I plugged a Hitec HS-5070 @talking servo and again turing to the right!
I plugged a EZ-Servo @talking servo and HERE its turning left!
I plugged a MG996 @talking servo and HERE its turning left!
I plugged a Corna DS929HV @talking servo and again turing to the right!

I remember first i had this HS-311 installed. I had this problem and then i post this article and then i change to the MG996 and everything was fine. This i also post to Steve G this time.

Now i change to a expensive Hitec servo and again the same problem


So again funny.

All Hitec servo turn to right

And MG996/MG995 and EZ-Servo are to the left!

Now i think its more the problem of the turning!


@DJ why Hitec Servos (4 diffrent Modells) are turing in the diffrent direction?
your EZ-Servo and the MG996/MG995 in the other direction!

PS:

This Test i did with a new project - and only with the talkservo window - nothing else!


Boris
#37  
@Renta I've been experimenting with this control. I found that with the "Invert Direction" box checked - if the "Min" value is higher than 90 - the servo doesn't move. The closer the "min" value is to 90 - the less it will move. The "Max" value can be set anything higher than the "Min" value.
Try setting the "Min" value to less than 90 and see what happens.
#38  
Hello Bhouston,

i will try it later, now i must go sleep some hours!

But thanx for your help and time. We hear us later!

Boris
#39  
Hello Bob!

Your Tipp with the Min/Max Values was perfect! I adjust in a strange way the servo in the "Advanced servo Config"

User-inserted image



and then i could make the settings in the talking-servo like you said and now it works.


User-inserted image


The Only strange is: the Max-Value between 100 and 137 - make NO reaction to the servo, but if i not make the Value between MIN and MAX from 55 to 137 - the mouth open not so nicly. But don´t think about this mystery - IT WORKS!


Look to the video - somebody wants to say thank you! (Funny info - the voice is a german voice! I must say he can speak very well english! Not so horrible like many our politicans ;-))


#40  
I'm glad to see it is working for you now. I don't know why a Min value above 90 would stop it from working - but now we know it does. Always happy to help out.
#41  
@Bob

Really thank you!

I hope i will finish him this year with all arms, head and torso.

And than i will make a big video for saying thank to all supporters!

Boris
United Kingdom
#42  
@Boris.

Really pleased you got it all working correctly now. I really likely the lighting you have there. Very slick. I look forward your progress, and to the "big video" when you get further in to the build.:)
#43  
@steve


Thanks also to you! You help me also a lot!

Yeah this roboter is a so big buildplace ;-) But i hope until X-mas he will be born complitly


Boris
#44  
@Bob

maybe you know a trick, how to loop a script for the neopixel ring?

I have a script for the arduino called "fade in/fade out" . Works fine solo on the Arduino ( in a loop!)

I make a Script in EZ what send a serial info to the Arduino and the script starts, but only one time and then stops!


How i make a loop?

Code:

void pulseColor(uint32_t c, uint8_t wait) {
//Increase Brightness / Fade In
for(int i=minBrightness; i<maxBrightness; i++) {
strip.setBrightness(i);
for(int x=0; x<strip.numPixels(); x++){
strip.setPixelColor(x,c);
}
strip.show();
delay(wait);
}
//Lower Brightness / Fade Out
for(int i=maxBrightness; i>minBrightness; i--) {
strip.setBrightness(i);
for(int x=0; x<strip.numPixels(); x++){
strip.setPixelColor(x,c);
}
strip.show();
delay(wait);
}
}


This is the fade in / fade out code

How i can loop this code?



Here is the full code:

Code:

#include <Adafruit_NeoPixel.h>


#define PIN 6
#define STRIPSIZE 24

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel. Avoid connecting
// on a live circuit...if you must, connect GND first.


// Change These Variables
int maxBrightness = 120;
int minBrightness = 15;
int fadeSpeed = 15;

void setup() {
Serial.begin(9600);

strip.begin();
strip.show(); // Initialize all pixels to 'off'
}

void loop() {


if (Serial.available())
{ int ib = 0;
ib = Serial.read();

// Stop All display
if (ib == 66) {
colorWipe(strip.Color(0, 0, 255), 50); // Blau
}
if (ib == 80){
colorWipe(strip.Color(255, 255, 255), 50); // Weiss
}
if (ib == 82) {
colorWipe(strip.Color(255, 0, 0), 50); // Rot
}
if (ib == 71) {
colorWipe(strip.Color(0, 255, 0), 50); // Grün
}
if (ib == 87){
colorWipe(strip.Color(0, 0, 0), 0); // Licht aus
}
if (ib == 110){
colorWipe(strip.Color(255, 255, 0), 50); // gelb
}
if (ib == 120){
colorWipe(strip.Color(255, 0, 255), 50); // magenta
}
if (ib == 130){
colorWipe(strip.Color(0, 255, 255), 50); // cyan
}
if (ib == 140){
colorWipe(strip.Color(255, 127, 0), 50); // orange
}
if (ib == 150){
colorWipe(strip.Color(224, 102, 255), 50); // flida
}



if (ib == 160){
pulseColor(strip.Color(0, 0, 255), fadeSpeed); //Set the color with Red, Gree, Blue values

}
}
}
void colorWipe(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

void pulseColor(uint32_t c, uint8_t wait) {
//Increase Brightness / Fade In
for(int i=minBrightness; i<maxBrightness; i++) {
strip.setBrightness(i);
for(int x=0; x<strip.numPixels(); x++){
strip.setPixelColor(x,c);
}
strip.show();
delay(wait);
}
//Lower Brightness / Fade Out
for(int i=maxBrightness; i>minBrightness; i--) {
strip.setBrightness(i);
for(int x=0; x<strip.numPixels(); x++){
strip.setPixelColor(x,c);
}
strip.show();
delay(wait);
}
}
#46  
Good, glad you got it all figured out. Sorry I didn't get back to you - I had to take a day off of retirement and work today!
#47  
@Bob

no prob, sometimes its better to found out yourself - you learn a lot!

Tomorrow i will make a video of the hole lightshow!

See yaa!

Boo