Wie messen ob Sensor dran/ok?

Ich hab bei meiner Pflanzenüberwachung vorher ja Nägel genommen und den Widerstand gemessen.
Da hatte ich 1k gegen Masse.

Dann konnte ich sehen, wenn der ADC 0V hat ist der Sensor ab oder kaputt.

Nun probiere ich gerade mit Kapazitiven Sensoren rum (China-Teile, aber vorerst manuell nachgebaut).

Da hab ich dann aber das Problem, dass der Messwert irgendwo in der Mitte liegt.
Sobald ich aber 10k pullup oder down an den Messeingang packe gibt der mir keine Werte mehr, geht also nicht.

Wenn er ab wäre (also theoretisch kaputt), hängt der ADC in der Luft und gibt mir Zufallswerte die aber im selben Bereich liegen wie normal die Messwerte.

Daher, wie kann man das machen, dass man rausfinden kann ob ein funktionierender Sensor dran hängt?

Das hätte ich erstens gerne um Überschwemmungen zu vermeiden (das geht aber noch anders)
und zweitens um in meiner nächsten Version wo man beliebig viele Sensoren anschließen können soll, zu wissen, wo nun wirklich einer angeschlossen wurde.

Was gibts da für Möglichkeiten?

Link zum Sensor?

Kannst du nicht einfach messen wie schnell sich ein Wert ändert? Wenn es ungewöhnlich schnell geht könntest du darauf reagieren. Musst nur drauf achten die Messung neu zu starten wenn gegossen wurde.
Oder halt zwei Sensoren pro Pflanze nehmen uns vergleichen.

Gruß

Daher, wie kann man das machen, dass man rausfinden kann ob ein funktionierender Sensor dran hängt?

In der Technik/Industrie verwendet man gerne die 4-20mA Schnittstelle für Sensoren.

kleiner 4mA Unterbrechung
größer 20mA Kurzschluss
Dazwischen gültige Werte.

Du könntest den Sensor an z.B. A0 anschließen.
Und A1 auf GND klemmen
Oder den Multiplexer auf GND richten

Dann erst GND und danach den Sensor messen.
Dann hat der Sample und Hold Kondensator keine Zeit sich auf einen “Mittelwert” aufzuladen.

combie:
In der Technik/Industrie verwendet man gerne die 4-20mA Schnittstelle für Sensoren.

kleiner 4mA Unterbrechung
größer 20mA Kurzschluss
Dazwischen gültige Werte.

Du könntest den Sensor an z.B. A0 anschließen.
Und A1 auf GND klemmen
Oder den Multiplexer auf GND richten

Dann erst GND und danach den Sensor messen.
Dann hat der Sample und Hold Kondensator keine Zeit sich auf einen "Mittelwert" aufladen.

Ok, aber da verstehe ich nicht was mirdas bringt, wenn er sich nicht auflädt. Meinst Du wenn dann einer dran hängt hab ich dann das Signal und wenn keiner dran hängt ist der Wert niedrig weil der Kondensator leer?

Du kannst mal den Widerstand vom Analogeingang auf Masse erhöhen (vielleicht 1 MOhm). Das sollte die Spannungsquelle abkönnen. Wenn Du dann einen Drahtbruch hast, müsste der Wert auf 0 V zurückgehen.

Um die Funktion zu überprüfen:
Wenn du das Teil nachgebaut hast, dann hast du doch bestimmt einen Schaltplan.

Ich vermute mal da schwingt was. Wenn der Boden nass ist verändert sich die Kapazität und damit der Schwingkreis. Du könntest einen (sehr) kleinen Kondensator parallel zu den "Boden-Platten" schalten und mal schauen ob sich der Ausgang in die gleiche Richtung ändert wie bei erhöhter Bodenfeuchte. Nun hast du einen bekannten Offset, den du für deinen Messwert rausrechnen kannst. Wenn der Offset nicht da ist, stimmt wes nicht.

Meinst Du wenn dann einer dran hängt hab ich dann das Signal und wenn keiner dran hängt ist der Wert niedrig weil der Kondensator leer?

Korrekt.

Vielen Dank, werds mal testen.
Kann man den ADC nicht vielleicht auch auf eine interne GND Referenz leiten? Gibts sowas? Ich brauche meine Pins nämlich eigentlich.

Kann man den ADC nicht vielleicht auch auf eine interne GND Referenz leiten? Gibts sowas?

Ich sagte schon:

Oder den Multiplexer auf GND richten

Leider kann analogRead() das nicht.

Also eine Lib beschaffen, welche das kann, oder selber tun.


Ob es dir so reicht, darfst du natürlich selber entscheiden.

#include <Streaming.h> // findest du schon ...
#include <CombieAdc.h>


Combie::Adc adc;

void setup() 
{
 Serial.begin(9600);
 Serial.println("Start");

 adc  .enable()
      .setClockDivisor(Combie::Adc::DIV_128)
      .setReference(Combie::Adc::REF_VCC); 
}

void loop() 
{
  Serial << "Messung GND: " << adc(Combie::Adc::MUX_GND)  << endl
         << "Messung A0 : " << adc(Combie::Adc::MUX_ADC0) << endl
         << "---" << endl;
  delay(1000);
}

CombieAdc.zip (11.3 KB)

Ich habs mit Pin auf GND getestet, dadurch geht er aus dem Bereich in dem die Messwerte liegen. Geht also.
Das mit dem Multiplexer hab ich wohl falsch verstanden. Ich dachte Du meinst ich soll einen an den Eingang hängen. Scheinbar meinst Du aber einen internen?
Damit kenne ich mich bisher nicht aus, muss ich mich dann wohl mit beschäftigen.

Hi

Du KANNST z.B. A1 auf GND legen und dann den analogRead(A1) ausführen.
Dadurch wird intern auf den Pin A1 umgeschaltet, Der ja auf GND liegt - somit wird der S&H-Kondensator entladen, Du misst 0 und fertig.
Die Messung danach (analogRead(A0):wink: fängt dann mit einem leeren S&H-Kondensator an und Du holst Dir keinen MischMasch in die Messung.
Also: Ja, geht auch und ist der Normalfall, da der Arduino von Haus aus nicht auf GND intern umschalten kann - der AVR Das aber bietet und combie Das halt nutzt.

MfG

OtmarK:
Du kannst mal den Widerstand vom Analogeingang auf Masse erhöhen (vielleicht 1 MOhm). Das sollte die Spannungsquelle abkönnen. Wenn Du dann einen Drahtbruch hast, müsste der Wert auf 0 V zurückgehen.

Das hatte ich auch vermutet, aber da das bei 10k gleich auf Null ging, da nur impulse über nen 10k auf den ADC gegeben werden, muss ich mit dem Pulldown vermutlich ins unendliche gehen und habs gleich verworfen.

OtmarK:
Um die Funktion zu überprüfen:
Wenn du das Teil nachgebaut hast, dann hast du doch bestimmt einen Schaltplan.

Ja, ist die Schaltung vom Capacitive Soil Moisture Sensor V1.2 die ich nachgebaut hatte.
Hätte ich mir allerdings schenken können weil die Teile aus China zu meiner Verblüffung nach 1,5 Wochen da waren heute. Geben übrigens exakt die Werte wie meine selbstgebauten...
Den Schaltplan hat Andreas Spieß mal in seinem Video gepostet (#207 Why most Arduino Soil Moisture Sensors suck (incl. solution) - YouTube).
Ich hab den abgewandelt, weil seine Schaltung mit dem alten NE555 nicht geht und das war der einzige den ich liegen hatte, musste statt 1,6k 3.3k nehmen, damit die Frequenz niedriger ist. Des weiteren hab ich nen Tiefpass Filter eingebaut um Störungen von VCC durch den 555 zu verhindern.

OtmarK:
Ich vermute mal da schwingt was.

Ja klar, das ist ja die Funktionsweise eines Kapazitiven Sensors.

postmaster-ino:
Hi

Du KANNST z.B. A1 auf GND legen und dann den analogRead(A1) ausführen.
Dadurch wird intern auf den Pin A1 umgeschaltet, Der ja auf GND liegt - somit wird der S&H-Kondensator entladen, Du misst 0 und fertig.
Die Messung danach (analogRead(A0):wink: fängt dann mit einem leeren S&H-Kondensator an und Du holst Dir keinen MischMasch in die Messung.
Also: Ja, geht auch und ist der Normalfall, da der Arduino von Haus aus nicht auf GND intern umschalten kann - der AVR Das aber bietet und combie Das halt nutzt.

MfG

Das hatten wir ja schon, und im Post über Dir hatte ich geschrieben, dass ich es getestet hatte und es geht. Allerdings möchte ich das intern machen, da ich sonst nen Pin brauche.

Scheinbar meinst Du aber einen internen?

Ja, ich meine "den" internen.