tag:blogger.com,1999:blog-2032933821250791756.post4918878665275307518..comments2022-03-27T19:16:52.675+02:00Comments on Cuadricoptero DIY con Arduino: Control motores Parte 2Cheyennehttp://www.blogger.com/profile/06952774326249584339noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-2032933821250791756.post-40383549683420698732016-03-01T14:15:34.237+01:002016-03-01T14:15:34.237+01:00Hola. Lo tienes al final de la entrada, está el en...Hola. Lo tienes al final de la entrada, está el enlace a la descarga, "Control motores v2.0"Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-33682205024712945692016-01-29T19:42:20.076+01:002016-01-29T19:42:20.076+01:00donde esta el código que no logro verlo?donde esta el código que no logro verlo?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-40658997448303059932015-02-08T22:27:09.414+01:002015-02-08T22:27:09.414+01:00Gracias Césarcmu.
No utilizo ningún programa en pa...Gracias Césarcmu.<br />No utilizo ningún programa en particular para calcular los tiempos de ejecución. Utilizo la función millis() o micros() según la precisión que necesito, poniendo las instrucciones entre los eventos que quiero calcular y saco el tiempo por la consola.Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-76644780165370570892015-02-04T12:01:56.221+01:002015-02-04T12:01:56.221+01:00Hola, cheyenne, mis mas sinceras felicitaciones po...Hola, cheyenne, mis mas sinceras felicitaciones por tu blog, lo he descubierto recientemente y me encanta. Tengo una pregunta que hacerte, ¿como controlas los tiempos de ejecución de los programas? ¿Utilizas algún programa en particular? Un saludoCésarcmuhttps://www.blogger.com/profile/12877836224669077334noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-6970118067953002302014-10-09T03:30:16.419+02:002014-10-09T03:30:16.419+02:00Este comentario ha sido eliminado por el autor.carloshttps://www.blogger.com/profile/16249684855586682717noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-17327257792488666172014-06-02T21:55:16.167+02:002014-06-02T21:55:16.167+02:00Hola Edwin. Perdona pero se me pasaron estos comen...Hola Edwin. Perdona pero se me pasaron estos comentarios tuyos.<br />En general hay que establecer un PID por cada grado de libertad del sistema. El balanceo un PID, el alabeo otro PID, la guiñada otro. De esta forma a un motor realmente le está llegando la suma de los PID de los grados de libertad en los que interviene.Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-5274590221591049502013-06-20T08:55:10.052+02:002013-06-20T08:55:10.052+02:00Hola Cheyenne, ya estoy más documentado sobre el c...Hola Cheyenne, ya estoy más documentado sobre el control PID, al menos ya se lo que es y una ligera idea de como implementarlo en mi código final. Hoy empiezo a hacer unas pruebas en un balancín y dos motores. Espero dar con los parámetros correctos y del como atacar los dos motores a la vez con el control PID. Aunque me surge aún la duda de si tengo que utilizar tantos controles PID como número de motores o con 2 PID puedo controlar los 4 motores. Que me dirías? Te agradecería un comentario.<br />Gracias por adelantado Anonymoushttps://www.blogger.com/profile/11018520712630853432noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-14155995523224961762013-06-20T08:39:02.435+02:002013-06-20T08:39:02.435+02:00Juan López, estoy siguiendo este blog porque estoy...Juan López, estoy siguiendo este blog porque estoy construyendo mi cuadcopter para mi proyecto final de electronica. Como vas con respecto al control PID? Aún no he comenzado las pruebas en un balancín, lo empezare hoy pero aún no tengo bien claro como hacerlo. Podrías echarme una mano?Anonymoushttps://www.blogger.com/profile/11018520712630853432noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-20837389602369624342013-05-14T20:55:09.154+02:002013-05-14T20:55:09.154+02:00Gracias Cheyenne, estoy en ello. Leyendo documenta...Gracias Cheyenne, estoy en ello. Leyendo documentación y ahora estoy buscando todo lo posible sobre el control PID, a ver si consigo enterarme de las cosas mas importantes durante lo que queda de mes. ahh las variables que mencionas son las que utilizo para la lectura del acelerometro del Nunchuck, es loq ue estoy utilizando como acelerometro porque sale mucho mas ecónomico.<br />Anonymoushttps://www.blogger.com/profile/11018520712630853432noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-2520214406563682222013-05-01T20:11:26.593+02:002013-05-01T20:11:26.593+02:00Edwin, no sé muy bien qué quieres que haga tu códi...Edwin, no sé muy bien qué quieres que haga tu código. Tampoco he utilizado esa librería y no sé lo que representan las variables ejeX, ejeY y joyX. De todas formas creo que tienes que leer bastante más documentación en la red para ver cómo resuelven la estabilización. Para empezar te diré que para mantenerlo horizontal las variaciones de velocidad que le des a un motor se las tienes que dar al contrario al opuesto. Además esas variaciones siempre hay que controlarlas a través de un PID, si no nunca conseguirás estabilizarlo.Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-62313918584738189482013-04-29T21:25:49.080+02:002013-04-29T21:25:49.080+02:00Cheyenne, gracias por la respuesta. Cuando me lleg...Cheyenne, gracias por la respuesta. Cuando me llegue la emisora haré algunas pruebas haré lo que dices a ver qué tal.<br />Te comento otra duda, a ver si puedes orientarme. Para estabilizar mi cuadcoptero estoy utilizando el acelerómetro del Nunchuck Wii, de momento todo va bien sin embargo no consigo que una vez el acelerómetro vuelva a su posición horizontal, el motor vuelva a tener las revoluciones anteriores. Es decir, de momento solo consigo que el acelerómetro sume revoluciones a cada motor pero no que vuelvan a su estado anterior una vez esté en horizontal.<br />Te copio el código y si puedes le echas un vistazo.<br />Gracias<br /><br /><br />int ejeY; int ejeX; int joyX; <br /><br />void setup() {<br /> <br /> Serial.begin(115200);<br /> chuck.begin();<br /> chuck.update();<br /> chuck.calibrateJoy();<br /> <br />}<br /><br />void loop() {<br /> chuck.update(); //xMap = map(ejeX,-127,127,-127,127);<br /> ejeX=chuck.readAccelX();<br /> ejeY=chuck.readAccelY();<br /> joyX=chuck.readJoyY();<br /> <br /> delay (50);<br /> // Habilitamos la consola para aumentar o disminuir los pulsos<br /><br /> if (ejeX>=16) {<br /> PulsoMotorDerecha = PulsoMotorDerecha + ejeX/50; <br /> }<br /> else<br /> {PulsoMotorDerecha=PulsoMotorDelante;<br /> }<br /> if (ejeX<=-6) {<br /> PulsoMotorIzquierda = PulsoMotorIzquierda - ejeX/50; <br /> }<br /> else{PulsoMotorIzquierda =PulsoMotorDelante;<br /> }<br /> <br /> if (ejeY>=5) {<br /> PulsoMotorDelante = PulsoMotorDelante + ejeY/50; <br /> }<br /> <br /> <br /> if (ejeY<=-6) {<br /> PulsoMotorAtras = PulsoMotorAtras - ejeY/50; <br /> }<br /> else{PulsoMotorAtras =PulsoMotorDelante;<br /> }<br /><br /> if (joyX>15){<br /> PulsoMotorDerecha = PulsoMotorDerecha + joyX/50; PulsoMotorIzquierda = PulsoMotorIzquierda + joyX/50; PulsoMotorDelante = PulsoMotorDelante + joyX/50; <br /> PulsoMotorAtras= PulsoMotorAtras + joyX/50; <br /> <br /> } <br /> if (joyX<-15){<br /> PulsoMotorDerecha = PulsoMotorDerecha + joyX/50; PulsoMotorIzquierda = PulsoMotorIzquierda + joyX/50; PulsoMotorDelante = PulsoMotorDelante + joyX/50; <br /> PulsoMotorAtras= PulsoMotorAtras + joyX/50; <br /> <br /> } Anonymoushttps://www.blogger.com/profile/11018520712630853432noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-56978528674009755292013-04-28T13:48:33.052+02:002013-04-28T13:48:33.052+02:00Hola Edwin, me alegro de que te esté siendo tan út...Hola Edwin, me alegro de que te esté siendo tan útil mi blog. Como siempre digo, ten en cuenta que mi cuadricóptero todavía no vuela. No porque no lo haya conseguido, simplemente porque puedo invertir muy poco tiempo y por tanto voy despacio.<br /><br />Mi código te podría valer para leer los 6 canales pero tienes que borrar las líneas de código que lee los canales 7 y 8 porque al no leer la señal se activará a true la variable ErrorRadio.Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-75536963554791352322013-04-22T08:50:49.705+02:002013-04-22T08:50:49.705+02:00Por cierto, tengo una duda, aunque aun no me ha ll...Por cierto, tengo una duda, aunque aun no me ha llegado la emisora pero es una turnigy 6x. Podría sumar los canales tal y como has hecho tu, conectando 3 canales a un pin y los otros 2 canales a otro pin? o con tu código tendría variaciones de respuesta al programarlo para 9 canales?<br />gracias por anticipado, estoy pez con arduino.Anonymoushttps://www.blogger.com/profile/11018520712630853432noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-11185638950034987382013-04-22T08:47:23.502+02:002013-04-22T08:47:23.502+02:00Debo felicitarte sinceramente por este gran trabaj...Debo felicitarte sinceramente por este gran trabajo, te has marcado un curro impresionante y parece que con unos resultados buenísimos. <br />Yo estoy empezando con mi cuacopter aunque de momento estoy recopilando información porque nunca he programado y estoy perdidisimo además de soprendido del nivel que hay por la red con arduino, jeje. Este blog es el que mas me está ayudando con mi proyecto y espero volar pronto mi cuacopter. Gracias por este blog.<br />Anonymoushttps://www.blogger.com/profile/11018520712630853432noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-8532380512374104582012-09-04T11:03:09.525+02:002012-09-04T11:03:09.525+02:00Ese tipo de control, ¿tiene algo que ver con la ló...Ese tipo de control, ¿tiene algo que ver con la lógica difusa? Yo sólo he estudiado control por realimentación con PID. <br /><br />La librería servo funciona con interrupciones y tengo comprobado que puede interferir con algunas partes de códigos críticos con el cómputo del tiempo. Por eso decidí estructurar todo el código de forma lineal, sin interrupciones. Tengo cuantificado el tiempo de ejecución de todas las partes de modo que se ejecutan todas en menos de 20 milisegundos que es el tiempo de ciclo que lo marco con la emisora RC. Leo la emisora, leo los datos del IMU, ejecuto la librería PID y controlo los motores. El código que he desarrollado para los motores envía los pulsos a todos a la vez con lo que se ejecuta en un máximo de 2,5 ms. <br /><br />Pues sí que controlo yo esto que no sale mi email... El mío también es de gmail: cheyenneforoarduinoCheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-70688987861135805292012-09-04T01:40:17.302+02:002012-09-04T01:40:17.302+02:00Este comentario ha sido eliminado por el autor.julomehttps://www.blogger.com/profile/05184404938277583768noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-17379418245029977772012-09-01T12:48:03.917+02:002012-09-01T12:48:03.917+02:00Hola otra vez Juan.
Olvidaba preguntarte sobre lo...Hola otra vez Juan.<br /><br />Olvidaba preguntarte sobre lo del "control adaptativo predictivo" en lugar de PID. ¿En qué consiste ese control?Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-34817194064525695982012-08-31T18:48:25.564+02:002012-08-31T18:48:25.564+02:00Hola Juan.
Mi email puedes verlo entrando en mi p...Hola Juan.<br /><br />Mi email puedes verlo entrando en mi perfil.<br /><br />No entiendo muy bien eso de que se te enciende el LED AREF, yo tengo una Arduino UNO y el AREF no tiene ningún LED, imagino que tu Mega sí la tiene. Lo que no entiendo es lo de que ya no se te enciende con un servo analógico ya que que yo sepa con ese código no se pueden controlar más que los servos analógicos que por otra parte son los mayoriteriamente utilizados.<br /><br />Sobre tu código tiene trampa :) La estabilidad de tu servo la consigues por la banda muerta que le pones de 3 grados. Muchas aplicaciones no admiten semejante banda muerta, de hecho al variar la palanca de la emisora se ve perfectamente que el servo se mueve a trompicones. Imagina si pones un par de servos así para el roll y pitch automático de estabilización de una cámara en el cuadricóptero. Si le quitas el código para la banda muerta se puede ver que el servo baila bastante.<br /><br />Sobre el filtro imagino que es cuestión de ajustar la constante de ganancia pero he comprobado que tiene un retardo del doble que el filtro con el promedio de 6 valores que yo hago. Y a pesar de producir mayor retraso en las zonas planas tiende a tener un pequeño rizado que prácticamente no se tiene con el promedio.<br /><br />En esta web<br /><br />http://www.schwietering.com/jayduino/filtuino/<br /><br />saqué todo tipo de filtros de primer y segundo orden para comprobar que lo que mejor resultados me daba era el promedio.Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-70089302661314173292012-08-29T19:52:41.464+02:002012-08-29T19:52:41.464+02:00Este comentario ha sido eliminado por el autor.julomehttps://www.blogger.com/profile/05184404938277583768noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-4397190371456340522012-08-29T19:46:00.489+02:002012-08-29T19:46:00.489+02:00Este comentario ha sido eliminado por el autor.julomehttps://www.blogger.com/profile/05184404938277583768noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-70716796667322203522012-08-29T19:44:46.278+02:002012-08-29T19:44:46.278+02:00Este comentario ha sido eliminado por el autor.julomehttps://www.blogger.com/profile/05184404938277583768noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-34869958032839932132012-08-29T10:10:54.295+02:002012-08-29T10:10:54.295+02:00Hola. Creo que tu comentario en realidad va dirigi...Hola. Creo que tu comentario en realidad va dirigido a la entrada "Leer emisora RC".<br />Sobre el uso de 8 canales es para aprovechar todas las posibilidades de la emisora y con el tiempo poder ir implementando más funciones al cuadricóptero. Desde poder cambiar en vuelo en tiempo real los parámetros PID para pruebas hasta el manejo de una cámara fotográfica que algún día llegaré a poner.<br />Sobre las medias no te entiendo, la media de X valores nunca se vuelve loca... simplemente promedia el valor haciendo un resultado parecido al de un filtro de orden 1. De hecho en la entrada indico que he hecho pruebas con los filtros Butterworth, Bessel y Chebyshev de orden 1 y 2 y he comprobado que en mi caso no se obtienen mejores resultados que con el promedio de valores. Con el promedio tampoco necesito muchas muestras, lo tengo ajustado por defecto a 6 y no se tiene un valor cada cierto tiempo, se promedian los últimos 6 valores, no en paquetes de 6 en 6 con lo que sigo teniendo un valor cada 20 ms aunque se produce un pequeño retardo de 120 ms.Cheyennehttps://www.blogger.com/profile/06952774326249584339noreply@blogger.comtag:blogger.com,1999:blog-2032933821250791756.post-42469305468807811212012-08-29T02:51:40.966+02:002012-08-29T02:51:40.966+02:00Hola que tal, estoy intentando hacer algo similar ...Hola que tal, estoy intentando hacer algo similar y encuentro algunas dudas. <br /><br />¿Para que quieres utilizar 8 canales si solo necesitas 4? Con los cuatro podrias utilizar 4 entradas y olvidarte de los diodos y demas.<br /><br />Por otro lado dices que tienes ciertas variaciones en las lecturas de los pulsos y para enmendar el tema usas medias. Pero con las medias no lo vas a solucionar, pues siempre la lectura cambia y la media se vuelve loca, necesitarias muchas muestras y luego solo tendrias una cada cierto tiempo.<br /><br />Deberias utilizar un filtro de orden uno:<br /><br />v.filtrada= v.sin filtrar*K.filtro+V.filtrada*(1-k.filtro)<br /><br />Creo que por algun sitio tenia un programita con el filtro, dime tu correo.Anonymousnoreply@blogger.com