Programación de Funciones de Control de Movimiento en Arduino

Clase 37 de 38Fundamentos de Desarrollo de Hardware con Arduino

Resumen

¿Cómo crear funciones para controlar el movimiento de un robot?

En el fascinante mundo de la robótica y la automatización, saber cómo desarrollar funciones que controlen los movimientos básicos de un robot es esencial. En este artículo, vamos a aprender a escribir funciones en un programa que permitirá a nuestro robot moverse hacia adelante, girar a la izquierda, girar a la derecha e incluso hacer reversa, lo que asienta las bases del viaje hacia la automatización.

¿Cómo se declara una función en Arduino?

Antes de aventurarnos en el control del movimiento, es necesario comprender la declaración de funciones en el contexto de Arduino. En Arduino, las funciones se declaran con la palabra clave void si no van a retornar ningún valor.

void derecho() {
  // Funcionalidad de la función
}
  • Void: indica que la función no retornará un valor.
  • Nombre de la función: en este caso, derecho.
  • Paréntesis: vacíos si no se pasan argumentos.
  • Llaves: conteniendo las acciones que efectuará esta función.

¿Cómo hacer que un motor avance derecho?

Para que nuestro robot avance hacia adelante, se deben controlar adecuadamente los motores. Esto se logra activando y desactivando pines específicos.

void derecho() {
  digitalWrite(motorUnoA, HIGH);
  digitalWrite(motorUnoB, LOW);
  digitalWrite(motorDosA, HIGH);
  digitalWrite(motorDosB, LOW);
}

Este bloque de código activa los motores de manera que ambos avancen en línea recta.

¿Cómo hacer que el robot gire a la izquierda o a la derecha?

El giro es una tarea fundamental para la maniobrabilidad del robot. Lo conseguimos alterando la dirección de las ruedas.

Giro a la izquierda

Para girar a la izquierda se debe detener o revertir una de las ruedas.

void giroIzquierda() {
  digitalWrite(motorUnoA, LOW); // La llanta izquierda va hacia atrás
  digitalWrite(motorUnoB, HIGH);
  digitalWrite(motorDosA, HIGH); // La llanta derecha sigue hacia adelante
  digitalWrite(motorDosB, LOW);
}

Este enfoque es simple y eficiente para girar al robot sobre su eje.

Giro a la derecha

La lógica es similar al giro izquierdo.

void giroDerecha() {
  digitalWrite(motorUnoA, HIGH); // La llanta izquierda sigue hacia adelante
  digitalWrite(motorUnoB, LOW);
  digitalWrite(motorDosA, LOW); // La llanta derecha va hacia atrás
  digitalWrite(motorDosB, HIGH);
}

¿Cómo se integra la detección de obstáculos?

Para que el robot sea capaz de reaccionar ante obstáculos, se puede emplear un sensor que avise cuando hay algo en el camino.

Leyendo el sensor

La lectura del sensor nos permitirá tomar decisiones según el estado del camino.

int sensorUnoState = 0; // Variable para almacenar el estado del sensor

sensorUnoState = digitalRead(sensorUno);

if (sensorUnoState == HIGH) {
  derecho();
  analogWrite(PWM1, 127);
  analogWrite(PWM2, 127);
} else {
  giroIzquierda();
}
  • sensorUnoState: almacena el estado del sensor.
  • If: verifica si el sensor está alto (sin detectar obstáculos).
  • AnalogWrite: establece la velocidad del motor; 127 es una velocidad media ideal para pruebas.

Esta estructura permite que el robot avance libremente mientras no encuentre obstáculos, girando a la izquierda al detectar algo.

¿Cómo asegurar el correcto funcionamiento del programa?

Probar el código es crucial. Compilemos el programa y carguémoslo al Arduino para comprobar que no haya errores sintácticos. Al compilar, soluciona cualquier problema que surja y ajusta el código en consecuencia.

Con esta estructura lógica y estas funciones básicas podrás controlar los movimientos de tu robot y expandir sus habilidades a medida que tu proyecto evolucione. Sigue adelante, la robótica es un campo lleno de posibilidades y creatividad. ¡Pronto estarás construyendo y programando robots aún más complejos!