Nivel 1 - Outputs

P2: NAVE CON LUCES

Construye una nave espacial con LEGO y controla la potencia de sus motores (LEDs) girando un potenciometro. Primera introduccion a senales analogicas y PWM.

45
Minutos
6
Componentes
58
Lineas de codigo
01

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.

Potencia: 128 / 255

Mueve el slider para simular el potenciometro

Lo que aprenderas:

  • 1 Leer valores analogicos con analogRead()
  • 2 Escribir valores PWM con analogWrite()
  • 3 Convertir rangos con la funcion map()
  • 4 Usar el Monitor Serial para depurar
02

Hardware necesario

El potenciometro es nuestro primer sensor. Permite leer valores variables, no solo encendido/apagado.

Arduino UNO
El cerebro de la nave
Potenciometro
Resistencia variable - entrada A0
2x LED
Pines PWM: 9 y 10
2x Resistencia 220ohm
Una por cada LED
Cables
Minimo 7 cables

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

ARDUINO UNO A0 ~9 ~10 5V GND POTENCIOMETRO 5V A0 GND MOTORES NAVE L1 L2 220 220 A0: entrada analogica (pot) ~9, ~10: salidas PWM (LEDs) 5V alimenta pot

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

Nave espacial con motores LED

Coche

Coche con faros regulables

Casa

Casa con luces dimmer

Robot

Robot con ojos brillantes

03

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_luces.ino
// 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
}
Monitor Serial (9600 baud) COM3
Pot: 0 -> Brillo: 0
Pot: 256 -> Brillo: 64
Pot: 512 -> Brillo: 127
Pot: 768 -> Brillo: 191
Pot: 1023 -> Brillo: 255

Explicacion linea por linea:

1

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.

2

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.

3

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.

4

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).

5

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 ~).

6

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.

7

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().

04

Simulador interactivo

Prueba el potenciometro y los LEDs en el simulador antes de montar el hardware.

Wokwi Simulator

Abrir en Wokwi

Configurar 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!

05

Paso a paso

Monta la nave con luces en 8 pasos.

1

Prepara el potenciometro

El potenciometro tiene 3 patas. Identificalas: izquierda (GND), centro (senal), derecha (5V). La perilla giratoria controla la resistencia.

2

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.

Tip: Si los LEDs van al reves (maximo brillo cuando deberia ser minimo), intercambia las conexiones de 5V y GND del pot.
3

Prepara los LEDs

Igual que en proyectos anteriores: pata larga (+) hacia Arduino, pata corta (-) hacia GND. Cada LED necesita su resistencia de 220ohm.

4

Conecta LED1 al pin 9

Pin ~9 (con virgulilla) - resistencia 220ohm - LED - GND. El pin 9 es PWM, asi que podra variar el brillo.

5

Conecta LED2 al pin 10

Pin ~10 - resistencia 220ohm - LED - GND. Ambos LEDs brillaran igual porque reciben el mismo valor de brillo.

6

Sube el codigo

Conecta Arduino, abre Arduino IDE, pega el codigo, selecciona placa/puerto y sube.

7

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.

8

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!

06

Experimentos

Modifica el codigo para crear efectos diferentes.

Facil

Brillo diferente

Haz que LED2 tenga la mitad de brillo que LED1: analogWrite(LED2, brillo / 2);

Facil

Brillo invertido

Un LED se enciende cuando el otro se apaga: analogWrite(LED2, 255 - brillo);

Medio

Efecto respirar

Sin potenciometro, usa un bucle for para subir y bajar el brillo automaticamente: for(int i=0; i<=255; i++)

Medio

Umbral de encendido

Los LEDs solo se encienden si el pot pasa de 512: if(lectura > 512)

Desafio

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.

Desafio

Dos potenciometros

Usa A0 para LED1 y A1 para LED2. Ahora puedes controlar cada motor de la nave de forma independiente!