Попробуем сделать датчик освещености. В комбинации с модулем RTC такой датчик может управлять освещением и подсветкой в системах типа: "умный дом". Датчик будет на фоторезисторе, сопротивление которого обратно пропорционально уровню освещености. Фоторезистор будет подключаться по схеме делителя напряжения, где в верхнее плечо будет установлен постоянный резистор 10K, а в нижнее сам фоторезистор. Нулевая точка будет поключена к пину ADC0 микроконтроллера. По такой же схеме можно подключать терморезистор или клавиатурную сборку на тактовых кнопках, где к каждой кнопке будет подключен резистор с каким-то своим индивидуальным значенем. Тогда, замеряя разность потенциалов, можно будет узнать какая имено кнопка была нажата.
Но вернемся к фоторезистору. Модель котрая мне попалась под руку - VT93N2. Даташит на него представлен ниже:
Чтобы иметь предстваление как это все должно работать, я сначала проверил это на Arduino с помощью такого скетча:
Результат работы был таким:
Здесь низкие значения соответствуют слабой освещености, а высокие - относительно яркой.
Пора снова вернуться к фоторезистору. Код который у меня получился в итоге:
#include <util/delay.h> #include <uart.h> #include <avr/io.h> #include <avr/interrupt.h> static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); volatile uint8_t dataADC; ISR(ADC_vect) { dataADC=ADCH; }; int main(void) { //---- init init_uart(); DDRB |= (1<<PB5); // led indicator ADCSRA |=(1<<ADEN)|(1<<ADFR)|(1<<ADIE)|(1<<ADSC)|(3<<ADPS0); // set 0xFF ADMUX |=(1<<REFS0)|(1<<ADLAR); //---- ready indication blink13(3); //ready indication stdout = &mystdout; printf("Ok, I'm ready!\n"); dataADC=0; sei(); //---- main body for (;;) { printf("Voltage: %d\n",dataADC); _delay_ms(2000); }; return 0; }
Здесь используется 8-битный режим АЦП и непрерывную дискретизацию и AVcc в качестве опорного напряжения. Используется также ADC0 канал. Результат работы выглядит так:
Здесь в начале и в конце высокие значения, это темнота, а в середине виден след от фонарика. Для определения освещености, на мой взгляд, получилось не плохо. Если искусственое освещение имеет управление через ШИМ, то можно использовать для "умной" регулировки уровня освещенности.
Архив с полными исходниками и сборочными файлами можно скачать здесь: архив