Go Down

Topic: Nuevo proyecto (Robot esquiva objetos) (Casi resuelto) (Read 648 times) previous topic - next topic

Salgarso

Nov 28, 2013, 09:11 pm Last Edit: Jan 14, 2014, 08:13 pm by Salgarso Reason: 1
Hola a todos, en primer lugar me presento, soy un profesor de tecnología y me gustaría iniciarme en trabajar con arduino para explicar a mis alumnos algo que me encanta, pero por unas cosas y otras nunca me he puesto realmente a ello.

El proyecto que me planteo es muy simple, en principio, se trata de un coche traccionado por dos motores de CC básicos (menos de 1A cada uno) y dos sensores de distancia. Se trata del típico robot esquiva objetos que he visto en algunos videos en youtube.
El tema es que nunca me he puesto a hacer uno y ahora si lo quiero realizar. Para ello dispongo de dos motores con reductora, la placa Arduino UNO y el Shield de motores de 2A, aun no he comprado los sensores.

Creo que en cuanto a conexiones no tendré problemas, pero necesito vuestra ayuda con el código, tengo nociones básicas de programación en C, pero no como para crear el código desde 0. alguien me podria pasar un código para este proyecto?, imagino que los ajustes dependerán del sensor, eso podria hacerlo yo....o eso creo ;)


Muchas gracias por vuestra ayuda!!

Un saludo.

Naruto128



$)  necesito comer, para ello necesito dinero,  tu necesitas ayuda yo tengo el conocimiento.

Salgarso

Y bien??, me ayudarás??, tan solo es escribir el código que necesito, para un programador esto no debería ser más de 10 minutos de su tiempio :$

Gracias!!

Jukar

Bienvenido Salgarso,

Este es un foro donde puedes solicitar ayuda o consejo para solventar cualquier problema que tengas o realizar algún proyecto.

La ayuda es eso: ayuda. Para conseguirla debes esforzarte un poco: buscar proyectos similares al que tu quieres llevar a cabo (hay cientos en la web),  aprender a programar un pequeño sketch que mueva un motor, familiarizarte con las instrucciones a utilizar, equivocarte... entender porqué...

Si te dedicas a la docencia seguro que todo lo anterior lo tienes más que claro... lo que no puedes pretender es que otros te escriban este u otro código sin más ni más porque no aprenderás nada y difícilmente podrás enseñar nada a nadie...

Dale un par de vueltas, presenta tu código al foro explicando que hace o no y que debería hacer. Verás como así obtienes la ayuda que buscas.

Un saludo.

Salgarso

Muchas gracias Jukar, intentaré conseguir un código para el proyecto que necesito y luego os lo propondré a ver si me funciona!!

Un saludo!!

Jopapa

Y en el hilo, tienes que poner un título descriptivo de lo que trata, no vale "nuevo proyecto", "pido ayuda" o "estoy atascado"

Jopapa

Salgarso

Ok Jopepa, título cambiado ;) gracias por vuestro interés!! cuando tenga el código os lo paso por aquí a ver que me comentais....

GRACIAS de nuevo!!

Salgarso

Hola de nuevo a todos, he hecho algunas investigaciones y he conseguido un código que me funciona bien, excepto en una cosa y no se como solucionarlo.

Básicamente el fallo es que cuando los dos sensores detectan que la distancia es menor de 10cm, el coche debería ir hacia atras durante dos segundos y luego continuar hacia adelante, y no hace eso, se queda como en un bucle 2 segundos en marche, 2 segundos parado, 2 en marche, 2 parado....y así.....

ayudadme por favooor, estoy desesperado y no se que falla!!

Os pongo el código (disculpad las posibles "barbaridades" en la escritura, no lo se hacer mejor jejeje)

const int pingder = 7;
const int pingizq = 6;
#include <Servo.h>
Servo miservoder;
Servo miservoizq;

void setup()
{
  miservoder.attach(9);  // asigno el pin 9 al servo derecho//
  miservoder.write(90);  // coloca el servo derecho en su posición central//
  miservoizq.attach(10); // asigno el pin 10 al servo izquierdo//
  miservoizq.write(90);  // coloca el servo izquierdo en su posición central//
  Serial.begin(9600);
}

void adelante()
{
miservoder.write(50);
miservoizq.write(50);
delay (2000);
}

void atras()
{
miservoder.write(140);
miservoizq.write(140);
delay (1500);
}

void derecha()
{
miservoder.write(70);
miservoizq.write(120);
delay (2000);
}

void izquierda()
{
miservoder.write(120);
miservoizq.write(70);
delay (2000);
}


void loop()
{
 
  long durationder, durationizq, cmder, cmizq; //declaro las variables//

  pinMode(pingder, OUTPUT); //emito el pulso del sensor derecho//
  digitalWrite(pingder, LOW);
  delayMicroseconds(2);
  digitalWrite(pingder, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingder, LOW);
 
  pinMode(pingder, INPUT); //leo el pulso derecho//
  durationder = pulseIn(pingder, HIGH);

  pinMode(pingizq, OUTPUT);//emito el pulso izquierdo//
  digitalWrite(pingizq, LOW);
  delayMicroseconds(2);
  digitalWrite(pingizq, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingizq, LOW);

  pinMode(pingizq, INPUT); //leo el pulso izquierdo//
  durationizq = pulseIn(pingizq, HIGH);

  cmder = microsecondsToCentimeters(durationder);//distancia sensor derecho//
  cmizq = microsecondsToCentimeters(durationizq);//distancia sensor izquierdo//
 
  if(cmizq<10&&cmder<10)//estructura que controla los movimientos de los servos//
{
atras();
}
else if(cmizq<10)
{
derecha();
}
else if (cmder<10)
{
izquierda();
}
else
{
adelante();
}

//compruebo en el monitor el funcionamiento de los sensores//
  Serial.print(cmder);
  Serial.print("cm");
  Serial.print(cmizq);
  Serial.print("cm");
  Serial.println();
 
  delay(100);
}


long microsecondsToCentimeters(long microseconds)//Paso el tiempo en microsegundos a distancia en cm//
{
  return microseconds / 29 / 2;
}


Go Up