Raspberry Pi Pico: Experimente mit ADC

ADC bedeutet Analog-Digital-Converter bzw. Analog-Digital-Wandler. GPIOs, die über einen ADC verfügen, können analoge Signale in digitale Daten umzuwandeln. Im Prinzip wird hier eine Spannung am ADC-Eingang gemessen, die zwischen 0 und 3,3 Volt liegen darf (Raspberry Pi Pico).

Um die Möglichkeiten der ADCs vom Raspberry Pi Pico auszuprobieren, zu testen und festzustellen wie diese verwendet werden können, empfiehlt es sich ein paar einfache Experimente durchzuführen.

Schaltung

Um einen Spannungsabfall zu erzeugen, verwenden wir ein Potentiometer. Mit dem Potentiometer können wir den Widerstandswert stufenlos einstellen. Statt des Potentiometers können auch unterschiedliche Widerstände verwendet werden. Wenn man nicht so viele unterschiedliche Widerstände hat, kann man diese beliebig in Reihe oder auch parallelschalten.

Aufbau und Bauteile

Raspberry Pi Pico: Experimente mit ADC

  • Potentiometer, 10K (103)

Hinweis: In diesem Aufbau wird ein Potentiometer verwendet, um den Widerstandswert und damit den Spannungsabfall stufenlos einzustellen. Wenn man kein Potentiometer hat, dann kann man stattdessen auch unterschiedliche Widerstände verwenden. Denkbar wäre, dass man sich mit diesem Aufbau ein Ohmmeter baut.

Programmcode für MicroPython

Der Programmcode fragt alle 2 Sekunden den ADC0 ab und ermittelt die abfallende Spannung in Form einer Ganzzahl und gibt sie auf der Kommandozeile/Shell aus. Was genau die Ganzzahl repräsentiert ist abhängig von dem Bauteil an dem gemessen wird. Das kann eine Temperatur sein oder die Helligkeit, oder irgendetwas anderes. Es ist die Aufgabe des Programmierers diesen Wert richtig zu interpretieren.

# Bibliotheken laden
from machine import ADC
import time

# Initialisierung des ADC0 (GPIO26)
adc0 = ADC(0)

# Initialisierung des ADC1 (GPIO27)
adc1 = ADC(1)

# Wiederholung
while True:
    # ADC0 als Dezimalzahl lesen
    read0 = adc0.read_u16()
    read1 = adc1.read_u16()
    
    # Ausgabe in der Kommandozeile/Shell
    print('ADC0:', read0)
    print('ADC1:', read1)
    print()
    
    # Warten
    time.sleep(2)

Programmcode für CircuitPython

# Bibliotheken laden
import board, analogio
import time

# Initialisierung des ADC0 (GPIO26)
adc0 = analogio.AnalogIn(board.GP26)

# Initialisierung des ADC1 (GPIO27)
adc1 = analogio.AnalogIn(board.GP27)

# Wiederholung
while True:
    # ADC0 und ADC1 als Dezimalzahl lesen
    read0 = adc0.value
    read1 = adc1.value
    
    # Ausgabe in der Kommandozeile/Shell
    print('ADC0:', read0, '/', read0 * 3.3 / 65536, 'V')
    print('ADC1:', read1, '/', read1 * 3.3 / 65536, 'V')
    print()
    
    # Warten
    time.sleep(2)

Experiment 1: Beschalteter ADC-Eingang (ADC0)

Drehe den Regler vom Potentiometer hin und her und beobachte den Wert von ADC0. Du wirst feststellen, dass die dezimalen Werte vergleichsweise hoch sein werden. Das hängt vom verwendeten Festwiderstand ab.

  • Welcher Wert wird ermittelt, wenn sich das Potentiometer in Mittelstellung befindet.
  • Welcher Wert wird ermittelt, wenn sich das Potentiometer in einer Endstellung befindet und in welche Richtung hast Du es gedreht?
  • Welcher Wert wird ermittelt, wenn sich das Potentiometer in der entgegengesetzten Endstellung befindet und in welche Richtung hast Du es gedreht?

Experiment 2: Unbeschalteter ADC-Eingang (ADC1)

Wie verhält sich eigentlich ein unbeschalteter ADC-Eingang?

Drehe den Regler vom Potentiometer hin und her und beobachte den Wert von ADC1. Obwohl das Potentiometer gar nicht mit dem ADC1 beschaltet ist und mechanisch auch keine Verbindung zu diesem ADC besteht, verändert sich der Wert vom ADC1 trotzdem. Nur wenig, aber trotzdem steht die Änderung wohl in Zusammenhang mit dem Potentiometer.

Man kann diesen Wert noch weiter beeinflussen, wenn man mit dem Finger in die Nähe des Pins fasst, mit dem der ADC verbunden ist. Der Wert lässt sich noch mehr beeinflussen, wenn man ein Verbindungskabel mit dem Pin verbindet und mit den Fingern das offene Kabelende berührt. Der Wert ändert sich dabei so signifikant, dass sich ein Berührungsschalter damit bauen lässt.

Programmcode für MicroPython mit picozero

„picozero“ ist eine Einsteiger-freundliche MicroPython-Bibliothek, um elektronische Bauteile, wie LEDs, Taster und Sensoren einfacher zu programmieren und zu steuern.

Das Potentiometer muss zwischen 3,3 Volt und GND angeschlossen werden. Der mittlere Anschluss (Schleifer) muss mit dem ADC0, verbunden werden.

from picozero import Pot
from time import sleep
pot = Pot(0)
while True:
    print('Wert: ' + str(pot.value) + ' / Spannung: ' + str(pot.voltage) + ' Volt')
    sleep(1)

Beispiele und Anwendungen mit ADC

In der Regel wird man digitale Sensoren bevorzugen. Aber auch hier wird ein analoger Wert gemessen, der von der Sensor-Schaltung in einen digitalen Wert umgewandelt wird. Ein zusätzlicher Controller überträgt die Daten.

Es folgen ein paar Anwendungen, bei denen ein ADC-Eingang vom Raspberry Pi Pico verwendet und der analoge Wert in einen digitalen Wert umgewandelt wird. Hierbei wird in der Regel eine Umrechnung durchgeführt oder der ermittelte Wert interpretiert.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren