Poti auslesen (von A1)


Bastelseite Display + Antriebe Sensoren C++



Einen Potentiometer (Poti) am Analogen Eingang vom Arduino auszulesen ist recht einfach.

Begnügt man sich jedoch nicht mit herum zappelnden Werten, müssen ein paar Kniffe her!

Poti angeschlossen

Poti angeschlossen

Wer kein OLED-Display hat, kann es getrost weglassen. Am Ende dieser Seite kommt der Sketch einmal ohne Display, dafür mit Serieller Ausgabe und als Zweites mit Display-Ausgabe




Poti mit 10 kΩ an A1


Einen Potentiometer (Poti) am Analogen Eingang vom Arduino auszulesen ist recht einfach.

Begnügt man sich jedoch nicht mit herum zappelnden Werten, müssen ein paar Kniffe her!


Serieller Monitor:


   Auslesen eines Potis:  
---------------------------
16 - 15 - 16 -  = 47
16 - 16 - 16 -  = 48
16 - 16 - 54 -  = 86
35 - 13 - 12 -  = 60
88 - 17 - 16 -  = 121
72 - 16 - 16 -  = 104
16 - 16 - 12 -  = 44
16 - 16 - 63 -  = 95
16 - 19 - 17 -  = 52
55 - 63 - 16 -  = 134
16 - 16 - 16 -  = 48
69 - 16 - 60 -  = 145
15 - 16 - 16 -  = 47
66 - 16 - 16 -  = 98
12 - 13 - 80 -  = 105
33 - 13 - 74 -  = 120
16 - 11 - 16 -  = 43
12 - 17 - 16 -  = 45

Erster Versuch:

Der Potentiometer wurde an einer Außenseite an Minus (GND) und die andere an + 5Volt angeschlossen. Der mittlere Anschluß führte ich an den analogen Eingang A1.

Der analoge Eingang gibt Werte von 0 bis 1023 zurück. Diese wollte ich auslesen.

Die Ausgabe zur Anzeige lief über den Seriellen Monitor. Mich erstaunte nur, dass ohne den Poti zu bewegen sich die Werte ständig änderten.

Der Sketch lief so, dass immer drei Werte ausgelesen und addiert wurden. Wenn diese Summe betrachtet wird, schwanken die Werte von 43 bis 145!

Die einzelnen Werte dagegen pendelten von 12 bis 88! Liegt dies an der Qualität des Potis?


Poti mit 100 kΩ an A1


Einen Potentiometer (Poti) mit 100 kΩ am Analogen Eingang auslesen:


Serieller Monitor:


   Auslesen eines Potis:  
---------------------------
97 - 96 - 97 -  = 290
113 - 97 - 97 -  = 307
97 - 104 - 143 -  = 344
97 - 98 - 106 -  = 301
139 - 98 - 96 -  = 333
97 - 97 - 130 -  = 324
98 - 97 - 97 -  = 292
96 - 97 - 96 -  = 289
122 - 96 - 97 -  = 315
97 - 97 - 146 -  = 340
97 - 98 - 161 -  = 356
166 - 97 - 97 -  = 360
97 - 151 - 164 -  = 412
127 - 98 - 96 -  = 321

Zweiter Versuch:

Wie vorhin auch, wurde der Poti an einer Außenseite an Minus (GND) und die andere an + 5Volt angeschlossen. Der mittlere Anschluß ging an den analogen Eingang A1.

Die Ausgabe zeigte fast das gleiche Ergenis: ohne Bewegen des Potis ändern sich die Werte ständig.

Der Sketch lief so, dass immer drei Werte ausgelesen und addiert wurden. Wenn diese Summe betrachtet wird, schwanken die Werte von 289 bis 412!

Die einzelnen Werte dagegen pendelten von 96 bis 166! Dieses Mal ist es ein älterer Poti aus der Bastelkiste......


Poti mit 470 kΩ an A1


Einen Potentiometer (Poti) mit 470 kΩ am Analogen Eingang auslesen:


Serieller Monitor:


   Auslesen eines Potis:  
---------------------------
634 - 644 - 633 -  = 1911 / 637
638 - 637 - 633 -  = 1908 / 636
633 - 648 - 633 -  = 1914 / 638
634 - 633 - 640 -  = 1907 / 636
633 - 639 - 633 -  = 1905 / 635
633 - 633 - 633 -  = 1899 / 633
650 - 644 - 652 -  = 1946 / 649
647 - 633 - 633 -  = 1913 / 638
633 - 633 - 633 -  = 1899 / 633
634 - 634 - 634 -  = 1902 / 634
633 - 638 - 633 -  = 1904 / 635
654 - 635 - 654 -  = 1943 / 648
633 - 633 - 633 -  = 1899 / 633
633 - 633 - 633 -  = 1899 / 633
633 - 634 - 633 -  = 1900 / 633
633 - 633 - 634 -  = 1900 / 633
644 - 637 - 633 -  = 1914 / 638
636 - 633 - 634 -  = 1903 / 634
633 - 633 - 634 -  = 1900 / 633
633 - 633 - 651 -  = 1917 / 639
653 - 655 - 634 -  = 1942 / 647
633 - 633 - 633 -  = 1899 / 633
633 - 633 - 632 -  = 1898 / 633
634 - 639 - 634 -  = 1907 / 636
634 - 633 - 654 -  = 1921 / 640

Dritter Versuch:

Wie vorhin auch, wurde der Poti an einer Außenseite an Minus (GND) und die andere an + 5Volt angeschlossen. Der mittlere Anschluß ging an den analogen Eingang A1.

Die Ausgabe zeigte fast das gleiche Ergenis: ohne Bewegen des Potis ändern sich die Werte weiterhin.

Der Sketch lief so, dass immer drei Werte ausgelesen und addiert wurden. Wenn diese Summe betrachtet wird, schwanken die Werte nur noch von 1898 bis 1946!

Die einzelnen Werte dagegen pendelten auch nur von 633 bis 655! Dieses Mal ist es auch ein älterer Poti aus der Bastelkiste......



Bei drei Messungen pro Ausgabenzeile ( 634 - 644 - 633 - ) habe ich diese addiert (1911) und dann den Querschnitt ( /637) bestimmt.
Bei den letzten 25 Berechnungen kam als Ergebnis der Gesamtaddition der Wert von 15.917 heraus. Diesen wiederum durch die Anzahl der Messungen (25) geteilt ergibt einen Querschnitt ∅ von 637.
Geht man nun alle Werte mit dem ∅-Wert von 637 durch, stellt man sehr schnell fest, dass die Differenzen nun sehr gering sind.



Ergebnis meiner Versuche:


Nach einigen Versuchen, auch mit anderen Potis, kam ich zu dem Ergebnis, daß ein Poti mit höheren Werten genauere Ergebnisse liefert.
Deshalb ist es für mich nicht nachvollziehbar, warum in fast allen Schaltungen meist ein Poti mit nur 10 kΩ verwendet wird. Die Werte dieser Schaltungen wackeln doch wie ein Lämmerschwanz hin und her!



Sketch 1a: Serieller Monitor


Kopiere einfach den Sketch und probiere ihn aus!
Schalte doch einfach mal in der IDE statt Serielle Ausgabe auf den Seriellen Plotter!

Öffnet den Sketch in einem eigenen TAB:  poti-lesen-1a.ino 


/*  poti-lesen-1a.ino
 *
 *  Auslesen eines Potentiometers
 *  mit 10 & 100 & 470 kOhm an A1
 *
 *  Download: https://www.brixelweb.de
*/

#include <Wire.h>

int potianschluss = A1;
int potiwert = 0;
int sammelwert = 0;
int wert2 = 0;
int ausgabe = 0;

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

  Serial.println("   Auslesen eines Potis:  ");
  Serial.println("---------------------------");

  delay(2000);
}

void loop() {
  sammelwert = 0;
  Serial.println("================");
  for (int x = 0; x < 3; x++)
  {
    potiwert = analogRead(potianschluss);
    Serial.print(potiwert);
    Serial.print(" - ");
    sammelwert = sammelwert + potiwert;
  }
  Serial.print(" = ");
  Serial.println(sammelwert);
  wert2 = sammelwert / 3;
  Serial.print("Wert2 / X: ");
  Serial.println(wert2);
  
  //ausgabe = wert2 / 4; // oder folgende Zeile verwenden:
  ausgabe = map(wert2, 0, 1023, 0, 255);

  Serial.print(potiwert);
  Serial.print(" - ");
  Serial.println(ausgabe);

  delay(5); // kurze Pause zum Datenverarbeiten

}



Sketch 1b: OLED-Display


Kopiere einfach den Sketch und probiere ihn aus!
Dieser Sketch ist für ein OLED-Display und gleichzeitig serielle Ausgabe.

Öffnet den Sketch in einem eigenen TAB:  poti-lesen-1b.ino 


/*  poti-lesen-1b.ino
 *
    OLED Display mit I2C 128x64px
    Potentiometer 10/100/470 kohm lin
    OLED:   SDA an A4  und SCL an A5 / VCC an +5V und GND an GND
    Poti:   Links an GND, Mitte an A1, rechts an +5V
 *
 *  Download: https://www.brixelweb.de
*/

#include <Wire.h>

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 // not used / nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);

int potianschluss = A1;
int potiwert = 0;
int sammelwert = 0;
int wert2 = 0;
int ausgabe = 0;

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Aktivierung des HR-SC04 mit Adresse 0x3C
  display.clearDisplay();

  Serial.begin(9600);

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("--------------------");
  display.println("Auslesen eines Potis");
  display.println("--------------------");
  display.display();
  Serial.println("   Auslesen eines Potis:  ");
  Serial.println("---------------------------");

  delay(2000);
  display.setTextColor(WHITE);
  display.setTextSize(2);
}

void loop() {
  sammelwert = 0;
  Serial.println("================");
  for (int x = 0; x < 3; x++)
  {
    potiwert = analogRead(potianschluss);
    Serial.print(potiwert);
    Serial.print(" - ");
    sammelwert = sammelwert + potiwert;
  }
  Serial.print(" = ");
  Serial.println(sammelwert);
  wert2 = sammelwert / 3;
  Serial.print("Wert2 / X: ");
  Serial.println(wert2);
  
  //ausgabe = wert2 / 4; // oder folgende Zeile verwenden:
  ausgabe = map(wert2, 0, 1023, 0, 255);

  display.clearDisplay();
  display.setCursor(0, 0);
  display.println("---------");
  display.println("Potiwert:");
  display.println(potiwert);
  display.println(ausgabe);
  display.display();

  Serial.print(potiwert);
  Serial.print(" - ");
  Serial.println(ausgabe);

  delay(5); // kurze Pause zum Datenverarbeiten

}


Übersicht Seiten Anfang Poti #2 lesen


brixelweb.de