Robot evita obstáculos con ultrasonidos

Hola, saludos a todos. Recientemente me he embarcado en un proyecto que tal vez me quede un poco grande, pues hace poco que comencé con Arduino, pero tenía ganas de ver si era capaz.

Estoy construyendo el típico robot que no choca, detectando los obstáculos mediante ultrasonidos, y hasta ahora todo me ha ido bien,excepto cuándo he llegado al código. He buscado varios códigos por internet, para ver si podía "descifrarlos" y entender su funcionamiento, y he logrado un muy precario funcionamiento del robot, y no precisamente gracias a mi trabajo en el software.

En cuánto a hardware,estoy usando:

Arduino Uno

Puente H L298N (comprado)

2 motores de corriente continua básicos, de 3 a 6v, con reductora

4 pilas de 2700 miliamperios cada una para alimentar los motores

1 pila de 9 voltios para alimentar el Arduino Uno por vin

1 servomotor de 1.8 kg de torque NO trucado para mover el sensor (He visto que hay gente que no lo usa, pero yo pienso que hace más eficiente al robot a la hora de detectarlos)

Sensor de ultrasonidos HC SR04

Una protoboard

De todos modos, lo único que querría preguntar es si conocéis algún sitio en internet en el que me puedan explicar el código del robot, o algún tutorial que me ayude a desarrollarlo. No espero que nadie me lo escriba por aquí, ni quiero eso, dado que lo que intento es aprender, no hacer un copia pega.

Muchas gracias por vuestra atención. Si necesitáis que aclare algo más solo decídmelo y siento si incumplo alguna norma, es la 1ª vez que publico en el foro.

empieza por hacer que se mueva, despues sigue con el sensor.
hice uno simple para mis alumnos. Avanza hasta que detecta un obstaculo, frena, y gira hasta que no detecta obstaculo, despues avanza y asi hasta que se gasten las pilas!!!

En primer lugar, muchas gracias por responder.

Respecto a lo que dices de hacerlo mover, podrías decirme que funciones has usado? Por ahora, yo no tengo problema con el movimiento sin el sensor, se invertir la polaridad de los motores con el puente H para hacerle ir adelante o atrás, pero me pierdo a la hora de entrar en "if" y "else" y andar declarando variables. He visto varios sketchs por internet y he intentado comprenderlos, pero hay cosas que se me escapan. Por ejemplo, el ajuste de la velocidad en mi caso, se hace a través de PWM, y veo en vídeos de gente que construye este robot, en los que ni si quiera usan eso, debido a que usan otro Puente H.

Por ejemplo, dejo adjunto un sencillo programa para mover un motor DC sencillo adelante y atrás. Por cierto, que me recomendáis, incluyo servomotor para girar el sensor,o no lo incluyo y hago que gire el robot entero?

Y por último. Si quisiera que el robot fuese en linea recta, encontrase un obstáculo, girase el servo con el sensor anclado
en un ángulo de 180º,y detectase varias distancias mientras el servo gira, para luego escoger la más larga e ir hacia allí, que funciones tendría que usar?

Muchas gracias por vuestro tiempo y atención. Saludos.

Puente_H_b_sico.ino (334 Bytes)

te recomiendo minibloq es un entorno visual de programacion que te ayudará a comprender.
Si no estas en la programacion este te ayudará, pero debes aprender lo basico primero para ir a lo mas complejo despues.
La funcion analogWrite() hace que cambie de velocidad, pero lee primero las referencias del lenguaje para entenderlo.

Oh si, por eso no hay problema. No soy un experto en programación Arduino, pero me defiendo, he programado servomotores, leds, regulado intensidades y parpadeos con potenciómetros, también domino el sensor HCSR04, se medir distancias con el y mostrarlas en la pantalla con la comunicación serial. Vamos, que tengo mis dudas pero me defiendo.

Se que AnalogWrite es para introducir un valor analógico , y me conozco también lo de los pines de salida y entrada. Supongo que será cuestión de dedicarle horas y seguir peleando. Pero de todos modos, si alguien ha hecho algo parecido y me da un esquema o diagrama de flujo no estaría mal.

Yo entiendo, que para girar, debo parar un motor, y poner en marcha el otro, pero si por ejemplo quiero comparar 2 distancias, y ver cual es más larga, que podría hacer? Existe alguna función para eso? Yo entiendo, que tendría que declarar dos variables y guardar la información para luego compararla, pero no sé probablemente haya una manera mas sencilla.

De todos modos, muchas gracias por contestar, y me pasaré lo más rápido posible por ese blog.

ese alguien es ese FORO o GOOGLE, si pones Arduino Algo y verás que se te abre un panorama inmenso.

ejemplo: Arduino robot ultrasonico o Arduino ultrasonic robot

Del segundo en google obtuve
link1
link2

El diagrama lo haces tu, te respondes solo con tu misma pregunta.
Programar es igual que pensar que quiero hacer.
Escribe una secuencia de los pasos que debe seguir, y despues transformas ese codigo humano en codigo Arduino. Facil.

robot evita obtaculos

Gracias por contestar, y pasar enlaces, pero esos todos ya los había visto. Vine al foro, por que no encontraba nada en google. Veréis, el problema reside por ejemplo, en que me pasáis enlaces, de robots que hacen lo mismo que hará el mio, pero con componentes distintos, que no se programan igual, y que no me sirven para poder desarrollar un programa (por ejemplo,me habéis pasado links de robots que usan servos para moverse,yo uso motores dc, o con sensor ping de 3 pines y yo uso hc sr04 con 4 etc...)

De todos modos, muchas gracias. El robot, va avanzando, y me voy acercando poco a poco a lo que quiero. Ahora bien,querría preguntaros una cosa, últimamente, he notado que alimento mi Arduino por Vin con una pila de 9v, y no ejecuta el programa que le acabo de cargar, o solo una parte, no obstante, cuando lo alimento con una fuente de alimentación, el programa se ejecuta correctamente. A que creeis que se puede deber? Se que el Arduino tiene un sistema de proteccion que tira un voltio siempre para fuera, pero he medido la pila con el polímetro, y tiene 7.3 voltios todavía. Cabe destacar, que los motores van alimentados a parte, y que el Arduino solo alimenta un servo que mueve el hc sro4, y el propio sensor? Si tenéis idea de por que puede ser, comentádmelo

Muchas gracias por vuestra atención y tiempo, saludos.

Tu batería esta descargada si te pasa eso.. que tenga 7.3 en vació o cargado? Ojo con esa suposición que estas bien y en realidad al accionar un motor se cae la tensión y se resetea el arduino.

Perdona Surbyte, no entiendo a que te refieres con en vacio o cargado. Yo la única comprobación que he hecho, es medir el positivo y negativo de la pila con el polimetro. Ahora bien, las de 9v suelen traer un amperaje de risa, segun tengo entendido, y rondan los 100-200 miliamperios tal vez no sea suficiente para alimentar el sensor HC SRO4 y el servo? Cabe destacar, que el servo solo mueve el sensor, y es un micro servo Emax de 1.8kg de torque máximos, no creo que consuma mucho.

Los 2 motores dc con reductora del robot, van alimentados aparte por el Puente H, que esta conectado a 4 baterías de 1.2 voltios que se sobrecargan hasta 1.4 (son recargables) de 2700 miliamperios cada una. La única conexión que tienen con el Arduino son pwm, y los 2 pines de adelante y atrás. Puede provocar eso los picos de tensión? De ser asi, como lo soluciono? Simplemente con poner una bateria de 9v recien cargada, a tope?

De nuevo, gracias por la ayuda y saludos.

Cuando explicas como mides una batería siempre debes agregar si esta bajo carga o no.
En vacío es una batería sin carga, solo pones el polímetro como tu dices a los bornes de la batería.
Bajo carga, conectas tu servo, el arduino, y todo lo necesario y mides la tensión.

Entonces tus 7.3V son en vacío o en carga?

En ese caso, esta en vacío. Deberia medirla en carga? En caso de faltase alimentacion, como me recomendáis la alimentacion del Arduino? Se que lo mejor es con una fuente, y ya tengo una, pero al ser un robot no puede estar condicionado por hasta donde llega el cable. He leido algo sobre baterias de Lipo, que duran mucho mas, pero no se si me compensan. Tal vez pilas de 9v recargables?

Gracias por las respuestas

Si tienes 7.3V en tu batería en vacío y cuando la pones a trabajar se viene abajo. Pierde su capacidad rapidamente y el arduino se resetea cada vez que usas el motor que consume mas corriente.
Considera usar una bateria LIPO, recuerda que todo debe estar entre 7 y 12V yo no supero los 9V

Muchas gracias aa todos por todas vuestras respuestas, siento si he estado ausente este tiempo, pero he estado bastante ocupado con los estudios. Me complace anunciaros que finalmente el robot funciona satisfactoriamente. Puede pulirse un poco mas, pero lo importante ya está hecho. Muchas gracias a todos. Respecto al problema del Arduino, tenías razón, simplemente probé con una batería de 9 voltios nueva y el Arduino funcionó perfectamente. A ver si compro una de Lipo recargable, para futuros proyectos. De nuevo muchas gracias por vuestra ayuda.

Saludos, y de nuevo, gracias.

Hola, tengo que terminar un proyecto para el instituto y me embarqué en el proyecto de un robot con arduino, y estoy utulizando la placa arduino leonardo, y quería porfavor, si no es molestia para ustedes, si me podemos mandar un código para que funciones es el simple dos motores un servor para el sensor, un sensor de ultrasonido y un controlador de motores L-298n, muchisinas gracias espero sus repsuestas.

Hola, yo estoy trabajando en el mismo proyecto y quería saber si alguien me puede pasar una foto o un esquema de las conexiones, y en lo posible el software. Mientras más urgente mejor porque mañana me voy de vacaciones a un lugar sin internet. Y para que entiendan mi falta de conocimiento sepan que tengo 11 años.

Saludos, y desde ya gracias.

danielr8:
Hola, saludos a todos. Recientemente me he embarcado en un proyecto que tal vez me quede un poco grande, pues hace poco que comencé con Arduino, pero tenía ganas de ver si era capaz.

Estoy construyendo el típico robot que no choca, detectando los obstáculos mediante ultrasonidos, y hasta ahora todo me ha ido bien,excepto cuándo he llegado al código. He buscado varios códigos por internet, para ver si podía "descifrarlos" y entender su funcionamiento, y he logrado un muy precario funcionamiento del robot, y no precisamente gracias a mi trabajo en el software.

En cuánto a hardware,estoy usando:

Arduino Uno

Puente H L298N (comprado)

2 motores de corriente continua básicos, de 3 a 6v, con reductora

4 pilas de 2700 miliamperios cada una para alimentar los motores

1 pila de 9 voltios para alimentar el Arduino Uno por vin

1 servomotor de 1.8 kg de torque NO trucado para mover el sensor (He visto que hay gente que no lo usa, pero yo pienso que hace más eficiente al robot a la hora de detectarlos)

Sensor de ultrasonidos HC SR04

Una protoboard

De todos modos, lo único que querría preguntar es si conocéis algún sitio en internet en el que me puedan explicar el código del robot, o algún tutorial que me ayude a desarrollarlo. No espero que nadie me lo escriba por aquí, ni quiero eso, dado que lo que intento es aprender, no hacer un copia pega.

Muchas gracias por vuestra atención. Si necesitáis que aclare algo más solo decídmelo y siento si incumplo alguna norma, es la 1ª vez que publico en el foro.

Hola amigo podrias darme tu correo estoy trabajando en el mismo proyecto solo me falta el codigo ayudame porfavor mi correo es guayoswing@gmail.com