lunes, 9 de noviembre de 2015

COCHE ROBOT CON ARDUINO


       El objetivo de este proyecto es realizar un sencillo robot controlado por Arduino de una forma fácil y económica.

   El chasis está realizado en madera contrachapada, material rígido y de fácil manipulación. Las ruedas delanteras están hechas con dos tapas de botes de conservas, para la rueda trasera hemos utilizado una rueda loca y los motores son dos micro servos trucados para que puedan girar más de 180º.

    Empezaremos por el chasis, el cual dimensionaremos bien para que nos coja toda electrónica encima, nosotros hemos optado por el siguiente diseño que nos ayudara, en ambos extremos, con los sensores. A continuación podéis ver las medidas.

       Una vez hecho el chasis, continuamos con la preparación de las ruedas delanteras.

     Al utilizar servomotores trucados, que explicamos más adelante como hacerlo, tienen en su interior un sistema de engranajes de reducen la velocidad, por lo tanto utilizamos unas ruedas de diámetro amplio para ganar velocidad.

     Nosotros hemos utilizado dos tapas de unos botes de conserva de 6,5 cm de diámetro, a estas hay que buscarles el centro y hacer un pequeño agujero para que coja el tornillo que la sujetara al servo. 

     También es conveniente ponerle en su perímetro, según donde se vaya usar el robot, una goma, una junta torica u otro material antideslizante, nosotros hemos utilizado dos tiras de una cámara de una rueda de bicicleta que estaba rota.

     En cuanto a la rueda trasera hemos optado por utilizar rueda loca sencilla que se compró.
     Como sistema motriz se utiliza dos micro servos, uno para la rueda derecha y el 


otro para la rueda izquierda, estos hay que trucarlos porque de fábrica solo giran 180 grados. 

    Los micro servos están divididos en dos parte, una la parte mecánica donde están los engranajes y la otra en la que se encuentra la parte eléctrica.

  



     Para trucarlos hay que sacarle los tornillos de la parte de abajo para poder abrirlos. Una vez que se le sacaron los tornillos el servo se separa en tres partes, al sacar la carcasa superior se tiene acceso a la parte mecánica. Aquí hay que tener cuidado y recordar el orden de las ruedas dentadas.




     Se tira suavemente de la primera y saldrá con el eje.







Ahora se separa el eje del engranaje.








     Una vez separado se agranda el agujero de la rueda dentada lo suficiente para que gire libremente sobre el eje con un destornillador fino o una broca fina y se puede también alisar la punta del eje, esto se hace por que este eje está conectado a un potenciómetro y es el que indica los grados a los que está el servo y hay que fijarlo a 90 grados.

     Al engranaje también hay que sacarle el tope que tiene por debajo para que gire, se puede hacer con un cúter o una lima. En la siguiente imagen se puede ver lo que se saca y como tiene que quedar.

     Para definir el punto central del potenciómetro del servo, puedes cargar el siguiente código en placa Arduino con el software de Arduino.
#include <Servo.h>

int servo = 9;
Servo motor;
void setup() {
  motor.attach (servo);
}

void loop() {
  motor.write (90);

}


    Una vez cargado en el Arduino, y conectado el cable de señal al pin 9, el de alimentación a 5v y el de masa a GND y puesto el eje en su sitio, debes girar el eje del potenciómetro hasta que el motor se pare, en ese estado puedes fijar el potenciómetro con pegamento. Hecho todo esto ya se puede montar el servo.

    Ahora nos pondremos con los sensores de choque ya que todo robot que se precie necesita unos sensores que le indiquen que se ha chocado.

    Estos sensores se pueden hacer colocando un par de micro interruptores en la parte delantera del robot, pero como estamos haciendo un robot económico ¿Por qué no nos lo hacemos nosotros mismos?

    La idea es mantener separadas dos superficies conductoras, de forma que cuando se  produzca un impacto estas dos superficies entren en contacto y por lo tanto cierren el circuito. 

    Necesitaremos papel de aluminio del que se utiliza en cocina que pegaremos sobre el chasis.

     Primeramente cortamos una tira de unos 15mm de anchura y la pegamos centrada en la parte curva del chasis.

    Comprueba que el papel de aluminio no llegue a los extremos laterales del chasis para que no generen falsos contactos cuando incorporemos la otra parte del parachoques.

    Con una broca haces un agujero cerca del papel de aluminio. Por ese agujero pasamos un cable y lo empalmamos, hacemos la unión más o menos estable.

   Ahora tendremos que hacer los guardabarros, necesitaremos dos trozos de cartulina (nosotros hemos utilizado un plástico utilizado como portada de encuadernación de fotocopias), dos tiras de unos 1,5 cm de ancho por 20 cm de largo,  que recubriremos de papel de aluminio. Cerca de un extremo fijamos un cable.

   Llegados a este punto nos ponemos con el montaje, haremos en el chasis los agujeros para atornillar todo.

     Atornillamos las ruedas a los servos trucados.

     A continuación atornillamos la rueda trasera y fijamos las dos delanteras con dos soportes que hicimos con chapa para poder asegurar los servos al chasis.

      Y también colocamos el interruptor y los tornillos para soportar la placa Arduino.

    Continuamos poniendo el servo delantero, el altavoz, el porta pilas con velcro y fijamos los cables al chasis por la parte de abajo.

     Como no es muy conveniente alimentar los servos directamente del Arduino, ya que calentamos innecesariamente el regulador de la placa. Utilizaremos dos alimentaciones, una para alimentar Arduino y sensores con 9v, y otra de 6v para alimentar los servos realizada con 4 pilas de 1,5v sobre un porta pilas.

   Los positivos (color rojo) de los servos están conectados a las pilas por medio de un interruptor, los negativos (color marrón de los servos y negro del porta pilas y el cables para conectar a la placa) están soldados todos al negativo del porta pilas y aparte sale otro para conectar al GND de la placa de Arduino, la señal (color amarillo) pasan individualmente a la cara de arriba para conectar al pin 9 el servo de la rueda derecha, y al pin 10 el servo de la rueda izquierda.

   Y también fijaremos los para choques al chasis, nosotros hemos utilizado una grapadora y luego se reforzó con pegamento.

    El altavoz lo colocamos en medio de los tornillos de la rueda trasera.

    Ahora colocamos la placa de Arduino, las pilas y comenzamos a conectar todo, también se hizo un conector para ampliar las conexiones negativa, este lo conectamos a los dos GND de la placa.

     Conectamos la señal de servo derecho al pin 9, la señal del servo izquierdo al pin 10, la señal del parachoques delantero al pin 11, la señal del parachoques trasero al pin 12, el positivo del altavoz al pin 8 y ahora los negativos de los parachoques delantero y trasero, el negativo del altavoz y el negativo general de la parte de abajo al anterior conector. También colocamos la pila de 9 V sujeta también con velcro.

     Lo conectamos al ordenador por USB, le cargamos el siguiente código por medio del software de Arduino y a experimentar y disfrutar.

#include <Servo.h>  // incluimos librería del servo
Servo motord;       // nombramos el servo derecho
Servo motori;       // nombramos el servo izquierdo

int paradelantero = 11; // pin al que está conectado el parachoques
                        // delantero
int paratrasero = 12;   // pin al que está conectado el parachoques
                        // trasero
int bocinapin = 8;      // pin al que está conectado el altavoz
boolean pdelantero = HIGH// definimos el estado del parachoques
                            // delantero
boolean ptrasero = HIGH;   // definimos el estado del parachoques
                           // trasero
void setup(){
  motord.attach(9);  // conectamos el servo derecho y definimos pin
  motori.attach(10);  // conectamos el servo derecho y definimos pin
  pinMode(paradelantero, INPUT_PULLUP); // pone pin como entrada y
                                        // activa la resistencia
                                        // interna
  pinMode(paratrasero, INPUT_PULLUP);  // pone pin como entrada y
                                       // activa la resistencia
                                       // interna
}

void loop() {
  pdelantero = digitalRead (paradelantero); // comprueba si ha
                                            // chocado por delante
  ptrasero = digitalRead (paratrasero); // comprueba si ha chocado
                                        //por delante

  if (pdelantero == LOW){   // si choco por delante
   parar();                 // para
   delay(500);              // espera 0,5 segundos
   bocina(100);             // pita cuatro veces
   bocina(100);
   bocina(100);
   bocina(100);
   atras();                 // va hacia atrás
   delay(1000);             // 1 segundo
   derecha();               // va hacia delante a la derecha
   delay(500);              // durante 0,5 segundos
}
  else {                    // si no
   adelante();              // va hacia adelante
}
if (ptrasero == LOW){       // si choco por detrás
  parar();                  // para
  delay(500);               // espera 0,5 segundos
bocina(50);                 // pita seis veces
bocina(50);
bocina(50);
bocina(50);
bocina(50);
bocina(50);
izquierda();                 // gira a la izquierda
delay(200);                  // durante 0,2 segundos
adelante();                  // Y sigue adelante
}
}   

void adelante(){             // subrutina adelante
  motord.write(0);           // servo derecho gira hacia 0°
  motori.write(180);         // servo izquierdo gira hacia 180°
}

void atras(){                // subrutina atras
  motord.write(180);         // servo derecho gira hacia 180
  motori.write(0);           // servo izquierdo gira hacia 0
}

void derecha(){              // subrutina derecha
   motord.write(90);         // servo derecho para
   motori.write(180);        // servo izquierdo gira hacia 180
}

void izquierda(){            // subrutina izquierda
   motord.write(0);          // servo derecho gira hacia 0
   motori.write(90);         // servo izquierdo para
}

void parar(){              // subrutina parar
  motord.write(90);        // servo derecho para
  motori.write(90);        // servo izquierdo para
}

void bocina(int tempo){    // subrutina bocina y variable tempo
  {
    tone(bocinapin,10);    // genera un tono
    delay(tempo);          // duración
  }
  noTone(bocinapin);       // para el tono
  delay(tempo);            // duración del paro por si se repite
}




Autores: Jose Manuel Parafita Lamas, Juan Manuel Verdeal Garcia y Raquel Cobas Mata alumnos del curso Montaje y Reparación de Sistemas Microinformáticos IFCT 0309

2 comentarios:

Un viajero terrícola dijo...

Sois unos cracks.
Conocimiento e inventiva, tremendo parachoques.
A ver quien os para.
Felicidades.

Un viajero terrícola dijo...

Tecnología en inventiva.
Genial ese parachoques y la solución de chasis.