Arduino lastcell / skala (3 / 4 steg)
Steg 3: Koden
av Christian Liljedahl
Christian.Liljedahl.dk
Lastceller är linjära. Så när du har etablerat två data par, kan du interpolera resten.
Steg 1: Ladda upp denna skiss till arduino ombord
Du behöver två massor av väl vet vikt. I det här exemplet A = 10 kg. B = 30 kg
Sätta på load A
Läs den analoga värde visar (detta är analogvalA)
pålagda lasten B
Läs det analoga värdet B
Ange din egen analoga värden här
flyta loadA = 10; kg
int analogvalA = 200. analoga behandlingen tagit med last A på lastcell
flyta loadB = 30. kg
int analogvalB = 600; analoga behandlingen tagit med belastning B på lastcell
Ladda upp skissen igen och bekräfta, att den kilo-behandlingen från den seriella produktionen nu är korrekt, använder dina kända laster
flyta analogValueAverage = 0;
Hur ofta gör vi avläsningar?
lång tid = 0; //
int timeBetweenReadings = 200. Vi vill ha en läsning varje 200 ms;
void setup() {
Serial.BEGIN(9600);
}
void loop() {
int analogValue = analogRead(0);
genomsnittlig - vi jämna avläsningarna lite
analogValueAverage = 0,99 * analogValueAverage + 0,01 * analogValue;
Är det dags att skriva ut?
IF(Millis() > tid + timeBetweenReadings) {
float belastning = analogToLoad(analogValueAverage);
Serial.Print ("analogValue:"); Serial.println(analogValueAverage);
Serial.Print ("ladda:"); Serial.println(load,5);
tid = millis();
}
}
flyta analogToLoad(float analogval) {
med en anpassad karta-funktion, eftersom funktionen standard arduino karta endast använder int
float belastning = mapfloat (analogval, analogvalA, analogvalB, loadA, loadB);
returnera belastning;
}
flyta mapfloat (float x, float in_min, flyta in_max, flyta out_min, flyta out_max)
{
RETUR (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}