Robot sensor Pololu: lógica inversa y ciclo while

Clase 38 de 38Curso Fundamentos de Desarrollo de Hardware con Arduino

Resumen

Un robot confiable empieza por una base sólida: sensores bien cableados, lógica clara y pruebas sistemáticas. Aquí verás cómo activar tu robot con un botón usando lógica inversa, leer un sensor digital Pololu basado en Sharp y estructurar un ciclo while para el flujo de decisiones. Todo en Arduino, paso a paso y sin rodeos.

¿Qué sensores y lógica usa el robot final?

El robot detecta obstáculos con un sensor de presencia Pololu digital: envía 0 cuando detecta un objeto y 1 cuando no. Pololu añade el circuito a sensores ópticos Sharp, ahorrándote resistencias y capacitores que el propio datasheet de Sharp prescribe. La acción base: si detecta un obstáculo, gira a la izquierda; si no, sigue avanzando.

¿Cómo funciona el sensor Pololu digital y los Sharp ópticos?

  • Sensor digital: 0 si hay objeto, 1 si no hay objeto.
  • Pololu integra el circuito que Sharp recomienda en su datasheet.
  • Sin ese circuito: tendrías que añadir resistencias y capacitores específicos.
  • Nota práctica: los datasheets suelen estar en inglés.

¿Qué es lógica inversa con input pull up?

  • Se usa INPUT_PULLUP en el botón: por defecto el pin está en HIGH.
  • Botón sin presionar: lectura HIGH, equivale a “no activar”.
  • Botón presionado: lectura LOW, equivale a “activar”.
  • Esto se llama lógica inversa: 0 como estado “verdadero” y 1 como “falso”.

¿Cómo decide el robot su movimiento con while?

  • Un ciclo while gobierna el comportamiento activo del robot.
  • Entras al while cuando el botón se presiona y el estado pasa a LOW.
  • Sales del while al volver a presionar el botón, cambiando el estado a HIGH.
  • Dentro del while: leer sensor y decidir entre avanzar o girar a la izquierda.

¿Cómo se programa el botón de inicio con Arduino?

La clave es una variable de estado y el uso correcto de HIGH/LOW con INPUT_PULLUP. Además, se añade un delay de 300 ms para evitar el debouncing (rebote), que puede registrar múltiples lecturas con una sola pulsación.

¿Qué variables y estados controlan el flujo?

  • botonEstado: gestiona si el robot está activo (LOW) o inactivo (HIGH).
  • botonValor: guarda la lectura inmediata del botón.
  • Inicializa botonEstado en HIGH para que al encender no se mueva por accidente.

¿Cómo leer el botón y evitar el rebote?

  • Lee con digitalRead y, si está en LOW, cambia el estado y aplica delay(300).
  • Ese retardo evita múltiples activaciones por rebote mecánico.
  • Si no está presionado, mantén botonEstado en HIGH.

¿Cómo estructurar el ciclo while de activación?

// Pines
const int botonUno = 7;           // botón en pin 7
const int sensorObstaculo = 2;    // sensor Pololu digital en pin 2

// Estado
int botonEstado = HIGH;  // inactivo al iniciar
int botonValor  = HIGH;

void setup() {
  pinMode(botonUno, INPUT_PULLUP);
  pinMode(sensorObstaculo, INPUT);
  // setup de motores/driver omitido; usa tu "librería de movimientos".
}

void loop() {
  // Lectura inicial del botón para entrar/salir del modo activo
  botonValor = digitalRead(botonUno);
  if (botonValor == LOW) {
    botonEstado = LOW;   // activar
    delay(300);          // anti-rebote
  } else {
    botonEstado = HIGH;  // inactivar
  }

  // Modo activo: ciclo principal
  while (botonEstado == LOW) {
    int lectura = digitalRead(sensorObstaculo);

    if (lectura == LOW) {
      // obstáculo detectado
      girarIzquierda();
    } else {
      avanzar();
    }

    // Opción de salida del modo activo
    botonValor = digitalRead(botonUno);
    if (botonValor == LOW) {
      botonEstado = HIGH; // salir
      delay(300);         // anti-rebote
    }
  }
}

// Implementa avanzar() y girarIzquierda() en tu "librería de movimientos".

¿Cómo probar, depurar y ampliar el prototipo?

Un buen debugging empieza por lo físico: conexiones, pines y alimentación. Luego, verifica la lógica y vuelve a cargar el sketch.

¿Qué checklist eléctrico evita fallos?

  • Revisa polaridad de la batería: rojo a positivo, negro a negativo.
  • Asegura conectores y cables: no deben estar flojos.
  • Verifica mapeo de pines: botón en 7, sensor en 2. Error común: conectar el botón en 12 cuando el código usa 7.

¿Cómo verificar el software y el cableado?

  • Compila y vuelve a hacer upload tras cualquier cambio.
  • Confirma INPUT_PULLUP en el botón.
  • Inicializa botonEstado en HIGH para evitar arranques accidentales.
  • Si algo “no debería fallar”, revisa el circuito antes de culpar al código.

¿Qué mejoras propone el desafío final?

  • Añade dos sensores de presencia extra: izquierda y derecha.
  • Programa evasión: obstáculo a la izquierda, gira a la derecha; a la derecha, gira a la izquierda; al frente, gira a la izquierda o haz reversa.
  • Integra un sensor ultrasónico para conciencia del entorno.
  • Usa tu driver L293 para mover motores sin problema.
  • Documenta con un diagrama de flujo y practica para llegar listo al curso de Robótica con Arduino.

¿Con qué sensores y comportamientos ampliarías este robot? Comparte tus ideas, tu diagrama de flujo y dudas en los comentarios.

      Robot sensor Pololu: lógica inversa y ciclo while