Curso C para Arduino

⚙️ Tipos de motores más comunes

Tipo de motorControlable porUsos comunes
ServoPWMBrazo robótico, dirección, ejes
DC (corriente continua)PWM + H-BridgeRuedas, ventiladores, bombas
Paso a paso (stepper)Secuencias de pasosImpresoras 3D, CNC, cámaras

🔸 1. Servomotores (SG90, MG996R...)

Los servos se controlan con una señal PWM especial, que determina su ángulo entre 0° y 180°.

📦 Conexión

  • Rojo: 5V
  • Marrón o negro: GND
  • Naranja o amarillo: señal (ej. pin 9)

🧪 Código básico con Servo.h

1#include <Servo.h>
2
3Servo servoMotor;
4
5void setup() {
6  servoMotor.attach(9); // Pin de control
7}
8
9void loop() {
10  servoMotor.write(0);    // Gira a 0 grados
11  delay(1000);
12  servoMotor.write(90);   // Gira a 90 grados
13  delay(1000);
14  servoMotor.write(180);  // Gira a 180 grados
15  delay(1000);
16}

🔸 2. Motores DC con L298N o L293D

Para controlar un motor DC necesitas:

  • Alimentación externa (el motor no debe alimentarse directamente del Arduino)
  • Un puente H (como L298N, L293D)
  • Señales PWM para velocidad y digitales para dirección

📦 Conexión básica L298N

L298N PinArduino
ENAPWM (ej. 9)
IN18
IN27
GNDGND
12VFuente externa

🧪 Código para dirección + velocidad

1const int ENA = 9;
2const int IN1 = 8;
3const int IN2 = 7;
4
5void setup() {
6  pinMode(ENA, OUTPUT);
7  pinMode(IN1, OUTPUT);
8  pinMode(IN2, OUTPUT);
9}
10
11void loop() {
12  // Adelante
13  digitalWrite(IN1, HIGH);
14  digitalWrite(IN2, LOW);
15  analogWrite(ENA, 200); // velocidad de 0 a 255
16  delay(2000);
17
18  // Detener
19  analogWrite(ENA, 0);
20  delay(1000);
21
22  // Atrás
23  digitalWrite(IN1, LOW);
24  digitalWrite(IN2, HIGH);
25  analogWrite(ENA, 150);
26  delay(2000);
27}

🔸 3. Motores paso a paso

Se mueven paso a paso, permitiendo control muy preciso de ángulo y posición.

🔹 Ejemplo: 28BYJ-48 + ULN2003

Se conecta a través de una placa controladora ULN2003 que usa 4 pines digitales.

🧪 Código con Stepper.h

1#include <Stepper.h>
2
3const int pasosPorVuelta = 2048;
4
5Stepper motor(pasosPorVuelta, 8, 10, 9, 11); // orden de pines recomendado
6
7void setup() {
8  motor.setSpeed(10); // RPM
9}
10
11void loop() {
12  motor.step(pasosPorVuelta); // una vuelta completa
13  delay(1000);
14  motor.step(-pasosPorVuelta); // en sentido contrario
15  delay(1000);
16}

🔹 Ejemplo avanzado: NEMA17 + A4988

  • Controla motores paso a paso más potentes.
  • Usa 2 pines: STEP y DIR.

Se debe ajustar el potenciómetro del A4988 para limitar corriente.

🧪 Código básico (sin librería):

1const int DIR = 3;
2const int STEP = 4;
3
4void setup() {
5  pinMode(DIR, OUTPUT);
6  pinMode(STEP, OUTPUT);
7}
8
9void loop() {
10  digitalWrite(DIR, HIGH); // dirección
11  for (int i = 0; i < 200; i++) {
12    digitalWrite(STEP, HIGH);
13    delayMicroseconds(800);
14    digitalWrite(STEP, LOW);
15    delayMicroseconds(800);
16  }
17
18  delay(1000);
19}

🎚️ PWM (Pulse Width Modulation)

  • Señal digital que simula valores analógicos mediante pulsos rápidos.
  • En Arduino, se genera con analogWrite(pin, valor) donde valor va de 0 a 255.
  • Se usa para:
    • Controlar velocidad de motores DC
    • Atenuar LEDs
    • Simular tensión variable

📌 Pines PWM en Arduino UNO: 3, 5, 6, 9, 10, 11


🧠 Recomendaciones

MotorControladorLibrería útilNotas
Servo (SG90, etc)DirectoServo.hIdeal para ángulos precisos
DCL298N, L293DNinguna o PWMUsa analogWrite() + IN1/2
Stepper (28BYJ)ULN2003Stepper.hControl por pasos
Stepper (NEMA)A4988/DRV8825AccelStepperControl suave y preciso

🧪 Proyecto sugerido

"Brazo robótico controlado por potenciómetros"

  • 3 servos (base, brazo, pinza)
  • Cada uno controlado por un potenciómetro
  • Muestra los ángulos en pantalla OLED o Serial