// Einbindung aller ben�tigten Bibliotheken #include // in der Version 1.2.7 verwendet //#include // als Standard Bibliothek in der Arduino IDE integriert #include // als Standard Bibliothek in der Arduino IDE integriert #include // als Standard Bibliothek in der Arduino IDE integriert // Pinbelegung der angeschlossenen Sensoren #define HX711_DOUT_1 4 // Sensor 1 (50kg) DOUT -> Arduino Pin 4 #define HX711_CLK_1 5 // Sensor 1 (50kg) CLK -> Arduino Pin 5 #define HX711_DOUT_2 6 // Sensor 2 (100kg) DOUT -> Arduino Pin 6 #define HX711_CLK_2 7 // Sensor 2 (100kg) CLK -> Arduino Pin 7 // Pinbelegung des microSD-Karten Moduls (SPI) // microSD-Modul MOSI -> Arduino Pin 11 // microSD-Modul MISO -> Arduino Pin 12 // microSD-Modul CLK -> Arduino Pin 13 #define CS 10 // microSD-Modul MOSI -> Arduino Pin 11 // ADC (HX711) Konfiguration String dataString = ""; HX711_ADC sensor_1(HX711_DOUT_1, HX711_CLK_1); HX711_ADC sensor_2(HX711_DOUT_2, HX711_CLK_2); unsigned long t = 0; // Variable f�r Zeitberechnung f�r sp�tere Werteabfrage der Sensoren in der loop() unsigned long id = 0; // Variable zum ID hochz�hlen boolean check1 = 0; // Variable Startbedingung boolean measure_active = 0; // Variable Stoppbedingung boolean newDataReady = false; const int serialPrintInterval = 100; // Parameter zur H�ufigkeit der Datenabfrage und -ausgabe (Erh�rung -> l�ngere Pausen zwischen Abfragen) String dataString; File dataFile; // setup() wird einmal mit Start des Arduinos durchlaufen void setup() { Serial.begin(9600); // Serielle Schnittstelle mit �bertragungsrate von 9600 baud initialisieren delay(10); // 10ms delay Serial.println(); Serial.println(F("***")); Serial.println(F("Initialisierung des Systems...")); // Variablendeklaration f�r Kalibrierwerte beider Sensoren float calibrationValue_1; // Kalibrierwert f�r Sensor 1 (50kg) float calibrationValue_2; // Kalibrierwert f�r Sensor 2 (100kg) // direkte Angabe der Kalibrierwerte (alternativ zu EEPROM Speicherung) calibrationValue_1 = -88.67; // Zeile auskommentieren wenn ein bereits im EEPROM gespeicherter Wert (Adresse 0!) verwendet werden soll calibrationValue_2 = -44.56; // Zeile auskommentieren wenn ein bereits im EEPROM gespeicherter Wert (Adresse 4!) verwendet werden soll sensor_1.begin(); sensor_2.begin(); unsigned long stabilizingtime = 2000; // TARA (Nullung) Genauigkeit kann durch diese Zeit zur Stabilisierung verbessert werden boolean _tare = true; // TARA (Nullung) wird im n�chsten Schnitt durchgef�hrt byte sensor_1_rdy = 0; byte sensor_2_rdy = 0; // Initialisierung, Stabilisierung, TARA beider Module gleichzeitig while (!(sensor_1_rdy && sensor_2_rdy) ) { if (!sensor_1_rdy) sensor_1_rdy = sensor_1.startMultiple(stabilizingtime, _tare); if (!sensor_2_rdy) sensor_2_rdy = sensor_2.startMultiple(stabilizingtime, _tare); } if (sensor_1.getTareTimeoutFlag()) { Serial.println(F("Timeout, Prüfen Sie ggf. Anschlüsse und Verkabelung vom Aduino zum ADC-Modul (HX711) des Sensors 1.")); } if (sensor_2.getTareTimeoutFlag()) { Serial.println(F("Timeout, Prüfen Sie ggf. Anschlüsse und Verkabelung vom Aduino zum ADC-Modul (HX711) des Sensors 2.")); } sensor_1.setCalFactor(calibrationValue_1); // oben im Code definierter Kalibrierwert des Sensors 1 sensor_2.setCalFactor(calibrationValue_2); // oben im Code definierter Kalibrierwert des Sensors 1 //Serial.println("Initialisierung der Sensoren und TARA erfolgreich durchgef�hrt."); // Pr�fe ob SD Karte eingesteckt und Initialisierung m�glich? if (!SD.begin(CS)) { Serial.println(F("Fehler: microSD-Karte nicht erkannt.")); while (1); // wenn das der Fall ist, warten und nichts weiter machen } Serial.println(F("Initialisierung abgeschlossen.")); Serial.println(F("***")); // Warte auf Tastatureingabe (Enter) f�r Start der Messung Serial.println(F("Bereit für Messung...")); Serial.println(F("Für START Enter-Taste drücken. Zum STOPPEN 'x' eingeben und Enter-Taste drücken.")); while (!check1) { if (Serial.available() > 0) { char inByte = Serial.read(); if (inByte == '\n') { Serial.println(F("***")); Serial.println(F("Messung startet...")); check1 = 1; } } } dataFile = SD.open("datalog.csv", FILE_WRITE); if(!dataFile) { Serial.println(F("Fehler: datalog.csv Öffnen nicht möglich.")); while(1); // STOP } } void measure(void) { if (measure_active) { // �berprüfung auf neue Datensätze, neue Abfrage beginnen: newDataReady = false; if (sensor_1.update()) newDataReady = true; sensor_2.update(); if (newDataReady) { // Sensorwerte aus Datensatz den Variablen (float) zuweisen float value1 = sensor_1.getData(); float value2 = sensor_2.getData(); // String um die Dateneintr�ge zusammen zu stellen dataString = String(id) + ","; Serial.print(F("ID: ")); Serial.print(id); // Ausgabe der ID des Datasatz Serial.print(F(" Sensor 1 (50kg): ")); Serial.print(value1); // Ausgabe Sensorwert Sensor 1 (50kg) Serial.print(F(" Sensor 2 (100kg): ")); Serial.println(value2); // Ausgabe Sensorwert Sensor 2 (100kg) dataFile.println(dataString); Serial.println(dataString); id++; } } } void terminal(void) { // Eingaben während der laufenden Messung if (Serial.available() > 0) { char inByte = Serial.read(); if (inByte == 'x') { measure_active = 0; dataFile.close(); Serial.println(F("Messung gestoppt...")); Serial.println(F("Für erneute Messung Arduino oder Serieller Monitor neustarten.")); Serial.println(F("***")); } // TARA beider angeschlossenen Sensoren im Betrieb durch senden von 't' �ber den Seriellen Monitor if (inByte == 't') { sensor_1.tareNoDelay(); sensor_2.tareNoDelay(); delay(1000); // überprüfung ob TARA der Sensoren erfolgreich? if (sensor_1.getTareStatus() == true) { Serial.println(F("TARA Sensor 1 durchgeführt.")); } if (sensor_2.getTareStatus() == true) { Serial.println(F("TARA Sensor 2 durchgeführt.")); } } } } void loop() { static long now, last; // Messung alle serialPrintInterval ms now = millis(); if ( (now-last) >= serialPrintInterval) { last = now; measure(); } terminal(); }