Feuchtemessung mit Mittelwertbildung und manuellem Datenloggen

Hallo,

Ich habe mir folgendes Projekt für meine Landwirtschaft ausgedacht.

Ich will für Stroh- und Heuballen die Feuchte messen bevor ich diese aufschneide.
Dazu Fahre ich mit dem Traktor mit angebauter Heugabel (3 x Mess-Zinken) in den Ballen hinein und messe die Feuchte. (so der Plan)

Um die Daten auszuwerten werden die Originalwerte und der entscheidende Mittelwert im 5,10,oder 15sek Rhytmus ausgelesen und per Bluetooth an den Empfänger im Fahrerhaus übertragen.
Im Fahrerhaus werden die Daten geprüft auf Knopfdruck gespeichert.
Durch die Anzahl der Tastenanschläge weiß ich wieviele Ballen ich verbraucht habe /Tag

Ist so etwas machbar?
ich habe mir vor 2 Wochen ein Arduino Uno mit Starterkit beschafft und lerne noch.
Datalogger und BT-Module RTC-Module und Industriegehäuse sind bestellt.
Stromversorgung wird über einen Accu 10,8V einer ACCU-Bormaschine sichergestellt.
Vorteil = schnelles wechseln und aufladen.

Für Weitere Vorschläge und Verbesserungen und Erfahrungen wäre ich sehr Dankbar.

Microsoft Word-Dokument (neu) (2).pdf (62.9 KB)

Wie versorgst du den Nano und Sensoren mit Spannung ?

Prinzipiell kein Problem. BT-Modul solltest du aber nicht in den Baqllen schieben, sonst schaut's traurig aus mit dem Empfang im Führerhaus - vor allem, wenn der Ballen feucht ist. Pack' alles in ein PVC-Rohr, vorne dran eine Stahspitze, diese seitlich reichlich mit bohrungen versehen und den Feuchtigkeitssensor da drinen verstecken. Gegen das Restrohr abdichten, Kabel (geschirmt) com Sensor zum Arduino + BT-Modul leiten (hinten im Rohr, ausserhalb des Ballens), das war's dann schon.

Hallo,

@HotSystems
Die Feuchtesensoren sind in den Stahlspitzen schon verbaut
(ebenfalls in Bestellung Lieferzeit noch 8-10 Wochen = Prototypen)
Die Sensoren bekommen ebenfalls von dem Accu ihre Spannung (9-15V).
Denkbar wäre auch eine Moped-Batterie (12), aber von dieser Lösung halte ich nicht so viel wegen der Schwefelsäure darin. Der Aufnahmearm lässt sich um ca.120° nach vorn neigen.
Grundsätzlich muss die Versorgung über Accu Laufen, Spannung der Accus ist dank Wandler ja fast nebensächlich oder?

@zwieblum
Es wird so sein, dass die Elektronik in einem Gehäuse verpackt und geschützt ist und nur noch die Kabel der Sensoren herauskommen.

Die Feuchte wird während der Arbeit im ca. 2 Minutentakt gemessen.
20-30 Ballen/stunde
Daher sind es Kapazitive Berührungssensoren.

Alles weitere mit Löchern ist nicht Praktikabel außer bei Langzeitlagerung.
Selbst dabei wird schon alles mit Infrarot und Wärmebild-Camera überwacht um Wärmeentwicklung festzustellen bevor es zum Brand kommt.

Ich hoffe meine Erklärungen helfen weiter.

Danke

rengaw75:
Hallo,

@HotSystems
Die Feuchtesensoren sind in den Stahlspitzen schon verbaut
(ebenfalls in Bestellung Lieferzeit noch 8-10 Wochen = Prototypen)
Die Sensoren bekommen ebenfalls von dem Accu ihre Spannung (9-15V).
Denkbar wäre auch eine Moped-Batterie (12), aber von dieser Lösung halte ich nicht so viel wegen der Schwefelsäure darin. Der Aufnahmearm lässt sich um ca.120° nach vorn neigen.
Grundsätzlich muss die Versorgung über Accu Laufen, Spannung der Accus ist dank Wandler ja fast nebensächlich oder?

Dann müssen die Sensoren ja mittels Kabel verbunden sein.
Warum dann Funk zur Datenübermittlung, da ist es doch per Kabel deutlich einfacher.
Damit hast du weniger Fehlerquellen.

Verständnisfrage: du musst jeden ballen einzeln anstechen, um die Feuchtigkeit zu messen. Und was passiert dann? Wieder raus mit der Gabel? Oder werden die immer bewegt? Oder ... ?

Hallo,

@HotSystems
Nun der Arm am Frontlader bewegt sich, außerdem kann/muss ich die Ballen auch Lagern und Stapeln (7m hoch).
Dazu soll diese Gabel mit genutzt werden.
Bitte selbst nach "Ballengabel" im Netz suchen, dann bekommt ihr ein Verständnis dafür.

Da vom Teleskoparm kein flexibles Kabel verlegbar ist benötige ich eine art der Kabellosen Übertragung.
Bluetooth erscheint mir eine gute Wahl.
(Energiesparend, Verbindungssicher gegenüber anderen Geräten)

@zwieblum
ja jeden Ballen einzeln, ist er zu Nass, dann ist das Stroh oder Heu schon vergoren und die Bakterien schaden den Rindviechern

Danke für das Interesse.

Hm ... jetzt kommt die Gretchenfrage: wie definiert man "Nässe". Ich war der irrigen Meinung, es geht um die Luftfeuchtigkeit im Ballen, aber anscheinend ist's sinnvoller, den LEitwert zwischen 2 Zinken zu messen, oder irre ich mich da?

Ist dann die Spannungsversorgung der Sensoren auch auf der Gabel ?

Hallo,

@zwieblum

"""jetzt kommt die Gretchenfrage: wie definiert man "Nässe"."""
wenn es zufeucht ist, dann ist es Nass!
In meinem Fall: ist das Stroh zu Mist vergoren, und die Gülle läuft heraus, dann ist es Nass. :wink:

du hast vollkommen recht. Das sollen die Zinken machen. In den Stahlzinken sind Oxidationssichere Kontaktflächen in einem Polymer eingelassen. Damit wird der Kapazitive Widerstand / Leitwert erfasst.
Aus diesem wiederum wird ein Verarbeitungssignal erzeugt ( 0-5V oder 4-20mA) . Dieses Signal soll vom ersten Arduino an den zweiten Übertragen werden.

Was ist besser? Bluetooth, WLan, Funk 433mhz oder was meint ihr?

@HotSystems
Ja, an der Gabel gibt es mit einem Accu eine eigenständige Stromversorgung.
Im Fahrerhaus via USB-Kabel

Ziel ist es an einer Stelle die Feuchte zu messen, an einer anderen Stelle die Werte abzurufen.

Ok, habe ich jetzt auch verstanden. :wink:
Meine Empfehlung ist Funk. Die aus meiner Sicht die einfachsten Funkmodule sind die preiswerten 433 MHz Module oder etwas komfortabler, weil ohne Library, die HC-12, auch für 433 MHz. Damit hast du eine gute Reichweite, die einen störungsfreien Betrieb ermöglichen.

... und bitte kein Bluetooth, das macht im echten Leben (ausserhalb von Büros) nur Probleme.

Hallo,

Danke für den Tipp. das werde ich so umsetzen.

Jetzt kommen die ersten Fragen zur Programmierung.
Wie gesagt ich habe nur das Starterkit da und probiere herum.

in einem Code sind zwei markierten Zeilen. Ich denke, dort müsste die Berechnung des Mittelwertes hinein.
Der Mittelwert darf nur über die drei Werte errechnet werden.
Wie muss die Berechnung aussehen?
(val1+val2+val3)/3 = val4 // (val4 =Mittelwert)
oder Mittelwert(val1,val2,val3)

Ich habe seit gestern 7 Onlinebücher über das arithmetische Bilden von Werten gelesen aber nichts wie ich das in “void loop()” einfügen kann.

#include <Arduino.h>
#include <TM1637Display.h> // Module connection pins (Digital Pins)
#define CLK1 4 // Digitaler Verbindungspin 4 an Display1
#define DIO1 5 // Digitaler Verbindungspin 5 an Display1
#define CLK2 6 // Digitaler Verbindungspin 6 an Display2
#define DIO2 7 // Digitaler Verbindungspin 7 an Display2
#define CLK3 8 // Digitaler Verbindungspin 8 an Display3
#define DIO3 9 // Digitaler Verbindungspin 9 an Display3
#define CLK4 10 // Digitaler Verbindungspin 10 an Display4
#define DIO4 11 // Digitaler Verbindungspin 11 an Display4
TM1637Display display1(CLK1, DIO1);  // Zuordnung Anschlüsse zum Display1
TM1637Display display2(CLK2, DIO2);  // Zuordnung Anschlüsse zum Display2
TM1637Display display3(CLK3, DIO3);  // Zuordnung Anschlüsse zum Display3
TM1637Display display4(CLK4, DIO4);  // Zuordnung Anschlüsse zum Display4
int analogPin1 = 0; // Einlesen an AnalogPin1 mit Kommastellen
int val1 = 0; // Variable um Messergebnis zu speichern
int analogPin2 = 1; // Einlesen an AnalogPin1 mit Kommastellen
int val2 = 0; // Variable um Messergebnis zu speichern
int analogPin3 = 2; // Einlesen an AnalogPin1 mit Kommastellen
int val3 = 0; // Variable um Messergebnis zu speichern
void setup()
{
 Serial.begin(9600); // serielle Kommunikation einschalten mit Übertragungsrate 9600baud (max57600)
}
void loop()
{
 delay(2000); // 2,000s Pause
 val1 = analogRead(analogPin1); // Eingang auslesen
 Serial.print(" Wert 01: "); Serial.println(val1); // Messwert über serielle Verbindung senden
 val2 = analogRead(analogPin2); // Eingang auslesen
 Serial.print(" Wert 02: ");Serial.println(val2); // Messwert über serielle Verbindung senden
 val3 = analogRead(analogPin3); // Eingang auslesen
 Serial.print(" Wert 03: ");Serial.println(val3); // Messwert über serielle Verbindung senden
 
[b] [color=red]val4 = analogRead(analogPin3); // Eingang auslesen
 Serial.print(" Mittelwert: ");Serial.println(val4); // Messwert über serielle Verbindung senden[/color][/b]
    int k;
    uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
    uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
    display1.setBrightness(0x0f); //Displayhelligkeit 0f =15=max
    display2.setBrightness(0x0f); //Displayhelligkeit 0f =15=max
    display3.setBrightness(0x0f); //Displayhelligkeit 0f =15=max
    display4.setBrightness(0x0f); //Displayhelligkeit 0f =15=max
    display1.showNumberDec(val1, true); //Schreibe Temperatur als Dezimalzahl auf das Display
    display2.showNumberDec(val2, true); //Schreibe Feuchtigkeit als Dezimalzahl auf das Display
    display3.showNumberDec(val3, true); //Schreibe Feuchtigkeit als Dezimalzahl auf das Display
    display4.showNumberDec(val4, true); //Schreibe Mittelwert als Dezimalzahl auf das Display
}

Danke bis dahin.

Schau dir mal RunningMedian an.
Das ist, was du suchst. Gleitender Mittelwert, oder eben auch der Median.

Hallo
meines Erachtens macht es keinen Sinn drei Werte unmittelbar hintereinander einzulesen, das ist genauso gut wie nur einer. Wenn dann würde ich eine bestimmte Zeit lang messen, mehrere Sekunden , das sind dann eventuell 50-100 Messwerte und den gleitenden Mittelwert daraus bilden.

Heinz

Hi

Wenn Du die Links zu den von Dir gefundenen On-Books noch hast - gerne hier rein :slight_smile: (man wird nicht blöder).

Das 'void' sagt nur aus, daß die Funktion loop() keinen Rückgabewert hat.
Da kannst Du auch byte hin schreiben - dann braucht loop(); nur am Ende ein return, womit dieser Rückgabewert übergeben wird.
Die Library zum runningMedian hatte ich 'damals' hüstel für meine Zwecke umgebastelt.
Dort kann man den Typ der Messwerte global festlegen - das Original geht nur mit INT.
Running Median, angepasst, hier im Forum

MfG