Lettura della Temperatura con Raspberry Pi Pico (Lezione 3)

Introduzione

Un sistema digitale è formato da migliaia o milioni di transistor,  essi sono polarizzati per operare nelle zone di saturazione o interdizione, il loro principio di funzionamento è simile ad un interruttore (ON/OFF), pertanto con questo tipo di sistema si possono gestire segnali con due soli stati (“0” e “1”).

Se volessimo gestire un segnale analogico che ha una variazione continua, generalmente, tra due livelli (minimo e massimo)  come per esempio un sensore  che converte la variazione di una grandezza fisica in elettrica, in questo caso dobbiamo inserire un dispositivo tra il sensore e il  sistema digitale (vedi Figura 1) che deve convertire un segnale analogico in uno di tipo digitale, cioè,  ad ogni livello di tensione, campionata in un determinato istante,  deve corrispondere una stringa di bit, proporzionale al livello di tensione campionato.

Il dispositivo che svolge questa funzione è il convertitore  ADC (Analog Digital Converter ) e per chi volesse approfondire  l’argomento consiglio di leggere il seguente articolo: ADC.

Figura 1

Quasi tutti i microcontrollori moderni, hanno in dotazione almeno un ADC integrato nel proprio chip,   per rendere il sistema più flessibile senza l’introduzione di un dispositivo esterno.

Il microcontrollore RP2040 ha  ben quattro ADC integrati con una risoluzione di 12 bit e questo significa che abbiamo 212 possibili combinazioni, cioè possiamo lavorare nel  range compreso tra 0 e 4095 valori distinti, dato che useremo l’interprete Micropython, esso mappa, in modo proporzionale, il valore letto nel range tra 0 e 65.535, come se fosse un ADC a 16 bit, per rendere compatibile l’istruzione di lettura anche  per i dispositivi che hanno una risoluzione a 16 bit e uniformare il processo di lettura.

I pins  connessi agli ADCs sono: GP26 (ADC0), GP27 (ADC1), e GP28 (ADC2)  accessibili dall’esterno, mentre c’è un quarto ADC connesso direttamente al sensore di temperatura  integrato nel microcontrollore e quindi non accessibile dall’esterno.

Misurazione della temperatura

In questo articolo  descriverò come leggere la temperatura del sensore integrato all’interno del microcontrollore e stampare il suo valore su un display OLED  e sul terminale della seriale.

Figura 2
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime
sensore_di_temperatura = machine.ADC(machine.ADC.CORE_TEMP)
fattore_di_conversione = 3.3 / (65535)
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)

while True:
    lettura = sensore_di_temperatura.read_u16() * fattore_di_conversione 
    temperatura = 27 - (lettura - 0.706)/0.001721
    oled.fill(0)
    oled.text("temperatura C", 0, 0)
    oled.text(str(temperatura), 0, 10)
    oled.show()    
    utime.sleep(1)

Con questa istruzione associamo il metodo di lettura dell’ADC ,connesso al sensore di temperatura, all’identificativo “sensore_di_temperatura”

Il valore numerico letto, compreso tra 0 e 6555, deve essere associato ad un valore di tensione.

La prima istruzione associa i pins dove è stato connesso il dispositivo I2C, mentre la seconda istruzione configuriamo le caratteristiche del display usato , che nel mio caso è 128×64.

Con la prima istruzione leggiamo il valore dell’ADC connesso al sensore di temperatura e lo moltiplichiamo per il fattore di conversione, per associare il valore letto ad uno di tensione, il risultato dell’operazione è memorizzato nella variabile “lettura”.

Per convertire la lettura, in tensione, con la temperatura in gradi centigradi dobbiamo usare la relazione riportata nella seconda istruzione.

2 commenti

  1. Ciao Gennaro,
    Per esigenze di velocità (no boot time) dovrei passare da Raspberry ad un microcontrollers (esp32 o pico).
    I miei script seriali sono tutti in Python 3.7, scritti utilizzando la ottima libreria minimalmodbus.
    Libreria Python utilizzata : minimalmodbus
    https://minimalmodbus. readthedocs.io/en/stable/ apiminimalmodbus.html

    Installazione semplice su microprocessore Raspberry :
    https://minimalmodbus. readthedocs.io/en/stable/ installation.html
    sudo PIP3 installare -U minimalmodbus

    Si potrebbero adattare per essere eseguiti in micropython.

    Vorrei evitare se possibile di riscrivere un nuovo codice Python con altre librerie e adattarlo per farlo partire in micropython (è una sorta di python 3.7 piu snello).
    Se puoi aiutarmi, sono con il progetto fermo.

    Intanto grazie
    Rocco

  2. Ciao Rocco,
    benvenuto nel mio blog.
    Micropython è un interprete Python specifico per i microntrollori che hanno risorse limitate. Esistono, per questo interprete, delle librerie specifiche per implementare il Modbus, e presumo che tu già lo sappia. Purtroppo non posso aiutarti, il quesito che mia hai posto è molto specifico e non conosco la complessità del tuo codice e quanto ci vorrebbe fare il porting con le nuove librerie di Micropython. Tienimi aggiornato sulla soluzione che riuscirai a trovare.
    Buona lavoro.
    Gennaro.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito