viernes, 24 de enero de 2014

ROBOT HEXÁPODO CON SERVOS CONTROLADO POR BLUETOOTH

PROYECTO DEL ELECTRÓNICA

   SEMANA 1

Introducción


En este trabajo se va a utilizar un diseño de robot móvil en forma de hexápodo que se halla disponible en el Grupo de Robótica y se va a realizar el programa de control para que dicho robot pueda realizar movimientos básicos. De esta forma se pretende crear unas rutinas básicas de comportamientos sencillos.

En conclusión el objetivo de este proyecto es desarrollar un algoritmo de control de un robot móvil hexápodo que permita controlar los sensores y actuadores de un robot móvil hexápodo.


Administración del Proyecto 


El proyecto necesita un proceso que se ira avanzando mediante  una aplicación (GanttProyect) que permite organizar y planificar proyectos a través de diagramas Gannt, como así también la carga horaria de los integrantes dentro del mismo.






Materiales del proyecto (robot hexápodo)

  1. Tres servos TowerPro SG90 9g 
  2. Arduíno Duemilanove
  3. HC-06 bluetooth module 
  4. madera para las patas del robot
  5. 4 diode led  red
  6. 5 resistencias 330ohm 1/2w
  7. placa de circuito impreso
  8. 2 switch de encendido
  9. ultrasonic sensor (HC-SR04)
  10. 2 baterías de 9v
  11. clip de pilas

SEMANA 2


Construcción mecánica del Hexápodo


Para la construcción del hexápodo eh utilizado material ligero como el  Poliestireno (material plástico) para evitar el exceso de peso.
También utilizo madera para fabricar las patas del hexápodo.















Construcción de una placa de conexionado

La placa de conexionado nos va a permitir dar alimentación externa a cada una de las partes del microrobot (placa Arduino, servomotores, placa de sensores), cuando esté funcionando de forma autónoma. 

Placa de conexionado a los servomotores


Esta placa solo alimenta a los servomotores 















Diseño en el simulador ISIS de Proteus para detectar posibles errores y también para crear las pistas del circuito
Una ves terminado el circuito en ISIS pasamos al ARES para la creación de placa de circuito impreso con una generación automática de pistas

Programa para controlar los servos con arduino

#include <Servo.h>                                            

Servo servoderecho;
Servo servoizquierdo;

Servo servocentro;

void setup()

{
  Serial.begin(9600);
  servocentro.attach(11);
  servoderecho.attach(10);
  servoizquierdo.attach(9);
}
void loop()
{
  servocentro.write(75);
  servoderecho.write(60);                             
  servoizquierdo.write(60);
  delay(300);
  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(120);
  delay(300);
}
  










Placa Conexionada de Servos, Arduino, bluetooth, ultrasonic  Doble Cara

Proceso en photoplotter


Con la maquina photoplotter se saca los fotolitos de distintas mascaras a realizar ,tales como:

botton Copper


Top Copper



Top Solder Mask


Bottom Solder Mask



Obtenido las cuatro mascaras . Se procede a una serie de pasos para obtener una placa de circuito impreso listo para usar y soldar sus respectivos componentes.


  1. Pasar por la Insoladora las placas fotosensibles 
  2. Luego pasamos al revelado
  3. Después al proceso del ácido para quitar el cobre restante.
  4. Por ultimo recurrimos al proceso de quita film
El resultado final de todo este proceso es el siguiente:




                                                                                                                                           




PLACA TERMINADA

Esta Placa de doble cara está lista para usarse. Por lo que solo queda soldar sus respectivos componentes para dicha función.






Configuración del modulo bluetooth HC-05
Para comenzar con la configuración del modulo mediante el Arduino, (en este ejemplo utilizaremos la placa Arduino UNO),  es necesario conectar previamente el circuito mostrado a continuación:


El modulo de bluetooth HC-05 soporta los voltajes de entrada de 3.3 y 5V.

Una vez armado el circuito hay que cargar el “Sketch” que nos permitirá entrar al modo de configuración del HC-05, conocido como modo AT, mediante el IDE de Arduino.


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
{
  pinMode(9, OUTPUT);  
  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  
}

void loop()
{

  if (BTSerial.available())
    Serial.write(BTSerial.read());
   if (Serial.available())
    BTSerial.write(Serial.read());
}

Cuando se tenga cargado con éxito el Sketch y el circuito armado procedemos a meter el HC-05 en modo AT (sin apagar o desconectar el Arduino de la Pc-Usb), para esto solo es necesario desconectar  el cable de voltaje (VCC) de la placa Arduino un momento y volverlo a conectar, notaremos además que el led del bluetooth prenderá  y se apagara cada dos segundos aproximadamente. Si todo sale bien abriremos en el IDE de Arduino /herramientas/monitor serial, modificamos los valores de velocidad a “9600 baud” y a “Ambos Nl y CR”, en este momento observaremos en la pantalla que dice: “Enter AT commands:” , si nosotros mandamos el comando AT, nos debe responder OK.


Ahora si podemos comenzar con la configuración del dispositivo HC-05. Los siguientes son los comandos básicos que debemos saber para configurar nuestro dispositivo bluetooth:
Saber el nombre del modulo.                                                                             
         AT+NAME?
Cambiar el nombre, en el ejemplo siguiente se cambia por “MINOMBRE”.        
  AT+NAME= MINOMBRE
Un dato muy importante el HC-05 funciona como esclavo y maestro.
  • Como esclavo: espera que desde otro dispositivo nos conectemos.
  • Como maestro: el HC-05 se conecta a otro dispositivo.
Saber cómo está configurado con el comando: AT+ROLE?
  • Si nos contesta “0″ esta en modo esclavo.
  • Si nos contesta “1″ esta en modo maestro.
Por defecto viene en modo esclavo.
  • Cambiarlo al modo esclavo: Comando:AT+ROLE=0
  • Cambiarlo al modo maestro: Comando:AT+ROLE=1
Saber la contraseña del HC-05 Comando: AT+PSWD?                                
Por defecto suele venir la “1234″ o la “0000″.
Muestra la configuración con la placa Arduino, por defecto viene configurado a una velocidad de 9600. Comando: AT+UART?








COMUNICACIÓN VÍA BLUETOOTH  ANDROID ARDUINO

La aplicación Android que se utilizar es el ai2.appinventor   
visualmente mi programa se vera así:




Aquí esta el programa para pasar a nuestro móvil.

y a su vez el programa arduino para que la aplicación androi pueda realizar las rutinas propuestas.

#include <Servo.h>
Servo servocentro;  
Servo servoderecho;
Servo servoizquierdo;
int c; // declaramos las variables a usar
int pos = 90;

void setup(){
  Serial3.begin(9600);
  servocentro.attach(11);  //conecta el servo del centro al pin 9 
  servoderecho.attach(10);  // conecta el servo derecho al pin 8
  servoizquierdo.attach(9);  // conecta el servo izquierdo al pin 10
}
void loop()
{
 if (Serial3.available()>0) {                         // Comprueba si hay algún dato recibido, y si es así
 c = Serial3.read();
  switch(c){                                     // Dependiendo del dato leido realiza una de las siguientes acciones
     case 'A':    adelante();            break;
     case 'R':    atras();               break;
     case 'D':    girar_der();           break;
     case 'I':    girar_iz();            break;
     case 'P':    parado();              break;
     
   
  }
}
}

//funciones de caminar//

// camina hacia adelante//
void adelante()

  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(75);
  servoderecho.write(60);
  servoizquierdo.write(60);
  delay(500);
}

//camina retrocediendo

void atras()

{
  servocentro.write(105);
  servoderecho.write(60);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(75);
  servoderecho.write(120);
  servoizquierdo.write(120);
  delay(500);
}

//gira el cuerpo

void girar_iz()

  servocentro.write(75);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(105);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(75);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(105);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(75);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(105);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(75);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(105);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(75);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(105);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
}

void girar_der()

{
  servocentro.write(75);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(75);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(75);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(75);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
  servocentro.write(75);
  servoderecho.write(60);
  servoizquierdo.write(120);
  delay(500);
  servocentro.write(105);
  servoderecho.write(120);
  servoizquierdo.write(60);
  delay(500);
}
void parado()
{
  servocentro.write(90);
  servoderecho.write(90);
  servoizquierdo.write(90);                    // Posiciona el servo2 en la posicion cetrada   
}




ROBOT HEXAPODO CON SENSOR DE DISTANCIA (ULTRASONIC HC_SR04)

También el hexapodo caminara de forma automática usando un sensor  de distancia (Ultrasonic HC_SR04) que evitara los obstáculos 





Su Programa arduino para realizar distintas funciones son:

#define trigPin 2
#define echoPin 3
#include <Servo.h>
Servo servoMain; // Define our Servo
Servo servoMain1;
Servo servoMain2;
int pos= 90;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  servoMain.attach(9); // servo on analog pin 0
  servoMain1.attach(10);
  servoMain2.attach(11);
}

void loop() {
     servoMain.write(120); // Turn Servo Right to 135 degrees
     servoMain1.write(120);
     servoMain2.write(105);
     delay(100);          // Wait 1 second
     servoMain.write(60);  // Turn Servo Left to 45 degrees
     servoMain1.write(60);
     servoMain2.write(75);


  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(100);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  
    Serial.print(distance);
    Serial.println(" cm");

  if (distance >=15){
    servoMain.write(90);
    servoMain1.write(90);
    servoMain2.write(90);
    delay(100);
  }
  else {
    
  servoMain.write(60);
  servoMain1.write(120);
  servoMain2.write(75);
  delay(100);
  servoMain.write(120);
  servoMain1.write(60);
  servoMain2.write(75);
  delay(100);
  servoMain.write(60);
  servoMain1.write(120);
  servoMain2.write(105);
  delay(100);
  servoMain.write(120);
  servoMain1.write(60);
  servoMain2.write(75);
  delay(100);
  servoMain.write(60);
  servoMain1.write(120);
  servoMain2.write(105);
  delay(100);
  servoMain.write(120);
  servoMain1.write(60);
  servoMain2.write(75);
  delay(100);
  
}
}

DIAGRAMA DE ESTADOS 



VÍDEO Y FOTOS FINALES DEL PROYECTO


         Hexápodo controlado por bluetooth

hexápodo control automático por un sensor
                                                                                        de distancia  ( ultrasonido).                                                                                              




Fotos de perfil del Hexapodo
















No hay comentarios: