Que vamos a conseguir?
Una nave espacial LEGO con LEDs en los motores. Al girar el potenciometro, los LEDs cambian de intensidad: de apagados a maxima potencia.
Mueve el slider para simular el potenciometro
Lo que aprenderas:
-
Leer valores analogicos con
analogRead() -
Escribir valores PWM con
analogWrite() -
Convertir rangos con la funcion
map() - Usar el Monitor Serial para depurar
Hardware necesario
El potenciometro es nuestro primer sensor. Permite leer valores variables, no solo encendido/apagado.
Digital vs Analogico
Digital (P0, P1)
Solo 2 estados: HIGH (5V) o LOW (0V). Como un interruptor: encendido o apagado.
Analogico (P2)
Valores continuos: de 0 a 1023 (lectura) o de 0 a 255 (escritura PWM).
Diagrama de conexion
Que es un potenciometro?
Un potenciometro es una resistencia variable. Tiene 3 patas: las dos externas se conectan a 5V y GND, y la del medio (cursor) da un voltaje que varia segun gires la perilla. Cuando esta a tope hacia 5V, da 1023. Cuando esta hacia GND, da 0. En medio, valores intermedios.
Que es PWM?
PWM significa Pulse Width Modulation (Modulacion por Ancho de Pulso). Arduino no puede dar voltajes intermedios (solo 0V o 5V), pero puede encender y apagar muy rapido. Si esta encendido el 50% del tiempo, el LED brilla a media intensidad. Los pines con ~ (como ~9, ~10) soportan PWM.
Por que usamos map()?
El potenciometro da valores de 0 a 1023 (10 bits),
pero PWM acepta de 0 a 255 (8 bits).
La funcion map(valor, 0, 1023, 0, 255) convierte automaticamente
entre estos rangos. Es como una regla de tres automatica.
Ideas para construir con LEGO
El nino construye la nave mientras tu preparas el circuito:
Nave espacial con motores LED
Coche con faros regulables
Casa con luces dimmer
Robot con ojos brillantes
El codigo explicado
Este programa lee un valor analogico, lo convierte, y lo aplica a los LEDs. Ademas, mostramos los valores en el Monitor Serial para depurar.
// P2: Nave con Luces - EigenRobotics
const int POT = A0; // Potenciometro en pin analogico A0
const int LED1 = 9; // Primer LED (motor izquierdo)
const int LED2 = 10; // Segundo LED (motor derecho)
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Serial.begin(9600); // Iniciar comunicacion serial
}
void loop() {
// Leer potenciometro (0-1023)
int lectura = analogRead(POT);
// Convertir a rango de brillo (0-255)
int brillo = map(lectura, 0, 1023, 0, 255);
// Aplicar brillo a los LEDs
analogWrite(LED1, brillo);
analogWrite(LED2, brillo);
// Mostrar en monitor serial
Serial.print("Pot: ");
Serial.print(lectura);
Serial.print(" -> Brillo: ");
Serial.println(brillo);
delay(50); // Pequena pausa para estabilidad
}
Pot: 256 -> Brillo: 64
Pot: 512 -> Brillo: 127
Pot: 768 -> Brillo: 191
Pot: 1023 -> Brillo: 255
Explicacion linea por linea:
const int POT = A0;
A0 es un pin analogico. Arduino UNO tiene 6 (A0-A5).
Estos pines pueden leer voltajes entre 0V y 5V y convertirlos a numeros entre 0 y 1023.
Los pines digitales (0-13) solo leen HIGH o LOW.
Serial.begin(9600);
Inicia la comunicacion serial a 9600 baudios (velocidad). Esto permite que Arduino envie mensajes al ordenador. Abre el Monitor Serial en Arduino IDE (boton lupa) para verlos.
int lectura = analogRead(POT);
analogRead() lee el voltaje en el pin A0 y devuelve un numero de 0 a 1023.
Si el potenciometro esta al minimo: 0. Al maximo: 1023. En medio: ~512.
Guardamos el resultado en la variable lectura.
int brillo = map(lectura, 0, 1023, 0, 255);
La funcion map() convierte un valor de un rango a otro.
Aqui convertimos de 0-1023 (entrada analogica) a 0-255 (PWM).
Si lectura=512 (mitad), brillo sera ~127 (mitad de 255).
analogWrite(LED1, brillo);
analogWrite() envia una senal PWM al pin. El valor va de 0 (apagado)
a 255 (maximo brillo). Con brillo=127, el LED estara al ~50%.
Solo funciona en pines PWM (marcados con ~).
Serial.print() / Serial.println()
Serial.print() escribe texto sin salto de linea.
Serial.println() escribe y salta a la siguiente linea.
Muy util para depurar: ver que valores lee el sensor.
delay(50);
Pequeña pausa de 50ms para estabilidad. Sin ella, el loop iria demasiado rapido y el Monitor Serial se llenaria de mensajes. 50ms = 20 lecturas por segundo.
Conceptos clave:
analogRead()
Lee voltaje (0-5V) y devuelve 0-1023. Solo funciona en pines A0-A5. Resolucion de 10 bits = 1024 valores posibles.
analogWrite()
Escribe PWM (0-255) en pines con ~. No es voltaje real, sino pulsos rapidos que simulan voltajes intermedios.
map(valor, fromLow, fromHigh, toLow, toHigh)
Convierte un valor de un rango a otro proporcionalmente. Muy util para adaptar sensores a salidas.
Serial Monitor
Herramienta de depuracion. Abre con Ctrl+Shift+M o el boton lupa.
Muestra lo que Arduino envia con Serial.print().
Simulador interactivo
Prueba el potenciometro y los LEDs en el simulador antes de montar el hardware.
Wokwi Simulator
Abrir en WokwiConfigurar el simulador
1. Copia el codigo del proyecto.
2. Anade un Potentiometer desde el menu de componentes.
3. Conecta: pata izquierda a GND, pata derecha a 5V, pata central a A0.
4. Anade 2 LEDs con resistencias en pines 9 y 10.
5. Dale a Play y gira el potenciometro virtual!
Paso a paso
Monta la nave con luces en 8 pasos.
Prepara el potenciometro
El potenciometro tiene 3 patas. Identificalas: izquierda (GND), centro (senal), derecha (5V). La perilla giratoria controla la resistencia.
Conecta el potenciometro
Pata izquierda a GND de Arduino. Pata derecha a 5V. Pata central a pin A0. Ahora al girar, A0 recibira entre 0V y 5V.
Prepara los LEDs
Igual que en proyectos anteriores: pata larga (+) hacia Arduino, pata corta (-) hacia GND. Cada LED necesita su resistencia de 220ohm.
Conecta LED1 al pin 9
Pin ~9 (con virgulilla) - resistencia 220ohm - LED - GND. El pin 9 es PWM, asi que podra variar el brillo.
Conecta LED2 al pin 10
Pin ~10 - resistencia 220ohm - LED - GND. Ambos LEDs brillaran igual porque reciben el mismo valor de brillo.
Sube el codigo
Conecta Arduino, abre Arduino IDE, pega el codigo, selecciona placa/puerto y sube.
Abre el Monitor Serial
Pulsa Ctrl+Shift+M (o el boton de lupa). Asegurate de que la velocidad sea 9600 baud. Veras los valores que lee el potenciometro en tiempo real.
Gira el potenciometro!
Al girar la perilla, los LEDs cambiaran de intensidad. En el Monitor Serial veras los valores cambiar. Potencia de la nave: controlada!
Experimentos
Modifica el codigo para crear efectos diferentes.
Brillo diferente
Haz que LED2 tenga la mitad de brillo que LED1:
analogWrite(LED2, brillo / 2);
Brillo invertido
Un LED se enciende cuando el otro se apaga:
analogWrite(LED2, 255 - brillo);
Efecto respirar
Sin potenciometro, usa un bucle for para subir y bajar el brillo automaticamente:
for(int i=0; i<=255; i++)
Umbral de encendido
Los LEDs solo se encienden si el pot pasa de 512:
if(lectura > 512)
Mas LEDs
Anade 4 LEDs mas en pines PWM (3, 5, 6, 11) y crea un efecto de barra de potencia que se llena segun giras el pot.
Dos potenciometros
Usa A0 para LED1 y A1 para LED2. Ahora puedes controlar cada motor de la nave de forma independiente!