#include "HX711.h"
#define NUM_SENSORS 6
#define HX_SCK 2
int hx_dout[NUM_SENSORS] = {3, 4, 5, 6, 7, 8};
HX711 scale[NUM_SENSORS];
// Kalibrierfaktoren (später anpassen!)
float cal[NUM_SENSORS] = {
1.0, 1.0, 1.0, 1.0, 1.0, 1.0
};
// Sensorpositionen in mm
float sx[NUM_SENSORS] = {-70, -70, 70, 70, 70, -70};
float sy[NUM_SENSORS] = { 0, 70, 70, 0, -70, -70};
// Trigger
const float TRIGGER_THRESHOLD = 20.0; // empirisch anpassen
const unsigned long WINDOW_MS = 30; // Integrationsfenster
void setup() {
Serial.begin(115200);
for (int i = 0; i < NUM_SENSORS; i++) {
scale[i].begin(hx_dout[i], HX_SCK);
scale[i].set_gain(128); // Kanal A, 80 SPS
scale[i].tare();
}
Serial.println("System bereit");
}
void loop() {
float sum = 0;
for (int i = 0; i < NUM_SENSORS; i++) {
if (scale[i].is_ready()) {
sum += abs(scale[i].read());
}
}
// Treffer erkannt
if (sum > TRIGGER_THRESHOLD) {
measureImpact();
delay(200); // Entprellen
}
}
void measureImpact() {
float integral[NUM_SENSORS] = {0};
unsigned long t0 = millis();
while (millis() - t0 < WINDOW_MS) {
for (int i = 0; i < NUM_SENSORS; i++) {
if (scale[i].is_ready()) {
float v = abs(scale[i].read()) * cal[i];
integral[i] += v;
}
}
}
// Schwerpunkt berechnen
float Fx = 0, Fy = 0, Fsum = 0;
for (int i = 0; i < NUM_SENSORS; i++) {
Fx += integral[i] * sx[i];
Fy += integral[i] * sy[i];
Fsum += integral[i];
}
if (Fsum > 0) {
float X = Fx / Fsum;
float Y = Fy / Fsum;
Serial.print("Treffer X [mm]: ");
Serial.print(X, 2);
Serial.print(" | Y [mm]: ");
Serial.println(Y, 2);
}
}