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.

