Ejercicio 01 — Leer un potenciómetro con analogRead
Dificultad: verde · Módulo 04 (Entradas analogicas)
Enunciado
Leer un potenciómetro con analogRead (0-1023) en A0 y mostrar el valor por Serial.
Montaje (Arduino UNO)
Potenciómetro → SIG=A0, VCC=5V, GND=GND
Cómo se resuelve
El primer contacto con una entrada analógica, y a propósito sin nada que actúe: aquí solo se mira. El objetivo real del ejercicio no es escribir código, que son cuatro líneas, sino ver con tus ojos cómo un giro de un mando se convierte en un número que se mueve.
El montaje es el del potenciómetro: sus dos patillas de los extremos a 5 V y GND, y la central (el cursor) a A0. Un potenciómetro es una pista resistiva con un contacto que se desliza por ella, es decir, un divisor de tensión ajustable: según dónde esté el cursor, en la patilla central aparece cualquier tensión entre 0 y 5 V. No lleva resistencia extra porque ya es él mismo el divisor completo.
En el código, lo primero es dar nombre al pin:
const int PIN_POT = A0; // pin analógico donde lee el cursor del potenciómetroFíjate en que A0 se escribe así, con la letra: no es lo mismo que el pin digital 0. Son numeraciones distintas y confundirlas es un fallo silencioso, porque el programa compila igual.
En setup() solo hay una línea:
Serial.begin(9600);Abrir el puerto serie es preparación, se hace una vez y por eso vive en setup(). El 9600 son baudios, la velocidad de la conversación, y tiene que coincidir con la que elijas en el desplegable del Serial Monitor. Si no coinciden verás caracteres basura en pantalla; el programa está bien, lo que está mal es la sintonía.
Lo que no hay en setup() también dice algo: no aparece ningún pinMode(PIN_POT, INPUT). No hace falta. Un pin analógico ya está listo para medir; solo hay que configurar los pines cuando quieres que la placa saque corriente. Ponerlo no rompería nada, pero no cambia nada tampoco.
El loop() es un ciclo de tres pasos: medir, contar, esperar.
int valor = analogRead(PIN_POT); // 0..1023 según la tensión en A0 (0V..5V)analogRead le pide al ADC que mida la tensión de A0 y la traduzca a un entero entre 0 y 1023. Con el cursor en un extremo tendrás 0 V y leerás un 0; en el otro extremo, 5 V y un 1023; en el centro, unos 512. Si al girar el mando el número se mueve al revés de lo que esperabas, simplemente tienes 5 V y GND intercambiados en los extremos: no es un error, solo el sentido de giro.
Serial.print("Pot: ");
Serial.println(valor);Son dos instrucciones y no una porque hacen cosas distintas: print escribe y deja el cursor donde estaba, println escribe y salta de línea. Así la etiqueta y el número salen juntos en la misma fila, y cada nueva lectura empieza en una fila nueva. Si usaras println en las dos, tendrías la etiqueta y el valor en líneas separadas; si usaras print en las dos, todo el historial saldría pegado en una única línea infinita.
delay(200); // no saturar el Serial MonitorLos 200 ms no están puestos para el sensor. El ADC podría leerse miles de veces por segundo sin despeinarse; el que no puede seguir el ritmo eres tú. Sin ese delay, el Serial Monitor recibiría del orden de miles de líneas por segundo y sería físicamente imposible leer nada. Cinco lecturas por segundo bastan de sobra para ver el número acompañando al giro del mando.
Cuando lo tengas funcionando, dedica un momento a jugar con el mando y observar el número: mira si llega limpiamente a 0 y a 1023 en los topes, y si en una posición fija el valor se queda quieto o baila un par de unidades arriba y abajo. Ese pequeño temblor es normal, es ruido de la medida, y saber que existe te va a hacer falta en el ejercicio 04, cuando haya que elegir un umbral.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de Arduino — Módulo 04: Entradas analógicas
* Ejercicio 01 — PRÁCTICA (rellena los TODO)
* Enunciado: Leer un potenciómetro con analogRead (0-1023) en A0 y mostrar el valor por Serial.
* Dificultad: verde
* Placa: Arduino UNO Montaje: potenciómetro -> SIG=A0, VCC=5V, GND=GND
* Correr: Arduino IDE / Wokwi (wokwi/ej01) / arduino-cli (ver README)
*/
const int PIN_POT = A0; // pin analógico donde lee el cursor del potenciómetro
void setup() {
// TODO: arranca el puerto serie -> Serial.begin(9600)
}
void loop() {
// TODO: lee el potenciómetro -> int valor = analogRead(PIN_POT)
// TODO: imprime una etiqueta -> Serial.print("Pot: ")
// TODO: imprime el valor con salto de línea -> Serial.println(valor)
// TODO: espera un poco -> delay(200)
}Solución — cópiala y ejecútala
/*
* Curso de Arduino — Módulo 04: Entradas analógicas
* Ejercicio 01 — MODELO (resuelto)
* Enunciado: Leer un potenciómetro con analogRead (0-1023) en A0 y mostrar el valor por Serial.
* Dificultad: verde
* Placa: Arduino UNO Montaje: potenciómetro -> SIG=A0, VCC=5V, GND=GND
* Correr: Arduino IDE / Wokwi (wokwi/ej01) / arduino-cli (ver README)
*/
const int PIN_POT = A0; // pin analógico donde lee el cursor del potenciómetro
void setup() {
Serial.begin(9600); // abrir el puerto serie a 9600 baudios
}
void loop() {
int valor = analogRead(PIN_POT); // 0..1023 según la tensión en A0 (0V..5V)
Serial.print("Pot: ");
Serial.println(valor); // mostrar el valor y salto de línea
delay(200); // no saturar el Serial Monitor
}Cómo ejecutar la simulación
Sin instalar nada, en el navegador
- Abre wokwi.com y crea un proyecto nuevo de la placa que pide el ejercicio.
- Pega la solución (o tu intento) en la pestaña
sketch.ino. - Abre la pestaña
diagram.json, borra lo que haya y pega el circuito de aquí abajo. - Dale al play. Verás el circuito funcionando: LEDs, pantallas y monitor serie.
Circuito del ejercicio (diagram.json)
{
"version": 1,
"author": "ESIBot",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-potentiometer", "id": "pot1", "top": -120, "left": 160, "attrs": {} }
],
"connections": [
[ "pot1:SIG", "uno:A0", "green", [] ],
[ "pot1:VCC", "uno:5V", "red", [] ],
[ "pot1:GND", "uno:GND.1", "black", [] ]
],
"dependencies": {}
}En VS Code, con el repo del curso
El paquete de simulación de este ejercicio está en practica/04-entradas-analogicas/wokwi/ej01/. Con la extensión Wokwi instalada y la licencia activada (lo cuenta el onboarding del curso):
make sim EJ=04-entradas-analogicas/ej01y después, en VS Code, Ctrl+Shift+P → Wokwi: Start Simulator. La extensión no compila: simula un firmware ya compilado, y de compilarlo se encarga ese make.
Cómo usarlo
Con placa: abre el .ino en el Arduino IDE, elige placa y puerto y pulsa Subir. Sin placa: simulalo en Wokwi con cualquiera de las dos vias de arriba. Antes de mirar la solucion, intenta completar tu el esqueleto: es la mejor forma de aprender.