int Sen1 = 0; //Extremo izquierdo
int Sen2 = 1; //Izquierdo
int Sen3 = 2; //Centro
int Sen4 = 3; //Derecho
int Sen5 = 4; //Extremo Derecho
int Val1 = 0; // Valor de los sensores
int Val2 = 0;
int Val3 = 0;
int Val4 = 0;
int Val5 = 0;
//Control de los motores
int Azul = 6;
int Gris = 9;
int Cafe = 10;
int Negr = 11;
int x = 650; //Diferencia entre negro y blanco (Valor > x = Negro).
int Vel0 = 100;
int Vel1 = 155; // Especificar velocidad de
int Vel2 = 190; // motores en el giro.
int Vel3 = 230;
int Vel = 255;
void setup()
{
pinMode(Azul, OUTPUT);
pinMode(Gris, OUTPUT);
pinMode(Cafe, OUTPUT);
pinMode(Negr, OUTPUT);
Serial.begin(9600);
}
void loop()
{
//Lectura y registro de los valores de los sensores
Val1 = analogRead(Sen1);
Val2 = analogRead(Sen2);
Val3 = analogRead(Sen3);
Val4 = analogRead(Sen4);
Val5 = analogRead(Sen5);
//Direccionamiento del robot
if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel);
analogWrite(Negr, Vel);
}
else if ((Val1 < x)&&(Val2 > x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel1);
analogWrite(Negr, 0);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 > x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel1);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 > x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel2);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 > x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel3);
}
//*********!!!!!!!!!
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 < x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel);
}
else if ((Val1 < x)&&(Val2 > x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
}
else if ((Val1 > x)&&(Val2 > x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel3);
analogWrite(Negr, 0);
}
else if ((Val1 > x)&&(Val2 < x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel);
analogWrite(Negr, 0);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 > x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, Vel);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel2);
delay(250);
}
else if ((Val1 > x)&&(Val2 > x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
delay(250);
}
else if ((Val1 > x)&&(Val2 < x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
delay(250);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 < x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, Vel);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel2);
delay(250);
}
else if ((Val1 > x)&&(Val2 > x)&&(Val3 > x)&&(Val4 > x)&&(Val5 > x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
delay(250);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, Vel);
analogWrite(Cafe, 0);
analogWrite(Negr, 0);
delay(200);
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel);
analogWrite(Negr, Vel);
}
}
antes que nada hola, estudio mecatronica, tengo algunas dudas si pudieras responder estaria maravilloso, para empezar que significa "<>", por que pones dos parentesis y no cierras, ej.
ResponderEliminar"else if ((Val1 <>". por la atencion gracias
significa <> menor o mayor que por ejemplo: 5>4 o 5<6 entonces diria: else if (sino cumple la condicion anterior) (Val1 <311) elVal1 es menor que 311 nose que sea val1 no eh leido el articulo y ese 311 es un ejemplo pero asi seria ;)
EliminarHola creo que tuve un problema cuando copie el codigo espero que ya haya quedado claro, gracias por tu comentario :)
ResponderEliminarhola miguel, primero que nada decirte que es un gran proyecto y felicitarte por ello. Estoy intento recrearlo pero estoy teniendo algunas dudas, como por ejemplo este problema de la programación que no me a quedado claro y tampoco el diagrama de conexiones al arduino.
ResponderEliminarQue podrías corregir la programación y hacer un dibujo croquis del diagrama de conexiones?
Gracias y mucha suerte
Hola GuillenNXT primero que nada gracias por interesarte por el proyecto.
ResponderEliminarPodrias ser un poco mas especifico acerca de tu duda en la programacion del robot?
Respecto al diagrama de conexiones el conector J1 ira conectado a las salidas del arduino 8, 9, 10 y 11; el conector J2 es donde va conectada la bateria para alimentar tanto al arduino como al circuito del control del motor el positivo va a la terminal 1 y el negatovo a la 2 de este conector; el conector J3 es una salida de 5 volts regulada util si necesitas utilizar algun otro circuito digital y por ultimo el conector J4 es la salida del driver de los motores 1 y 2 son de un motor, 3 y 4 son del otro motor.
Espero haber aclarado tu duda de la conexion con el arduino, si no ha quedado claro no dudes en escribir :)
amigo que hace X porque le das valor de 800?
ResponderEliminarestoy untilizando un sensor de linea el cny70,
no c mucho del tema ;)
Hola el 800 es el valor que va a compar la entrada analogica dada por el sensor (de 0 255)si esta es mayor a x es negro si es menor es blanco, x se puede variar para ajustar la sensibilidad y los CNY70 son iguales a los que ocupe en este proyecto saludos
ResponderEliminardisculpa me podrias decir cuales son los materiales que utilizastes y los sensores es que vemos hacer un seguidor de linea
ResponderEliminarHola si ves en el punto numero uno del blog se describe la lista de materiales y tambien estan los diagramas esquematicos del proyecto saludos
ResponderEliminarHola amigo!!!, Soy nuevo en esta area y tengo como proyecto muy sencillo desarrollar un robot seguidor de linea y las características que nos piden son muy similares a tu desarrollo, solo que con solo dos sensores infrarrojos CNY70, dos servo motores de 360 grados y un arduino UNO. Mi pregunta es ¿debo utilizar forsozamente el Circuito Integrado L293B para poder manipular los sensores?
ResponderEliminarTe agradesco de antemano tu pronta respuesta.
Te dejo mi corre electronico por alguna aclaracion sobre la pregunta.
spider_121mh@hotmail.com
Hola Mario.
ResponderEliminarTe comento que el L293B no es para manejar los sensores sino que es un par de puentes H para poder controlar dos motores en ambas direcciones con un par de bits, por otro lado el CNY70 es igual al sensor que use en el robot solo checa si los pines son iguales, los sensores van conectados a las entradas analogias del arduino como se puede ver en el circuito. Te recomiento que para manejar tus servomotores utilices un transistor para aumentar la corriente ya que si los conetas al arduino directamente es probable que no funcionen correctamente te recomiento un bc337 o similar.
Saludos
oe parcero yo lo quiero hacer pero no se por donde enpesar
ResponderEliminarme podras ayudar ?
ResponderEliminarHola te recomiendo que empieces por el principio jajaja. Hablando en serio te recomiendo que vayas al punto numero uno del blog y revises los materiales utilizados y la construcción de la parte mecánica del robot; posteriormente podrías trabajar con el diseño electrónico, hacer pruebas del robot sin programarlo aun (yo lo hice cargando pequeñas rutinas para que el robot caminara adelante atrás y diera vueltas) una vez probado todo esto empezar con la parte de programación y adaptar el programa que propongo para tus necesidades y por que no hasta perfeccionarlo :).
ResponderEliminarCualquier duda comentala aquí o mandame un mail. Saludos
hola buenas tardes primero que nada te agradesco por el aporte y en quisiera saber si me puedes ayudar con el programa para el arduino por que ya estuve cambiando algunas cosas como lo que menciona un chavo anteriormente acerca de los dobles parentesis y lo <> ya hize de todo y me sigue marcando error el compilador de arduino al querer verificaro compilar por tu atencion gracias te dejo mi correo para ver si me ayudas un poco, vaquero4545_mn@yahoo.com.mx
ResponderEliminarEspero que haya quedado corregido definitivamente el programa GRACIAS a todos por sus comentarios
ResponderEliminarHOLA. ME PARECE MUY BUEN PROYECTO; PERO EL CODIGO NO ME FUNCIONA YA QUE NO SE PUEDE COMPILAR Y ARROJA UN ERROR
ResponderEliminarHola,acabo de compilar el programa y no me arroja ningún error, cual es el error que te marca a ti?
ResponderEliminarQue tal miguel, estoy llevando a cabo una replica de tu proyecto, quisera saber si tienes a la mano algunos codigos para motor que avance al frente y detras, por cierto, como ensamblaste las ruedas a los motores, los que tengo tienen en el centro del eje por asi decirlo muy corto el metal donde se le ensambla las ruedas, Gracias , si tuvieras mas codigos con los que hiciste las pruebas me serian de mucha ayuda
ResponderEliminarHola pandemic te comento que azul, gris, café y negro son los cables de los motores azul y gris para uno y café y negro para otro, si quieres un código para que solo avance hacia adelante elimina toda la parte de las condiciones if y la lectura de los sensores y únicamente escribe.
ResponderEliminaranalogWrite(Azul, Velx);
analogWrite(Gris, 0);
analogWrite(Cafe, Velx);
analogWrite(Negr, 0);
y a x hay que asignarle valor 1 0 2 para ir lento o despacio y haca atrás de forma contraria
analogWrite(Azul, 0);
analogWrite(Gris, Velx);
analogWrite(Cafe, 0);
analogWrite(Negr, Velx);
Las ruedas las acople a los motores con un pegamento cola loca y carbonado y de esta manera quedan muy bien pegadas puedes acoplarlas también mediante bandas y poleas o algun otro tipo de engranajes hay muchas formas, te recomiendo visites http://www.robodacta.mx/ que es una tienda donde venden algunas cosas de interés para robótica y electrónica y http://www.sparkfun.com/ en donde puedes encontrar inmensa cantidad de artículos electrónicos de tecnología actual saludos!!!
Oye tengo una duda ya tengo mi circuito armkado pero mi circuito integrado se calienta muchisimo a la hora que lo conecto a una fuente de poder , jala mucho amperaje y esto me preocupa, ya que aunqe lo vaya regulando no funcionan los servomoteres hasta llegar a los 6 v , en cambio si lo conecto con un eliminador directo como de celular no se calienta... que me reocmiendas que haga, le coloque un disipador de calor, o simplemente cheke de nuevo el circuito o tal vez ste danado el puente H?
ResponderEliminarbuen proyecto. podrias colocar el diagrama (croquis) de conexión al arduino, pues no tengo claro como debe ser la manera correcta. Te agradecería si lo hicieras
ResponderEliminarhola... dices que las salidas pwm son 8, 9, 10, 11 pero en el codigo está 6, 9, 10, 11
ResponderEliminarTienes toda la razón, un pequeño error de redacción
ResponderEliminardisculpa los motores tienen que funcionar cuando pasas sobre los sensores una superficie blanca o negra???, en mi caso use lo cny70 y cuando paso sobre estos una hoja blanca se encienden los motores, pero supongo que se tienen que encender con una superficie de color negro, espero me entendieses y me pudieras aclarar mi duda :D
ResponderEliminarLo motores funcionan de acuerdo a la secuencia que fue determinada en el programa por ejemplo si ven todo blanco siguen hacia adelante y si siguen detectando blanco retroceden solo es cuestión de que te fijes en la programación del robot.
ResponderEliminarSaludos
ola chavos tego una dadu sobre un programa en ensamblador estoy usando el pic 16f628a
ResponderEliminarque tienes comparadores y no se como especificar que sean salidas digitales
Hola cesarjoaquin, este proyecto no tiene nada que ver con PIC y esta programado completamente en C, te recomiendo que busques alguna foro sobre ensamblador
ResponderEliminarHola miguel, oye disculpa si quisiera que el programa lea en vez de una linea negra con fondo blanco quiero que sea al revez que lea una linea blanca con fondo negro como lo puedo hacer? modificando al revez todos los if? o como ?
ResponderEliminarHola:
ResponderEliminarAsí es, tendrías que modificar las condiciones if para invertirlas y tal vez ajustar la variable x que es la correspondiente a la sensibilidad de los sensores.
Saludos
hola antes que nada quisiera sabes el pq usas 5 sensores si creeria que con 2 es sufuciente para que el carro siga linea negra....por cierto uso sensores cny70
ResponderEliminarSon 5 sensores por que no solo se trata de seguir la linea negra sino de detectar intersecciones, saber si una curva es muy pronunciada o suave y de esta manera determinar si el robot puede tomar la curva con cierta velocidad o debe frenar un poco; con 2 sensores es suficiente si la pista que recorrerá el robot es sencilla y aun así llega a tener fallas y puede salirse. Aunque el numero de sensores es a criterio propio de cada diseñador y el CNY70 es de características muy similares al QRD1114
ResponderEliminarSaludos.
qe buen proyecto.. felicidades.... estoy intentando hacerlo.. cualquier inquietud la comentaré...espero tu ayuda... gracias
ResponderEliminarGracias a y claro cualquier duda aqui estamos para ayudar :)
ResponderEliminarQue onda .. mira estoy buscando info pero para un seguidor de pared... creo que se puede hacer con un solo sensor .. el detalle es que hay que aplicarle control PID , pero en la mayoria de ejemplos que he visto tienen que hacer una adquision de datos y trabajan con software como simulink o labview ... tienes alguna idea de como realizar esto ... de hecho creo que con tu codigo se puede solo hay que modificar algunas cosas ... Pero por lo que veo no estaria haciendo control o si ??
ResponderEliminarq tal Miguel muy buen proyecto felicitaciones!! retomando una pregunta q ya t hicieron me puedes ayudar dandome un ejemplo d como cambiaria la programacion para q siga una linea blanca con fondo negro t lo agradeceria y nuevamente felicitaciones :D
ResponderEliminarBuen proyecto. Una pregunta, no tendrás un código para que el robot avance en zig zag? Gracias :D
ResponderEliminarde antemano lo quiero felicitar por el proyecto,
ResponderEliminarpues a mi me surgió una inquietud y es en donde se conectan los cny70 si en el arduino y si se le ponen resistencias o no
muchas gracias
Se conectan tal y como se muestra en el diagrama mostrado en esta sección del blog.
ResponderEliminarhttp://seguidorlineaarduino.blogspot.com/2011/01/4-sensore-para-la-deteccion-de-la-linea.html
un favor me podrias ayudar con el diagrama funcional con detalles tanto electronico como de programacion quiero y me urge hacer uno
ResponderEliminarhola una pregunta para que utilizas el serial.begin(9600)
ResponderEliminarEl serial.begin es el comando que indica que quieres ver la información de entradas en el puerto serial del arduino y (9600) es la velocidad de transmisión de datos del arduino a la PC. Yo lo utilice para poder ver que valor me arrojan los sensores cuando estan en color negro o en blanco
EliminarSaludos
oyes miguel kiero aser ese carrito segidor de linea no me podrias mandar todo el crokis como va conectado al arduino uno espara presentarlo en un examen o mandame un link de descarga directa te lo agradeseria
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarEste comentario ha sido eliminado por un administrador del blog.
EliminarDISCULPA MIGUEL, QUE USASTE PARA ALIMENTAR A LA ARDUINO???
ResponderEliminarEl voltaje de la batería sirve para alimentar el arduino, recordemos que el arduino tiene su propio regulador de voltaje.
EliminarLA Neta Muy Chido00 Carnal Muy Poca Gente Se Ofrece A Dar Sus Trabajos....y oie una pregunta Que distancia dejaste del Piso0 A tu Sensores
ResponderEliminarHola Eduardo.
EliminarLos sensores fueron colocados a una distancia aproximadamente entre 5mm y 1cm del piso.
Saludos
hola buenas tardes esta bueno el proyecto pero tengo una duda, en que pines del arduino van conectados los sensores y en cuales son las salidas gracias.
ResponderEliminarLos sensores van conectados a las entradas analógicas A0...A4 y las salidas son las 6 y 9 para un motor y 10 y 11 para el otro por ser salidas con PWM en el programa en la parte de declaración de variables esta especificado.
ResponderEliminarSaludos.
Dónde puedo ver el desarrollo de tu proyecto paso a paso? Gracias y felicidades!
ResponderEliminarEl seguimiento del proyecto esta publicado en todo el blog con algunas mejoras. Ve a la pag principal del blog http://seguidorlineaarduino.blogspot.mx/ y dale clic en entradas antiguas
ResponderEliminarSaludos
No sabes programar!!!!
ResponderEliminarEso ya lo sé gracias :)
ResponderEliminarhola que tal necesito tu ayuda porfabor estoy a 4 dias de presentar mi seguidor de linea tengo el arduino uno y un driver L292 y estoy utilizando sensores digitales porfabor como modificaria el programa para adaptarlo ami seguidor agradederia tu respuesta
ResponderEliminarme parece muy bien pero me podrian pasar el diagrama de conexines.
ResponderEliminarya tengo todas mis conexiones pero cuando cargo el programa a mi arduino y lo echo andar solo detecta cosas blancas.. el programa que publicaste esta vien? gracias...
ResponderEliminardisculpa tendrás algún correo o facebook esque tengo algunas dudas con la construcción de mi seguidor de líneas básicamente son detalles mínimos
ResponderEliminartengo una duda quiero hacer un seguidor de linea blanca entonces debo cambiar la if como quedaria la programacion? es que es la primera vez que uso arduino
ResponderEliminarHola Miguel, una pregunta, este código hace que sólo se mueva hacia adelante y haga los giros y disminuciones/aumentos de velocidad o también que retroceda?
ResponderEliminarDisculpa amigo excelente aportacion si funciona pero que deberia cambiar o añadir en la programacion para que supere una pista con las lineas entrecortadas
ResponderEliminarbueno gracias por este aporte,,,,yo tambien habia realizado casi el mismo tipo de programacion para el seguidor, pero es muy tedioso porque se tiene que declarar casi todas las obciones,,,,,, mi pregunta seria si alguien sabe como puedo utilizar un algoritmo para reducir la programacion
ResponderEliminarhola buesnas tardes amigo disculpa la molestia pero quiero hacer una replica de tu proyecto solo que tengo una duda de las conecciones sobre el area electronica no se como conectarlo.
ResponderEliminarporfabor me podias facilitar el diagrama de conecciones ??
OYE DISCUPA Y COMO SE LE ARIA PARA UN PROGRAMA CON SOLO 2 SNY70
ResponderEliminardisculpa cual seria el código correcto para que pase por lineas entrecortadas
ResponderEliminarYO TENGO SENSORRES DIGITALES COMO PUEDO HACERLO
ResponderEliminar:(
podría pasarme el esquema
ResponderEliminar