Introdução
Bem-vindo a mais um tutorial prático no blog da Velxio! Hoje, vamos mergulhar no ADC (Conversor Analógico-Digital) do Raspberry Pi Pico. O Pico é uma placa pequena e poderosa, e um de seus recursos mais interessantes é a capacidade de ler tensões analógicas — perfeito para sensores, potenciômetros e muito mais. Neste exemplo, vamos ler três sinais analógicos externos de potenciômetros e também capturar o valor do sensor de temperatura interno. Tudo isso roda diretamente no seu navegador com a simulação precisa com SPICE da Velxio.

Explicação do Circuito
Vamos analisar o circuito. Temos um Raspberry Pi Pico (a variante Nano RP2040 na Velxio) conectado a dois potenciômetros e um LED.
Componentes
- Raspberry Pi Pico (Nano RP2040): O cérebro da operação.
- Potenciômetro A0 (pot-a0): Conectado ao GPIO26 (A0). Seu terminal central (SIG) vai para A0, VCC para 3.3V e GND para o terra.
- Potenciômetro A1 (pot-a1): Conectado ao GPIO27 (A1). Mesma ligação: SIG para A1, VCC para 3.3V, GND para o terra.
- LED Vermelho (led-temp): Conectado ao GPIO2 (D2) através de um resistor limitador de corrente (interno ao componente do LED). O ânodo (A) vai para D2, o cátodo (C) para o terra.
Detalhes da Ligação
- A0 (GP26) está conectado ao pino SIG do pot-a0 através de um fio azul (
#4488ff). - A1 (GP27) está conectado ao pino SIG do pot-a1 através de um fio verde (
#44cc44). - D2 (GP2) está conectado ao ânodo do LED vermelho através de um fio vermelho (
#ff4444). - Ambos os potenciômetros compartilham o barramento de 3.3V (fios vermelhos) e o terra (fios pretos) do Pico.
- O cátodo do LED está conectado ao terra.
Observação: Os pinos ADC do Pico suportam até 3.3V, então usamos a fonte de 3.3V. Os potenciômetros atuam como divisores de tensão, fornecendo uma tensão variável de 0 a 3.3V em seu terminal central.
Explicação do Código
Agora vamos examinar o código. Ele está escrito em C++ no estilo Arduino para o Raspberry Pi Pico.
// Raspberry Pi Pico — Teste de Leitura ADC
// Lê valores analógicos de A0-A2 (GPIO26-28) e do sensor de temperatura interno
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Leitura ADC do Pico ===");
Serial.println("A0=GP26 A1=GP27 A2=GP28 Temp=interno");
Serial.println("Resolução de 12 bits (0-4095), ref. 3.3V");
Serial.println();
analogReadResolution(12);
}
void loop() {
int a0 = analogRead(A0);
int a1 = analogRead(A1);
int a2 = analogRead(A2);
// Sensor de temperatura interno no canal 4
// T = 27 - (V - 0.706) / 0.001721
int tempRaw = analogRead(A3); // Canal 4 mapeado para A3 pelo núcleo do Pico
float voltage = tempRaw * 3.3f / 4095.0f;
float tempC = 27.0f - (voltage - 0.706f) / 0.001721f;
Serial.print("A0: "); Serial.print(a0);
Serial.print(" A1: "); Serial.print(a1);
Serial.print(" A2: "); Serial.print(a2);
Serial.print(" Temp: "); Serial.print(tempC, 1); Serial.println(" C");
delay(1000);
}
Pontos Principais
analogReadResolution(12): Define o ADC para resolução de 12 bits (0-4095). O ADC do Pico já é de 12 bits por padrão, mas é uma boa prática defini-lo explicitamente.analogRead(A0): Lê a tensão no GPIO26 (A0). O núcleo do Pico mapeia A0 para GPIO26, A1 para GPIO27, A2 para GPIO28 e A3 para o sensor de temperatura interno (canal 4).- Cálculo da Temperatura: O sensor interno gera uma tensão que varia com a temperatura. A fórmula
T = 27 - (V - 0.706) / 0.001721converte a tensão para graus Celsius. A constante 0.706V é a tensão a 27°C, e 0.001721 V/°C é a inclinação. - Saída Serial: Os resultados são impressos a cada segundo.
Conceitos Principais
- Resolução do ADC: O ADC do Pico é de 12 bits, o que significa que pode representar 4096 níveis discretos de tensão (0 a 4095). A tensão de referência é 3.3V, então cada passo equivale a cerca de 0,8 mV.
- Analógico vs Digital: Potenciômetros fornecem uma tensão contínua; o ADC a converte em um número digital.
- Sensor de Temperatura Interno: Um recurso útil para monitorar a temperatura do chip sem componentes externos.
- Divisor de Tensão: O potenciômetro atua como um divisor de tensão, fornecendo uma fração da tensão de alimentação.
Armadilhas Comuns e Dicas de Depuração
- Mapeamento de Pinos Errado: Lembre-se de que A0 é GPIO26, A1 é GPIO27, A2 é GPIO28 e o sensor de temperatura interno é acessado via A3 (canal 4).
- Pinos Flutuantes: Se o terminal central de um potenciômetro estiver desconectado, a leitura do ADC pode ser aleatória. Sempre garanta uma conexão firme.
- Monitor Serial: Certifique-se de que a taxa de transmissão (baud rate) corresponde (115200). Na Velxio, abra o Monitor Serial na barra de ferramentas do editor.
- LED Não Piscando: O LED neste exemplo não é controlado pelo código; ele está apenas conectado. Para piscá-lo, você precisaria adicionar chamadas
digitalWrite(D2, HIGH)edelay().
Extensões Sugeridas
- Adicione um Terceiro Potenciômetro: Conecte um terceiro potenciômetro ao GPIO28 (A2) e leia-o no código.
- Controle o LED: Use a leitura de temperatura para acender o LED quando estiver acima de um limite.
- Plote os Dados: Use o Plotter Serial na Velxio para visualizar as leituras analógicas ao longo do tempo.
- Use Sensores Externos: Substitua os potenciômetros por um resistor dependente de luz (LDR) ou um sensor de temperatura como o LM35.
Experimente Você Mesmo!
Pronto para experimentar? Abra o exemplo ao vivo na Velxio e comece a ajustar o circuito ou o código. Clique no link abaixo para iniciar a simulação diretamente no seu navegador.
Inicie o Exemplo de Leitura ADC do Pico na Velxio
Feliz experimentação!