// Balance de centrage : acquisition sur l'ATmega32u4 de la LattePanda (PlatformIO, carte « leonardo »)
// Bibliothèques : olkal/HX711_ADC, adafruit/Adafruit MPU6050
#include <HX711_ADC.h>
#include <Adafruit_MPU6050.h>
HX711_ADC cell1(7, 8), cell2(9, 10), cell3(11, 12); // (DOUT, SCK) de chaque HX711
Adafruit_MPU6050 mpu;
const unsigned long PERIOD_MS = 50; // 20 trames par seconde
float f1, f2, f3;
void setup() {
Serial.begin(115200);
mpu.begin(0x68);
mpu.setAccelerometerRange(MPU6050_RANGE_2_G); // seule la gravité nous intéresse
mpu.setFilterBandwidth(MPU6050_BAND_10_HZ); // filtre numérique interne
cell1.begin(); cell2.begin(); cell3.begin();
cell1.start(2000, true); cell2.start(2000, true); cell3.start(2000, true); // stabilisation + tare
// facteur d'échelle fixe : le vrai étalonnage est fait côté PC
cell1.setCalFactor(1000.0); cell2.setCalFactor(1000.0); cell3.setCalFactor(1000.0);
}
void loop() {
static unsigned long last = 0;
if (cell1.update()) f1 = cell1.getData(); // chaque HX711 a son propre rythme
if (cell2.update()) f2 = cell2.getData();
if (cell3.update()) f3 = cell3.getData();
if (millis() - last >= PERIOD_MS) {
last = millis();
sensors_event_t a, g, t;
mpu.getEvent(&a, &g, &t);
Serial.print("{\"cells\":["); Serial.print(f1); Serial.print(',');
Serial.print(f2); Serial.print(','); Serial.print(f3); Serial.println("]}");
Serial.print("{\"mpu\":{\"accel\":{\"X\":"); Serial.print(a.acceleration.x);
Serial.print(",\"Y\":"); Serial.print(a.acceleration.y);
Serial.print(",\"Z\":"); Serial.print(a.acceleration.z); Serial.println("}}}");
}
// commandes du PC : "t1", "t2", "t3" (tare d'une jauge) ou "t-" (les trois)
if (Serial.available() >= 2 && Serial.read() == 't') {
switch (Serial.read()) {
case '1': cell1.tareNoDelay(); break;
case '2': cell2.tareNoDelay(); break;
case '3': cell3.tareNoDelay(); break;
case '-': cell1.tareNoDelay(); cell2.tareNoDelay(); cell3.tareNoDelay(); break;
}
}
if (cell1.getTareStatus()) Serial.println("{\"msg\":\"Tare 1 complete\"}");
if (cell2.getTareStatus()) Serial.println("{\"msg\":\"Tare 2 complete\"}");
if (cell3.getTareStatus()) Serial.println("{\"msg\":\"Tare 3 complete\"}");
}
Balance de centrage : firmware ATmega32u4
Écrit par
dans