diff --git a/config.yml b/config.yml index b21ad45af74cf32710441f55ff1e7301682b4212..200c16ede02103b5c2d0216edc6642f4e6528700 100644 --- a/config.yml +++ b/config.yml @@ -14,6 +14,6 @@ InfoLogger: - WARNING Data: - factors: [1, 1, 1, 1] # factors for the 4 dms + factors: [9.6474, 0, 10.9132, -11.6764] # factors for the 4 dms delta_time: 30 # time between logging data smoothing: false # whether to smoothe the logged data diff --git a/main.py b/main.py index e434cc0c3d02fe35e3e9210744306880a1830208..82aa784661b8a22db354f1891d7f3a736c1846aa 100644 --- a/main.py +++ b/main.py @@ -176,7 +176,7 @@ def main(config: Any) -> None: if time.time() - last_write > delta_time: # write data - data_logger.info(",".join([f"{value/n * factors + offsets:.5f}" for value in data]) + f",{n}") + data_logger.info(",".join([f"{value/n * factors[i] + offsets[i]:.5f}" for i, value in enumerate(data)]) + f",{n}") logger.debug("Wrote data") n = 0 data = np.zeros((8,)) diff --git a/scripts/serial_id.py b/scripts/serial_id.py index 7061c9c7e22636abf8b6d71fabaa0dc0a7035995..aa610052304db785e0f14956634d501bc8af71a6 100644 --- a/scripts/serial_id.py +++ b/scripts/serial_id.py @@ -9,7 +9,8 @@ if __name__ == "__main__": con.write(1) try: - print(int(con.readline().decode("utf-8"))) + data = con.readline().decode("utf-8").replace('\r','').replace('\n','') + print(int(float(data))) break except (TypeError, ValueError): time.sleep(1) diff --git a/scripts/write.bash b/scripts/write.bash index 828047c301069b48e4802b88fc3ab2d5174c0bae..5346725a41d0722749b4e7228c2ef34233c89443 100755 --- a/scripts/write.bash +++ b/scripts/write.bash @@ -2,7 +2,7 @@ cd `dirname "$0"`/../sketches -fqbn=arduino:avr:nano +fqbn=arduino:avr:uno core=arduino:avr id=$(python3 ../scripts/serial_id.py) @@ -11,14 +11,15 @@ if [[ $id == "1" ]] then serial_dms=/dev/ttyACM0 serial_temp=/dev/ttyACM1 -elif [[ $id == "0" ]] +elif [[ $id == "2" ]] then serial_temp=/dev/ttyACM0 serial_dms=/dev/ttyACM1 else echo -e "\x1b[31mError: Something went wrong.\x1b[0m" echo -e "Exiting" - exit 1 + serial_dms=/dev/ttyACM1 + serial_temp=/dev/ttyACM0 fi echo -e "Info: DMS arduino: $serial_dms, Temp arduino: $serial_temp" @@ -26,20 +27,22 @@ echo -e "Info: DMS arduino: $serial_dms, Temp arduino: $serial_temp" echo "Checking connected devices..." device_list=$(arduino-cli board list) -connected_devices=$(echo -e $device_list | grep "^\(\($serial_dms\)\|\($serial_temp\)\).*$fqbn.*$core$" | wc -l) +connected_devices=$(echo $device_list | grep "^\(\($serial_dms\)\|\($serial_temp\)\).*$fqbn.*$core" | wc -l) if [[ $connected_devices != "2" ]] then - echo -e "\x1b[31mError: not all arduino devices are connected,\x1b[0m" + echo -e "\x1b[31mError: not all arduino devices are connected, only found: $connected_devices.\x1b[0m" echo -e "Connected devices are:\n$device_list" echo -e "Exiting." - exit 1 + fi echo "Checking installed cores..." core_list=$(arduino-cli core list) -core_list_installed=$(echo -e $core_list | grep "^$core") +core_list_installed=$(echo $core_list | grep "$core") +echo $core_list +echo $core_list | grep "$core" if [[ -z $core_list_installed ]] then @@ -91,7 +94,7 @@ fi echo "Uploading sketches..." -upload=$(arduino-cli upload -p $serial_dms --fqbn $fqbn DmsMessung) +upload=$(arduino-cli upload --port $serial_dms --fqbn $fqbn DmsMessung) if [[ $? -gt 0 ]] then echo -e "\x1b[31mError: Upload of DmsMessung failed:\x1b[0m" @@ -100,7 +103,7 @@ then exit 1 fi -upload=$(arduino-cli upload -p $serial_temp --fqbn $fqbn Temperaturmessung) +upload=$(arduino-cli upload --port $serial_temp --fqbn $fqbn Temperaturmessung) if [[ $? -gt 0 ]] then echo -e "\x1b[31mError: Upload of Temperaturmessung failed:\x1b[0m" @@ -109,4 +112,4 @@ then exit 1 fi -echo "Finished" \ No newline at end of file +echo "Finished" diff --git a/sketches/DmsMessung/DmsMessung.ino b/sketches/DmsMessung/DmsMessung.ino index 487765e157b37af08f10d1d5246723f04a0e766f..2b41249bab2247be7d7e293e793db4e4bdc401d5 100644 --- a/sketches/DmsMessung/DmsMessung.ino +++ b/sketches/DmsMessung/DmsMessung.ino @@ -1,57 +1,197 @@ #include <HX711_ADC.h> -#include "cstring" -HX711_ADC loadCells[] = {HX711_ADC(2, 3), HX711_ADC(6, 7), HX711_ADC(8, 9), HX711_ADC(12, 13)}; -float measurements[4]; -float offsets[4]; +// Ein Objekt mit dem Konstruktor aus der Bibliothek erstellen +HX711_ADC LoadCell(2, 3); +HX711_ADC LoadCell2(6, 7); +HX711_ADC LoadCell3(8, 9); +HX711_ADC LoadCell4(12, 13); -int count = 100; // number of measurements -long stabilization = 2000; +// Globale Variablen intialisieren -void readData() { - // write the averaged data over 'count' measurements into 'measurements'. +static float Offset = 0; +static float Offset2 = 0; +static float Offset3 = 0; +static float Offset4 = 0; - std::memset(measurements, 0, sizeof measurements); // zero out measurements +int anzahl = 100; +int caltime = 2; +float calFac = 2429; +float calFac2 = 2406; +float calFac3 = 2442; +float calFac4 = 2454; +long stabilisation = 2000; +boolean t_are = true; +float messwertges; +float messwertges2; +float messwertges3; +float messwertges4; - for (int i = 0; i < count; i++) { - for (int j = 0; j < sizeof(loadCells) / sizeof(*loadCells); j++) { - loadCells[j].update(); - measurements[j] += loadCells[j].getRareData() - offsets[j]; - } - } +float messwert; +float messwert2; +float messwert3; +float messwert4; + +void regelbetrieb(HX711_ADC zelle, HX711_ADC zelle2, HX711_ADC zelle3, HX711_ADC zelle4) { + float messwertAlt = messwert; + float messwertAlt2 = messwert2; + float messwertAlt3 = messwert3; + float messwertAlt4 = messwert4; + messwert = 0; + messwert2 = 0; + messwert3 = 0; + messwert4 = 0; + + for (int i = 1; i <= anzahl; i++) { + // Eingänge der Pins neu auslesen + + zelle.update(); + zelle2.update(); + zelle3.update(); + zelle4.update(); + + // Messwert aufsummieren + + messwert = messwert + (getDaten(Offset, zelle)); + messwert2 = messwert2 + (getDaten(Offset2, zelle2)); + messwert3 = messwert3 + (getDaten(Offset3, zelle3)); + messwert4 = messwert4 + (getDaten(Offset4, zelle4)); - for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) { - measurements[i] /= count; + // messwert=getDaten(Offset); + // Serial.println(messwert); + // 1 Millisekunden warten((1/1000) Sekunde) + delay(1); } + + // Berechne Mittelwert der letzten 1000 Messwerte aus der + // letzten Sekunde + + messwert = messwert / anzahl; + messwert2 = messwert2 / anzahl; + messwert3 = messwert3 / anzahl; + messwert4 = messwert4 / anzahl; + + messwert = messwert / calFac; + messwert2 = messwert2 / calFac2; + messwert3 = messwert3 / calFac3; + messwert4 = messwert4 / calFac4; + + // Methode für schreiben in Datenbank + // messwert=epsilonumgebung(messwert,messwertAlt); + // messwert2=epsilonumgebung(messwert2,messwertAlt2); + // messwert3=epsilonumgebung(messwert3,messwertAlt3); + // messwert4=epsilonumgebung(messwert4,messwertAlt4); + + // Es fehlt noch die kalbrierte Umrechnung auf Mikrostrain. + // Serial.println("Die Daten betragen "); + // Serial.println(messwert,1); + // Serial.println(Offset,1); + // delay(1000); } +// Methode zum berechnen der Spannung +float getDaten(float offset, HX711_ADC zelle) { + float Offsetnew = offset; -void setup() { - Serial.begin(9600); + // Hilfsvariablen initialisieren + float data; - for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) { - loadCells[i].begin(); + // Methode getRareData() aus der Bibliothek abzüglich dem vorher + // gemessenen Offset-Wert - loadCells[i].start(stabilization, true); - } + data = (float)zelle.getRareData() - Offsetnew; - // zero out load cells - readData(); - std::memcpy(offsets, measurements, sizeof offsets); + // Gemessene Spannung als Rückgabewert + + return data; } -void loop() { +// Hier steht die Methode zum schreiben in eine Datenbank + +void writeInData() { + // Wenn eine serielle Verbindung verfügbar ist soll das Programm ausgefuehrt + // werden if (Serial.available()) { + // Der Arduino wartet auf eine Anfrage vom Pi Serial.read(); + // Damit der Pi die Gelegenheit bekommt sich auf das Einlesen der Messwerte + // vorzubereiten wird ein Delay von 10ms eingeführt + delay(10); + Serial.println(1); delay(10); + // In diesem Testskript wird eine zufällige Zahl zwischen 0 und 100 + // festgelegt - Serial.println(1); // for identification + regelbetrieb(LoadCell, LoadCell2, LoadCell3, LoadCell4); - readData(); + // Die Zahl wird dann an den Pi übermittelt + // Serial.print("Zelle 1 "); + Serial.println(messwert); + delay(10); + // Serial.print("Zelle 2 "); + Serial.println(messwert2); + delay(10); + // Serial.print("Zelle 3 "); + Serial.println(messwert3); + delay(10); + // Serial.print("Zelle 4 "); + Serial.println(messwert4); + delay(10); + } +} - for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) { - Serial.println(measurements[i]); - delay(10); - } +float epsilonumgebung(float hierMesswert, float hierMesswertAlt) { + if (hierMesswert < hierMesswertAlt + 0.25 && hierMesswert > hierMesswertAlt - 0.25) { + hierMesswert = hierMesswertAlt; } -} \ No newline at end of file + return hierMesswert; +} +// In der Setup steht die bestimmung des Nullpunkts + +void setup() { + Serial.begin(9600); + + // Serial.println(Offset); + + LoadCell.begin(); + LoadCell2.begin(); + LoadCell3.begin(); + LoadCell4.begin(); + + LoadCell.start(stabilisation, t_are); + LoadCell2.start(stabilisation, t_are); + LoadCell3.start(stabilisation, t_are); + LoadCell4.start(stabilisation, t_are); + + LoadCell.update(); + LoadCell2.update(); + LoadCell3.update(); + LoadCell4.update(); + + // Messwert aufsummieren + + Offset = getDaten(0, LoadCell); + Offset2 = getDaten(0, LoadCell2); + Offset3 = getDaten(0, LoadCell3); + Offset4 = getDaten(0, LoadCell4); + + delay(500); + + /* + //Eingänge der Pins neu auslesen + float Offsetsum; + caltime=caltime*1000; + for (int i=1; i<=caltime; i++){ + delay(1); + } + Offset=Offsetsum/caltime; + */ +} +// In der loop steht der Regelbetrieb der Waage + +void loop() { + writeInData(); +} + +// mögliche Nachbesserungen +// millis() läuft nach 50 Tagen über und geht zurück auf 0 +// millis(): https://www.arduino.cc/reference/de/language/functions/time/millis/ \ No newline at end of file diff --git a/sketches/Temperaturmessung/Temperaturmessung.ino b/sketches/Temperaturmessung/Temperaturmessung.ino index 8f2d2977f07ac017f9cba6204bda09a3defc45e5..bf4ef188a66b9e39ffbe2022a2a4163060bcaa59 100644 --- a/sketches/Temperaturmessung/Temperaturmessung.ino +++ b/sketches/Temperaturmessung/Temperaturmessung.ino @@ -7,13 +7,13 @@ #define DHT_Typ DHT11 -DHT dths[] = {DHT(DHT1_Pin, DHT_Typ), DHT(DHT2_Pin, DHT_Typ), DHT(DHT3_Pin, DHT_Typ), DHT(DHT4_Pin, DHT_Typ)}; +DHT dhts[] = {DHT(DHT1_Pin, DHT_Typ), DHT(DHT2_Pin, DHT_Typ), DHT(DHT3_Pin, DHT_Typ), DHT(DHT4_Pin, DHT_Typ)}; void setup() { Serial.begin(9600); - for (int i = 0; i < sizeof(dhts); i++) { - dths[i].begin(); + for (int i = 0; i < sizeof(dhts) / sizeof(*dhts); i++) { + dhts[i].begin(); } } @@ -25,7 +25,7 @@ void loop() { Serial.println(2); // for identification - for (int i = 0; i < sizeof(dths) / sizeof(*dths); i++) { + for (int i = 0; i < sizeof(dhts) / sizeof(*dhts); i++) { float temp = dhts[i].readTemperature(); Serial.println(temp);