Raspberry Pi Pico com Sensores Analógicos: ADC, Aquisição de Sinais e Controle em Sistemas Embarcados

No contexto de sistemas embarcados, trabalhar apenas com sinais digitais é limitado. Grandezas físicas reais — temperatura, luminosidade, tensão — são contínuas. A conversão dessas variáveis para o domínio digital é feita via ADC (Analog-to-Digital Converter).

Este artigo apresenta o uso do ADC no Raspberry Pi Pico com foco direto em aplicação prática, aquisição de dados e controle baseado em medições reais.


ADC no Raspberry Pi Pico

O microcontrolador RP2040 possui conversores analógico-digitais integrados com as seguintes características:

  • 5 canais ADC disponíveis
  • Resolução interna: 12 bits (0–4095)
  • Em MicroPython: leitura expandida para 16 bits (0–65535)
  • Tensão máxima: 3.3V

Conversão para valor físico

voltage = leitura * (3.3 / 65535)

Ou em milivolts:

mV = leitura * (3300 / 65535)

Esse fator é obrigatório para qualquer leitura significativa.


Projeto 1: Voltímetro

Leitura direta de tensão em um pino analógico.

from machine import ADC
import utime

adc = ADC(0)
conv = 3300 / 65535

while True:
    value = adc.read_u16()
    voltage = value * conv
    print("Voltage (mV):", voltage)
    utime.sleep(1)

Validação:

  • Leitura estável
  • Valor coerente com fonte aplicada
  • Sem saturação (máx. 3.3V)

Projeto 2: Sensor de Temperatura Interno

O Pico possui sensor térmico integrado no canal ADC 4.

from machine import ADC
import utime

sensor = ADC(4)
conv = 3.3 / 65535

while True:
    v = sensor.read_u16() * conv
    temp = 27 - (v - 0.706) / 0.001721
    print("Temp:", temp)
    utime.sleep(1)

Uso prático:

  • Monitoramento térmico do próprio sistema
  • Proteção contra sobreaquecimento

Projeto 3: Sensor TMP36 (Temperatura Externa)

from machine import ADC
import utime

adc = ADC(0)
conv = 3300 / 65535

while True:
    v = adc.read_u16()
    mV = v * conv
    temp = (mV - 500) / 10
    print("Temp:", temp)
    utime.sleep(1)

Aplicação:

  • Ambientes industriais
  • Monitoramento climático local

Projeto 4: Controle ON/OFF por Temperatura

Integração direta: sensor → decisão → atuação.

from machine import ADC, Pin
import utime

adc = ADC(0)
led = Pin(16, Pin.OUT)
relay = Pin(17, Pin.OUT)

set_temp = 24.0
conv = 3300 / 65535

while True:
    v = adc.read_u16()
    mV = v * conv
    temp = (mV - 500) / 10

    if temp < set_temp:
        relay.value(1)
        led.value(1)
    else:
        relay.value(0)
        led.value(0)

    utime.sleep(3)

Isso já é um sistema embarcado funcional.


Projeto 5: Sensor de Luz (LDR)

from machine import ADC
import utime

ldr = ADC(0)

while True:
    value = ldr.read_u16()
    print("Light level:", value)
    utime.sleep(0.5)

Observação:

  • Necessário calibrar para unidade física (lux)
  • Uso típico: automação de iluminação

Projeto 6: Ohmímetro (Divisor de Tensão)

from machine import ADC
import utime

adc = ADC(0)
RF = 10  # 10k ohms

while True:
    total = 0
    for _ in range(5):
        total += adc.read_u16()

    Vm = total / 5
    Rx = 65535 * RF / Vm - RF
    Rx_ohms = Rx * 1000

    print("Resistance:", Rx_ohms)
    utime.sleep(1)

Conceitos envolvidos:

  • Divisor de tensão
  • Média para redução de ruído

Projeto 7: Termistor (Modelo Matemático Real)

from machine import ADC
import math
import utime

adc = ADC(0)

def temperature(raw):
    c1 = 0.001129148
    c2 = 0.000234125
    c3 = 0.0000000876741

    R1 = 10000
    R2 = R1 / (65535/raw - 1)

    T = math.log(R2)
    tempK = 1 / (c1 + (c2 + c3 * T*T) * T)
    return tempK - 273.15

while True:
    raw = adc.read_u16()
    temp = temperature(raw)
    print("Temp:", temp)
    utime.sleep(2)

Nível técnico elevado:

  • Modelo Steinhart-Hart
  • Conversão física precisa

Projeto 8: Múltiplos Sensores

from machine import ADC
import utime

ext = ADC(0)
internal = ADC(1)

conv = 3300 / 65535

while True:
    t1 = (ext.read_u16() * conv - 500) / 10
    t2 = (internal.read_u16() * conv - 500) / 10

    print("External:", t1)
    print("Internal:", t2)
    utime.sleep(2)

Aplicação em Engenharia

Com esses blocos, é possível construir sistemas reais:

Aquisição de Dados

  • Temperatura
  • Tensão
  • Luminosidade
  • Resistência

Controle

  • Acionamento de relés
  • Proteção térmica
  • Controle de ambiente

Automação

  • Decisão local (sem cloud)
  • Execução determinística
  • Integração com outros módulos

Direcionamento Técnico

Para uso profissional:

  • Validar leitura com instrumento externo (multímetro)
  • Aplicar filtragem (média, debounce analógico)
  • Trabalhar dentro do range elétrico (0–3.3V)
  • Evitar ruído (layout e cabos)

Evolução do Sistema

Sequência natural:

Leitura → Interpretação → Decisão → Ação

Sem validação da leitura, todo o sistema falha.


Encerramento

O uso do ADC transforma o Raspberry Pi Pico em um sistema capaz de interagir com o mundo real de forma contínua e mensurável.

A partir desse ponto, o desenvolvimento deixa de ser apenas digital e passa a ser engenharia aplicada.