===== Эксперимент 12. Люксметр =====
Люксметр (от лат. lux — «свет» и др.-греч. μετρέω «измеряю») — прибор для измерения освещённости, один из видов фотометров. В состав люксметра обязательно входит фоточувствительный элемент, например, изученный нами, фоторезистор. Построим простой люксметр на базе фоторезистора. Настоящий люксметр показывает результаты измерения в [[https://ru.wikipedia.org/wiki/%D0%9B%D1%8E%D0%BA%D1%81|люксах]], но в нашем эксперименте мы ограничимся условными единицами — результатом преобразования АЦП, которое и будем выводить в терминал пользователю.
==== Схема эксперимента ====
{{ :products:ardu:exp12_sch.png?nolink |}}
//Рисунок 1. Электрическая принципиальная схема эксперимента//
Схема представляет собой обычный резисторный делитель напряжения, который мы [[products:aruno:exp8|рассматривали ранее]]. В верхнем плече делителя находится фоторезистор, а в нижнем постоянный резистор на 10 кОм. Когда фоторезистор находится в темноте он обладает большим сопротивлением, и ток через него маленький. Поэтому напряжение на средней точке делителя маленькое. Когда освещенность фоторезистора увеличивается, его сопротивление уменьшается, а ток через него растет. Фоторезистор "подтягивает" среднюю точку к напряжению питания и напряжение на средней точке увеличивается. Напряжение средней точки делителя мы измеряем с помощью АЦП.
{{ :products:ardu:exp12.png?direct&600 |}}
//Рисунок 2. Монтажная схема эксперимента//
==== Программный код эксперимента ====
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** преобразуем в количество светодиодов которые будем зажигать в цикле.
==== Дополнительное задание ====
* Попробуйте увеличить количество светодиодов.
* Поменяйте фоторезистор на переменный резистор.