TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
dass viele Sensoren aus der physikalischen Messgrösse eine (analoge) Spannung erzeugen, die man zur Verarbeitung mit dem Computer digitalisieren muss. Dies erfolgt in einem weit verbreiteten elektronischen Baustein, einem Analog-Digital-Converter (ADC). |
MUSTERBEISPIEL |
Obschon der ESP32 einen eingebauten ADC hat, verwendest du hier externe Breakout-Boards mit einer I2C-Schnittstelle. Damit ist sichergestellt, dass du selbst bei unsachgemässem Vorgehen nur den externen ADC und nicht die Oxocard beschädigst. Beachte, dass die maximale Eingangsspannung aller hier verwendeten ADC die Betriebsspannung von ca. 3.3V nicht übersteigen darf. ADS1015/ADS1115
Zur Verwendung mit der Oxocard empfiehlt sich der Anschluss eines Grove-Kabels für die I2C-Schnittstelle. Es ist zweckmässig, Steckbuchsen mit GND- und einer VCC-Reihe einzulöten, damit manam Eingang Jumper-Kabel verwenden kann. Ein mögliches Vorgehen ist das Folgende:
Zum Test verwendest du am besten ein Potentiometer mit einem Gesamtwiderstand von ungefähr 10 kOhm in folgender Schaltung. Damit bist du sicher, dass das Eingangssignal im erlaubten Bereich liegt.
Im folgenden Programm verwendest du den ADC ADS1015 mit dem Treiber ads1x15.py. Die Methode read(i) liefert dir den Messwert des Kanals i (i = 0..3), den du noch umrechnen musst. Die Spannung in Millivolt auf Kanal 0 zeigst du mit je 2 Ziffern auf dem LED-Display an. Programm: from time import sleep from ads1x15 import ADS1015 from oxocard import * def show(): millivolt = int(1000 * voltage) high = millivolt // 100 display(high) sleep(2) low = "%02d" % (millivolt % 100) display(low) sleep(2) display("::") sleep(2) adc = ADS1015() channel = 0 while True: value = adc.read(channel) voltage = value / 2024 * 4.096 show() Für den ADS1115 musst du die Klasse ADS1115 importieren. Für die Umrechnung gilt voltage = value / 32768 * 4.096 |
ADC121C021 |
Scheust du Lötarbeiten, so kannst du das ADC-Board von Seed mit einem Grove-Stecker für die Verbindung mit dem I2C-Hub verwenden, wo du das Eingangssignal auf dem standardisierten "analogen" Grove-Stecker anlegen kannst. Das Programm verwendet den Treiber für den ADC121C021 und schreibt die Werte im Bereich 0..2047 für den Spannungsbereich von ungefähr 0..3V aus. Hier wird auf der Eingangsseite ein Potentiometer von Seed mit dem analogen Grove-Anschluss verwendet. Programm: from time import sleep from adc121c021 import ADC121C021 from oxocard import * def show(): display(v // 100) sleep(2) display("%02d" %(v % 100)) sleep(2) display("::") sleep(2) adc = ADC121C021() while True: v = adc.getValue() show() |
MERKE DIR... |
Analoge Spannungen müssen zuerst mit einem Analog-Digital-Converter digitalisiert werden, bevor sie vom Mikrocontroller eingelesen werden können. Dabei werden üblicherweise ADCs mit einer Auflösung von 8, 10, 12 oder 16 bit verwendet. Damit ist der kleinste Spannungsschritt festgelegt, den man noch messen kann, beispielsweise für eine maximale Eingangsspannung von 3.3V bei einem 8 bit-ADC die Spannung 3.3V / 256 = 12.9 mV |
ZUM SELBST LÖSEN |
|