Introduzione
Benvenuto in un altro tutorial pratico sul blog di Velxio! Oggi esploreremo l’ADC (Convertitore Analogico-Digitale) del Raspberry Pi Pico. Il Pico è una scheda piccola ma potente, e una delle sue caratteristiche più interessanti è la capacità di leggere tensioni analogiche, perfetta per sensori, potenziometri e altro. In questo esempio, leggeremo tre segnali analogici esterni da potenziometri e acquisiremo anche il valore del sensore di temperatura interno. Il tutto funziona direttamente nel tuo browser con la simulazione SPICE-accurata di Velxio.

Spiegazione del Circuito
Diamo un’occhiata al circuito. Abbiamo un Raspberry Pi Pico (la variante Nano RP2040 in Velxio) collegato a due potenziometri e un LED.
Componenti
- Raspberry Pi Pico (Nano RP2040): Il cervello dell’operazione.
- Potenziometro A0 (pot-a0): Collegato a GPIO26 (A0). Il suo cursore (SIG) va ad A0, VCC a 3.3V e GND a massa.
- Potenziometro A1 (pot-a1): Collegato a GPIO27 (A1). Stesso cablaggio: SIG ad A1, VCC a 3.3V, GND a massa.
- LED Rosso (led-temp): Collegato a GPIO2 (D2) tramite un resistore limitatore di corrente (interno al componente LED). L’anodo (A) va a D2, il catodo (C) a massa.
Dettagli del Cablaggio
- A0 (GP26) è collegato al pin SIG di pot-a0 tramite un filo blu (
#4488ff). - A1 (GP27) è collegato al pin SIG di pot-a1 tramite un filo verde (
#44cc44). - D2 (GP2) è collegato all’anodo del LED rosso tramite un filo rosso (
#ff4444). - Entrambi i potenziometri condividono la linea a 3.3V (fili rossi) e la massa (fili neri) dal Pico.
- Il catodo del LED è collegato a massa.
Nota: I pin ADC del Pico tollerano 3.3V, quindi utilizziamo l’alimentazione a 3.3V. I potenziometri agiscono come partitori di tensione, fornendo una tensione variabile da 0 a 3.3V al loro cursore.
Spiegazione del Codice
Ora esaminiamo il codice. È scritto in C++ in stile Arduino per il Raspberry Pi Pico.
// Raspberry Pi Pico — Test di Lettura ADC
// Legge valori analogici da A0-A2 (GPIO26-28) e dal sensore di temperatura interno
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Lettura ADC Pico ===");
Serial.println("A0=GP26 A1=GP27 A2=GP28 Temp=interno");
Serial.println("Risoluzione a 12 bit (0-4095), rif. 3.3V");
Serial.println();
analogReadResolution(12);
}
void loop() {
int a0 = analogRead(A0);
int a1 = analogRead(A1);
int a2 = analogRead(A2);
// Sensore di temperatura interno sul canale 4
// T = 27 - (V - 0.706) / 0.001721
int tempRaw = analogRead(A3); // Canale 4 mappato su A3 dal core Pico
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);
}
Punti Chiave
analogReadResolution(12): Imposta l’ADC a risoluzione 12 bit (0-4095). L’ADC del Pico è a 12 bit per impostazione predefinita, ma è buona pratica impostarlo esplicitamente.analogRead(A0): Legge la tensione su GPIO26 (A0). Il core del Pico mappa A0 su GPIO26, A1 su GPIO27, A2 su GPIO28 e A3 sul sensore di temperatura interno (canale 4).- Calcolo della Temperatura: Il sensore interno produce una tensione che varia con la temperatura. La formula
T = 27 - (V - 0.706) / 0.001721converte la tensione in gradi Celsius. La costante 0.706V è la tensione a 27°C, e 0.001721 V/°C è la pendenza. - Uscita Seriale: I risultati vengono stampati ogni secondo.
Concetti Chiave
- Risoluzione dell’ADC: L’ADC del Pico è a 12 bit, il che significa che può rappresentare 4096 livelli di tensione discreti (da 0 a 4095). La tensione di riferimento è 3.3V, quindi ogni passo è di circa 0.8 mV.
- Analogico vs Digitale: I potenziometri forniscono una tensione continua; l’ADC la converte in un numero digitale.
- Sensore di Temperatura Interno: Una funzione utile per monitorare la temperatura del chip senza componenti esterni.
- Partitore di Tensione: Il potenziometro agisce come un partitore di tensione, fornendo una frazione della tensione di alimentazione.
Errori Comuni e Suggerimenti per il Debug
- Mappatura dei Pin Errata: Ricorda che A0 è GPIO26, A1 è GPIO27, A2 è GPIO28 e il sensore di temperatura interno è accessibile tramite A3 (canale 4).
- Pin Volanti: Se il cursore di un potenziometro è scollegato, la lettura dell’ADC potrebbe essere casuale. Assicurati sempre una connessione solida.
- Monitor Seriale: Verifica che il baud rate corrisponda (115200). In Velxio, apri il Monitor Seriale dalla barra degli strumenti dell’editor.
- LED Non Lampeggiante: Il LED in questo esempio non è controllato dal codice; è solo cablato. Per farlo lampeggiare, dovresti aggiungere
digitalWrite(D2, HIGH)e chiamatedelay().
Estensioni Suggerite
- Aggiungi un Terzo Potenziometro: Collega un terzo potenziometro a GPIO28 (A2) e leggilo nel codice.
- Controlla il LED: Usa la lettura della temperatura per accendere il LED quando supera una soglia.
- Traccia i Dati: Usa il Plotter Seriale in Velxio per visualizzare le letture analogiche nel tempo.
- Usa Sensori Esterni: Sostituisci i potenziometri con una fotoresistenza (LDR) o un sensore di temperatura come l’LM35.
Prova Tu Stesso!
Pronto a sperimentare? Apri l’esempio live in Velxio e inizia a modificare il circuito o il codice. Clicca sul link qui sotto per avviare la simulazione direttamente nel tuo browser.
Avvia l’Esempio di Lettura ADC su Pico in Velxio
Buon divertimento con il tinkering!