Nei progetti di elettronica dedicati al monitoraggio ambientale o al controllo di grandezze fisiche è spesso necessario acquisire segnali analogici provenienti da sensori. Tuttavia, non tutte le schede Raspberry Pi integrano ingressi analogici nativi. Per questo motivo può risultare necessario utilizzare convertitori esterni per digitalizzare i segnali.
L’articolo di riferimento descrive due approcci distinti: l’utilizzo di un convertitore A/D con Raspberry Pi tradizionale e l’impiego degli ingressi analogici integrati nel Raspberry Pi Pico. Inoltre vengono presentati esempi pratici per la lettura di tensioni provenienti da sensori o potenziometri, utilizzando MicroPython e l’ambiente Arduino.
Lettura analogica con Raspberry Pi
Le schede Raspberry Pi non dispongono di ingressi analogici integrati. Per questo motivo è necessario utilizzare un convertitore analogico-digitale esterno.
Un esempio tipico è il circuito integrato MCP3008, un convertitore A/D a 8 canali e 10 bit dotato di modulo Sample and Hold. Questo componente viene collegato alle porte SPI della scheda Raspberry Pi. I dispositivi con uscita analogica vengono invece collegati ai canali dell’ADC.
Prima di utilizzare il convertitore è necessario abilitare le interfacce SPI oppure I2C dal menu di configurazione del sistema. Successivamente il convertitore può essere gestito tramite librerie software, come la libreria GPIOZero.
Per acquisire un dato analogico si utilizza un’istruzione che associa una variabile al canale scelto. Il valore restituito rappresenta una tensione normalizzata compresa tra 0 e 1. Per ottenere il valore reale della tensione è necessario moltiplicare il valore letto per la tensione di alimentazione del sistema.
Test con potenziometri
Un metodo semplice per testare un ingresso analogico consiste nell’utilizzare un potenziometro. Il morsetto centrale del potenziometro viene collegato a un ingresso del convertitore ADC.
Nel caso descritto vengono utilizzati due potenziometri collegati rispettivamente ai canali 0 e 1 del convertitore MCP3008. Il software acquisisce i valori tramite un ciclo continuo e li visualizza nella Shell.
Il valore letto viene moltiplicato per 3,3 volt, cioè la tensione di alimentazione del sistema, in modo da ottenere la tensione reale impostata dal potenziometro.
Ingressi analogici con Raspberry Pi Pico

Il Raspberry Pi Pico utilizza un approccio differente. La scheda integra direttamente ingressi analogici, eliminando la necessità di un convertitore esterno.
Sono disponibili tre ingressi analogici:
- GP26_A0
- GP27_A1
- GP28_A2
È presente anche un quarto ingresso analogico interno non accessibile dalla scheda. Inoltre il microcontrollore RP2040 integra un sensore di temperatura interno.
Programmazione con MicroPython e Arduino
La scheda Raspberry Pi Pico può essere programmata sia con MicroPython sia con Arduino.
Per utilizzare MicroPython si impiega l’ambiente Thonny. Prima di iniziare è necessario installare o aggiornare il firmware MicroPython sulla scheda. Il dispositivo viene riconosciuto dal computer come unità di memoria quando si collega la scheda tenendo premuto il pulsante BOOTSEL.
Una volta installato il firmware, è possibile leggere il valore analogico tramite il convertitore ADC interno. Il valore restituito rappresenta la proporzione della tensione di ingresso rispetto alla tensione di riferimento di 3,3 V. Successivamente il valore numerico viene convertito in volt e visualizzato.
Anche con Arduino è possibile effettuare la stessa operazione. In questo caso il convertitore ADC restituisce un valore numerico compreso tra 0 e 1023 che rappresenta la frazione della tensione di ingresso rispetto ai 3,3 volt di riferimento.
Lettura della temperatura interna
Il microcontrollore RP2040 integra anche un sensore di temperatura collegato a un canale dell’ADC. Il sensore misura la tensione di un diodo interno e consente di stimare la temperatura tramite una relazione approssimata.
Tuttavia la precisione della misura dipende dalla tensione di riferimento e dalle caratteristiche del dispositivo. Per questo motivo può risultare necessaria una calibrazione per ottenere misure più accurate.
La temperatura può essere acquisita sia con MicroPython sia con Arduino utilizzando librerie dedicate che restituiscono direttamente il valore in gradi Celsius.
