Buenas, después de estar viendo durante un par de semanas post y foros en los que mucha gente se ha retirado antes de empezar, me he decidido hacer mi propio mando de radio control con arduino, uno económico, basado en los integrados Tx-2B (transmisor) y Rx-2B (receptor), creo que podría hacerlo solo, pero claro que aún no he empezado y las comeduras de cabeza se harán notar. El transmisor es para un avión radio control que usa dos servos y un motor principal.
Tengo poca experiencia con arduino, pero me propongo esto como una meta personal, no quiero que nadie escriba aquí que me compre una emisora y ya esta, o que me será imposible, para desmotivar a la gente no escribáis por favor...
He estado leyendo como funcionan las emisoras, y he comprendido que hacen un delay de 20 milisegundos y luego envían un pulso de entre 1 y 2 milisegundos, el receptor analiza la duración y convierte el dato en PWM para el motor o el servo. Por lo cual suponiendo que se envíe una señal durante 1500 microsegundos, el receptor lo procesará y sacara una señal PWM de 124 por ejemplo (aproximadamente).
Tengo en mente comprar un joystick (este http://www.ebay.com/itm/JoyStick-Breakout-Module-Shield-For-PS2-Joystick-Game-Controller-For-Arduino-/181811928150?hash=item2a54d5dc56:g:puwAAOSwLVZVsaJw),
Su funcionamiento es sencillo, dos potenciometros que definen X e Y, los dos ejes, uno para cada servo. Cuando está en reposo (en medio), se envía una señal media a los pines analógicos de arduino, 516 (la mitad de 1023), o lo que equivale a 2.5v en arduino.
Para el motor solo necesito un potenciómetro, me he decidido por uno deslizante (mas lógico para este caso) http://www.ebay.com/itm/Electronic-Block-10K-Sliding-Slider-Potentiometer-Module-for-Arduino-New-UF-/401045294514?hash=item5d60298db2:g:hNUAAOSwSdZWeXmi.
Bien, mi idea es pasar los datos analógicos a tiempo, literalmente, equivaliendo 0 a 1 milisegundo, y 1023 a 2 milisegundos, y enviarlo al otro arduino con el receptor, el cual analizaría el tiempo desde que llega el "impulso" hasta que termina, y sacando los datos conseguidos (supongo que restando 1000 microsegundos se me quedaría el dato de origen) los pasaría a PWM (fácil, seria hacer esto: 0,1000,0,255) y de ahí al servo.
La idea es sencilla, pero me preocupa que una pequeña tardanza en el cálculo modifique los grados de un servo, aunque eso sería ajustarlo a mano, modificando los numeros hasta conseguir que vaya bien. El proceso se repetiría 3 veces por cada "ciclo" uno para cada servo (2) y otro para el motor.
Llegados a este punto me pregunto dos cosas:
-
Es capaz arduino de conseguir una buena precisión? Estamos hablando de contar microsegundos (y se que arduino puede, pero tal vez el empezar un calculo le lleve 10 microsegundos, calcularlo 40 microsegundos, y "escribirlo" otros 10, ahí irían 60 microsegundos, que no es mucho pero impidiría que un servo girase 180º del todo)
-
La otra pregunta es más técnica, como empiezo una cuenta al recibir el código, y la termino cuando pare? He pensado en usar un condicional "for" y que durante eso ponga a 0 una variable y que empiece a sumar microsegundos a esta, cuando se pare el "impulso" el bucle for se detendría dejando en la variable un valor que yo luego procesaría para sacarlos a PWM, pero no se como empezar la cuenta, y son 3 cuentas, no una, una por cada motor/servo.
Muchas Gracias. Pablo.