RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Robot que evita obstáculos.




Se trata de un sencillo prototipo de robot que se desplaza sorteando obstáculos.

Robot que evita obstáculos con PIC

Para ello comienza analizando el espacio libre que posee delante. Si este espacio es suficiente decide avanzar. Si por el contrario detecta obstáculo, el servo del sensor gira a derecha e izquierda para analizar las opciones y decidir cual es el camino más adecuado.

Una vez toma la decisión gira hacia su opción, se asegura que la elegida es la correcta y comienza a avanzar hasta el siguiente obstáculo.

Para medir las distancias y saber si dispone de espacio libre se emplea el sensor de distancias por ultrasonidos SRF05 pero funcionando en modo 1, es decir, con las señales de inicio de la medida y retorno de eco por pines indepenientes, tal como lo haría el SRF04. Cuando quiere detectar la distancia al objeto, el pic manda un pulso no inferior a 10uSeg. al sensor y este responde con un tren de impulsos ultrasónicos que "rebotarán" en el obstáculo, y por otro lado pasa la señal de retorno de eco a estado alto hasta recibir el tren ultrasonico reflejado. Cuanto menor sea la distancia menor en tiempo será este pulso.


Gráficas robot que evita obstáculos con PIC

Para interpretar esta señal de retorno el pic emplea en este proyecto el registro CCP que mide el valor del pulso recibido a partir del valor del contador interno activo durante el tiempo de duración de la señal. El dato final del registro gestionado mediante esta fórmula;  d = CCP*1.0 /58 , dará la distancia en cm.

Gráficas control de servos robot con PIC

La orientación del servo se establece con el valor que se carga en la variable pwm. Con cada llamada a la subrutina de generación de la señal por mediación de la interrupción por rebose del timer 0, se incrementa la variable pulso_pwm que comparandose con el valor en pwm, decide en qué momento debe cortar el pulso. 

Esquema robot que evita obstáculos con PIC

Este es el programa del PIC para el compilador de CCS.

[+/-] Ver / Ocultar programa completo en C
    

Hay que tener en cuenta que para realizar la rotación a 90º del robot, no se emplean encoder de giro sino que se plantea un tiempo de funcionamiento de las ruedas en contradirección. Por ello, dependiendo de la señal clock del PIC, diámetro de las ruedas, cantidad de código del programa, etc.; puede ser necesario cambiar estos tiempos para obtener el giro deseado del robot.

A continuación detallo cuales son esos tiempos a modificar para conseguir un giro mayor o menor del robot y un tiempo mayor o menor de la cabeza del sensor girada:

void navegacion()  {
   pulso_test();       
   if (distancia>30) {
      AVANCE;
      }
   else {
      PARO;
     
      pwm=8;
      delay_ms(700); //Cuanto mayor es este valor mayor tiempo permanecerá la cabeza del robot girada a la derecha
      pulso_test();
      distancia_derecha=distancia;
      pwm=25;
      delay_ms(700); //Cuanto mayor es este valor mayor tiempo permanecerá la cabeza del robot girada a la izquierda

      pulso_test();
      distancia_izquierda=distancia;
      pwm=16;
      if (distancia_derecha>distancia_izquierda) {
         GIRO_DERECHA;


         delay_ms(500);  //Cuanto mayor es este valor mayor será el ángulo de giro del robot a la derecha

         }
      else {
         GIRO_IZQUIERDA;
         delay_ms(500); //Cuanto mayor es este valor mayor será el ángulo de giro del robot a la izquierda

         }
      }
   }

En el siguiente enlace se pueden descargar los archivos del código fuente para CCS, el archivo compilado para cargar en el PIC y el esquema para Proteus. 

Descargar robot que evita obstáculos


53 comentarios:

David dijo...

Hola... estaba probando estos archivos y no compila por esto:

Error [141] C:\Users\LUIZ\Documents\Robot 2\simple\simple.c; 11.20 can't open include file "16F876a.h": No such file or directory

Alguna ayuda? Gracias

Robotypic dijo...

Hola David.
Prueba esto. Cuando los compiles después de haber hecho “new” “Project manual” y hayas elegido el archivo fuente, te aparecerá una ventana “Project options”. Le das a la pestaña que hay a la izquierda “Include files”. Verás el camino para acceder a las carpetas “devices” y “drivers”. Añade el camino correspondiente a esas carpetas según el directorio donde tengas instalado tu compilador.

David dijo...

Sale lo mismo :(
Ya había agregado el archivo.h del PIC y siempre me sale eso :(
Estoy usando MPLAB. En cuál lo hiciste?
Gracias!!

Robotypic dijo...

Estos archivos están creados con PCWHD COMPILER de CCS.

Unknown dijo...

BUENAS TARDES AMIGO TENGO UN INCONVENIENTE AL MOMENTO DE SIMULAR EL CIRCUITO SUBIDO POR PRIMERO EL SFR04 ESTA MONTADO SOBRE UN PIC EL CUAL NECESITA PROGRAMACIÓN Y ME IMAGINO Q ESTA SE ENCUENTRA EN ESTA PARTE DEL BLOG SRF04 y SRF05 para proteus PERO AL MOMENTO DE METER EL PROGRAMA AL PIC DEL SENSOR Y SIMULARLO ME FUNCIONA MUY BN EL PROBLEMA ES Q AL MOMENTO DE QUITAR EL OSCILOSCOPIO YA NO FUNCIONA Y NO ENTIENDO POR Q TE AGRADECERIA Q ME PUDIERA AYUDAR CON ESTA PARTE.

ESTUVE TAMBIEN MIRANDO EL PROYECTO QUE COMBINA EL SENSOR DE TEMPERATURA CON EL DE ULTRASONIDO Y TAMPOCO ENTIENDO LA PARTE EN LA CUAL ME DICE LO DE LOS BUMPER LEI LA GUIA QUE DEJO Y DICE Q EL SENSOR ULTRASONICO TIENE UN INCONVENIENTE Y PARA SOLUCIONARLO TENEMOS Q EMPLEAR DOS SENSORES MODELO Sharp-GP2Y0D810Z0F MI PREGUNTA ES ESOS SHARP SON LOS BUMPER DE LA PARTE IZQUIERDA Y DERECHA O ES NECESARIO CAMBIAR EL SENSOR SFR-05 EL CUAL TAMBIEN APARECE EN LA SIMULACION NO ENTIENDO LO DE LOS BUMPER TAMBIEN TE AGRADECERIA ESO MUCHAS GRACIAS POR TU BLOG ES DE GRAN AYUDA

Robotypic dijo...

Hola Daniel.

En la simulación del SRF04 con un PIC hay un generador de onda que hay que eliminar cuando se acopla el PIC real. Quizá tengas algún problema con eso, pero por eliminar el osciloscopio no debe dejar de funcionar, no interviene para nada más que para monitorizar la señal.

Con respecto a los bumper son solo una ayuda a la orientación en el caso de que el obstáculo se acerque por alguno de los laterales, no son imprescindibles ni sustituyen al sensor SRF04 o SRF05. Se pueden poner o no.

Unknown dijo...


CHABIER SERA Q ME PODRA HACER EL FAVOR DE REGALAR LA REFERENCIA DE LOS BUMPER Y TE AGRAECERIA SI SABE SI TIENE ALGUN OTRO NOMBRE ES Q ESTUVE MIRANDO Y LOS BUMPER TIENEN Q COLISIONAR CON EL OBSTACULO GRACIAS

Robotypic dijo...

Son sensores de distancia por infrarojos. La referencia de los aquí empleados es Sharp GP2Y0D805Z0F pero hay otras referencias también válidas.

Jonathan Lópz. dijo...

Hola Chabier, Olle hermano una pregunta, tendrás el PCB del robot?

también quisiera preguntarte que es eso de "servo sensor"?? se utiliza un servo en la parte del sensor?? osea el sensor SRF04 va montado sobre un servomotor??

y como es que gira la "cabeza" del carrito claro k es el sensor, pero como haces k gire??

Gracias de antemano.

Robotypic dijo...

Hola.
El PCB no lo tengo. Es un prototipo.
Por otro lado. Cuando digo servo sensor hago referencia al servo que hace girar al sensor SRF04.
El servo toma una posición en función del valor con el que se carga la variable "pwm". Y la función encargada de procesar este valor y controlar el servo es "Generacion_pwm()"

Anónimo dijo...

hola que tal disculpa esta pogramcion varia mucho si se utliza con un srf04
y otra cosa tu utilizas el pic 16f876 tambien como el sensor y tambien parte para manejar los servos??
gracias por tus respuetas

Unknown dijo...

Hola a todos!
Me gustaria saber que tipo de servo-motor utilizas para realizar el movimiento de los sensores .... saber si se puede hacer reciclaje... seria interesante ;)

Robotypic dijo...

Hola Chorche Chuan.
El servo concreto que se ha empleado aquí es un Micro Servo 9G TOWER PRO. Pero sirve cualquiera analógico y de cualquier tamaño.

Unknown dijo...

oye disculpa tengo un problema con el simulador al momento de correrlo me marca error en el srf creo k es el programa que tiene el pic por que cuando le quito el pic si lo corre pero no hace nada te agradeceria si me pasas el programa del srf o me ayudarias como hacerlo de antemano gracias

Robotypic dijo...

El esquema de este artículo no es simulable en proteus. Puedes hacer un srf04 con PIC como se explica en el artículo del sensor http://robotypic.blogspot.com.es/2010/09/circuito-simulador-srf04-para-proteus.html

Unknown dijo...

oye otro problema para cambiarlo al pic 16f877a solo cambio en el programa para que pic es y no funciona tengo que cambiar algo mas? espero me puedas ayudar seria de gran ayuda gracias..

Robotypic dijo...

Debería funcionarte solo con eso. Asegurate que no te da ningún error la compilación.

electrónica manualidades y de todo un poco dijo...

hola he estado probando el robot esquiba obstaculos pero consigo hacerlo funcionar ni fisica ni virtual,el proteus no abre el ejempro,y cochecito que he frabricado tampoco,soy bastante nuevo programacion,y no lo consigo hacer andar

Robotypic dijo...

Miguel. El sensor SRF05 no es simulable en proteus luego no lo vas a poder simular.

electrónica manualidades y de todo un poco dijo...

hola robotypic gracias por contestarme,yo el sensor que tengo es el SRF04,¿es lo mismo? algo me falla pues no consigo hacer andar el auto que monte , y la protoboard tampoco gracias

electrónica manualidades y de todo un poco dijo...

hola de nuevo se le podria añadir al robot una pantalla lcd,ya monte el medidor de distancias y funciona genial gracias

Unknown dijo...



Mi pregunta es ¿Que modelo de motores DC utilizas para el L293D?

Muchas gracias de antemano.

Robotypic dijo...

Mohammed. Son dos sevos del tipo HS311 modificados para giro continuo.

Zane dijo...

Que tal amigo cuando compilo en el pic c compiler meda una advertencia y no entiendo muy bien lo de los bumpers son necesarios? espero me puedas ayudar

Robotypic dijo...

Hola Zane.
Las advertencias o avisos que salen al compilar son eso, avisos. Mientras no aparezcan errores el programa se compila correctamente.
Los bumpers son ayudas a la navegación del robot. No son necesarios.

Zane dijo...

Bueno muchas gracias espero que me funcione esta comprobado amigo?
muchas gracias por la ayuda

Unknown dijo...

alguien me puede ayudar el ejemplo de carrito que dieron no camina desde el inicio...¿eso es normal?...y como podria hacer para que el servo junto al sensor sf04 testeen desde el inicio de manera constante de izquierda a derecha...se les agradece por la ayuda a algun buen samaritano que entienda este punto..gracias espero

Unknown dijo...

porfabor madarme el o la correccion del codigo a ssocra@hotmail.com gracias nuevamente

Unknown dijo...

otra pregunta son necesarios los diodos del grafico....no se puede conectar directamente los motores a l L293D?

Robotypic dijo...

Sdmy. Debes hacer el ejemplo tal cual está explicado.Lo que está mostrado funciona correctamente, no hace falta correcciones. Una vez te funcione haz los cambios que consideres.

Unknown dijo...

esque al inicio no funciona al ensenderlo tarda en funcionar mas o menos 10 segundos y yo quisiera que funcione al ensenderlo revise el puente H y eso y no anda al ensenderlo..el motor tiene que ser DC o de otra marca..alguna respuesta porfis gracias

Sdmy dijo...

disculpen la molestia quiero aprender....porfs..😃..😉..yo vi en el ejemplo del video que el carrito funciona desde el primer momento que se lo pone en funcionamiento y en mi caso no pasa eso..lo ensiendo y pasan 10 segundos y el servo reacciona recien y posteriormente despues de que gira de izq. a derch. los motores recien andan ¿que no seria que los motores tendrian que funcionar al momento de hacer on al carrito?...estoy confundido.
o que devo cambiar en el codigo paque el carrito empiese a andar desde que lo enciendo una ayuda porfa se les agradece por su comprencion..o me mandan las explicaciones al correo que deje en una anterior ocacion y una cosa mas como seria la explicacion de los pines CCP2 y el T1CKI delcarrito...gracias

Robotypic dijo...

Sdmy.
Lo primero que hace es verificar si tiene un obstáculo delante. Si lo tiene lo que hace es girar la cabeza para ver hacia que lado avanzar. Si no avanza de inicio hacia adelante es porque tiene un obstáculo.

Los pines CCP2 y T1CkI son el trigger y el eco para el sensor SRF04. Lee la hoja de datos de este sensor para saber como funcionan. También lo tienes explicado en el texto de este artículo.

Unknown dijo...

Hola puedes preguntar el PCB por favor el sensor se puede remplazar por el HC-SRF04 gracias.

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

Amigo mi caso es igual de sdmy pero con una diferencia que se quema el L293D que puedo hacer para que no se queme el IC gracias.

Robotypic dijo...

Si se te quema el L293 es porque lo conectas mal. El proyecto está probado.

Unknown dijo...

holi, excelente video amigo. una pregunta, puedo usar dos motores comunes dc en vez de los servos que usas como lei en algunos comentario. agrdeceria mucho tu respuesta

Robotypic dijo...

Hola.
Sí. De hecho son dos servos modificados para trabajar como motores de giro continuo.

Unknown dijo...

muchas gracias por responder. una pregunta mas, si cambio el srf05 por el srf04. cambio algo del programa o continua igual? por lo que se esta usando el srf05 en modo srf04.. muchas gracias

Robotypic dijo...

No cambia el programa. Solo el uso del srf05 en modo sfr04

Unknown dijo...

Amigo hago el pcb con proteus ya que no soy tan experto en electronica, como lo puedo hecer para no tener esas malas conecciones, otra cosa mas al compilar me sale warning 203"bot.c"line161(1,1)condition always TRUE gracias por tu ayuda.

Robotypic dijo...

Hola.
Ese mensaje al compilar es solo una advertencia, no pasa nada, se compila correctamente. De todas formas si lo quieres evitar sustituye la instrucción while(1) por while(true).

Unknown dijo...

Muchas gracias por tu ayuda y muy buenas tus publicaciones.

Unknown dijo...

hola, muchas gracias por tomarte el tiempo de responder los mensajes.
Estoy armando el robot, pero de motores para el desplazamiento tengo dos motor reductores, no se si sirvan esos?, el motor para el sensor es un servo motor genérico, el sensor que tengo es un HC-SR04, el pic es el mismo que utilizas (16F876A) y a la hora de armarlo no funciona, no se si sea por los motores o el sensor por favor necesito ayuda gracias.

Robotypic dijo...

Hola.
Sigue todas las indicaciones del artículo. Sino te funciona es porque algo no has hecho igual.

Unknown dijo...

hola, Robotypic puedo poner de motores motor reductores?? o deben ser los servo motores HS311??? gracias por tu respuesta.

Robotypic dijo...

Miguel.
Puedes poner cualquier motor. Pero debes tener en cuenta que tienes que modificar los tiempos que tienes señalados en el artículo en rojo para que el robot gire el ángulo deseado.

Unknown dijo...

Hola, tenemos problemas con el circuito pues nuestro motores no giran y el sensor solo se mueve pocos centímetros cada que lo volvemos a conectar, ayudaaaa :(

Unknown dijo...

Diculpa robot y pic conecte todo lo que en proteus sale pero solo el servo se mueve pero no las ruedas ni el sensor nada de eso...
me gustaria saber si el proyecto que uds publicaron en verdad funciona, porque haciendo todo eso en mi caso no funciono.
Gracias por su comprension

Robotypic dijo...

Hola Alexander.

El video demostrativo que puedes ver es la muestra de lo explicado en el artículo. Fuciona correctamente y está probado. Ten muy en cuenta los comentarios en rojo que puedes ver en la explicación y que quizá tengas que modificar según tu caso.

Unknown dijo...

HOLA ROBOTYPIC QUE TAL . UNA PREGUNTA EN PROTEUS NO ENCUENTRO EL SAF05 QUE ESTA EN ROJO SRF O5 COMO LO BUSCO ? OH ES EL SRF 05 POR QUE SOLO ME SALE ESE EL SRF 04


YULI dijo...

es necesario colocar los diodos?

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)