Proyecto brazo robótico

Buenas, estoy realizando un proyecto de un brazo robótico con 5 motores de corriente continua. Utilizando el IDE de Arduino no tengo problemas y funciona correctamente pero para mi proyecto quiero moverlo por coordenadas, y para ello necesito enviarle información a los pines por el puerto de comunicación. Mi idea es enviarle bytes por el puerto de comunicaciones usando cualquier interfaz para mandar cosas por el puerto para que los motores se vayan moviendo, pero no sé cómo mandarle específicamente a un pin un valor. Imagina que quiero mover el motor 1. Para ello le enviaría por el puerto de comunicaciones un 1 y así se movería. Espero que puedan ayudarme, gracias de antemano.

Creo que no ha quedado muy claro mi objetivo, aunque tal vez esté equivocado porque soy nuevo en este mundo de Arduino. Lo que pretendo llegar a hacer es un programa en C++ que lea unas posiciones y se las mande al Arduino. Para ello tendría que hacer un algoritmo de conversión de tiempo a posición, aunque lo del encoder también sería buena idea. Pero antes necesito saber cómo Arduino manda la información a un pin por el puerto sin tener que usar el IDE de Arduino y subir el programa a la placa, es decir, usando solo la comunicación por el puerto serie.

Pero antes necesito saber cómo Arduino manda la información a un pin por el puerto sin tener que usar el IDE de Arduino y subir el programa a la placa, es decir, usando solo la comunicación por el puerto serie.

Que contrasentido!!
Hablas de programar en C++ lo que denota nivel, la gran mayoría no saber programar en C++.
Pero luego preguntas algo tan simple como le envia el arduino la señal al pin?

Bueno, arduino le dice a un pin como debe accionarse usando digitaWrite(pin, HIGH/LOW) o una cosa o la otra.
O le dice HIGH o le envia LOW.

El tema es que tu mezclas cuestiones. Estas queriendo enviarle datos via puerto serie.
Entonces primero hay que leerlos.

Hay ejemplos en el IDE de como leer el puerto serie. Ve a Ejemplos => COmunicaciones

Luego tambien si buscas Arduino Serial o cosas similares encontrarás tutoriales por todos lados.
En este foro estan en Documentación => INdice de temas tutoriales => Utilización eficiente del puerto Serial

Y tambien tienes clases de Youtube, alguna de ellas justamente referida al puerto serie.

Creo que con estas guias cubres tus dudas por ahora. Leelas y luego volvemos al proyecto.

Ya esta! Muchas gracias! Ya solo me quedaría mover los motores por posición y estaría todo perfecto! :slight_smile:

Perdonad otra vez, pero a la hora de hacer el algoritmo me he dado cuenta de que sería un poco inútil ya que no podría determinar la posición inicial de los motores, y sin eso eso sería inútil. La pregunta sería si hay alguna manera de saber la posición inicial o la posición en todo momento de los motores. En total son 5. Antes comentasteis algo sobre un encoder rotativo pero he estado mirando y necesitaría 5 drivers de motores y 5 encoders y me gustaría saber si hay algún otro método de conocer este dato o si ese es el único que tengo. Muchas gracias.

Si pero el problema de un encoder simple es que si se corta la energía pierdes la posición, de modo que si no consigues un encoder absoluto que almacene la posición o que disponga de una referencia interna que evite que cuando te quedas sin energía, tengas que hacer que tu brazo vaya a una posición inicial para comenzar cuando esto ocurra.

El problema es que no puedo cambiar los motores ya que el brazo no es hecho por mí, sino que lo compré y venía con motores. Si hubiera tenido ocasión ya lo habría hecho, pero no puedo. Tengo que adaptarme a lo que tengo, y es por eso que me centro tanto en los motores

Pues son unos motores DC con tornillo sin fin. Lo de que haga cosas simultaneamente no me preocupa por ahora ya que me confirmaría por el momento con que haga una secuencia de movimientos movimiendo cada motor uno a uno. El problema que me surge con el analogWrite es que tengo los motores conectados a un módulo relé de 8 canales con optocopladores y conectado a 4 pilas en serie de 1,5V cada y para que funcionen tengo que mandarle un 0 al pin del motor. Con el relé soluciono la polaridad de la corriente pero con el drivers de motor también podría hacerlo, pero creo que aún así debería seguir conectando los motores a los 6V ya que así es como mejor funcionan. Si quieren puedo pasarles una foto del montaje para que vean, aunque no esperen gran cosa porque es la primera vez que uso Arduino y mis conocimientos sobre electrónica son básicos.

El problema que me surge con el analogWrite es que tengo los motores conectados a un módulo relé de 8 canales con optocopladores y conectado a 4 pilas en serie de 1,5V cada y para que funcionen tengo que mandarle un 0 al pin del motor.

Motores de un brazo controlados por reles? Bueno te aseguro que no es la manera adecuada.
Deberías tener un puente H por motor, con lo cual puedes controlar dirección y velocidad de cada uno.

Para indicarte cual usar hace falta saber que motores son.

Uso un Arduino UNO. De motores no tengo ni idea pero creo que son motores DC como los que puede tener un juguete.

Bueno, perdonen por haber estado una semana inactivo, pero he estado bastante ocupado. No me ha quedado claro del todo, podría hacerlo por un puente H usando un driver motor y con encoders rotativos o medir el ángulo de las articulaciones, si no me equivoco. Supongo que para este proyecto me vendría mejor el puente H ya que quiero moverlo en posiciones de la 1 a la 254. ¿Podrían explicarme cómo hacerlo de esa manera? Muchas gracias.

Buenas, entro al hilo un poco tarde quizás, pero te quiero comentar un poco una cosa parecida a ver si puedes sacar alguna idea.

Hace un tiempo hice como proyecto de TFG un brazo robótico de 6 ejes que lo controlaba desde el pc mandando los datos por puerto Serie. Para ello utilice un arduino Mega, unos pololus para controlar los motores de DC y adapté el código Marlin utilizado para comandar los ejes en las impresoras 3D, realmente es bastante sencillo de adaptar, es tocar 4 tonterias y el código viene listo para los ejes de movimiento, mas otros 3-4 extrusores, en total puedes adaptarlo para un total de 7-8 ejes.

Los comandos de movimiento se los mandaba a mano, en plan G1:200,G2:-50,G3:80:X1:20,X2:-62. Además buscando por internet encontré un programa de testeo de impresoras 3D que te mandaba los comandos ya listos cuando tu pinchabas en la posición deseada.

No sé si esto te servirá de ayuda, no, o igual puedes sacar alguna idea de esto. Si te resulta util puedo buscar en el HDD del ordenador los archivos y mandartelos.

Un saludo.

Cierto, no me había enterado muy bien, pues como no le pongas un encoder o parecido no se me ocurre nada, seguiré el hilo ya por curiosidad, pero no suelo trabajar con ese tipo de motores, así que poca ayuda puedo prestar! Un saludo