Robot Wall-E

PROYECTO FINAL
ROBOT WALL-E

1. OBJETIVOS
  • Programar el funcionamiento de un robot Wall-E a escala realizado con partes 3D impresas.
  • Realizar el control de movimiento de las ruedas a través del L298N para dos motores 12V con caja reductora.
  • Controlar el movimiento de partes móviles del robot empleando micro servo motores.
  • Implementar el control de todos los movimientos a través de un dispositivo con Bluetooth.

2. MARCO TEÓRICO
La robótica combina diversas disciplinas como la mecánica, la electrónica, la informática, la inteligencia artificial, la ingeniería de control y la física.​ Otras áreas importantes en robótica son el álgebra, los autómatas programables, la animatrónica y las máquinas de estados.
Un sistema robótico se puede describirse, como "Aquel que es capaz de recibir información, de comprender su entorno a través del empleo de modelos, de formular y de ejecutar planes, y de controlar o supervisar su operación". 
La Robótica es esencialmente pluridisciplinaria y se apoya en gran medida en los progresos de la microelectrónica y de la informática, así como en los de nuevas disciplinas tales como el reconocimiento de patrones y de inteligencia artificial.

3. MATERIALES
3.1 ARDUINO MEGA 2560
Arduino es la plataforma de desarrollo de proyectos en electrónica y robótica más utilizada a nivel mundial, esto debido a su facilidad de aprendizaje y uso, abundante documentación y multiples aplicaciones. Arduino Mega 2560 R3 es una tarjeta de desarrollo mucho más potente que el Arduino Uno, utilizada en aplicaciones con mayor necesidad de recursos como entradas/salidas, memoria e interfaces.
Arduino Mega 2560 R3 es una tarjeta de desarrollo que utiliza el microcontrolador ATmega2560 (Atmel). Posee 54 entradas/salidas digitales (15 pueden usarse como PWM), 16 entradas analógicas, 4 UARTs(puertos seriales por hardware), un resonador cerámico de 16 MHz, conexión USB, conector de alimentación, conector ICSP y un botón de Reset. La tarjeta contiene todo lo necesario para el funcionamiento del microcontrolador; basta conectarlo al puerto USB o alimentarlo con una fuente de voltaje continuo o una batería para empezar a usarlo.
Mega es compatible con la mayoría de Shields diseñadas para Arduino UNO.

Arduino Mega 2560 R3

Especificaciones técnicas
  • Microcontrolador: ATmega2560
  • Chip USB: ATmega16U2
  • Voltaje de Operación: 5V
  • Voltaje de alimentación: 6-20V (7-12V recomendado)
  • Pines digitales I/O: 54 (15 salidas PWM)
  • Entradas analógicas: 16
  • Corriente máxima entrada/salida: 40mA
  • Memoria FLASH: 256K
  • Memoria SRAM: 8K
  • Memoria EEPROM: 4K
  • Velocidad de reloj: 16Mhz
3.2 ARDUINO MEGA SENSOR SHIELD
Esta shield se encastra al Arduino Mega y permite conectar dispositivos externos, permitiendo la conexión a varios módulos como sensores, servos, relés, botones, potenciómetros y más.
Posee una entrada de alimentacion para cuando querramos conectar cosas que consuman mas de lo que el arduino nos puede brindar. El voltaje recomendado es de entre 7 y 12V y el limite en 6 y 20V.
Cada módulo funcional tiene un puerto distribuido en tres terminales, VCC, GND y SIGNAL (entrada/salida), lo cual facilita la conexión de los dispositivos ya mencionados, en el fin de facilitar conexiones, los sensores que se pueden conectar a través de este módulo por lo general vienen a ser de tipo analógico, con el fin de extraer señales físicas del medio, siendo así, esta board permite extender el circuito en cuestión para una mayor facilidad en cuanto su arquitectura y funcionamiento. La board conserva la posición de los pines originales, conectado con un cable hembra dual de 2.54mm.
Resultado de imagen para arduino mega sensor shield
3.2 DRIVER H-BRIDGE L298N
El driver puente H L298N es el modulo más utilizado para manejar motores DC de hasta 2 amperios. El chip L298N internamente posee dos puentes H completos que permiten controlar 2 motores DC o un motor paso a paso bipolar/unipolar.
El módulo permite controlar el sentido y velocidad de giro de motores mediante señales TTL que se pueden obtener de microcontroladores y tarjetas de desarrollo como Arduino, Raspberry Pi o Launchpads de Texas Instruments. El control del sentido de giro se realiza mediante dos pines para cada motor, la velocidad de giro se puede regular haciendo uso de modulación por ancho de pulso (PWM por sus siglas en inglés).
Tiene integrado un regulador de voltaje LM7805 de 5V encargado de alimentar la parte lógica del L298N, el uso de este regulador se hace a través de un Jumper y se puede usar para alimentar la etapa de control.
Resultado de imagen para l298n
Especificaciones técnicas
  • Chip: L298N
  • Canales: 2 (soporta 2 motores DC o 1 motor PAP)
  • Voltaje lógico: 5V
  • Voltaje de potencia (V motor): 5V - 35V DC
  • Consumo de corriente (lógico): 0 a 36mA
  • Capacidad de corriente: 2A (picos de hasta 3A)
  • Potencia máxima: 25W
  • Peso: 30g
  • Dimensiones: 43 * 43 * 27 mm
3.3 MICRO SERVO SG90 1.5 KG
Servomotor de tamaño pequeño ideal para proyectos de bajo torque y donde se requiera poco peso. Muy usado en aeromodelismo, pequeños brazos robóticos y mini artrópodos. Un servo ideal para aprender a programar en Arduino.
Puede rotar aproximadamente 180 grados (90° en cada dirección). 
Para la posición 0° el pulso es de 0.6ms, para 90° es de 1.5ms y para 180° 2.4ms.
Posee un conector universal tipo "S" que encaja perfectamente en la mayoría de los receptores de radio control incluyendo los Futaba, JR, GWS, Cirrus, Hitec y otros. Los cables en el conector están distribuidos de la siguiente forma: Cafe = Tierra (GND), Rojo = VCC (5V), Naranja = Señal de control (PWM).
Puede ser alimentado por USB pero se recomienda alimentar por separado el microcontrolador y los servos, ya que el ruido eléctrico puede dar lugar a errores en la ejecución del programa, o en todo caso agregar un capacitor de 100uF entre 5V y GND.
Micro Servo SG90 1.5kg
Especificaciones técnicas
  • Voltaje de Operación: 3.0 - 7.2V
  • Velocidad: 0.1seg / 60 grados
  • Torque reposo: 1.3Kg x cm (4.8V), 1.6Kg (6.0V)
  • Ancho de pulso: 4useg (Dead band)
  • Peso: 9g
  • Engranajes: Nylon
  • Dimensiones: 22*11.5*27 mm
  • Longitud del conductor: 150mm
3.4 MÓDULO BLUETOOTH HC-05

El módulo Bluetooth HC-05 nos permite conectar nuestros proyectos con Arduino a un smartphone, celular o PC de forma inalámbrica (Bluetooth), con la facilidad de operación de un puerto serial. La transmisión se realiza totalmente en forma transparente al programador, por lo que se conecta en forma directa a los pines seriales de nuestro microcontrolador preferido (respetando los niveles de voltaje, ya que el módulo se alimenta con 3.3V). Todos los parámetros del módulo se pueden configurar mediante comandos AT. La placa también incluye un regulador de 3.3V, que permite alimentar el módulo con un voltaje entre 3.6V - 6V.

Módulo Bluetooth HC05

Especificaciones técnicas
  • Voltaje de operación: 3.6V - 6V DC
  • Consumo corriente: 50mA
  • Bluetooth: V2.0+EDR
  • Frecuencia: Banda ISM 2.4GHz
  • Modulación: GFSK(Gaussian Frequency Shift Keying)
  • Potencia de transmisión: 4dBm, Class 2
  • Sensibilidad: -84dBm a 0.1% BER
  • Alcance 10 metros
  • Interface comunicación: Serial TTL
  • Velocidad de transmisión: 1200bps hasta 1.3Mbps
  • Baudrate por defecto: 38400,8,1,n.
  • Seguridad: Autenticación y encriptación
  • Temperatura de trabajo: -20C a +75C
  • Compatible con Android
  • Dimensiones: 37*16 mm
  • Peso: 3.6 gramos
3.5 MOTORREDUCTOR ALTO TORQUE 107 RPM 12VDC
Motor de 12V DC equipado con caja de cambios para reducir la velocidad a 107 rpm, lo que permite aplicar cargas mayores de hasta 10 kg debido a su alto par de torque.


3.6 BATERÍA 12V
Una batería VRLA (batería de ácido-plomo regulada por válvula), más comúnmente conocida como batería sellada o batería libre de mantenimiento, es un tipo de batería de ácido-plomo y, por lo tanto, recargable. Debido a su fabricación, no requiere ventilación, se pueden montar en cualquier orientación (excepto con los bornes hacia abajo) y no precisa un mantenimiento constante. La ventilación reducida es una ventaja, ya que se pueden utilizar en espacios reducidos o con poca ventilación. Se utilizan ampliamente en grandes aparatos eléctricos portátiles, sistemas eléctricos fuera de la red y funciones similares, en los que se necesitan grandes cantidades de almacenamiento a un costo menor que otras tecnologías de bajo mantenimiento, como li-ion.
Resultado de imagen para valve regulated lead acid battery 12v
3.7 PIEZAS IMPRESAS
Este proyecto se compone de 100+ piezas las cuales fueron impresas utilizando la unidad Creality CR-20Pro, algunas partes necesitaron soportes y adhesión. Es necesario estar pendiente de las piezas más grandes ya que es posible que a veces se levanten las capas y el resultado será desprolijo.

  • Layer Height: 0.3mm
  • Infill: 15%
  • Material: PLA
3.8 TORNILLOS M3 10-20 mm
El sistema de rosca métrica es una familia de pasos rosca estandarizada basada en el SI (1946). Sus ventajas incluyen la resistencia a la tracción, debido al gran ángulo del hilo de rosca. Entre sus defectos está el hecho de que según la posición de los hilos de la rosca puede perder eficacia.
La M indica el diámetro nominal de la rosca exterior del tornillo, en milímetros. Así un tornillo M3 tiene un diámetro exterior nominal de 3 milímetros.
Especificaciones técnicas
  • Medida nominal: M3
  • Paso fino: 0.25 mm
  • Diámetro broca agujero: 2.75
4. ENSAMBLAJE
4.1 Brazos

4.2 Cabeza

4.3 Cuello

4.4 Llantas

4.5 Motores

4.6 Cuerpo

4.7 Cuerpo-llantas

4.8 Cabeza-cuerpo

5. CONEXIONADO

6. CÓDIGO

#include <SoftwareSerial.h>
#include <Servo.h>

SoftwareSerial Bluetooth(0,1);
char dato = 0;

Servo servo0, servo1, servo2, servo3, servo4, servo5, servo6;
int servo0Pos = 0, servo1Pos = 0, servo2Pos = 0, servo3Pos = 0, servo4Pos = 0, servo5Pos = 0, servo6Pos = 0;
boolean enable0 = LOW, enable1 = LOW, enable2 = LOW, enable3 = LOW, enable4 = LOW, enable5 = LOW, enable6 = LOW;
int out1 = 22,out2 = 23,out3 = 24,out4 = 25;

void setup() { 
  pinMode(out1,OUTPUT);
  pinMode(out2,OUTPUT);
  pinMode(out3,OUTPUT);
  pinMode(out4,OUTPUT);
  Bluetooth.begin(38400);
  servo0.attach(4);
  servo1.attach(5);
  servo2.attach(6);
  servo3.attach(7);
  servo4.attach(8);
  servo5.attach(9);
  servo6.attach(10);
}

void loop() {

  if (Bluetooth.available()){
    dato = Bluetooth.read();
    
    if (dato == '0'){enable0 = !enable0;}
    if (dato == '1'){enable1 = !enable1;}
    if (dato == '2'){enable2 = !enable2;}
    if (dato == '3'){enable3 = !enable3;}
    if (dato == '4'){enable4 = !enable4;}
    if (dato == '5'){enable5 = !enable5;}
    if (dato == '6'){enable6 = !enable6;}

// Avance
    if (dato == 'a'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,HIGH);
        digitalWrite(out3,LOW);
        digitalWrite(out4,HIGH);
        delay(500);
    } 
// Retroceso
    if (dato == 'b'){
        digitalWrite(out1,HIGH);
        digitalWrite(out2,LOW);
        digitalWrite(out3,HIGH);
        digitalWrite(out4,LOW);
        delay(500);
    } 
// Derecha hacia adelante
    if (dato == 'c'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,LOW);
        digitalWrite(out3,LOW);
        digitalWrite(out4,HIGH);
        delay(500);
    } 
// Izquierda hacia adelante
    if (dato == 'd'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,HIGH);
        digitalWrite(out3,LOW);
        digitalWrite(out4,LOW);
        delay(500);
    }
// Derecha hacia atrás
    if (dato == 'e'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,LOW);
        digitalWrite(out3,HIGH);
        digitalWrite(out4,LOW);
        delay(500);
    } 
// Izquierda hacia atrás
    if (dato == 'f'){
        digitalWrite(out1,HIGH);
        digitalWrite(out2,LOW);
        digitalWrite(out3,LOW);
        digitalWrite(out4,LOW);
        delay(500);
    }
// Rotar Izquierda
    if (dato == 'g'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,HIGH);
        digitalWrite(out3,HIGH);
        digitalWrite(out4,LOW);
        delay(500);
    }
// Rotar Derecha
    if (dato == 'h'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,HIGH);
        digitalWrite(out3,HIGH);
        digitalWrite(out4,LOW);
        delay(500);
    }
// Detener
    if (dato == 'i'){
        digitalWrite(out1,LOW);
        digitalWrite(out2,LOW);
        digitalWrite(out3,LOW);
        digitalWrite(out4,LOW);
        delay(500);
    }

// Head - Servo Motor (servo 0) //
    if (enable0 == HIGH){
          for(servo0Pos=0;servo0Pos<=90;servo0Pos+=5){
            servo0Pos=servo0Pos;
            servo0.write(servo0Pos);
            delay(50);
            }
        }
    if (enable0 == LOW){
         for(servo0Pos=90;servo0Pos>=0;servo0Pos-=5){
            servo0Pos=servo0Pos;
            servo0.write(servo0Pos);
            delay(50);
            }
        }
// Neck Top - Servo Motor (servo 1) //
    if (enable1 == HIGH){
          for(servo1Pos=0;servo1Pos<=90;servo1Pos+=5){
            servo1Pos=servo1Pos;
            servo1.write(servo1Pos);
            delay(50);
            }
        }
    if (enable1 == LOW){
         for(servo1Pos=90;servo1Pos>=0;servo1Pos-=5){
            servo1Pos=servo1Pos;
            servo1.write(servo1Pos);
            delay(50);
            }
        }
// Neck Bottom - Servo Motor (servo 2) //
    if (enable2 == HIGH){
          for(servo2Pos=0;servo2Pos<=90;servo2Pos+=5){
            servo2Pos=servo2Pos;
            servo2.write(servo2Pos);
            delay(50);
            }
        }
    if (enable2 == LOW){
         for(servo2Pos=90;servo2Pos>=0;servo2Pos-=5){
            servo2Pos=servo2Pos;
            servo2.write(servo2Pos);
            delay(50);
            }
        }
// Eye Right - Servo Motor (servo 3) //
    if (enable3 == HIGH){
          for(servo3Pos=0;servo3Pos<=90;servo3Pos+=5){
            servo3Pos=servo3Pos;
            servo3.write(servo3Pos);
            delay(50);
            }
        }
    if (enable3 == LOW){
         for(servo3Pos=90;servo3Pos>=0;servo3Pos-=5){
            servo3Pos=servo3Pos;
            servo3.write(servo3Pos);
            delay(50);
            }
        }    
// Eye Left - Servo Motor (servo 4) //
    if (enable4 == HIGH){
          for(servo4Pos=0;servo4Pos<=90;servo4Pos+=5){
            servo4Pos=servo4Pos;
            servo4.write(servo4Pos);
            delay(50);
            }
        }
    if (enable4 == LOW){
         for(servo4Pos=90;servo4Pos>=0;servo4Pos-=5){
            servo4Pos=servo4Pos;
            servo4.write(servo4Pos);
            delay(50);
            }
        }
// Arm Right - Servo Motor (servo 5) //
    if (enable5 == HIGH){
          for(servo5Pos=0;servo5Pos<=90;servo5Pos+=5){
            servo5Pos=servo5Pos;
            servo5.write(servo5Pos);
            delay(50);
            }
        }
    if (enable5 == LOW){
         for(servo5Pos=90;servo5Pos>=0;servo5Pos-=5){
            servo5Pos=servo5Pos;
            servo5.write(servo5Pos);
            delay(50);
            }
        }
// Arm Left - Servo Motor (servo 6) //
    if (enable6 == HIGH){
          for(servo6Pos=0;servo6Pos<=90;servo6Pos+=5){
            servo6Pos=servo6Pos;
            servo6.write(servo6Pos);
            delay(50);
            }
        }
    if (enable6 == LOW){
         for(servo6Pos=90;servo6Pos>=0;servo6Pos-=5){
            servo6Pos=servo6Pos;
            servo6.write(servo6Pos);
            delay(50);
            }
        }
  }
}

7. VIDEOS
7.1 PRIMER VIDEO

7.2 SEGUNDO VIDEO

7.3 TERCER VIDEO

8. OBSERVACIONES

  • Es necesario alimentar por separado los servo motores debido a que sufren mal funcionamiento si están siendo alimentados por la placa Arduino debido al ruido eléctrico.
  • Se deben pegar los engranajes a los motorreductores, para evitar problemas en el movimiento de las llantas.
9. CONCLUSIONES

  • El microcontrolador Arduino MEGA 2560 es la elección perfecta para este proyecto debido a que cuenta con 11 pines PWM (2-13) y es necesario el tener por lo menos 7 para realizar el control de los micro servo motores, a comparación del Arduino UNO que solo posee 5 pines dedicados a PWM.
  • El Arduino MEGA Sensor Shield permite realizar la conexión de los servo motores de manera más sencilla debido a que cuenta con pines organizados para la señal, el voltaje y tierra. Evitando emplear un protoboard o fabricar una PCB.
  • Los movimientos de partes móviles se lograron empleando micro servo motores SG90, los cuales permiten aplicar torque para carga de hasta 1.5 kg, teniendo la parte de todo el ensamblaje de la cabeza y cuello un peso de 450 g.
  • El desplazamiento de las llantas del robot se realizó mediante dos motores 12VDC con caja reductora, esto permite tener un torque apropiado para movilizar todo el ensamblaje, la parte electrónica y la batería que se encuentra dentro de la cabina.
  • Se empleó un puente H L298N para el control de los motores, debido a que el voltaje nominal de estos es mayor al que el Arduino proporciona.
  • El control de todo el funcionamiento se realizó correctamente a través de una conexión inalámbrica a través de Bluetooth utilizando un módulo HC-05 conectado al Arduino MEGA y enviando señales desde un smartphone.
  • La batería de 12 V permite alimentar todo el proyecto sin problema alguno, y proporciona un tiempo de funcionamiento de hasta 20 horas, además de ser recargable.
10. ARCHIVOS ADJUNTOS

  • ARCHIVOS .STL
https://drive.google.com/open?id=1jxRnjVKywiXwvc2PlpOwlPgdhP7R4urE


Comentarios