Tomo 6: El Control Fino - Potenciómetros y Servomotores

¡Hola, equipo! En el primer parcial, aprendimos a trabajar con señales digitales: HIGH o LOW, encendido o apagado. Pero el mundo real no es tan simple. ¿Qué pasa con los valores intermedios? ¿Cómo controlamos el volumen de una bocina o la posición exacta de un brazo robótico?

Hoy nos sumergimos en el mundo analógico. Aprenderemos a leer valores "grises" con un potenciómetro y a crear movimiento preciso y controlado con un servomotor.

🧠 Protagonista 1: El Potenciómetro (La Perilla de Control)

Un potenciómetro es una resistencia variable. Piensa en él como la perilla de volumen de un estéreo o el regulador de luz de una lámpara. Al girar su eje, cambias la cantidad de resistencia que ofrece, y Arduino puede leer ese cambio como un valor de voltaje.

Imagen de un potenciómetro comercial mostrando sus tres pines

⚙️ Protagonista 2: El Servomotor (El Músculo Preciso)

Un servomotor no es como un motor normal que solo gira sin parar. Un servo tiene un "cerebro" interno (un pequeño circuito de control) que le permite girar a un ángulo exacto, generalmente entre 0 y 180 grados, y mantenerse firme en esa posición. ¡Es ideal para brazos robóticos o sistemas de dirección!

Imagen de un micro servomotor SG90 con sus cables de conexión

🔌 El Circuito: Perilla de Mando

Construiremos un sistema donde la posición del potenciómetro controle directamente el ángulo del servomotor. ¡Es la base de un control remoto!

Componentes Necesarios:

📝 Instrucciones de Conexión:

  1. Potenciómetro:
    • Pin izquierdo: a 5V del Arduino.
    • Pin derecho: a GND del Arduino.
    • Pin central: al pin analógico A0 del Arduino.
  2. Servomotor:
    • Cable Marrón o Negro: a GND del Arduino.
    • Cable Rojo: a 5V del Arduino.
    • Cable Naranja o Amarillo (Señal): al pin digital 9 (fíjate que tiene el símbolo ~ que soporta PWM).

⚡ Diagrama de armado

Diagrama de Tinkercad mostrando un potenciómetro conectado a A0 y un Servomotor conectado al pin 9

💡 Conceptos Clave de la Misión

🧠 El Código: Traduciendo Perilla a Movimiento

El reto aquí es "mapear" o traducir el rango de lectura del potenciómetro (0 a 1023) al rango de movimiento del servo (0 a 180). Por suerte, ¡Arduino tiene una función perfecta para eso!

Código Arduino

/*
 * Misión 06: Control Fino
 * Descripción: Controla el ángulo de un servomotor usando un potenciómetro.
 * Por: Profe Campos
 * CECyTEM 05 Guacamayas
*/

// Primero, necesitamos incluir la librería oficial de Arduino para Servos.
// Una librería es un conjunto de código pre-hecho que nos facilita la vida.
#include <Servo.h>

// --- ZONA DE CONFIGURACIÓN ---
Servo miServo; // Creamos un objeto "Servo". Piensa que es como darle un nombre a nuestro motor.

const int pinPot = A0;  // Pin donde leemos el potenciómetro.
const int pinServo = 9; // Pin donde controlamos el servo.

int valorPot; // Variable para guardar la lectura del potenciómetro (0-1023).
int angulo;   // Variable para guardar el ángulo calculado para el servo (0-180).

void setup() {
  Serial.begin(9600); // Iniciamos el monitor para ver los valores.
  
  // "Adjuntamos" nuestro servo al pin 9. Ahora Arduino sabe dónde está conectado.
  miServo.attach(pinServo); 
}

void loop() {
  // 1. LEER: Obtenemos la posición de la perilla (0 a 1023).
  valorPot = analogRead(pinPot);

  // 2. TRADUCIR (El gran truco): 
  // La función map() convierte una escala en otra.
  // map(variable, min_viejo, max_viejo, min_nuevo, max_nuevo);
  angulo = map(valorPot, 0, 1023, 0, 180);

  // 3. ACTUAR: Le decimos al servo que se mueva al nuevo ángulo.
  miServo.write(angulo);

  // 4. DIAGNÓSTICO: Imprimimos ambos valores para ver la traducción en vivo.
  Serial.print("Perilla: ");
  Serial.print(valorPot);
  Serial.print(" -> Angulo: ");
  Serial.println(angulo);

  delay(15); // Una pausa muy cortita para darle tiempo al motor de llegar a su posición.
}

🚀 ¡Inténtalo Tú Mismo! (Retos)