Programación de Funciones de Control de Movimiento en Arduino
Clase 37 de 38 • Curso Fundamentos de Desarrollo de Hardware con Arduino
Contenido del curso
Introducción al hardware libre
- 3

Arduino: Desarrolla Prototipos Interactivos con Microcontroladores
11:46 min - 4

Desarrollo de Prototipos de Hardware: Diseño y Fabricación
09:18 min - 5

Diseño Mecánico de Hardware con SolidWorks y Herramientas Paramétricas
05:03 min - 6

Desarrollo de Interfaces y Prototipos con QT en Sistemas Embebidos
04:07 min - 7

Limitaciones de Arduino en productos finales
04:27 min - 8
Selección de Arduino para Envío de Datos a Servidor
00:14 min - 9
Fundamentos de Desarrollo de Hardware con Arduino
01:27 min - 10
Proyectos con Arduino: Componentes y Materiales Necesarios
01:13 min
Sensores, Actuadores y Procesadores
Introducción a la electrónica
Manos a la obra
- 19

Conociendo los Puertos y Alimentación del Arduino Uno
09:40 min - 20

Funcionamiento de la Protoboard para Prototipado Electrónico
04:36 min - 21

Programación Básica en Arduino: Primeros Pasos con LED y Código
07:53 min - 22

Declarar variables para pines de Arduino
05:53 min - 23

Creación y Uso de Librerías en Arduino
03:09 min - 24

Uso del Potenciómetro para Control de LED con Arduino
10:06 min - 25

Comunicación Serial en Arduino: Uso del Monitor Serial
10:32 min - 26

Cómo PWM simula voltaje analógico
05:51 min - 27

Cómo Arduino simplifica el PWM
14:18 min - 28

Uso de Botones con Resistencia Pull-Up en Arduino
13:01 min - 29

Monitor temperatura con Arduino y LM35
10:59 min - 30

Cálculo del Multiplicador para Convertir Lecturas de Sensor a Celsius
05:05 min - 31

LCD 16x2 con Arduino sin conexión PC
17:28 min - 32

Programación de Semáforos con Arduino y Sensores
02:09 min
Automatización de procesos
- 33

Motores con Arduino y puente H L293D
23:17 min - 34

Cómo funciona un servomotor con Arduino
11:06 min - 35

Potenciómetro controla servomotor en Arduino
04:35 min - 36

Proyecto: Construcción y Programación de un Robot de Evasión de Obstáculos
08:53 min - 37

Programación de Funciones de Control de Movimiento en Arduino
Viendo ahora - 38

Robot sensor Pololu: lógica inversa y ciclo while
17:47 min
Controla un robot móvil con confianza: aprende a crear funciones void para mover motores, configurar pines HIGH/LOW, leer un sensor con digitalRead y aplicar velocidad con analogWrite. Verás cómo estructurar la lógica mínima (MVP) para avanzar o girar al detectar obstáculos, con prácticas de depuración sobre la marcha.
¿Qué aprenderás sobre funciones y movimiento en Arduino?
Crearás funciones globales para mover el robot: avanzar (derecho), girar a la izquierda (giroizquierda) y girar a la derecha (giroderecha). Estas funciones no van en setup ni en loop: se declaran de forma global, debajo de las variables. Se usan como procedimientos que cambian estados de pines, por eso se definen con tipo void y sin argumentos.
- Declarar funciones fuera de setup y loop evita errores de alcance.
- Usar HIGH/LOW define el sentido de giro por motor.
- El giro más rápido se logra invirtiendo el sentido de una llanta mientras la otra sigue hacia adelante.
¿Cómo declarar funciones void fuera de setup y loop?
- Escribe: tipo de retorno, nombre y paréntesis vacíos.
- Dentro de llaves, configura pines con digitalWrite.
Ejemplo:
void derecho() {
digitalWrite(MOTOR1A, HIGH);
digitalWrite(MOTOR1B, LOW);
digitalWrite(MOTOR2A, LOW);
digitalWrite(MOTOR2B, HIGH);
}
¿Cómo se controla cada motor con HIGH/LOW?
- Motor derecho: un pin en HIGH y el opuesto en LOW para avanzar.
- Motor izquierdo: igual, pero invirtiendo para reversa.
- Al girar a la izquierda, la llanta derecha sigue adelante y la izquierda va en reversa.
void giroizquierda() { // invierte el motor izquierdo
digitalWrite(MOTOR1A, LOW);
digitalWrite(MOTOR1B, HIGH);
digitalWrite(MOTOR2A, LOW);
digitalWrite(MOTOR2B, HIGH);
}
void giroderecha() { // invierte el motor derecho
digitalWrite(MOTOR1A, HIGH);
digitalWrite(MOTOR1B, LOW);
digitalWrite(MOTOR2A, HIGH);
digitalWrite(MOTOR2B, LOW);
}
¿Cómo se gira a la izquierda o derecha invirtiendo un motor?
- Izquierda: invierte el motor izquierdo y mantiene el derecho hacia adelante.
- Derecha: invierte el motor derecho y mantiene el izquierdo hacia adelante.
- Así, el prototipo gira sobre su eje con rapidez.
¿Cómo se implementa la lógica MVP con el sensor y PWM?
Se plantea una lógica simple: si el sensor no detecta, el robot avanza; si detecta, gira a la izquierda. Para ello, se lee el estado con digitalRead en una variable entera y se decide con if/else. La velocidad se fija con analogWrite a un valor medio, por ejemplo 127, en ambos pines PWM.
- Variable para el estado:
int sensor_uno_state = 0;. - Lectura:
sensor_uno_state = digitalRead(SENSOR1);. - Decisión: si es HIGH, avanzar; si no, girar.
- Velocidad uniforme:
analogWrite(PWM1, 127); analogWrite(PWM2, 127);.
Ejemplo:
int sensor_uno_state = 0;
void loop() {
sensor_uno_state = digitalRead(SENSOR1);
if (sensor_uno_state == HIGH) { // no detecta obstáculo
derecho();
} else { // detecta obstáculo
giroizquierda();
}
analogWrite(PWM1, 127);
analogWrite(PWM2, 127);
}
¿Qué significa HIGH y LOW en Arduino?
- Representan lógicos 1 y 0, respectivamente.
- El sensor entrega HIGH cuando no detecta y LOW cuando detecta.
- Úsalos en comparaciones en lugar de 1 y 0.
¿Por qué usar else en lugar de else if?
- El sensor tiene dos estados: basta con
ifyelse. - Reduce complejidad y errores.
¿Cómo asignar velocidad media con analogWrite?
- analogWrite(pinPWM, 127) define un ciclo de trabajo medio.
- Aplica el mismo valor a los dos PWM para que ambas llantas coincidan en velocidad.
¿Qué buenas prácticas y depuración del sketch conviene aplicar?
Conviene compilar y verificar frecuentemente mientras avanzas. Se detectaron errores de nombres como giro deeecha o giro izquiera, que se corrigieron a giroderecha y giroizquierda. También se puede cargar el sketch aunque no haya conexiones, para validar que compila sin fallos antes de pasar al cableado en el protoboard.
- Declara funciones de control como globales.
- Usa nombres consistentes en funciones y variables.
- Verifica el sketch con frecuencia.
- Mantén una versión MVP: avanza si no detecta, gira si detecta.
- Ajusta PWM según necesites estabilidad o respuesta.
¿Tienes dudas sobre la lógica o quieres proponer otra estrategia de giro? Cuéntalo en los comentarios y comparte tu enfoque.