Introducción
¡Bienvenido a otro tutorial práctico en el blog de Velxio! Hoy nos adentramos en el ADC (Convertidor Analógico-Digital) de la Raspberry Pi Pico. La Pico es una placa pequeña pero potente, y una de sus características más interesantes es la capacidad de leer voltajes analógicos, perfecta para sensores, potenciómetros y más. En este ejemplo, leeremos tres señales analógicas externas de potenciómetros y también obtendremos el valor del sensor de temperatura interno. Todo esto se ejecuta directamente en tu navegador con la simulación de precisión SPICE de Velxio.

Explicación del circuito
Veamos el circuito. Tenemos una Raspberry Pi Pico (la variante Nano RP2040 en Velxio) conectada a dos potenciómetros y un LED.
Componentes
- Raspberry Pi Pico (Nano RP2040): El cerebro de la operación.
- Potenciómetro A0 (pot-a0): Conectado a GPIO26 (A0). Su terminal central (SIG) va a A0, VCC a 3.3V y GND a tierra.
- Potenciómetro A1 (pot-a1): Conectado a GPIO27 (A1). Mismo cableado: SIG a A1, VCC a 3.3V, GND a tierra.
- LED rojo (led-temp): Conectado a GPIO2 (D2) a través de una resistencia limitadora de corriente (interna al componente LED). El ánodo (A) va a D2, el cátodo (C) a tierra.
Detalles del cableado
- A0 (GP26) está conectado al pin SIG de pot-a0 mediante un cable azul (
#4488ff). - A1 (GP27) está conectado al pin SIG de pot-a1 mediante un cable verde (
#44cc44). - D2 (GP2) está conectado al ánodo del LED rojo mediante un cable rojo (
#ff4444). - Ambos potenciómetros comparten la línea de 3.3V (cables rojos) y tierra (cables negros) de la Pico.
- El cátodo del LED está conectado a tierra.
Nota: Los pines ADC de la Pico toleran 3.3V, por lo que usamos la fuente de 3.3V. Los potenciómetros actúan como divisores de tensión, proporcionando un voltaje variable de 0 a 3.3V en su terminal central.
Explicación del código
Ahora examinemos el código. Está escrito en C++ estilo Arduino para la Raspberry Pi Pico.
// Raspberry Pi Pico — Prueba de lectura ADC
// Lee valores analógicos de A0-A2 (GPIO26-28) y del sensor de temperatura interno
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Lectura ADC Pico ===");
Serial.println("A0=GP26 A1=GP27 A2=GP28 Temp=interno");
Serial.println("Resolución 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 en el canal 4
// T = 27 - (V - 0.706) / 0.001721
int tempRaw = analogRead(A3); // Canal 4 mapeado a A3 por el núcleo de la 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);
}
Puntos clave
analogReadResolution(12): Establece la resolución del ADC a 12 bits (0-4095). El ADC de la Pico es de 12 bits por defecto, pero es una buena práctica establecerlo explícitamente.analogRead(A0): Lee el voltaje en GPIO26 (A0). El núcleo de la Pico mapea A0 a GPIO26, A1 a GPIO27, A2 a GPIO28 y A3 al sensor de temperatura interno (canal 4).- Cálculo de temperatura: El sensor interno genera un voltaje que varía con la temperatura. La fórmula
T = 27 - (V - 0.706) / 0.001721convierte el voltaje a grados Celsius. La constante 0.706V es el voltaje a 27°C y 0.001721 V/°C es la pendiente. - Salida serie: Los resultados se imprimen cada segundo.
Conceptos clave
- Resolución del ADC: El ADC de la Pico es de 12 bits, lo que significa que puede representar 4096 niveles de voltaje discretos (de 0 a 4095). El voltaje de referencia es de 3.3V, por lo que cada paso es de aproximadamente 0.8 mV.
- Analógico vs Digital: Los potenciómetros proporcionan un voltaje continuo; el ADC lo convierte en un número digital.
- Sensor de temperatura interno: Una función útil para monitorizar la temperatura del chip sin componentes externos.
- Divisor de tensión: El potenciómetro actúa como un divisor de tensión, dando una fracción del voltaje de alimentación.
Errores comunes y consejos de depuración
- Mapeo de pines incorrecto: Recuerda que A0 es GPIO26, A1 es GPIO27, A2 es GPIO28 y el sensor de temperatura interno se accede a través de A3 (canal 4).
- Pines flotantes: Si el terminal central de un potenciómetro está desconectado, la lectura del ADC puede ser aleatoria. Asegúrate siempre de una conexión sólida.
- Monitor serie: Asegúrate de que la velocidad en baudios coincida (115200). En Velxio, abre el Monitor Serie desde la barra de herramientas del editor.
- LED no parpadea: El LED en este ejemplo no está controlado por código; solo está cableado. Para que parpadee, tendrías que añadir
digitalWrite(D2, HIGH)y llamadas adelay().
Extensiones sugeridas
- Añadir un tercer potenciómetro: Conecta un tercer potenciómetro a GPIO28 (A2) y léelo en el código.
- Controlar el LED: Usa la lectura de temperatura para encender el LED cuando supere un umbral.
- Graficar datos: Usa el Graficador Serie en Velxio para visualizar las lecturas analógicas a lo largo del tiempo.
- Usar sensores externos: Reemplaza los potenciómetros con una fotorresistencia (LDR) o un sensor de temperatura como el LM35.
¡Pruébalo tú mismo!
¿Listo para experimentar? Abre el ejemplo en vivo en Velxio y empieza a modificar el circuito o el código. Haz clic en el enlace de abajo para lanzar la simulación directamente en tu navegador.
Lanzar el ejemplo de lectura ADC de la Pico en Velxio
¡Feliz experimentación!