Skip to content
Snippets Groups Projects
Commit bad0ba08 authored by Lennard's avatar Lennard
Browse files

Various updates

parent 89db7269
No related branches found
Tags
No related merge requests found
......@@ -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
......@@ -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,))
......
......@@ -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)
......@@ -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"
......
#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;
for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) {
measurements[i] /= count;
}
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));
// messwert=getDaten(Offset);
// Serial.println(messwert);
// 1 Millisekunden warten((1/1000) Sekunde)
delay(1);
}
void setup() {
Serial.begin(9600);
// Berechne Mittelwert der letzten 1000 Messwerte aus der
// letzten Sekunde
messwert = messwert / anzahl;
messwert2 = messwert2 / anzahl;
messwert3 = messwert3 / anzahl;
messwert4 = messwert4 / anzahl;
for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) {
loadCells[i].begin();
messwert = messwert / calFac;
messwert2 = messwert2 / calFac2;
messwert3 = messwert3 / calFac3;
messwert4 = messwert4 / calFac4;
loadCells[i].start(stabilization, true);
// 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;
// Hilfsvariablen initialisieren
float data;
// Methode getRareData() aus der Bibliothek abzüglich dem vorher
// gemessenen Offset-Wert
data = (float)zelle.getRareData() - Offsetnew;
// Gemessene Spannung als Rückgabewert
// zero out load cells
readData();
std::memcpy(offsets, measurements, sizeof offsets);
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); // for identification
Serial.println(1);
delay(10);
// In diesem Testskript wird eine zufällige Zahl zwischen 0 und 100
// festgelegt
readData();
regelbetrieb(LoadCell, LoadCell2, LoadCell3, LoadCell4);
for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) {
Serial.println(measurements[i]);
// 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);
}
}
float epsilonumgebung(float hierMesswert, float hierMesswertAlt) {
if (hierMesswert < hierMesswertAlt + 0.25 && hierMesswert > hierMesswertAlt - 0.25) {
hierMesswert = hierMesswertAlt;
}
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
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment