Färg Sensor
Hur det fungerar:
sensorn består från LDR sensor och RGB LED, så när objektet putted på sensorn det ljus som avger från RGB LED kommer att reflekteras från objektet till LDR sensor och läsa den av ADC av ATMEGA16 som nedan sekvens:
1-slå på Blue i RGB LED och vänta.
2-Läs ADC och lagra den i registret som blå.
3-slå på grönt i RGB LED och vänta.
4-Läs ADC och lagra den i registret som green.
5-slå på rött i RGB LED och vänta.
6-Läs ADC och lagra den i registret som röd.
7-om röda > grön > blå tur på röda LED-display.
om gröna > röda > blå tur på grön LED-display.
om blå > röda > grön tur på blå Led display.
Kalibrering:
RGB LED avger rött, blått och grönt i olika intensitet så att utjämna dem, bör variabla motstånd användas med nedanstående steg:
1-satte ett vitt föremål på sensorn.
2-slå på Blue i RGB ledde och läsa spänningen över LDR sensorn med voltmeter.
3-slå på grönt i RGB ledde och läsa spänningen över LDR sensorn med voltmeter.
4-slå på rött i RGB ledde och läsa spänningen över LDR sensorn med voltmeter.
5-justera de variabla motstånd för att göra alla spänningen kvitterade när vita objekt putted på sensorn.
Programvara (AVR studio 4):
#define F_CPU 1000000UL
#include < avr/io.h >
#include < util/delay.h >
void InitADC() //Initiate ADC
{
ADMUX = (1 << REFS0); För Aref = AVcc;
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); Rrescalar div faktor = 128
}
uint16_t ReadADC (uint8_t ch)
{
Ch = ch & 0b00000111;
ADMUX| = ch;
Starta enskild konvertering
ADCSRA| = (1 << ADSC);
Vänta för konvertering till komplett
medan (! () ADCSRA & (1 << ADIF)));
ADCSRA| = (1 << ADIF);
Return(ADC);
}
void Wait()
{
uint8_t i.
för (jag = 0; jag < 1; i ++)
_delay_loop_2(0);
}
void main)
{
DDRB = 0XFF; Definiera utdata för RGB LED
DDRD = 0XFF; Definiera utgång för skärm lysdioder
uint16_t röd.
uint16_t grönt;
uint16_t blå;
Initiera ADC
InitADC();
While(1)
{
PORTD = 0b11111111; Stäng alla lysdioder
PORTB = 0b11111110; Slå på blå RGB
_delay_ms(2000); vänta 2s
Blue=ReadADC(0); Läs analoga värde och lagra den i blått
PORTB = 0b11111101; Slå på gröna RGB;
_delay_ms(2000); vänta 2s
grön = ReadADC(0); Läs analoga värde och lagra den i grönt
PORTB = 0b011111011; Röd RGB;
_delay_ms(2000); vänta 2s
röd = ReadADC(0); Läs analoga värde och lagra den i rött
om ((red > green) & (röd > blå)) {PORTD = 0b11111110; _delay_ms(4000); PORTD = 0b11111111;} Röd skärm
om ((green > red) & (grön > blå)) {PORTD = 0b11111011; _delay_ms(4000); PORTD = 0b11111111;} Grön Display
om ((blue > green) & (blå > röd)) {PORTD = 0b11111101; _delay_ms(4000); PORTD = 0b11111111;} Blå skärm
}
}