lecture-adc.py

Raspberry Pi Pico 2 W · Archivo : lecture-adc.py · Lenguaje : Python · Uso : Lire une entrée analogique et la température interne du circuit

Dos medidas analógicas de 12 bits en un solo script: una tensión externa en GP26 (ADC0) y el sensor térmico integrado del chip convertido a grados con los parámetros de la ficha técnica. Ideal para vigilar la carga de la CPU.

Hardware

Una Raspberry Pi Pico 2 W (RP2350 + radio Wi-Fi de 2,4 GHz) con MicroPython instalado, alimentada por USB. Para la vía externa: potenciómetro de 10 kΩ (cursor a GP26, extremos a 3V3 y GND). El sensor interno no necesita nada.

Cableado

Cursor del potenciómetro a GP26, un extremo a 3V3 y el otro a GND. Nunca superar 3,3 V en una pata ADC.

Funcionamiento

ADC(Pin) o ADC(4) abren un canal; read_u16() devuelve 0-65535 escalado a la referencia de 3,3 V. La temperatura interna usa la calibración típica 0,706 V a 27 °C, pendiente -1,721 mV/K.

Ejecución

Instala la versión MicroPython « Pico 2 W » (BOOTSEL + .uf2) y copia el script vía Thonny. Como en la Pico W, el LED de usuario no está en un GPIO: usa un LED externo para las salidas.

Variantes

Promedia varias lecturas para reducir el ruido, o usa adc.init(sample_bits=8) para ganar velocidad a costa de precisión.

lecture-adc.py

# ADC 12 bits : entree externe GP26 (ADC0) + capteur thermique interne.
from machine import ADC, Pin
import time

# CAN 0-3 = GP26..GP29 ; le canal 4 est le capteur de temperature.
adc_externe = ADC(Pin(26))
adc_temp = ADC(4)

REFERENCE = 3.3  # tension de reference de l'ADC

def tension(adc):
    # read_u16 renvoie 0..65535 ; l'ADC interne a 12 bits.
    return adc.read_u16() * REFERENCE / 65535.0

def temperature_interne():
    # Doc technique RP2040/RP2350 : 0,706 V a 27 degC, pente -1,721 mV/K.
    v = tension(adc_temp)
    return 27.0 - (v - 0.706) / 0.001721

print("Mesures toutes les secondes (Ctrl-C pour arreter)")
while True:
    u = tension(adc_externe)
    t = temperature_interne()
    print("GP26 = %.2f V | temperature interne = %.1f C" % (u, t))
    time.sleep(1)

← Volver a la ficha