In this Blog I like to receive all info we need, to make a easie way to send all FingerTip sensor data to a Arduino.
Now it has to go to the Analog inputs from a Arduino.
I think it's better to use a Analog input ic and connect this via I2C to the Arduino.

This has two reasons.
One: it saves cables from the Hand to the Arduino
Two: The analog inputs from a Atmel is not the best way to get the correct data.

About the sensors, I have test this with a Linear Hall-Sensor and a small magnet.
See here a short video: https://copy.com/TBkp1WkvEbMLAWro
The results where good enough for me, to think about the next step.
For the InMoov I will see if I can design a flexible PCB for in the Hand.
At this flexible PCB I like to ad the Analog input IC to make all the connections easier to all sensors.

More info will come soon.
 

Thanks in advance.

Regards,

Marten

GroG

8 years 7 months ago

Hello Marten ! 

Nice Post :)

Here might be some relevant I2C + MyRobotLab links

 
There is an I2C interface in MRL - currently its primarily for the RasPI - I used it to create a Pick-To-Light machine. It would not take much to do I2C pass through for the Arduino - but Arduino has a history of munging interrupts supporting bit banging, I2C, or additional serial ports.
 
I've interefaced with an Adafruit I2C board - it does certainly clean up the wiring.  On slight drawback was speed control.  In the Arduino I have put code in to do a crude form of speed control.  Even with the Adafruit I think I could implement something similar - where MRL sends out command to move to the next position at a frequency determined by the selected speed.
 
Anyway I hope this adds some background to our current I2C experiences so far - really like the clean wiring.  BTW the MRL was used in a Pick-To-Light which was driving ~40 devices (7 segment LED + button) from a single raspi

Something like this ? 

PCF8591T

4 AD channels, 1 DA. On I2C bus. Cost less than 3$. 

I have an idea to an alternate solution. It would require a circuit similar to the 4017, with a 3-state output, so that it could send high ( analog reference ) or nothing (disconnected, floating voltage ). Then you could address each input and use a single AD to read the value.  I may have to make a picture to explain it better.

Thanks Grog, for your info.
I will read this tomorrow and will come back if I need some more info.

If I2C isn't that stable by Arduino, is it better to use a Arduino Nano for each arm/hand ?
It's easy to design a Nano Servo_Shield including all servo output names for InMoov based Robots.

@ Mats,

Thanks for your reply.

This PCF8591T is a 8-bit AD converter and I think a 10-bit is the minimum what I will suggest to use for the InMoov.

There is a option to use a PPM Encoder and read the PPM valeu with a Arduino.
I think it's easier to use a two pin setup for this.
One pin to receive the PPM and one for the Reset function.
It's better to keep the circuit small as possible.

This is my PIC based PPM_Encoder:

PPM_Encoder

 

 

 

 

 

 

 

 

I also hope to receive this PCB tomorrow.
At this PCB I can connect 8 potentiometers or the Hall-Sensors for the FingerTips :-)
This isn't using many parts so I can keep the InMoov PPM Encoder smaller and can use a SMD ic.

MdG_NL

8 years 7 months ago

In reply to by MdG_NL

Here the way I've programmed the PPM_Encoder:

I've set the A/D converter sample time to 290 US
This is the time that the PPM puls needs to be LOW.
After reading the Analog input, the PPM puls is set to HIGH with a US lenght from the Analog input value + 688.
The PIC has a 10-Bit A/D converter so a servo middle pos is now 1200 US -> 688 + 512 = 1200
This all will contineu till channel 8 and channel 9 is set by Switch-1 at my PCB.
At the end I calculate all Servo lenghts together and recalculate the pulslenght for the reset-puls.
This is 21500 US - 2900 US - the total servo puls lenght
21500 US = the total PPM lenght (close to 50Hz)
2900 US = all Analog reading times together.
If all servo's are set to the max position, the total servo puls lenght = 9 * 1712 = 15408 US
2900 + 15408 = 18308
So the total Reset puls lenght is 21500 - 18308 = 3192 US
This isn't that long when I use the RC-network (R1 + C1 + D1)

So for 10 servo outputs, for sure we need a second output for the Reset function.