Pages: [1]   Go Down
Author Topic: Robot salva obstáculos v 1.0 (fotos y video)  (Read 1335 times)
0 Members and 1 Guest are viewing this topic.
Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno pues os presento mi primer proyecto con Arduino  smiley-grin

Se trata de un pequeño robot esquiva obstáculos.

El diseño, montaje y código son muy básicos que es el nivel que yo tengo pero aún y todo me ha costado mis sudores conseguir que funcione jejeje.

Los servos están "trucados" con el sistema de la doble resistencia. Son los primeros que truco y no he debido hacerlo muy bien porque el angulo para que se paren es 47º en uno y 70º el otro... Cuando los monté en el chasis no me dí cuenta y (no hay otra forma de hacerlo  smiley-grin) lo hice al contrario uno de otro , por eso para que giren en la misma dirección uno tiene el ángulo en + y otro en -

Los servos y el sensor están conectados a una Shield Motor (que todavía no entiendo demasiado) y como el único acceso al pin 13 para el sensor era soldando he optado por conectarlo al pin 14 (A0).

Unas fotos de la "máquina":

 

 


y el código que he utilizado:

Code:
// Jukar
// Robot esquiva obstaculos con 2 servos trucados
// y un sensor hc-sh04

#include <AFMotor.h>
#include <Servo.h>
#define trigPin 2
#define echoPin 14


// Declaramos los 2 servos
Servo servo1;
Servo servo2;

void setup()
{
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  // activamos los servos
  servo1.attach(9);
  servo2.attach(10);
  digitalWrite(9,LOW);
  digitalWrite(10,LOW);
}

int i;
// ciclo para que giren los servos
void loop()
{
//servo1 para en 70º y servo2 en 47º.
//para que giren a la misma velocidad
//el angulo de Servo1=67 y el de Servo2=100

  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  //Si activamos las 2 siguientes lineas veremos en el Monitor Serial
  //la distancia
  //Serial.print(distance);
  //Serial.println(" cm");
  
  // SI LA DISTANCIA ES MAYOR QUE 15 EL ROBOT ANDA HACIA DELANTE
if (distance > 15)
  {
    adelante();
    
  }
  //SI NO EJECUTARA GIRAR
else
  {
   girar();
  }  
}

void adelante()
{
  servo1.write(-67);
  servo2.write(100);
}
void girar()
{
  //detener los 2 servos  
  servo1.write(47);
  servo2.write(70);
  delay(500);
  //ir hacia atrás
  servo1.write(67);
  servo2.write(-100);
  delay(300);
  //girar hacia la izquierda
  servo1.write(47);
  delay(500);
}
  

Os agradecería enormemente que me ayudaseis a optimizar el código porque seguro que he cometido alguna aberración que otra al escribirlo...

Muchísimas gracias y un saludo!!!!
« Last Edit: June 29, 2013, 12:43:43 am by Jukar » Logged

Alicante (España)
Offline Offline
Full Member
***
Karma: 12
Posts: 223
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Estupendo bricolaje.
Para optimizar el código, usa el método que inventé yo: prueba-error-prueba-error-prueba-error-prueba-error  smiley-twist

Un saludo

Jopapa
www.jopapa.me 
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estupendo bricolaje.
Para optimizar el código, usa el método que inventé yo: prueba-error-prueba-error-prueba-error-prueba-error  smiley-twist

Un saludo

Jopapa
www.jopapa.me 

smiley-grin:D:D:D Muchas gracias Jopapa, llevo días utilizando tu método!!!!

Aquí os dejo un pequeño video del "bicho" funcionando:

http://www.youtube.com/watch?feature=player_detailpage&v=UCSv51RZ3CQ

Está grabado antes de modificar un poco el código que he puesto en el primer post para mejorar un poco los movimientos de giro y añadir la marcha atrás...
Logged

Alicante (España)
Offline Offline
Full Member
***
Karma: 12
Posts: 223
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si quieres "liarte" mas, yo le pondría unos detectores laterales
Así el "bicho" podría contornear una estancia, manteniendo una distancia de pocos centímetros a la pared.
Si además le pones un encoder digital http://www.ebay.es/itm/321126066559?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649 a las ruedas, puedes saber la distancia recorrida y saber el perímetro de la estancia.
Lo digo porque el robot tenga un objetivo, una función y no sea solo un movimiento caótico.

Un saludo
Jopapa
www.jopapa.me

P.D. Como odio los vídeos verticales.  smiley-evil
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias de nuevo Jopapa!

Como no suelo grabar vídeos con el móvil me salió tumbado y tuve que girarlo para que se viera bien  smiley-lol smiley-lol smiley-lol

No sabía ni que existía el "Wheel Encoder"..... es un accesorio genial y la idea de modificarlo para darle el uso que me comentas también.

De momento antes de meterme en más "fregaos" me gustaría poder montar lo mismo pero quitando el Arduino Uno (solo tengo uno jejeje)  poniendo en su lugar el Pro Mini Atmega328 http://www.ebay.es/itm/New-Pro-Mini-atmega328-5V-16M-Replace-ATmega128-Arduino-Compatible-Nano-/130839929399?pt=LH_DefaultDomain_0&hash=item1e76aae237#ht_1641wt_1163

Para eso me falta buscar información para saber como pasar el sketch del Uno al Mini (ya tengo un par de tutoriales localizados) porque supongo que luego las conexiones son iguales que el en Uno... ¿no es así?

También tengo un ATMEGA328P (solo el micro) http://www.ebay.es/itm/NEW-ATMEGA328P-PU-DIP-28-Microcontroller-IC-/130872191672?pt=LH_DefaultDomain_0&hash=item1e78972ab8#ht_1228wt_1163 pero supongo que será más complejo de hacerlo funcionar...¿verdad?

Un saludo!!!!
Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 524
Arduino inside
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El atemega 328 es fácil de hacerlo funcionar, miraté la página de txapuzas electrónicas, creo que era el proyecto 7. Verás que es fácil de hacerlo funcionar con poquitos componentes.
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias Nayma!!!! Echaré un vistazo.

El lunes empiezo 3 semanas de vacaciones así que voy a ver si me pongo las pilas y lo modifico  smiley-lol
Logged

Pages: [1]   Go Up
Jump to: