Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Pequeño Rover con Arduino: Construye tu Robot Autónomo Evita Obstáculos

Componentes y materiales

Herramientas necesarias

Aplicaciones y servicios online

Sobre el proyecto

Contexto

Mi sobrino (9 años) y mi sobrina (7) alucinaron al ver un video de un robot evita-obstáculos que construí hace tiempo. Tutorial de ese nunca saldrá porque mi disco duro murió y descubrí las bondades de backups, DropBox, GitHub, etc. :)

Decidí crear algo educativo y divertido, simplificando al máximo. El chasis es una caja que contenía palitos de cangrejo; su tamaño era perfecto. (¡Gracias a mi padre por zamparse cajas enteras! :D) Una caja de margarina también valdría.

Aviso: Describo cómo lo construimos dejando que los niños hicieran casi todo. Yo no recomiendo hacerlo necesariamente; tú, como adulto responsable, decides si cada niño puede manejar cada tarea. Aunque no era estrictamente necesario, los niños usaron gafas de protección al cortar. Las cajas eran de plástico blando, así que les dejé cortar con el cúter tras explicarles los peligros. Para los agujeros de los LEDs usamos un destornillador eléctrico pequeño para limitar riesgos.

Me alegro decir que el botiquín de primeros auxilios sigue sin usar. :) Pero repito: ¡TÚ eres el adulto!

Circuito

Hice el circuito un poco más complicado de lo necesario conectando ambos servos como lo hice. Para los niños (que incluían a mi hermana de 35 y a mi madre de 65, ¡disfrutaron tanto como los peques!), imprimí la imagen del circuito en A4 a escala 1:1 con la protoboard real y les di cables jumper del color y longitud exactos.

Una vez montado el circuito, carga el programa en el Arduino. He incluido comentarios en el código para ayudar a ajustarlo. Si todo está bien conectado, los servos empezarán a girar y los LEDs parpadearán. Si pones la mano frente al sensor, un servo se detendrá y el otro girará en sentido contrario brevemente. ¡Listo!

Montaje

  1. Frontal: Marca la posición del sensor y recorta los "ojos".
  2. Lados: Mide dónde irán las ruedas y corta un hueco en el lateral, en el borde inferior de la caja, lo bastante grande para el servo pero que los soportes no pasen.
  3. LEDs: Taladra dos agujeritos para los LEDs.
  4. Rueda loca: En el fondo de la caja, hacia atrás, atornilla (o pega con silicona) la rueda loca.
  5. Mete todo en la caja y fija con silicona caliente.
  6. Monta las ruedas en los servos una vez seco el pegamento.
  7. ¡Decora la caja! (¡Y sube fotos, mola!)

Pon las pilas y mira cómo el pequeño rover se mueve aleatoriamente por la habitación hasta que se agoten las pilas, te canses del ruido o el perro se lo lleve. :D

Código

Versión para sensor ultrasónico de 4 pines (HC-SR04):

#include <Servo.h>
/* Si tu sensor tiene solo 3 pines, descomenta la línea 6 y comenta la 7 */
//int distanceR = A0; // Pin Trigger
int distance = 6; // Pin Trigger
int pingDelay = 10; // Duración del pulso del sensor ultrasónico
int distanceR = A0; // Pin Echo
int led1 = 8, led2 = 9; // LEDs
Servo leftPower;
Servo rightPower;
unsigned long flashTime;
unsigned long nextSensorTime;
float obstacleDist = 0.0f;

void setup() {
  // Serial.begin(115200);
  leftPower.attach(3);
  rightPower.attach(5);
  leftPower.write(90);
  rightPower.write(90);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  delay(1000);
}

void loop() {
  LEDs();
  // Limita lecturas a 5 veces/seg para ahorrar batería
  if (millis() - nextSensorTime > 200) {
    nextSensorTime = millis();
    // Hago 2 lecturas porque a veces el sensor se confunde
    float reading1 = TakeReading();
    delay(100);
    float reading2 = TakeReading();
    // Serial.println(reading1); Serial.println(reading2);
    // Tomo la mayor distancia
    obstacleDist = (reading1 >= reading2) ? reading1 : reading2;
    // Si distancia < 10 cm, gira; si no, avanza
    if (obstacleDist < 10.0f) {
      // Serial.println("turn");
      turn();
    } else {
      // Serial.println("forward");
      forward();
    }
  }
}

void LEDs() {
  if (millis() - flashTime > 1000) flashTime = millis();
  if (millis() - flashTime < 500) {
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
  } else {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
  }
}

void forward() {
  /* Si el robot va hacia atrás, intercambia 135 y 45 */
  leftPower.write(135);
  rightPower.write(45);
}

void turn() {
  /* Para girar al otro lado, descomenta líneas 92-93 y comenta 95-96 */
  // leftPower.write(90);
  // rightPower.write(135);
  leftPower.write(45);
  rightPower.write(90);
  delay(350);
}

float TakeReading() {
  unsigned long echo = 0;
  float result = 0.0f;
  pinMode(distance, OUTPUT);
  digitalWrite(distance, LOW);
  delayMicroseconds(2);
  digitalWrite(distance, HIGH);
  delayMicroseconds(pingDelay);
  digitalWrite(distance, LOW);
  pinMode(distanceR, INPUT);
  digitalWrite(distanceR, HIGH);
  echo = pulseIn(distanceR, HIGH, 38000);
  result = echo / 58.138;
  return result;
}

Esquemáticos

Archivo Fritzing: littlerover_87IypZOgwm.fzz

Proceso de manufactura

  1. Construye un Rover con Windows IoT Core en Raspberry Pi 2 – Guía de Principiante a Avanzado
  2. Construye tu Juego "UFO Attack" con Arduino UNO y Pantalla MAX7219
  3. Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
  4. Efecto fuego con agua: Arduino UNO + Neopixel Stick
  5. Reloj 3D RGB Arduclock – Bluetooth, LED NeoPixel y RTC
  6. Monitor de Salud Fluvial: Sistema de Calidad de Agua con Arduino
  7. Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
  8. Juego interactivo con joystick analógico y LEDs en Arduino
  9. Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
  10. Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
  11. Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D