Это старая версия документа!


Эксперимент 12. Люксметр

Люксметр (от лат. lux — «свет» и др.-греч. μετρέω «измеряю») — прибор для измерения освещённости, один из видов фотометров. В состав люксметра обязательно входит фоточувствительный элемент, например, изученный нами, фоторезистор. Построим простой люксметр на базе фоторезистора. Настоящий люксметр показывает результаты измерения в люксах, но в нашем эксперименте мы ограничимся условными единицами — результатом преобразования АЦП, которое и будем выводить в терминал пользователю.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Схема представляет собой обычный резисторный делитель напряжения, который мы рассматривали ранее. В верхнем плече делителя находится фоторезистор, а в нижнем постоянный резистор на 10 кОм. Когда фоторезистор находится в темноте он обладает большим сопротивлением, и ток через него маленький. Поэтому напряжение на средней точке делителя маленькое. Когда освещенность фоторезистора увеличивается, его сопротивление уменьшается, а ток через него растет. Фоторезистор «подтягивает» среднюю точку к напряжению питания и напряжение на средней точке увеличивается. Напряжение средней точки делителя мы измеряем с помощью АЦП.

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp12
  1. const int NbrLEDs = 5;
  2. const int ledPins[] = {2, 3, 4, 5, 6};
  3. const int photocellPin = A0;
  4. int sensorValue = 0; // value read from the sensor
  5. int ledLevel = 0; // sensor value converted into LED 'bars'
  6.  
  7. void setup() {
  8. for (int led = 0; led < NbrLEDs; led++) {
  9. pinMode(ledPins[led], OUTPUT);// make all the LED pins outputs
  10. }
  11. }
  12.  
  13. void loop() {
  14. sensorValue = analogRead(photocellPin);
  15. ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); // map to the number of LEDs
  16. for (int led = 0; led < NbrLEDs; led++) {
  17. if (led < ledLevel ) {
  18. digitalWrite(ledPins[led], HIGH); // turn on pins less than the level
  19. }
  20. else {
  21. digitalWrite(ledPins[led],LOW); // turn off pins higher than
  22. }
  23. }
  24. }

В программе мы создаем объект АЦП и в бесконечном цикле считываем результат преобразования, который выводим в терминал.

Дополнительное задание

  • Если постоянный резистор и фоторезистор поменять местами, то поведение схемы изменится. Как?