Proyecto Cuadricoptero UAV: Problema con receptor de emisora RC

josemanu, la señal PWM que genera el analogWrite es a 490 Hz (no 16 MHz). Que Arduino en su core configure a dicha frecuencia la función analogWrite, no significa que no tenga sentido usar PWM. Estoy de acuerdo que para un novato es mejor usar la librería preparada para servos, pero como ha dicho SrDonGato, no dejan de ser PWM... ;) Como también ha dicho SrDonGato, si usas el módulo de PWM del micro, puedes estar haciendo otras tareas, ya que los timer harán el trabajo por tí. La librería servo usa timers para ir generando en los pines los PWM adecuados. Lo hace por soft, para poder controlar mayor número de salidas utilizando el menor número de timers del micro (creo que manejan 12 salidas por cada timer).

Yo creo, que lo que hay que dejar claro es que analogWrite() del lenguaje Arduino genera un PWM de 490 Hz, que no es apto para el control de servos.

Copio del link que puse más arriba...

The following are lists of common devices that use PPM and PWM.

R/C Devices that use PWM Pulses:

Servos Electronic Speed Controllers R/C switches R/C lights R/C receivers Data loggers Failsafe's Autopilot/Stabilization systems Servo Controller

R/C Devices that use PPM Pulses:

R/C transmitters R/C receivers Autopilot/Stabilization systems PCTx

Salu2

josemanu: Relacionar los pines marcados con la serigrafía PWM en la placa con control de mecanismos para RC solo crea confusión entre los novatos. O entre los que no han conectado nunca un servo a una placa Arduino.

[...]

Una vez más os recomiendo hacer pruebas y lo vereis por vosotros mismos. Toda la información erronea que circula por el foro acerca de este tema solo contribuye a que de tanto en tanto aparezca un disparate: hace unos meses un chaval quería convertir un coche RC en un robot y quería mandarle las señales desde el mando, pues hubo un iluminado que le recomendó que conectara la antena de la emisora a un pin PWM.

Yo creo que es al revés, hay que explicar las cosas tal cual son indicando sus particularidades: la señal de control de un servo es PWM pero no se pueden controlar directamente mediante la función analogWrite() con los pines serigrafiados como PWM en la placa Arduino porque esa función saca una señal PWM a 490 Hz y el control de servos es a 50 Hz.

Nombras lo de información errónea como si lo explicado por SrDonGato fuera erróneo (en cuanto a las argumentaciones en este hilo) cuando es lo contrario, tu simplificación como para aclararlo a los novatos es lo que ha entrado en conceptos técnicos erróneos. Podemos simplificar las cosas todo lo que quieras (queramos) o puedas (podamos) que siempre aparecerán como dices "iluminados" (yo prefiero nombrarlos como "aventurados") que dirán unos disparates impresionantes.

Yo dejaría lo de "iluminados", "aventurados" y demás fuera del hilo... Cada uno intenta exponer sus ideas, aunque no sean correctas. Es función de cada lector filtrar y contrastar dicha información. Este tipos de comentarios están un poco fuera de lugar... Precisamente es la utilidad de un foro... "debatir abiertamente" diferentes temas entre personas con aficiones comunes.

Salu2

;)

Yo creo, que lo que hay que dejar claro es que analogWrite() del lenguaje Arduino genera un PWM de 490 Hz, que no es apto para el control de servos.

que no es apto para el control de servos

Aleluya!!!!!

Reconozco mi error con la frecuencia de la señal PWM de Arduino, no he estudiado a fondo el tema y daba por sentado que sería la misma que la del reloj.

Por cierto SrDongato gracias al enlace de un hilo abierto por Complubot: repásatelo bien y veras que se puede configurar a frecuencias más altas pero para 50Hz no, un motivo más para dejar de relacionar de una vez las salidas PWM de la placa con señales de control de RC.

Estoy de acuerdo que para un novato es mejor usar la librería preparada para servos

Es la forma más sencilla, como he dicho se puede hacer programando a mano y es un buen ejercicio para profundizar en el control de tiempos, pero personalmente lo considero un engorro.

pero como ha dicho SrDonGato, no dejan de ser PWM... smiley-wink

Si, PWM de 50Hz, que Arduino SOLO puede generar por SoftWare. Bueno solo seguro que no, seguro que se puede acceder a la configuración de los Timers para que el PWM que genera Arduino con el comando analogWrite() sea de 50Hz.... ¿alguien sabe hacerlo? ¿si? escribid un tutorial y subidlo al Playground.

¿Ventajas de usas los pines 3, 5, 6, 9, 10 y 11 que son los serigrafiados como PWM? si no nos van a dar una señal PWM de 50Hz NINGUNA. ¿Como hacemos que por esos pines salga una señal PWM de 50Hz? reconfigurando los Timers (ops, procedimiento avanzado) o utilizando la librería servo.h o programando a mano.

¿Relación directa de los pines PWM con el control de elementos RC? ninguna.

¿Problema de insistir en relacionar dos tipos de señal PWM totalmente distintos en frecuencia? Causa confusión.

Volvamos al principio del hilo:

Hola a todos, estoy construyendo un cuadricoptero UAV para ello quiero poner el Arduino UNO entre el receptor de la emisora RC y los ESC con los motores. El problema que tengo es que los pines analogicos de entrada del Arduino no me detectan las señales del receptor de RC.

Claro que los pines analógicos no detectan las señales del receptor. El receptor está enviando una señal PWM a 50Hz, esto hay que leerlo con el comando pulseIn() desde un pin digital.

Ahora empieza el lio, un montón de gente bienintencionada da un montón de información erronea o confusa:

Los receptores suelen sacar PPM

falso.

Las emisoras suelen transmitir en PPM (creo que es analógico) y el receptor transforma la señal PPM en las salidas PWM de cada uno de los canales.

dejo a otros la interpretación de esta frase ¿alguien de acuerdo conmigo en que es confuso?

Ambas se leen en digital. en PPM se utiliza solo un pin , en PWM un pin por cada canal.

SrDongato, para ayudar así mejor no ayudes, por que de esa frase no se saca nada en claro, lo único que consigues es marear. No das ni el como ni el por que, no le dices al chaval ni que tiene que buscar ni donde. Recordemos: quiere insertar un Arduino Uno entre un receptor y varios ESC, ¿PPM por un solo pin? ¿por cual? "PWM un pin por cada canal" es lo único que tiene un poco de sentido en esa frase, pero el PWM que tendrá que leer es de 50Hz ¿adrib lo sabe? yo creo que no, de hecho, ya ha intentado leer ese PWM de 50Hz desde una entrada analógica de su Arduino UNO y no ha sacado nada en claro, evidentemente, por que así no se hace.

Siguiente respuesta de adrib:

Por lo que he leido en vuestras respuestas diria que estoy leyendo PWM ya que tengo un cable de señal por cada canal y ya que segun decis se leen en pin digital he probado con el codigo:

Ya está, adrib está confundiendo una señal PWM de 50Hz con otra de 490Hz ¿por que? por la cabezona insistencia de llamar PWM a ambos tipos de señales dando por sentado que todo el mundo conoce la diferencia de frecuencia, por que si no no me lo explico. Es por este motivo que yo INSISTO en NO llamar PWM a la señal de control de RC por que induce a esta confusión. ES una señal PWM pero de 50Hz y como esta puntualización no la hace nadie se confunde con el PWM de los pines PWM. Mirad una línea del código con el que adrib ha intentado leer la señal de control de RC:

int sensorValue =analogRead(9); // He probado tanto analogRead como digitalRead;

Confundido a tope va el pobre adrib (que debe estar flipando con este hilo y la discusión que está generando).

(continuo, que me paso de longitud)

Respuesta de SrDongato:

no te has mirado lo que te he dicho .... mírate el código para ver de que manera obtiene los valores de cada uno de los canales.

Y hay un enlace a un .pde que para adrib debe resultar totalmente incomprensible por sus 2001 líneas de código y por la masiva utilización de recursos de programación de nivel avanzado. Luego se postea un trozo de código más sencillo y más comprensible... y mirad lo que aparece en una de las líneas:

if(pulseIn(4, HIGH) > 3000) //Si el pulso del pin 4 es > 3000 usegundos continua

Anda, leemos con el comando pulseIn. Ahora el que está confundido soy yo ¿no es lo que vengo diciendo desde el principio? Luego aparece Cheyenne, que es de los que no tiene clara la diferencia entre los tipos de señales ni de donde se sacan, pregunta para que se lo aclaren y la respuesta de SrDongato es muy reveladora... pero en otro sentido:

Sin saber mucho de programacion ( yo tampoco soy un gurú) es fácil el montaje y la configuracion del mismo a traves el programa que hn hecho a tal efecto, y puedes ver los valores de las configuraciones, los valores de los sticks y los valores comandados a los motores. se han currado mucho el codigo .

Ah, has hecho un copy/paste... perdona, pero eso no implica que sepas lo que estás haciendo ni de que estás hablando. Activar o desactivar opciones según la configuración al principio del código no es programar, el programa como bien dices, se lo han currado mucho... otros.

Luego vengo yo, intento poner un poco de claridad explicando las diferencias entre un tipo de señal y otro con términos simples y fáciles de entender, tratando de no inducir a confusión llamando PWM a una señal (que aunque si lo es) tiene una particularidad en su baja frecuencia que la aleja totalmente de la PWM de la que se habla en toda la documentación de la web de Arduino y que no puede ser utilizada de la misma forma ni en su generación ni en su lectura.

Y aquí no liamos entre unos y otros. Vamos a ver si arrojamos luz sobre la cuestión:

La señal que genera un receptor de RC y que envía a servos o variadores en una PWM de 50Hz. La señal que envía un variador al motor es una PWM de alta frecuencia.

Yo creo que es al revés, hay que explicar las cosas tal cual son indicando sus particularidades: la señal de control de un servo es PWM pero no se pueden controlar directamente mediante la función analogWrite() con los pines serigrafiados como PWM en la placa Arduino porque esa función saca una señal PWM a 490 Hz y el control de servos es a 50 Hz.

De acuerdo si respetamos siempre el mencionar las particularidades de cada una... pero va a ser que no, se seguirá diciendo que la señal de control para servos es PWM sin especificar su frecuencia y se seguirá confundiendo con la que generan los pines PWM y habrá quien seguirá intentando leer esa señal con los pines analógicos y quien intentará controlar un servo con un analogWrite() por que no se va a mencionar el tema de la frecuencia.

Nombras lo de información errónea como si lo explicado por SrDonGato fuera erróneo

No es erróneo, pero al no explicar la diferencia de frecuencia induce a error a quien lo lea tal cual.... y si, hay que darlo todo muy masticadito, por eso esta respuesta se está haciendo tan larga.

Yo dejaría lo de "iluminados", "aventurados" y demás fuera del hilo... Cada uno intenta exponer sus ideas, aunque no sean correctas. Es función de cada lector filtrar y contrastar dicha información. Este tipos de comentarios están un poco fuera de lugar... Precisamente es la utilidad de un foro... "debatir abiertamente" diferentes temas entre personas con aficiones comunes.

Quien expone sus ideas sin saber de que está hablando, por muy buena voluntad que tenga, confunde. Un neofito no puede filtrar la información, acude al foro para que le ayuden y si la información que le proporcionamos es incorrecta, incompleta o induce a error no se le ayuda.

A mi este post me ha ayudado, algunas cosas las tenía confundidas como la frecuencia de salida de los pines PWM de Arduino, pero el resto lo tengo muy claro por que he trabajado con receptores, servos y variadores programando yo mi propio código, con la librería servo.h y a pelo. Seguiré llamando en mis manuales "señal de control RC" a la señal PWM de 50Hz por que no induce a confusión, las separa, luego quien profundice en la anatomía de cada tipo de señal ya dirá "anda, si es lo mismo, solo cambia la frecuencia", pero tendrá muy claro que se trabaja de forma muy diferente con cada una de ellas precisamente por esa diferencia en la frecuencia.

Y con esto ya me despido. Perdón si me he puesto un poco agresivo en alguna frase, en ningún momento mi intención ha sido ofender a nadie, solo hacer que aprender sea sencillo para la gente que no tiene conocimientos de electrónica ni de programación, por que no debemos olvidar nunca que Arduino es, sobre todo, una plataforma para que personas sin conocimientos de electrónica ni programación puedan acercarse al mundo de la electrónica digital.

Confirmo que tu post es muy agresivo.
Si que os lo tomais personal…

:wink:

josemanu: Luego aparece Cheyenne, que es de los que no tiene clara la diferencia entre los tipos de señales ni de donde se sacan, pregunta para que se lo aclaren y la respuesta de SrDongato es muy reveladora... pero en otro sentido:

Sí, yo también confirmo que tu post es muy agresivo. En todo lo que he escrito en este post sólo encontrarás una incorrección mía:

Las emisoras suelen transmitir en PPM (creo que es analógico)

Como bien puedes leer no afirmaba y menos con la rotundidad que tú afirmas las cosas para luego decir que no es como tú has dicho pero que lo dices así para que lo entiendan los novatos. Como bien indicó SrDonGato la señal PPM se lee con un pin digital.

Veo mucha confusión con el tema del PWM y el radio control, a ver si arrojo un poco de luz sobre esto hasta llegar al capítulo de mi curso en el que lo explicaré con todo lujo de detalles.

Me parece bien pero en el camino de arrojar luz has puesto alguna que otra incorrección.

En un sistema de RC (Radio Control) las PWM se utilizan SOLO entre el variador y el motor, para NADA más.

Incorrecto, como ya ha quedado claro cada uno de los canales de salida del receptor RC saca una señal PWM a 50 Hz.

Tampoco se utiliza PPM. Esto es algo parecido, pero no es igual.

Aquí no puedo asegurar si hay o no algo incorrecto, pero si te refirieras a que en un sistema de RC tampoco se utiliza PPM no es cierto. La señal PPM es un modo de transmisión de las emisoras RC y que en muchas páginas muestran en qué parte de la electrónica del receptor de RC se puede interceptar esta señal.

Toda la comunicación física entre elementos de RC (receptor, servos, variadores, giróscopos, mezcladores, inversores de servos, etc) se hace por un particular tren de pulsos: un pulso de entre 1 y 2 milisegundos, una pausa de 20 milisegundos. Ya está, no tiene ninguna otra complicación.

Incorrecto, no es una pausa de 20 milisegundos. Como ya se ha dicho el periodo de la señal PWM (ese particular tren de pulsos) es el que tiene los 20 milisegundos.

No, no y no. Es lo que intentaba aclarar: una señal modulada por ancho de pulso (PWM) sirve para "simular" una señal analógica mediante una digital... y eso no funciona ni con servos ni con receptores.

Vaya, y era yo el que no tenía clara la diferencia entre los tipos de señales. Uno de los usos de la modulación PWM es poder "simular" una señal analógica pero no la única. Una señal PWM a 50 Hz con las especificaciones concretas del ancho de pulso es justamente lo que funciona con servos.

Una señal de Modulación por Posición de Pulso (PPM) es un tipo de modulación en la cual una palabra de R bits es codificada por la transmisión de un único pulso que puede encontrarse en alguna de las 2M posiciones posibles.... se parece mucho, pero no es lo mismo. Por mucho que en el foro de mikrocopter lo llamen PPM no es PPM

Aquí creo que estás confundiendo las señales a las que se refieren en el foro de mikrocopter. No he leído esos hilos pero aseguraría que lo que están llamando PPM es PPM puesto que me imagino que no se estarán refiriendo a las señales de salida de los canales del receptor RC. Se estarán refiriendo a la señal que se puede interceptar en el interior del receptor de RC.

Vaya…

Ahora el que está confundido soy yo ¿no es lo que vengo diciendo desde el principio?
Luego aparece Cheyenne, que es de los que no tiene clara la diferencia entre los tipos de señales ni de donde se sacan, pregunta para que se lo aclaren y la respuesta de SrDongato es muy reveladora… pero en otro sentido:

Sin saber mucho de programacion ( yo tampoco soy un gurú) es fácil el montaje y la configuracion del mismo a traves el programa que hn hecho a tal efecto, y puedes ver los valores de las configuraciones, los valores de los sticks y los valores comandados a los motores.
se han currado mucho el codigo .

Revelador si … muchos preferimos buscar código hecho, no veo el por qué esta mal. leyendo código se cogen ideas y se aprende como atacar con programación a un problema, que en definitiva es lo que piden muchos. es por lo que le puse el código , para que hiciera lo mismo, es como muchos hemos aprendido.

Respuesta de SrDongato:

no te has mirado lo que te he dicho …

Como otros muchos a los que se responde ni siquiera mira lo que se le propone, y si no lo entiende tampoco lo dice.

Y hay un enlace a un .pde que para adrib debe resultar totalmente incomprensible por sus 2001 líneas de código

Ademas VIENE COMENTADO Y TOTALMENTE ESTRUCTURADO, y gracias a esto tanto yo como otros muchos sabemos como obtener estos datos, que por cierto hemos podido importar la idea a otros proyectos …

Ah, has hecho un copy/paste… perdona, pero eso no implica que sepas lo que estás haciendo ni de que estás hablando.

En algún momento he dicho que el código fuera mio ??

buscate el proyecto de multiwii copter,

en algún momento he dicho que no sepa lo que hace ?
y si … en tus continuos errores si parece que sepas de lo que estas hablando también…

Ambas se leen en digital. en PPM se utiliza solo un pin , en PWM un pin por cada canal.
SrDongato, para ayudar así mejor no ayudes, por que de esa frase no se saca nada en claro,

Qué no entiendes en la frase ? El comentario aclara un comentario anterior que dice

Para leer PPM creo que hay que utilizar una entrada analógica y para PWM una entrada digital para cada canal que quiere ser leído.

Y si creo que ayuda al lector a saber como debe hacerlo.

repásatelo bien y veras que se puede configurar a frecuencias más altas pero para 50Hz

Parece que debas repasarlo tú pues decías que las señales PWM eran a 16 MHZ cuando por defecto son a la frecuencia mas baja, anda échales un vistacico

La forma que tienes de ver el estado del pin es si está a 0 o 1 en un determinado momento.

Te has fijado como son las señales PWM y PPM ?, debes fijarte primero que es lo que queires leer por esa patilla.

aqui tienes un codigo que saque de no me acuerdo donde para leer una señal PPM, normalmente tienes que abrir el receptor para obtener la señal del pin de un chip que tiene interno, que es el que decodifica de PPM a PWM a cada canal. la ventaja del PPM es que con 1 entrada digital obtienes los valores de todos los canales. con PWM obtienes el valor de 1 solo canal por lo que necesitas tantas entradas digitales como canales tenga tu radio .

Creo que es una explicación clara y concisa de como tiene que leer ambas señales, no me atribuyo el código, el cual ademas viene comentado…

Después de explicar a ambos lo que preguntan en el hilo apareces con tu magistral arrojo de luz

con términos simples y fáciles de entender,


sin responder a lo que se pregunta, cosa que criticas mas adelante.

En un sistema de RC (Radio Control) las PWM se utilizan SOLO entre el variador y el motor, para NADA más.

se utiliza entre receptores y variadores y servos, si a 50hz pero no deja de ser PWM

Tampoco se utiliza PPM. Esto es algo parecido, pero no es igual.

Las emisoras emiten muchas de ellas en PPM, incluso en PCM y luego se encarga el receptor de convertirlas a PWM

se hace por un particular tren de pulsos: un pulso de entre 1 y 2 milisegundos, una pausa de 20 milisegundos

puff

(PWM) sirve para “simular” una señal analógica mediante una digital…

es uno de los usos y siempre y cuando se aplique un filtro a la salida que derive la señal digital y la convierta a analógica.
Y como puedes ver no he sido el único en darme cuenta.

No tendré mucha destreza programando pero mis 10 años de estudios en electrónica y automática y otros 8 años trabajando creo saber de lo que estoy hablando.

Perdón si me he puesto un poco agresivo en alguna frase, en ningún momento mi intención ha sido ofender a nadie

Lo mismo digo

Un saludo

No iba a contestar tras la primera lectura de tu respuesta, pero a la segunda el PUFF me ha llegado al alma

int lectura;  // variable que almacenara el valor leido del potenciometro.
int salida = 9;  // pin por el que mandaremos un tren de pulsos
int pulso;  // contendra la anchura del pulso

void setup()
  {
    pinMode(salida, OUTPUT);
  }
  
void loop()
   {
    lectura = analogRead (A0); // leemos el pontenciometro
    pulso = map(lectura, 0, 1023, 1000, 2000); // calculamos el ancho del pulso
    digitalWrite(salida, HIGH); // activamos el pin de salida
    delayMicroseconds(pulso);   // esperamos el tiemp que dura el puslo
    digitalWrite(salida, LOW);  // desactivamos el pin de salida
    delay(20); // PAUSA de 20 milisegundos
   }

Como sabes leer programas veras que este sencillo sketch lee un potenciometro, mapea su valor para dejarlo en un rango de entre 1000 y 2000, activa un pin digital, espera ese valor mapeado en microsegundos y desactiva el pin, luego hace una pausa de 20 milisegundos.

Copialo y pegalo, y luego lo pruebas con un servo y veras que .... funciona, anda.... pulso, pausa, pulso, pausa... funciona ¿puff?.

Tus 18 años entre aprender y ejercitar parece que te han nublado algo el juicio, hablas de PWM, PPM y PCM como si todo el mundo estuviera a la altura de tus conocimientos... y no es así. La gente que acude a este foro en busca de consejo no sabe lo que es un PWM ni un PPM ni un PCM... ni falta que les hace, vienen a aprender por que nadie nace sabiendo.

Un ejemplo simple como pulso, pausa, pulso, pausa es facil de entender Y FUNCIONA, no puff no. Es la forma más sencilla de explicar la forma en que recibe las señales de control un servo o un variador... decirles que es una señal PWM solo sirve para llevarles a intentar pilotar el servo con un digitalWrite().

Por cierto, el código de ejemplo es mio.

No tratas de rebatir mis argumentos sobre que utilizar el termino PWM lleva a confusión, por lo que entiendo que estás de acuerdo... y te doy la razón, es un PWM de 50Hz, pero si no vamos a poner la coletilla de los 50Hz mejor no decir solo "es una señal PWM" por que confunde a los que no tienen muy claro lo que es.

Mira, yo no lo se todo, hoy he aprendido que la frecuencia por defecto en la señal PWM que generan los pines digitales es de 490Hz, si comento incorrecciones es por que aun me queda mucho por aprender. Al menos tengo la humildad de reconocerlo y disculparme por mis errores, si entro en este foro para ayudar a los que saben menos intento hacerlo en un lenguaje que comprendan.

Soltar una frase como "Las emisoras emiten muchas de ellas en PPM, incluso en PCM" no disipa ninguna duda, no ayuda, no aclara nada. Puede que tu tengas muy claro lo que es cada una de ellas, enhorabuena tio sabes mucho de electrónica, pero no tienes ni idea de como transmitir ese conocimiento.

Todo el mundo parece tener muy claro que las emisora utilizan PPM, PCM y PWM. Os ha faltado entrar en que unas modulan la frecuencia y otras modulan la amplitud, por eso las hay FM y AM. No habéis dicho nada de las de 2.4GHz (que no hay que confundir con wifi) y ahí tenéis un montón de siglas más para presumir de lo mucho que sabéis de electrónica FSSS, FHSS, FASST y muchos más.

Recomendarle a alguien que abra un receptor, que busque un chip que da salida PPM y que la lea por un pin analógico ¿de verdad te parece que es aclararle algo?, para los que llevan 18 años dedicados a la electrónica debe ser lo más sencillo del mundo, pero para los demás no.

¿Agresivo? si, por que estoy tratando de que las cosas se expongan de una forma sencilla y que funcione (pulso, pausa, pulso, pausa ---> funciona, no puff, funciona, no puff) sin complicarle la vida a nadie por omitir puntualizaciones acerca de una frecuencia, ¿agresivo? tal vez por que empecinarse en llamar las cosas de una forma que, aunque sea correcto, confunde me parece estúpido.

Releo la respuesta de Cheyenne, perdón por mis incorrecciones, aprendo sobre la marcha.

Chicos la temperatura y subida de tono de los post hay que frenarla ya.

Como bien ha indicado 'Igor R' estamos en un foro y en él se discuten las cosas aportando cada uno nuestro conocimiento para esclarecer dudas. Pero teniendo en cuenta unas normas mínimas de conducta y un mutuo respeto. Saliéndonos de la temática y entrando en rivalidades no es la mejor forma de ayudar si es como decís lo que pretendéis.

De seguir en esta línea me veré obligado a hacer algo que no deseo.

Saludos.

coLe.

Correcto y diplomático como es su costumbre el señor moderador tiene toda la razón, pero en mi opinión llega un poquito tarde, mi último post ya estaba muy calmado.

Y como también se me ha echado en cara que no he aportado nada positivo, solo incorrecciones, voy a subsanar este hecho... y sin acalorarme.

int entrada = 7;  // pin en el que metermos la señal que viene del receptor
unsigned long pulso;  // variable en la que almacenaremos la lectura

void setup()
{
  pinMode(entrada, INPUT);  // configuramo el pin como entrada
  Serial.begin(9600);   // habilitamos puerto serie
}

void loop()
{
  pulso = pulseIn(entrada, HIGH); // leemos el pulso
  Serial.println(pulso);  // mandamos el dato al monitor serie
  delay(500);   // pausa para no volver loco al monitor serie
}

Este sencillo Sketch recien programado por mi lee los pulsos procedentes de un receptor y los muestra por el puerto serie.

Como lo que Adrib quería hacer era leer la información que viene del receptor para jugar con ella en ese Sketch tiene todo lo necesario para entenderlo y comentado en castellano, aun así, si algo no le queda claro que pregunte y trataré de explicarlo de la forma más sencilla que pueda.

Acerca del Sketch comentar solo que, como básicament lo que queremos leer es un pulso de una duración de entre 1000 y 2000 microsegundos, tras el cual va una pausa cuya duración no nos importa, con el comando pulseIn() lo podemos hacer de forma sencilla. Lo he probado con uno de mis receptores y tal cual está ha funcionado perfectamente. También he comprobado una cosa muy curiosa, que no sabía y que paso a compartir para que sea de dominio público, por que a alguien le puede ser de interes: cuando he apagado el conjunto receptor-variador y he retirado la batería me seguían llegando pulsos, así que con sorpresa me he enterado de que Arduino puede alimentar al receptor.

Otra cosa, para leer los pulsos haría falta un comando pulseIn() para cada canal. Yo he utilizado un receptor Team Losi 2.4GHz DSM de 3 canales para la prueba, abrirlo para buscar una señal interna que lleve la información de todos los canales codificada en ella me parece, a título puramente personal, innecesario. Pero si algún valiente se atreve yo le paso fotografías de 8MP del circuito, me señala donde buscar y me ofrezco para hacer mas pruebas.

Esta mañana, mientras iba en bici al trabajo no he podido dejar de pensar en el tipo de señal tan particular que sirve para comunicar los distintos elementos de un sistema de radio control. Hemos quedado que es una señal PWM de 50Hz y que su pulso tiene una duración comprendida entre 1 y 2ms ¿y si el pulso fuese de 10ms? seguiría siendo PWM, pero no funcionaría ¿y si el pulso fuese de 0.25ms? también sería PWM y tampoco funcionaría.

Si tenemos que especificar que se trata de una señal PWM de 50Hz con el pulso comprendido entre 1 y 2ms resulta que tenemos que puntualizar tanto para referirnos a este tipo de señal que decir sólo que es PWM resulta incompleto, tanto como decir que se trata de una señal digital. Realmente ofrece la misma información en este caso decir que es digital y decir que es PWM. En este caso simplificar hasta el punto de que trata de una señal pulso-pausa-pulso-pausa, diciento que los pulsos son de entre 1 y 2 ms y que las pausas son de 20ms ofrece mucha más información y es más comprensible que decir solo que se trata de una señal PWM. Y aunque la simplificación no sea técnicamente correcta resulta que es cierta y que si le enviamos esa señal a un servo funciona.

La temperatura no habría subido si el lugar de saltarme al cuello por un par de incorrecciones en ningún momento intencionadas (vuelvo a pedir disculpas por haberme equivocado con la frecuencia de salida de la señal PWM de los pines de Arduino) nos hubiesemos centrado en lo que importa: despejar dudas con información útil.

Espero con esto haber aportado mi conocimiento para esclarecer dudas y no para generarlas, aunque si ha sido este el caso, siempre estoy dispuesto a disiparlas en base a mis conocimientos y a mi experiencia.

Chicos gracías por la discusión, porque me habeis aclarado un montón de cosas con ella, aunque se haya puesto un poco tensa la cosa. Voy a empezar con arduino para controlar dispositivos en un avión rc y tenía algunas dudas al respecto.

En cuanto me llegue mi arduino nano, seguró que me saldrán mil mas :-)

Lo mejor que estos puntos de vista diferentes es que siempre se saca algo bueno de los dos lados :-)

Jaja ando tan liado que me he perdido todo el follón. No me he leido todo porque tras leer un rato me he dado cuenta que estabais discutiendo sobre semántica. Pero has sido interesante. Salu2

La discusión semántica ya se produjo hace dos años aquí: http://arduino.cc/forum/index.php/topic,14146.0.html

Resumiendo viene a decir que lo que puede dar lugar a equívoco si no se conoce Arduino es el hecho de que para dar una salida PWM el comando sea analogWrite. El personal poco entendido puede interpretar que se está dando una salida analógica cuando no lo es. El comando correcto tal vez debiera haber sido PWMWrite. Pero a estas alturas no sería nada práctico intentar cambiarlo. Siguiendo el hilo con el tema de radio control (RC) se explica lo de la transmisión de las emisoras RC mayoritariamente en PPM (también pueden hacerlo en PCM) para a continuación demultiplexar y sacar la señal PWM de cada canal. Esta señal PWM es la que directamente controla por ejemplo un servo. Sin embargo, la salida PWM de un Arduino escrita con el comando analogWrite no puede controlar un servo porque ese comando saca una PWM a frecuencia 490 Hz cuando un servo la requiere a 50 Hz (flancos ascendentes cada 20 milisegundos). Por esta razón hay quien propone no decir que la señal de un servo es PWM cuando realmente lo es.

Claro que entonces a mi modo de ver tendríamos que rebautizar el nombre de la señal de un servo como "señal servo", "tren de pulsos especial para servo" o cualquier otra cosa. Yo soy de la opinión de llamarla PWM puesto que lo es. Después si es necesario habrá que especificar sus características particulares. De lo contrario habría que cambiarle el nombre a muchas otras cosas. No digamos que una batería de coche puede suministrar electricidad puesto que alguien no entendido podría enchufar la plancha a la batería de coche y no le funcionaría aunque también funcione con electricidad.

buenas, estoy construyendo un wii-cuadricoptero, pero me preguntaba s existe algun sof, que me permita controlarlo con la pc, lo que pasa que no tengo una radio rc. O alguen a modificado el sof de la pagina multiwii, para poder controlarlo con la pc.

No sé si existe ... pero lo desaconsejo totalmente, y más si las hélices tienen un tamaño considerable.

Parece un juguete pero es bastante peligroso en casos de fallos

aun así tienes que establecer un lazo inalambrico entre ambos, tienes que usar radio igualmente

Pues yo, aunque lento, aquí sigo con mi proyecto de cuadricóptero. Ya leo los 8 canales de la emisora, leo los ángulos que me proporciona el 9 DOF Razor, ejecuto el PID y envío los pulsos a los motores. Ahora estoy con un balancín con dos motores haciendo pruebas de estabilización y por el momento no estoy teniendo buenos resultados :( la buena noticia es que sólo llevo dos días con esta prueba :)

¿Hay alguien en el foro que esté desarrollando su propio código sobre Arduino para estabilizar un cuadricóptero?

yo acabando el quadcopter tras varias remodelaciones, aun así tengo que reforzar el esqueleto, de las vibraciones se afloja todo :smiley:

hice el del multiwii, y tras varios vuelos fallidos por disintas causas lo tengo aparcado, ya me ha dado un par de sustos las jodidas hélices, cuando se me pase el susto sigo con ello :smiley:

:roll_eyes: s, como dice el colega tambien lo tengo haciendole pruebas en un balacin,
pero no puedo avanzar por los motivos mencionados.
estaba pensado en ponerle un rooter linsys para interactuar con la pc, y abaratar costos.

Yo no estoy usando ningún código ya hecho así que no puedo decirte. Si quieres controlar el balancín desde el PC entiendo que lo quieres hacer por cable sólo para hacer pruebas. En ese caso puedes pillar algún joystick, hacer el código (o buscarlo en San Google) para leerlo en Arduino y pasar los datos a las correspondientes variables del código del multiwii.