Arduino gibt Sensordaten (2 Sensoren) falsch aus

Hallo,

ich möchte 2 elektrostatische Sensoren nutzen.

Dafür habe ich je einen 2n3819 FET gewählt.
An den Gateanschluss kommt die Antenne, an Source kommt über einen Widerstand die 5V Spannung und an den Drain habe ich einen Arduino Analog-Pin angeschlossen. Im Internet habe ich auch eine Variante gefunden, an der an den Drain der GND kommt und an den Source Pin der analoge Eingangspin.
Funktioniert auf den ersten Blick gleich (im Test)

Wenn ich die Sensoren einzeln benutzte funktioniert alles problemlos.

DAS PROBLEM:
Wenn ich beide Sensoren zusammen betreiben möchte (an zwei unterschiedlichen analogen Eingängen, an einem Arduino Nano / Uno) und ich einen Sensor, mit einem aufgeladenen Gegenstand teste, wird mir zu Beginn an beiden (über den seriellen Monitor) der gleiche Wert bzw. ein ähnlich hoher Wert ausgegeben. In der Regel legt es sich nach kurzer Zeit und es wird nur noch einer, vom betroffenen Sensor, ausgegeben aber das passiert jedes mal.

Alternativ habe ich es über 2 Microcontroller versucht, und diese via I2C miteinander verbunden. Dabei tritt das selbe Problem auf.

Das habe ich getestet, da ich in der Vergangenheit über den internen Kondensator aufmerksam gemacht worden bin und das es zu Problemen bezüglich des Eingang-Multiplexing kommen kann.

I2C mit PullUp Widerstand
Getestet zwischen Nano und Uno, Nano und Pro Micro, Nano und Attiny85.

Auch getestet wurde beim 2in1, dass ich nur einen analogen Eingang aktiviere und den anderen als Ausgang definiere usw. Leider half das nicht.

Hier der 2in1 Code

int wert = 0;
byte wert_neu = 0;
int wert2 = 0;
byte wert_neu2 = 0;
uint8_t begrenzung = 190;         // da das Signal leicht und im Ruhezustand am schwanken ist

void setup() {
Serial.begin(9600);

   
}

void loop() {

  wert = analogRead(A0); 
  
  if(wert < begrenzung){         // soll die Schwankungen ausblenden
    wert = 0;
  }

  wert_neu = map(wert, 0, (1023-begrenzung), 0, 255);         // map wegen einer 1 Byte I2C Datenübertragung
  
  Serial.print("0: "); 
  Serial.println(wert_neu); 
  delay(100);




  wert2 = analogRead(A3); 
  
  if(wert2 < begrenzung){         // soll die Schwankungen ausblenden
    wert2 = 0;
  }

  wert_neu2 = map(wert2, 0, (1023-begrenzung), 0, 255);         // map wegen einer 1 Byte I2C Datenübertragung
  
  Serial.print("3: "); 
  Serial.println(wert_neu2); 
  delay(100);
  
}

Hier der Attiny85 Slave-Sende-Code

#include <TinyWire.h>

#define I2C_SLAVE_ADDRESS 12

int wert = 0;
byte wert_neu = 0;
uint8_t begrenzung = 190;

void setup()
{
  TinyWire.begin( I2C_SLAVE_ADDRESS );
  TinyWire.onRequest( onI2CRequest );
}

void loop()
{
    wert = analogRead(A2); 
  
  if(wert < begrenzung){
    wert = 0;
  }

  wert_neu = map(wert, 0, (1023-begrenzung), 0, 255);
  
  delay(50);
}

void onI2CRequest() {
  TinyWire.send(wert_neu);
}

Übertragung funktioniert jedoch bekommt man stets die Doppelausgabe

Mir ist aufgefallen, dass es wohl dann passiert, dass der Wert doppelt ausgegeben wird, wenn ein zu hohes elektrostatisches Signal am Sensor erkannt wird.

Wenn es abschwächt, wird nur ein Wert angezeigt

an Source kommt über einen Widerstand die 5V Spannung

Wie groß ist der Widerstand?

Da für das Laden des internen Sample and Hold Kondensators im ADC ein gewisser Strom nötig ist, muß die Spannnungsquelle relativ niederohmig sein.

Wenn die Spannungsquelle zu hochohmig ist (wir reden von ca 10kOhm) kann der S&H Kondensator nicht auf Endwert geladen werden.

Abhilfen:

  • Mehrere analogRead() des gleichen Pins hintereinander und nur die letzte Messung nehmen.
  • einen 0,1µF Kondensator zwischen Analogeingeng und Masse. (als TIefbassfilter verringert die Frequenz der Messung)
  • eine OpAmp als Spannungsfolger.
  • Widerstand am Fet kleiner wählen (weiß nicht ob das möglich ist, Kenne die Schaltung nicht).

Grüße Uwe

Hi Uwe, danke für deine Rückmeldung.

Ich habe es mit einen Vorwiderstand von 10k Ohm und 68k Ohm getestet also von +5V über den Vorwiderstand auf den analogen Eingang und Source // an Drain war GND bzw. in einem anderen Test von +5V über den Vorwiderstand auf Source // und der analoge Eingang war an Drain (ohne GND)

Ich weiß nicht wieso die Rv Abweichung so extrem ist aber laut einer Anleitung aus dem Internet habe ich nen Vorwiderstand über ein Poti ausgetestet und so lange eingestellt, bis es ein sehr geringes "Grundrauschen" gab also ein geringer Wert der durchkam und am analogen Eingang angezeigt wurde. Dadurch wird die Empfindlichkeit eingestellt und aktuell habe ich bei 10k Ohm eine identisches "Grundrauschen" als vorher mit 68k

Hier ist der Aufbau von der Anleitung:

Arduino Electrometer/Capacitive Object Sensor

Um weitere externe Probleme auszuschließen habe ich mal einen 6,8M Ohm Widerstand zwischen dem analogen Eingang und GND geschaltet. Eine Verbesserung konnte ich nicht wirklich feststellen.

Ich meine auch, dass die Probleme an einem Uno deutlich geringer als bei einem Nano oder Pro Micro sind.

Vielleicht was noch zu erwähnen ist:

Mir ist auch folgendes aufgefallen:

Der Eingang hat jetzt einen Grundwert von ca. 9 bis 12. Nach eine kurzen Weile geht dieser Wert einfach schrittweise hoch auf 20/50 bis 160 und dann wieder runter auf den Grundwert. Darum habe ich die Begrenzung in den Quellcode eingebaut. Das kommt wie eine Welle, steigt gleichmäßig an und flach wieder ab. Dann ist wieder eine Pause und irgendwann kommt diese Welle wieder.

Es ist verrückt!!!!

Ich habe es auch mal mit einem MPF102 FET ausprobiert. Dabei habe ich den gleichen Fehler. Somit kann es doch dann nur am Arduino liegen oder?

Auch interessant ist, dass ich in den ersten Versuchsaufbauten keine Probleme mit diesem Fehler hatte.

Ich bin grad irgendwie ratlos da es eine lange Zeit den Fehler nicht gab. Habe es auch mit verschiedenen 2n3819 und MPF102 getestet um defekte Bauteile auszuschließen.

Bei der MPF102 Variante wird ohne Rv gearbeitet!

Ich habe mit dieser Schaltung keine Erfahrung, vermute allerdings Störungen durch externe Einstrahlungen oder unzureichender bzw. schlechter Masseverbindug (GND).

Hi Uwe, danke für deine Rückmeldung.

Irgendwo muss da wirklich sowas wie nen Masse oder Verbindungsfehler sein.

Ein 100nF Keramik-Kondensator half leider nicht. Dadurch bekomme ich dauerhaft hohe "falsche" Werte angezeigt, also immer was zwischen 170 und 220. Ohne ist es wieder so zwischen 10 und 20.

Was bedeutet das mit dem OpAmp als Spannungsfolger?

Viele Grüße

Ich habe es mit einen Vorwiderstand von 10k Ohm und 68k Ohm getestet also von +5V über den Vorwiderstand auf den analogen Eingang und Source // an Drain war GND bzw. in einem anderen Test von +5V über den Vorwiderstand auf Source // und der analoge Eingang war an Drain (ohne GND)

Die zweite Variante ist sicher falsch. Dem Analogen Eingang juckt es wenig wenn der Widerstand zwischen Analogpin und +5V 10 kOhm oder größer ist.

Ich kenne mich bei JFET wenig aus. Wäre es ein MOSFET würde ich Dir sagen daß Du Drain und Source vertauscht hast. Beim JFET weiß ich das nicht. Es wird sicher ein Elektroniker hier im Forum sein, der das klären kann.
68 kOhm als Pullupwiderstand für den JFET ist sicher zu groß um den Analog-Eingang in einem Meßzyklus richtig zu laden.

Um weitere externe Probleme auszuschließen habe ich mal einen 6,8M Ohm Widerstand zwischen dem analogen Eingang und GND geschaltet. Eine Verbesserung konnte ich nicht wirklich feststellen.

Erwarte ich mir bei so hohen Widerstandswerten auch nicht.

Der Eingang hat jetzt einen Grundwert von ca. 9 bis 12. Nach eine kurzen Weile geht dieser Wert einfach schrittweise hoch auf 20/50 bis 160 und dann wieder runter auf den Grundwert. Darum habe ich die Begrenzung in den Quellcode eingebaut. Das kommt wie eine Welle, steigt gleichmäßig an und flach wieder ab. Dann ist wieder eine Pause und irgendwann kommt diese Welle wieder.

Das können Symtome einer zu hochohmigen Signalquelle am Analogeingang sein.

Wenn Du einen Touchsensor haben willst dann nimm eine Touchsensor Hardware wie zB den TTP223 oder ähnliche.

Grüße Uwe

Hi Uwe.

Dann werde ich mal weiter testen.

Einen Touchsensor benötige ich nicht sonder ich möchte die elektrostatische Energie messen.

WAMBO:
Irgendwo muss da wirklich sowas wie nen Masse oder Verbindungsfehler sein.

Dann würde ich einfach mal um den Kontakt großflächig Masse einsetzen.
Kupferfolie z.B., die gibt es als selbstklebende Streifen.