Posts | Comments

Planet Arduino

Archive for the ‘weight’ Category

[Paul] participated in a hackathon at work and created a hack to help solve what was ultimately a people problem. A soda fridge at work wasn’t getting refilled when empty. Instead of trying to make people less lazy, [Paul] went with making the fridge more needy.

The first thing [Paul] did was make a soda fridge refill sensor from a scale. As the fridge got emptier, it got lighter. The scale senses that and can decide it’s time for a refill. The only part missing was how to read the output from the scale. To do that, he took an unusual approach.

Soda Fridge on Hacked Scale
Soda fridge on an analog scale with color sensor reading the dial

The soda fridge sits on an analog scale with a dial. [Paul] saw there was no need to measure the exact weight of the fridge, only to detect a refill threshold. He came up with a simple hack: colored paper attached to the scale’s dial and an Arduino with an OSEPP COLOR‑01 color sensor pointed at the paper. The dial moves in response to the fridge’s changing weight, and the color sensor reads the color of the paper as it moves under the sensor. With a little bit of trial-and-error calibration and some barely modified sample code for the sensor, it was possible to reliably detect when the fridge required refilling. With the sensor done, it was time to use it to solve the lazy people problem.

In a way, the root problem wasn’t that people couldn’t be bothered to check if the fridge needed a refill – it was that the right people weren’t finding out at the right times. This resulted in spotty refilling as well as soda not being ordered when needed. This hack means that the fridge can now actively announce its state, which now allows things like notifying people via email that it is their turn to refill and re-order. It turns out that a fridge that can tell people what it needs has a much better chance of being serviced, compared to a one that has to wait for people to check up on it.

We’ve seen people interface directly to the load sensors in weight scales before, but this hack took a completely different approach.

Thanks to [Paul] for sharing.


Filed under: Arduino Hacks
Nov
26

Sensing Weight With A Flexiforce + Arduino

arduino, flexiforce, force, tutorials, weight Commenti disabilitati su Sensing Weight With A Flexiforce + Arduino 

Felxiforce is a force sensor that is very similar to FSRs we just wrote about in principal. They change their resistance when you apply force to them. (The flexi part of the name is because they are flexible) Felxiforces are about twice as expensive as their FSR cousins, but these are much more stable, and are calibrated to a specific weight. You can buy them in 1, 25, or 100lb ratings. This article was written using the 100lb version.

Like the FSR I’m not sure if you can get a really precise weight reading from it, it seems a bit shaky, and the output seems to be logarithmic, not linear. But it does have a much larger range than the FSR, and in general will be better if you you need to sense a range of weights, or need to guess how much water is in a cup based on the weight.

When using the flexiforce, you need to make sure all the weight you want to sense is directed onto the small sensing area. So you may need to make a jig to direct the weight if you want to sense something you put on top of it.

Hooking it up, and why

The flexiforce sensor ranges its resistance between near infinite when not being touched, to under 25K ohms when you approach its weight limit. When barely touching it, it has a resistance of around 10M ohms.

We can measure that change using one of the Arduino’s analog inputs. But to do that, we need a fixed resistor (not changing) that we can use for that comparison (We are using a 10M (1,000,000 ohm) resistor). This is called a voltage divider and divides the 5v between the flexiforce and the resistor.

The analog read on your arduino is basically a voltage meter. At 5V (its max) it will read 1023, and at 0v it will read 0. So we can measure how much voltage is on the flexiforce using the analogRead and we will have our force reading.

The amount of that 5V that each part gets is proportional to its resistance. So if the the flexiforce and the resistor have the same resistance, the 5V is split evenly (2.5V) to each part. (analog reading of 512)

But if the flexiforce is pressed on pretty hard, reading only 25K of resistance, the 1M resistor is going to soak up 40 times as much of that 5V. So the FSR would only get .12V. (analog reading of 25)

And if something is barely pressing on it, the flexiforce may be 5M of resistance, so the flexiforce will soak up 5 times as much of that 5V as the 1M resistor. So the flexiforce would get 4.2V. (analog reading of 852)

Code

The arduino code for this just could not be easier. We are adding some serial prints and delays to it just so you can easily see the readings, but they dont need to be there if you dont need them.

//From the bildr article http://bildr.org/2012/11/flexiforce-arduino/

int flexiForcePin = A0; //analog pin 0

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

void loop(){
  int flexiForceReading = analogRead(flexiForcePin); 

  Serial.println(flexiForceReading);
  delay(250); //just here to slow down the output for easier reading
}
Unless otherwise stated, this code is released under the MIT License – Please use, change and share it.


  • Newsletter

    Sign up for the PlanetArduino Newsletter, which delivers the most popular articles via e-mail to your inbox every week. Just fill in the information below and submit.

  • Like Us on Facebook