I am an absolute beginner (or not even that) to the arduino system and would like to ask you for the feasability of a little idea.
I would like to connect a 6 wire force transducer (http://www.hbm.com/fileadmin/mediapool/hbmdoc/technical/a3592.pdf) to an arduino. If this was possible I would be very glad for any ideas on how to start that project. As I said, I don't have any idea about the arduino systems yet, but if hooking the force transducer to the arduino is possible I'll begin to look further into it. I just don't want it to be a total shot in the dark.
I suggest you use an instrumentation amplifier such as INA122. Figure 5 in the datasheet at http://www.ti.com/lit/ds/sbos069/sbos069.pdf gives the general arrangement. However, I suggest you power the force sensor from +3.3V instead of using the current source shown. Also connect +3.3V to the Aref pin and make an analogReference(EXTERNAL) call in setup.
Thanks for the reply! So it seems like it is possible. The only limit seems to be my knowledge on microcontrollers and electro engineering.
Unfortunately I don't understand what the job of the instrumentation amplifier is here.
The datasheet of the force transducer says that 6 wires are needed, looking at fig. 5 in the INA122's datasheet I only see 4 wires coming from that bridge, how to handle the 6?
Also the INA122 seems not be available in Germany, maybe there is an alternative?
Another question would be how I would ensure 5V excitation voltage for the force transducer.
zanchin:
Thanks for the reply! So it seems like it is possible. The only limit seems to be my knowledge on microcontrollers and electro engineering.
Unfortunately I don't understand what the job of the instrumentation amplifier is here.
Its job is to amplify the small differential signal generated by the force transducer to deliver a larger single-ended signal to the Arduino analog input pin.
zanchin:
The datasheet of the force transducer says that 6 wires are needed, looking at fig. 5 in the INA122's datasheet I only see 4 wires coming from that bridge, how to handle the 6?
The datasheet also mentions the 4-wire configuration. Just connect gray and black to +3.3V, and connect blue and green to ground.
zanchin:
Also the INA122 seems not be available in Germany, maybe there is an alternative?
zanchin:
Another question would be how I would ensure 5V excitation voltage for the force transducer.
I am suggesting that you use 3.3V for the excitation voltage. You could use the Arduino 5V pin instead, however if you are powering the Arduino from USB than there will be a lot of noise on that pin, which will interfere with the measurement. The transducer is just a bridge of 4 resistors, so it will work OK with a lower excitation voltage.
zanchin:
There are several INA122 versions, P, PA, U and so on. Which of these do I have to choose?
The P versions of the INA122 are in dual-in-line packages, so good for prototyping and for assembling on perfboard or stripboard. The U versions are in surface-mount packages.
The -A versions have relaxed tolerances, so they will give less accurate measurements.
zanchin:
And is there something else I should get (to save on the shipping costs)?
That depends on what you want to do with the data that you measure. If you want to display it, you could consider getting an LCD display. 16 x 2 (characters x rows) is commonly used. If you want to control equipment, you might need SSRs or mosfets.
The two extra wires (+ and - sense) are for connecting to a special type of power supply that senses the voltage, at the transducer, and adjusts the power supply output to maintain the correct excitation voltage at the transducer. This is like a Kelvin connection. It compensates for cable resistance in long cables. They don't need to be connected for the transducer to work.
edit Are you going to measure tension and compression loads? If so you will need level shifting as well as amplification. Do you want to electrically balance the bridge or take care if imbalance in software?
Google for TM7709 this is a ready to go 24 bit amplifier for load cells that connect to any Arduino based.
Uses three pins 11,12 and 13 on the Arduino
Cost are 6 $ or so on ebay.
The two extra wires on the laod cell are compensation wires.
I use this TM7709 for load cell measurement too where I measure spring rate forces.
here is some code too http://forum.arduino.cc/index.php?topic=178902.0
The only datasheet I can find on the TM7709 is in Chinese. From what I can tell, it is a 24-bit ADC. I guess that it is equivalent to e.g. a 14-bit ADC preceded by an amplifier with a gain of 1024.
So, hi again, the INA122P finally arrived - the hong kong post was overloaded...
If some help could be provided again I would be very happy. I am looking at figure 5 in http://www.ti.com/lit/ds/sbos069/sbos069.pdf like dc42 suggested.
So I have some questions about how to connect it (sorry for me being such a newbie):
1,8: What is the RG?
2,3: Connect there to the load cell.
4,5: Connect these to Arduino GND?
6: What is V0?
7: Arduino 5V, but what is the REF200-thing?
zanchin:
1,8: What is the RG? Rg sets the gain. Unfortunately, the sensitivity value on the datasheet makes no sense. It is given as 2mV/V, which is not a measure of sensitivity - it should be given in mV/VN. If the 2mV/V refers to the output at the full rated force, then you will need a gain of about 500. Page 7 of the INA122 datasheet gives the gain formula, and the table in Fig 1 gives the values of Rg you need for various gain values.
2,3: Connect there to the load cell. Yes.
4,5: Connect these to Arduino GND? Yes.
6: What is V0? That is the output, which you connect to an analog input pin of the Arduino.
7: Arduino 5V, but what is the REF200-thing? Ignore it, connect the two positive excitation load cell wires (blue and green) to +3.3V or +5V instead (see my earlier replies for why 3.3V might be a good idea).
The capacitor is a decoupling capacitor, to ensure the amplifier remains stable. It is shown in Fig 1 on the datasheet.
Instead of:
if(millis() > time + timeBetweenReadings){
use:
if(millis() - time >= timeBetweenReadings){
because it handles the case of the value returned by millis wrapping round. Also change the type of 'time' to 'unsigned long', and the type of 'timeBetweenReadings' to 'unsigned int' or 'unsigned long' (also declare it 'const' if you are not planning to change it within the program).
You have declared analogValueAverage, but not used it.