Soy un principiante de Arduino y quiero construir un sistema de detección de obstáculos. Tengo IR Leds y receptores TSOP (38kHz). ¿Cómo puedo modular el LED para parpadear a 38kHz? ¿Podrías ayudarme con algún código?
Soy un principiante de Arduino y quiero construir un sistema de detección de obstáculos. Tengo IR Leds y receptores TSOP (38kHz). ¿Cómo puedo modular el LED para parpadear a 38kHz? ¿Podrías ayudarme con algún código?
Ya que estás mencionando el TSOP de Vishay, supongo que el 38Hz debería ser 38kHz.
No conozco la plataforma Arduino, pero la forma habitual de hacerlo es configurar un temporizador para interrumpir a 76 kHz (el doble de la frecuencia que desea) y alternar la salida del LED en cada interrupción siempre que se establezca un indicador de "enviar" .
editar
Asegúrese de proteger el receptor de las lámparas fluorescentes HF; a menudo se controlan a +/- 40 kHz, que un receptor de 38 kHz puede capturar fácilmente. Si su robot está demasiado lejos de los obstáculos para recibir la señal reflejada del LED, el AGC del receptor puede bloquear la "señal" de la lámpara.
No se preocupe si no puede tener una interrupción de latido exactamente cada 13.16us. Una pequeña desviación puede incluso ser una buena idea, ya que la sensibilidad del receptor es menor cuanto más lejos de la frecuencia central. Esto significa que no reaccionará a las señales reflejadas desde los medidores de distancia, lo que tienden a hacer los controles remotos IR comerciales. Por supuesto, siempre puede reducir la corriente del LED al mismo efecto.
Algunos de los PIC más nuevos, como el 16F1826, tienen un módulo de hardware de modulador digital que hace que ese tipo de cosas sea bastante trivial.
Aquí hay muchos resultados que obtuve en el foro de Arduino cuando busqué en la modulación IR . Deberías encontrar algún código entre esos. También es el mejor lugar para obtener respuestas a preguntas relacionadas con Arduino.
Una forma de transmitir comandos IR, como Comandos IR RC-5 , es configurar un hardware temporizador que oscila a la frecuencia apropiada (36 kHz para RC-5) y ciclo de trabajo. La CPU enciende y apaga el oscilador para cada bit: a unos 562 bits por segundo, la CPU debe hacer algo como máximo una vez cada 889 usuarios. (Es mucho más fácil programar la CPU Arduino para hacer algo una vez cada 889) que una vez cada 13.9 nosotros).
#include <Tone.h>
Tone tone1;
const unsigned int frequency = 36000; // Hz
const unsigned int half_bit_time = 889; // microseconds
void setup(){
tone1.begin(13);
}
void send_bit(boolean the_bit){
if(the_bit){
noTone();
delayMicroseconds(half_bit_time );
tone1.play(frequency);
delayMicroseconds(half_bit_time );
noTone();
}else{
tone1.play(frequency);
delayMicroseconds(half_bit_time );
noTone();
delayMicroseconds(half_bit_time );
};
}
void loop(){
send_bit(1);
send_bit(1);
send_bit(0);
send_bit(1);
send_bit(0);
// ... etc.
}
EDITAR: Ahora veo que la biblioteca de tonos actual establece una interrupción al doble de la frecuencia seleccionada, como sugiere stevenvh. Pero algunos de los otros enlaces que publiqué describen un temporizador de funcionamiento libre que oscila en la frecuencia correcta, ejecutándose sin interrumpir la CPU.
Lea otras preguntas en las etiquetas arduino