Люксметр (от лат. lux — «свет» и др.-греч. μετρέω «измеряю») — прибор для измерения освещённости, один из видов фотометров. В состав люксметра обязательно входит фоточувствительный элемент, например, изученный нами, фоторезистор. Построим простой люксметр на базе фоторезистора. Настоящий люксметр показывает результаты измерения в люксах, но в нашем эксперименте мы ограничимся условными единицами — результатом преобразования АЦП, которое и будем выводить в терминал пользователю.
Рисунок 1. Электрическая принципиальная схема эксперимента
Схема представляет собой обычный резисторный делитель напряжения, который мы рассматривали ранее. В верхнем плече делителя находится фоторезистор, а в нижнем постоянный резистор на 10 кОм. Когда фоторезистор находится в темноте он обладает большим сопротивлением, и ток через него маленький. Поэтому напряжение на средней точке делителя маленькое. Когда освещенность фоторезистора увеличивается, его сопротивление уменьшается, а ток через него растет. Фоторезистор «подтягивает» среднюю точку к напряжению питания и напряжение на средней точке увеличивается. Напряжение средней точки делителя мы измеряем с помощью АЦП.
const int NbrLEDs = 5; const int ledPins[] = {2, 3, 4, 5, 6};//массив с номерами пинов контроллера const int photocellPin = A0; int sensorValue = 0; int ledLevel = 0; void setup() { //настраиваем пины контроллера на вывод сигнала с помощью цикла for (int led = 0; led < NbrLEDs; led++) { pinMode(ledPins[led], OUTPUT); } } void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel ) { digitalWrite(ledPins[led], HIGH); // turn on pins less than the level } else { digitalWrite(ledPins[led],LOW); // turn off pins higher than } } }
В программе используем массив для хранения номеров пинов контроллера к которым подключены светодиоды. Считываем значение сигнала и с помощью оператора map преобразуем в количество светодиодов которые будем зажигать в цикле.