Acest proiect are ca scop determinarea culorii unui obiect.Culoarea este perceptia de catre ochi a uneia sau a mai multor frecvente de lumina.Pentru a forma o gama de culori avem nevoie de o gama de culori avem nevoie de lumini albastre, rosii, verzi. Un senzor de culoare va masura concentratia de lumina rosie, albastra, verde iar amestecul acestor lumini va fi culoarea propriu zisa.
Voi construi un dispozitiv din 3 leduri care vor lumina pe rand un obiect.Obiectul va refleta lumina incidenta care va fi receptata de o fotorezistenta. Acesta va fi cuplata la microcontroller. Dupa ce voi afla cat la suta va reflecat obiectul respectiv culorile de baza(rosu,verde si albastru) voi face afisarea pe un display de nokia 3310.
Am construit practic o componenta activa. Un obiect este pus in cutiuta care contine fotorezistenta si ledurile, se aprind ledurile pe rand , iar fotorezistenta va masura intensitatea luminii pentru culoarea reprezentata de led. Pentru a putea calibra intensitatiel , se pune prima data un obiect negru(cunoscand faptul ca valoarea fiecarei culorii este de 0) si un obiect alb( si atunci vom stii ca aveam valori egale a concentratiei de culorile rosu, albastru si verde). Intensitatile sunt practic niste tensiuni preluate de convertorul analogic - digital si vor putea fi programate cu un program in C.
Pentru partea de LCD → m-am decis sa folosesc un display de NOKIA 3310. Am facut pe o placuta de test un circuit in care am folosit:
- un condensator de 10uF;
- 5 rezistente 3k3;
- 5 rezistente 1k8;
- 2 diode 1N4148;
Pentru a afla componenta activa pentru a afla intensitatea culorii folosesc:
- 3 leduri : rosu, verde si albastru
- 3 rezistente 2k2;
- o fotorezistenta;
Construim o cavitate care contine ledurile, si fotorezistenta. Fotorezistenta este centrata pentru a putea prelua direct lumina reflectata. Se cupleaza ledurile la porturile C ale microcontollerului. Fotorezistenta este cuplata la Vcc si va avea in serie o rezistena pentru a putea crea un divizor de tensiune care va fi pus ca intrare pentru convertorul analogic-digital.
Afisarea culorii propriu zise se face cu ajutorul unui display de nokia 3310. Primul pin al display-ului este concetat cu ajutorul diodelor la Vcc(deoarece avem nevoie doar de 3,3V).Ceilalti pini sunt conectati la porturile B ale microcontrollerului, exceptand pinul care este conectat la GND si cel legat la condensator. Ele sunt inseriate cu rezistentele de 3k3 si 1k8.
int ADC_get(uint8_t channel) { //setati canalul de pe care vreti sa faceti citirea ADMUX &= 0xE0; ADMUX |= channel; ADCSRA |= _BV(ADEN)|_BV(ADSC); //asteptati sa se termine o conversie while(!(ADCSRA & (1<<ADIF))); //returnati rezultatul conversiei return ADC; }
void ADC_init(void) { // AVCC cu condesator pe AREF; PA7 ca input single ended; rezultat left-adjusted (8 biti de date) ADMUX = (1<<REFS0) | (1<<MUX1); // activeaza ADC si intreruperea de conversie. Prescaler de ceas la maximum ADCSRA = (1<<ADEN) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); }
int main() {/*setez portul C ca port de iesire*/ ADC_init(); DDRC = (1<<PC0)|(1<<PC1)|(1<<PC2); DDRA = 0x00;//setez portul A ca port de intrare-> am nevoie de valoarea tensiunii while(1){ /* aprind un led,astept 1000ms si apoi il sting*/ PORTC = PORTC ^ (1<<PC0); _delay_ms(1000); /*iau tensiunea si o convertesc digital pentru a masura valoarea luminii reflecatate */ ADC_get(1); PORTC = PORTC ^ (1<<PC1); _delay_ms(1000); ADC_get(1); PORTC = PORTC ^ (1<<PC2); _delay_ms(1000); ADC_get(1); }