Einheit der Werte des seriellen Monitors

Hallo liebe Community,

ich habe für meine Arduino Schaltung ein Programm ergänzt. Die Bibliothek "Capacitive Sensor" habe ich aus dem Internet heruntergeladen.
Mein Projekt soll folgendes machen: Beim Berühren einer metallischen Oberfläche soll der serielle Monitor mir dies als Wert anzeigen. Das macht er auch. Die Werte befinden sich beim Nichtberühren der Oberfläche bei ca. 50 und beim Berühren auf ca. 8000. Nun ist meine Frage: Wo finde ich im Programm, welche Einheit(Ohm, Watt, Volt usw.) dieser Wert besitzt? Oder weiß jemand welcher Einheit das nur sein kann?

Vielen Dank im Voraus! :slight_smile:

Der wird wohl überhaupt keine Einheit haben. Aber solange Du den Sketch geheim hälst, kann da keiner etwas Sinnvolles dazu sagen.

Gruß Tommy

1 Like

Hallo tommy, leider dürfen neue Benutzer keine Dateien hochladen.
Ich habe es in meiner Dropbox hochgeladen. Link: Dropbox - sketch_31_05_2021_Final.ino - Simplify your life

Steht in der Dokumentation: Arduino Playground - CapacitiveSensor

Das hängt auch von der Anzahl der Messzyklen ab:

2 Likes

Du darfst aber einen Sketch hier direkt einfügen.
In der IDE rechte Maustaste auf deinen Sketch klicken und für Forum kopieren klicken. Dann hier einfügen.

1 Like
#include <CapacitiveSensor.h>

CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 10 megohm resistor between pins 4 & 2, pin 2 is sensor pin, add wire, foil
CapacitiveSensor cs_7_6 = CapacitiveSensor(7,6);
CapacitiveSensor cs_9_8 = CapacitiveSensor(9,8);
 int LEDPin1 = 13;
 int LEDPin2 = 12;
 int LEDPin3 = 10;
 
void setup(){

  //cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example 
  Serial.begin(9600);
  //pinMode(LEDPin,OUTPUT);
}

void loop(){

  //long start = millis();

  long total1 = cs_4_2.capacitiveSensor(30);

  //Serial.print(millis() - start); // check on performance in milliseconds

  //Serial.print("\t"); // tab character for debug window spacing

  Serial.println(total1); // print sensor output 1

  delay(10); // arbitrary delay to limit data to serial port

  if (total1>=1000)
  {
    analogWrite(LEDPin1,150);
  }
  if (total1<1000)
  {
    analogWrite(LEDPin1,0);
  }

  delay(1);

  //long total2 = cs_7_6.capacitiveSensor(30);
  //Serial.println(total2);
  
  //delay(10);

  //if (total2>=1000)
 // {
    //analogWrite(LEDPin2,150);
  //}
  //if (total2<1000)
  //{
    //analogWrite(LEDPin2,0);
  //}

 // delay(1);
  
 // long total3 = cs_9_8.capacitiveSensor(30);
  //Serial.println(total3);
  
  //delay(10);

  //if (total3>=1000)
  //{
  //  analogWrite(LEDPin3,150);
 // }
 // if (total3<1000)
 // {
  //  analogWrite(LEDPin3,0);
  //}

  //delay(1);
}

Genau die Library habe ich benutzt. Das ganze muss doch aber eine Einheit besitzen, oder nicht? :confounded:

Nein. Wieso? Da wird lediglich die Zeit zwischen zwei Zustandswechseln gezählt. Selbst wenn das irgendeine Einheit hätte wäre es nutzlos. Die Was da rauskommt hängt sehr stark vom Aufbau ab.

1 Like

Da sich hier ein Zustand ändert habe ich gedacht, dass es eine Einheit besitzen muss. Die berührte Fläche ist ein kapazitiver Kondensator und es wird erkannt, wenn ein Finger draufliegt. Der Zustand hat einen Wert der eine Einheit besitzen sollte, sonst ergibt das keinen Sinn. Ich habe jetzt ein bisschen weiter recherchiert, ich denke es handelt sich um die Einheit "Farad", da dieser die Einheit eines Kondensators ist.
image

Es geht doch gar nicht darum irgendwelche absoluten Werte zu messen. Sondern man will Berührungen oder Näherungen detektieren. Dafür braucht man keine richtigen Werte mit Einheiten. Außerdem hängt das eben vom verwendeten Widerstand und der Kapazität der Sensorfläche ab. Man macht die Sensorfläche etwas größer und schon kommt was anderes raus, obwohl es an der Funktion des Aufbaus nichts ändert.

Wenn etwas gemessen wird dann ist es vielleicht eher die Ladung und nicht die Kapazität. Aber das auch nicht als absoluten, realitätsbezogenen Wert. Das ist einfach kein Kapazitätsmessgerät wo man Kondensatoren reinsteckt und deren Wert angezeigt bekommt. Die sind etwas komplizierter.

1 Like

Es werden Schleifendurchläufe gezählt.

Warum schaust du nicht selber in die Lib...
Liegt ja schließlich auch auf deinem Rechner.

1 Like

Hey combie,
danke für deine Antwort. Leider kann ich nur die Grundlagen der Programmierung und habe das bereits getan, bevor ich hier nachgefragt habe. Die Library ist aber leider etwas zu kompliziert für mich :frowning: also ist der Wert die Anzahl der Schleifendurchläufe?

Mit freundlichen Grüßen
Strawhat

Dazu hat Dir @Serenifly schon Hilfestellung gegegeben.

DeepL Translate: The world's most accurate translator.

In der Hoffnung, das das morgen noch genauso ist wie heute.. : Der Letzte Satz ist wichtig.

1 Like

Da gehe ich mal nicht weiter drauf ein.....

Mir scheint, du willst keine kapazitiven Tasten auswerten, sondern Kondensatoren ausmessen. Das ist grundsätzlich schon ok und auch machbar.
Der Transistortester macht es vor.

1 Like

Bei einer Berührungstaste (Touch) ist es wichtig daß Du die zwei Zustände "Kein Finger" - "Finger Da" erkennst. Ob das dann 3 Äpfeln, 5 Birnen oder 0,5 Wassermelonen entspricht ist nicht wichtig.

Grüße Uwe

1 Like

Hallo,
wenn Du magst kannst Du dem Messwert ja die Einheit "ME= "Maschinen-Einheiten geben oder RW Rohwert. Wenn Du eine analoge Spannung oder Strom misst bekommst Du ja zunächst auch einen Messwert der eigentlich erst mal keine Einheiten hat. Erst unter Berücksichtigung der Hardware , Spannungteiler, Referenzspannung, Shunt, usw. kann man eine Wert berechnen der einer physikalischen Größe und Einheit entspricht.
Oder stell dir einen "Strommesser" vor, der einen hat 3A Nennwert der andere 30A . Beide Messwerte gehen auf der digitale Seite von 0-1023 "ME" . Ohne das Du weisst welcher Sensor angeschlossen ist wirst Du nicht herausbekommen wie hoch der tatsächliche Strom ist. Wenn Du allerdings einen höher auflösenden A/D Wandler verwendest z.B 12Bit liefern die beiden Sensoren bei gleichen Strömen Werte von 0-4095. Damit hat die "Maschine" andere Einheiten. Es macht also Sinn, und wird tatsächlich auch so gehandhabt, von Maschinen-Einheiten zu sprechen.
Heinz

1 Like

Also ist die Einheit "Schleifendurchläufe". Dass diese nur näherungsweise in etwas anderes umrechenbar ( z.B. in µs) empirisch und fehlerbehaftet ist, ist für deine Fragestellung egal.

@ strawhat61
Wieso diese Frage?
Arduino Playground - CapacitiveSensor erklährt doch wie die Bibliothek funktioniert.

How it works

The capacitiveSensor method toggles a microcontroller send pin to a new state and then waits for the receive pin to change to the same state as the send pin. A variable is incremented inside a while loop to time the receive pin's state change. The method then reports the variable's value, which is in arbitrary units.

Watch a short video demonstration (YouTube)

The physical setup includes a medium to high value (100 kilohm - 50 megohm) resistor between the send pin and the receive (sensor) pin. The receive pin is the sensor terminal. A wire connected to this pin with a piece of foil at the end makes a good sensor. For many applications, a more useful range of values is obtained if the sensor is covered with paper, plastic, or another insulating material, so that users do not actually touch the metal foil. Research has shown that a small capacitor (100 pF) or so from sensor pin to ground improves stability and repeatability.

When the send pin changes state, it will eventually change the state of the receive pin. The delay between the send pin changing and the receive pin changing is determined by an RC time constant, defined by R * C, where R is the value of the resistor and C is the capacitance at the receive pin, plus any other capacitance (e.g. human body interaction) present at the sensor (receive) pin. Adding small capacitor (20 - 400 pF) in parallel with the body capacitance, is highly desirable too, as it stabilizes the sensed readings.

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.