// 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 check2 = 0; // Variable Stoppbedingung // 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("***"); Serial.println("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 calibrationValue_1 = -88.67; calibrationValue_2 = -44.56; 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) < 2) { 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("Timeout, Prüfen Sie ggf. Anschlüsse und Verkabelung vom Aduino zum ADC-Modul (HX711) des Sensors 1."); } if (sensor_2.getTareTimeoutFlag()) { Serial.println("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("Fehler: microSD-Karte nicht erkannt."); while (1); // wenn das der Fall ist, warten und nichts weiter machen } Serial.println("Initialisierung abgeschlossen."); Serial.println("***"); // Warte auf Tastatureingabe (Enter) für Start der Messung Serial.println("Bereit für Messung..."); Serial.println("Für START Enter-Taste drücken. Zum STOPPEN 'x' eingeben und Enter-Taste drücken."); while (check1 == 0) { if (Serial.available() > 0) { char inByte = Serial.read(); if (inByte == '\n') { Serial.println("***"); Serial.println("Messung startet..."); check1 = 1; } } } } void loop() { static boolean newDataReady = 0; const int serialPrintInterval = 100; // Parameter zur Häufigkeit der Datenabfrage und -ausgabe (Erhörung -> längere Pausen zwischen Abfragen) while (check2 == 0) { // Überprüfung auf neue Datensätze, neue Abfrage beginnen: if (sensor_1.update()) newDataReady = true; sensor_2.update(); String dataString = ""; // String um die Dateneinträge zusammen zu stellen dataString = String(id) + ","; File dataFile = SD.open("datalog.csv", FILE_WRITE); if (dataFile && newDataReady) { //if (millis() > t + serialPrintInterval) { // Sensorwerte aus Datensatz den Variablen (float) zuweisen float value1 = sensor_1.getData(); float value2 = sensor_2.getData(); Serial.print("ID: "); Serial.print(id); // Ausgabe der ID des Datasatz Serial.print(" Sensor 1 (50kg): "); Serial.print(value1); // Ausgabe Sensorwert Sensor 1 (50kg) Serial.print(" Sensor 2 (100kg): "); Serial.println(value2); // Ausgabe Sensorwert Sensor 2 (100kg) dataFile.println(dataString); dataFile.close(); Serial.println(dataString); newDataReady = 0; id++; // Erhöhung der ID nach jedem Durchlauf delay(250); } else { Serial.println("Fehler: datalog.csv öffnen nicht möglich."); } // Eingaben während der laufenden Messung if (Serial.available() > 0) { char inByte = Serial.read(); if (inByte == 'x') { check2 = 1; Serial.println("Messung gestoppt..."); Serial.println("Für erneute Messung Arduino oder Serieller Monitor neustarten."); Serial.println("***"); } // TARA beider angeschlossenen Sensoren im Betrieb durch senden von 't' über den Seriellen Monitor if (inByte == 't') { sensor_1.tareNoDelay(); sensor_2.tareNoDelay(); } } // Überprüfung ob TARA der Sensoren erfolgreich? if (sensor_1.getTareStatus() == true) { Serial.println("TARA Sensor 1 durchgeführt."); } if (sensor_2.getTareStatus() == true) { Serial.println("TARA Sensor 2 durchgeführt."); } } }