Einleitung
Willkommen zu einem weiteren praxisnahen Tutorial auf dem Velxio-Blog! Heute tauchen wir in den ADC (Analog-Digital-Wandler) des Raspberry Pi Pico ein. Der Pico ist ein leistungsstarkes kleines Board, und eine seiner coolsten Funktionen ist die Fähigkeit, analoge Spannungen auszulesen – perfekt für Sensoren, Potenziometer und mehr. In diesem Beispiel lesen wir drei externe analoge Signale von Potenziometern und greifen auch den Wert des internen Temperatursensors ab. Das alles läuft direkt in Ihrem Browser mit der SPICE-genauen Simulation von Velxio.

Schaltungsdurchgang
Schauen wir uns die Schaltung an. Wir haben einen Raspberry Pi Pico (die Nano RP2040-Variante in Velxio), der mit zwei Potenziometern und einer LED verbunden ist.
Komponenten
- Raspberry Pi Pico (Nano RP2040): Das Gehirn der Operation.
- Potenziometer A0 (pot-a0): Verbunden mit GPIO26 (A0). Sein Schleifer (SIG) geht zu A0, VCC zu 3,3V und GND zu Masse.
- Potenziometer A1 (pot-a1): Verbunden mit GPIO27 (A1). Gleiche Verdrahtung: SIG zu A1, VCC zu 3,3V, GND zu Masse.
- Rote LED (led-temp): Verbunden mit GPIO2 (D2) über einen Strombegrenzungswiderstand (intern in der LED-Komponente). Die Anode (A) geht zu D2, die Kathode (C) zu Masse.
Verdrahtungsdetails
- A0 (GP26) ist über ein blaues Kabel (
#4488ff) mit dem SIG-Pin von pot-a0 verbunden. - A1 (GP27) ist über ein grünes Kabel (
#44cc44) mit dem SIG-Pin von pot-a1 verbunden. - D2 (GP2) ist über ein rotes Kabel (
#ff4444) mit der Anode der roten LED verbunden. - Beide Potenziometer teilen sich die 3,3V-Schiene (rote Kabel) und Masse (schwarze Kabel) vom Pico.
- Die Kathode der LED ist mit Masse verbunden.
Hinweis: Die ADC-Pins des Pico sind 3,3V-tolerant, daher verwenden wir die 3,3V-Versorgung. Die Potenziometer fungieren als Spannungsteiler und liefern eine variable Spannung von 0 bis 3,3V an ihrem Schleifer.
Code-Durchgang
Betrachten wir nun den Code. Er ist in Arduino-ähnlichem C++ für den Raspberry Pi Pico geschrieben.
// Raspberry Pi Pico — ADC Read Test
// Reads analog values from A0-A2 (GPIO26-28) and the internal temp sensor
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Pico ADC Read ===");
Serial.println("A0=GP26 A1=GP27 A2=GP28 Temp=internal");
Serial.println("12-bit resolution (0-4095), 3.3V ref");
Serial.println();
analogReadResolution(12);
}
void loop() {
int a0 = analogRead(A0);
int a1 = analogRead(A1);
int a2 = analogRead(A2);
// Internal temperature sensor on channel 4
// T = 27 - (V - 0.706) / 0.001721
int tempRaw = analogRead(A3); // Channel 4 mapped to A3 by Pico core
float voltage = tempRaw * 3.3f / 4095.0f;
float tempC = 27.0f - (voltage - 0.706f) / 0.001721f;
Serial.print("A0: "); Serial.print(a0);
Serial.print(" A1: "); Serial.print(a1);
Serial.print(" A2: "); Serial.print(a2);
Serial.print(" Temp: "); Serial.print(tempC, 1); Serial.println(" C");
delay(1000);
}
Wichtige Punkte
analogReadResolution(12): Setzt den ADC auf 12-Bit-Auflösung (0-4095). Der ADC des Pico ist standardmäßig 12-Bit, aber es ist gute Praxis, ihn explizit zu setzen.analogRead(A0): Liest die Spannung an GPIO26 (A0). Der Pico-Kern ordnet A0 GPIO26 zu, A1 GPIO27, A2 GPIO28 und A3 dem internen Temperatursensor (Kanal 4).- Temperaturberechnung: Der interne Sensor gibt eine Spannung aus, die mit der Temperatur variiert. Die Formel
T = 27 - (V - 0.706) / 0.001721wandelt die Spannung in Grad Celsius um. Die Konstante 0,706V ist die Spannung bei 27°C, und 0,001721 V/°C ist die Steigung. - Serielle Ausgabe: Die Ergebnisse werden jede Sekunde ausgegeben.
Schlüsselkonzepte
- ADC-Auflösung: Der ADC des Pico ist 12-Bit, was bedeutet, dass er 4096 diskrete Spannungspegel (0 bis 4095) darstellen kann. Die Referenzspannung beträgt 3,3V, daher beträgt jeder Schritt etwa 0,8 mV.
- Analog vs. Digital: Potenziometer liefern eine kontinuierliche Spannung; der ADC wandelt sie in eine digitale Zahl um.
- Interner Temperatursensor: Eine praktische Funktion zur Überwachung der Chiptemperatur ohne externe Komponenten.
- Spannungsteiler: Das Potenziometer fungiert als Spannungsteiler und gibt einen Bruchteil der Versorgungsspannung ab.
Häufige Fallstricke & Debugging-Tipps
- Falsche Pin-Zuordnung: Denken Sie daran, dass A0 GPIO26 ist, A1 GPIO27, A2 GPIO28 und der interne Temperatursensor über A3 (Kanal 4) erreicht wird.
- Schwebende Pins: Wenn der Schleifer eines Potenziometers nicht angeschlossen ist, kann der ADC-Wert zufällig sein. Stellen Sie immer eine feste Verbindung sicher.
- Serieller Monitor: Stellen Sie sicher, dass die Baudrate übereinstimmt (115200). Öffnen Sie in Velxio den Seriellen Monitor über die Editor-Symbolleiste.
- LED blinkt nicht: Die LED in diesem Beispiel wird nicht vom Code gesteuert; sie ist nur verdrahtet. Um sie blinken zu lassen, müssten Sie
digitalWrite(D2, HIGH)unddelay()-Aufrufe hinzufügen.
Vorschläge für Erweiterungen
- Ein drittes Potenziometer hinzufügen: Verdrahten Sie ein drittes Potenziometer mit GPIO28 (A2) und lesen Sie es im Code aus.
- Die LED steuern: Verwenden Sie den Temperaturwert, um die LED einzuschalten, wenn er über einem Schwellwert liegt.
- Daten plotten: Verwenden Sie den Seriellen Plotter in Velxio, um die analogen Messwerte über die Zeit zu visualisieren.
- Externe Sensoren verwenden: Ersetzen Sie die Potenziometer durch einen lichtabhängigen Widerstand (LDR) oder einen Temperatursensor wie den LM35.
Probieren Sie es selbst aus!
Bereit zum Experimentieren? Öffnen Sie das Live-Beispiel in Velxio und beginnen Sie, die Schaltung oder den Code anzupassen. Klicken Sie auf den untenstehenden Link, um die Simulation direkt in Ihrem Browser zu starten.
Starten Sie das Pico ADC Read Beispiel auf Velxio
Viel Spaß beim Tüfteln!