Yep!
Je relance un peu le sujet car j'ai de serieux doute quant à ma capacité à trouver une solution peu honéreuse et surtout viable en l'occurence.
J'ai donc testé différents matos, diode Ir, photodiode 940 nm, phototransistor Ir, etc.
Et mon montage à base d'AOP semble être extremement sensible aux variations d'intensité lumineuse. Je peux aussi bien obtenir une détection quasi parfaite à 60 cm en journée et obtenir en contre-partie, une détection horrible à moins de 5 cm, la nuit sous une lumière artificielle.
Dans l'optique, et pour rappel, je valide la détection d'un objet en envoyant tout d'abord un signal infra-rouge, je consigne le relevé, je désactive ensuite le signal envoyé, je consigne à nouveau et en déduit ainsi si il s'agit d'une véritable détection infrarouge ou d'une saturation lumineuse.
Je balance prés de 250 mA dans la diode émettrice sous un pwm à 25%. L'ajout d'une diode en série n'influe que trés légerement sur la capacité à détecter l'onde Ir.
J'ai de plus en plus l'impression que la sélection matérielle que j'ai faite n'est pas appropriée ou alors que je me fourvoie dans la possibilité d'obtenir les résultats escomptés dûs à des limitations mécaniques (angle d'attaque, concavité du transparent diode, etc)
Je suis en fait un peu à court d'idée et demande une petite aide afin d'orienter mes experimentations soit dans une meilleur optimisation, soit dans une tout autre direction.
Naturellement, des composants courants, de faible coût demeure ma priorité. Je précise également, que je suis dans l'experimentation totale, mes connaissances dans le domaine des transmissions infrarouge se faisant au fur et à mesure des montages et conclusions que j'en retirent.
My code for the moment :
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void _init_()
{
cli();
TCCR1A = 0;
TCCR1B = 0;
DDRD |= B00000010; // PD5 = Ir input
DDRB |= B00000011; // PB0 = red led, PB1 = IrLed
PORTD |= B00100000; // enable pullup
__asm__("nop\n\t");
TCCR1A = (1 << WGM11) | (1 << COM1A1); // Fast PWM, non invert
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10); // prescaler = 1
ICR1 = 420; // ((16000000 / 38000) /1)-1 = 420
OCR1A = 165; // 420 / 4 to get a 25% duty cycle
PCICR |= (1 << PCIE2); // INT2
PCMSK2 |= (1 << PCINT21); // PCINT21 = PD5
sei();
}
void setup()
{
_init_();
}
void loop()
{
}
ISR(PCINT2_vect)
{
PORTB ^= (1 << 0);
}
Le montage précedant (voir post plus haut) restant valide pour la géneralité.
@+
Zoroastre.
EDIT1 : J'ai, en fouinant, trouvé une alternative interessante :
http://letsmakerobots.com/node/26134