Below is my code when i use calibration code. My project is about egg weighing. But with arduino i used voltage as weighing scale which is the highest 2.5 volts represents 120 grams and of course with a load sensor to detect the load with the analog input 512. After identifying the scale, the egg will be sort to their grades which are Grade 1 until Grade 6. For example 2.5 volts will be in Grade 1 and so on based on egg's weight.
So, i need to know did my code wrong when using the calibration? because the sensor is not constant and sometime it went more than 512. I need the reading to be constant and accurate. I have tried so many times with the coding.
const int analoginpin = A0;
int sensorValue = 0;
int led1 = 8;
int led2 = 9;
int led3 = 10;
int led4 = 11;
int led5 = 12;
int led6 = 13;
int a = 427; int b = 512; int c = 341; int d = 426; int e = 255;
int f = 340; int g = 169; int h = 254; int i = 83; int j = 168;
int k = 1; int l = 82; int m = 0;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
}
void loop() {
// return value & function call
sensorValue = Calibrating();
// calculate the voltage
float voltage = sensorValue * (2.5 / 512.0);
Serial.print("Sensor = ");
Serial.print(sensorValue);
Serial.print("\t Voltage = ");
Serial.print(voltage);
Grading(); // function call
}
void Grading() {
if (sensorValue >= a || sensorValue >= b) // represents egg weight above 85g up until 120g
{
Serial.println("\t Grade = 1");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
else if (sensorValue >= c && sensorValue <= d) // represents egg weight between 75g-84.9g
{
Serial.println("\t Grade = 2");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
else if (sensorValue >= e && sensorValue <= f) // represents egg weight between 65g-74.9g
{
Serial.println("\t Grade = 3");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
else if (sensorValue >= g && sensorValue <= h) // represents egg weight between 55g-64.9g
{
Serial.println("\t Grade = 4");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
else if (sensorValue >= i && sensorValue <= j) // represents egg weight between 45g-54.9g
{
Serial.println("\t Grade= 5");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
else if (sensorValue >= k && sensorValue <= l) // represents egg weight between 36g-44.9g
{
Serial.println("\t Grade = 6");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
else if (sensorValue == m) // no egg
{
Serial.println("\t No egg");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
delay(100);
}
}
int Calibrating() {
int value;
value = analogRead(analoginpin);
if (value > m) { // record the maximum sensor value m=0
m = value;
}
if (value < b) { // record the minimum sensor value b=512
b = value;
}
return value;
}