Saturday, April 6, 2013

This weeks projects: Load cells, Breadboard Power Supply, Temp / Humidity and more ....

I had a bunch of parts come in this week:

A 85lb. Load Cell (Arduino Scale project)
DHT-11 Temp / Humidity Sensors
Breadboard dual voltage (3.3/5v) power supply
Motion Sensors
3 axis accelerometer

Still in transit:

DHT-22 Temp/Humidity Sensor
Waterproof DS18B20 Temp Sensor

I have my work cut out for me, and updated code and tutorials will be posted. Contact me if you want any of our protoboard projects listed in the various tutorials I post here.

On this load cell (from a Accuteck  W-8260-86W Postal Scale) the 4 wires coming from the load cell are:

Red: Excitation +
White: Signal +
Green: Signal -
Black: Excitation -

This matches the GSE / NCI / Sensotec wiring scheme. To increase the output of the load cell so that the Arduino can read it on an analog input, we will need a INA125P amplifier and a 10 ohm resistor.

* 4/11/13 update: Our free sample INA125P came in today from Texas Instruments. Many electronics manufacturers will send you free samples for prototyping projects. Atmel sent us 3 free 328P-PU processors.


* 4/13/13 update: INA125P came in, circuit is connected and the code uploaded, along with the video.



// Arduino as load cell amplifier
// by Christian Liljedahl 
// christian.liljedahl.dk

// Load cells are linear. So once you have established two data pairs, you can interpolate the rest.

// Step 1: Upload this sketch to your arduino board

// You need two loads of well know weight. In this example A = 10 kg. B = 30 kg
// Put on load A 
// read the analog value showing (this is analogvalA)
// put on load B
// read the analog value B

// Enter you own analog values here
float loadA = 10; // kg
int analogvalA = 200; // analog reading taken with load A on the load cell

float loadB = 30; // kg 
int analogvalB = 600; // analog reading taken with load B on the load cell

// Upload the sketch again, and confirm, that the kilo-reading from the serial output now is correct, using your known loads

float analogValueAverage = 0;

// How often do we do readings?
long time = 0; // 
int timeBetweenReadings = 200; // We want a reading every 200 ms;

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

void loop() {
  int analogValue = analogRead(0);

  // running average - We smooth the readings a little bit
  analogValueAverage = 0.99*analogValueAverage + 0.01*analogValue;

  // Is it time to print? 
  if(millis() > time + timeBetweenReadings){
    float load = analogToLoad(analogValueAverage);

    Serial.print("analogValue: ");Serial.println(analogValueAverage);
    Serial.print("             load: ");Serial.println(load,5);
    time = millis();
  }
}

float analogToLoad(float analogval){

  // using a custom map-function, because the standard arduino map function only uses int
  float load = mapfloat(analogval, analogvalA, analogvalB, loadA, loadB);
  return load;
}

float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}


Our Inspiration:

http://www.controlweigh.com/loadcell_colors.htm
http://cerulean.dk/words/?page_id=42