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!
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
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!
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
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?
Einen Potentiometer (Poti) mit 100 kΩ am Analogen Eingang auslesen:
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
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......
Einen Potentiometer (Poti) mit 470 kΩ am Analogen Eingang auslesen:
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
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.
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!
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 }
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 }