Comment ça marche :
le capteur se composent de capteur LDR et RGB LED, donc lorsque l’objet posé sur le capteur de la lumière qui émettant de RVB LED sera réfléchie par l’objet à capteur LDR et lisez-le par ADC de ATMEGA16 comme ci-dessous la séquence :
1 tour sur bleu LED RGB et attendre.
ADC 2-lire et stocker dans le registre comme bleu.
3-Allumez vert à LED RGB et d’attendre.
4-lecture ADC et la stocker dans le Registre sous forme de vert.
5-Allumez rouge LED RGB et attendre.
6-lecture ADC et la stocker dans le Registre sous la forme rouge.
7-si rouge > vert > affichage LED rouge s’allume bleu.
Si vert > Rouge > affichage LED vert s’allume bleu.
Si bleu > Rouge > vert clignotant sur l’affichage Led bleu.
Étalonnage :
Le RGB LED électroluminescentes rouges, bleues et vertes dans une intensité différente, afin d’égaliser les, résistances variables doivent être utilisés avec étapes ci-dessous :
1-mettre un objet blanc sur le capteur.
2-Allumez bleu RGB LED et lisez la tension sur le capteur LDR à l’aide du voltmètre.
3-Allumez vert en RGB LED et lisez la tension sur le capteur LDR à l’aide du voltmètre.
4-allumer rouge en RGB LED et lisez la tension sur le capteur LDR à l’aide du voltmètre.
5-régler la résistance variable pour rendre toute la tension équilibrée lorsque l’objet blanc posé sur le capteur.
Logiciel (AVR studio 4) :
#define F_CPU 1000000UL
#include < avr/io.h >
#include < util/delay.h >
Sub InitADC() //Initiate ADC
{
ADMUX = (1 << REFS0) ; Pour Aref = AVcc ;
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) ; Facteur de division Rrescalar = 128
}
uint16_t ReadADC (uint8_t ch)
{
ch = ch & 0b00000111 ;
ADMUX| = ch ;
Démarrer conversion unique
ADCSRA| = (1 << ADSC) ;
Attendez de conversion terminer
tandis que (! () ADCSRA & (1 << ADIF))) ;
ADCSRA| = (1 << ADIF) ;
Return(ADC) ;
}
void Wait ()
{
uint8_t i ;
pour (i = 0; i < 1; i ++)
_delay_loop_2(0) ;
}
Sub main()
{
DDRB = 0XFF ; Définir la sortie pour LED RGB
DDDR = 0XFF ; Définir la sortie pour écran LED
uint16_t rouge ;
uint16_t vert ;
uint16_t bleu ;
Initialiser l’ADC
InitADC() ;
while(1)
{
PORTD = 0b11111111 ; désactiver tous les l’affichage LEDs
PORTB = 0b11111110 ; S’allume bleu RVB
_delay_ms(2000) ; attendre 2 s
Blue=ReadADC(0) ; Lire la valeur analogique et stockez-la en bleu
PORTB = 0b11111101 ; S’allume vert RVB ;
_delay_ms(2000) ; attendre 2 s
vert = ReadADC(0) ; Lire la valeur analogique et stockez-la en vert
PORTB = 0b011111011 ; RGB rouge ;
_delay_ms(2000) ; attendre 2 s
rouge = ReadADC(0) ; Lire la valeur analogique et stockez-la en rouge
Si ((red > green) & (rouge > bleu)) {PORTD = 0b11111110 ; _delay_ms(4000) ; PORTD = 0b11111111;} Affichage rouge
Si ((green > red) & (vert > bleu)) {PORTD = 0b11111011 ; _delay_ms(4000) ; PORTD = 0b11111111;} Affichage vert
Si ((blue > green) & (bleu > Rouge)) {PORTD = 0b11111101 ; _delay_ms(4000) ; PORTD = 0b11111111;} Affichage bleu
}
}