Проход по ссылкам навигацииГлавная : Статьи :

Arduino UNO урок 8 (Ночник)

Arduino UNO урок 8 (Ночник)



Для нашего следующего проекта мы будем использовать фоторезистор. А рассмотрим мы реализацию ночника в спальню, который будет автоматически включаться когда темно и выключаться когда становится светло.

Сопротивление фоторезистора зависит от света, попадающего на него. Используя фоторезистор в связке с обычным резистором 4.7 кОм, мы получаем делитель напряжения, в котором напряжение проходящее через фоторезистор, изменяется, в зависимости от уровня освещенности.

Напряжение с делителя, мы подаем на вход АЦП Arduino. Там мы сравниваем полученное значение с определенным порогом и включаем или выключаем светильник.

Arduino UNO урок 8 (Ночник)


Принципиальная схема делителя показана ниже. Когда освещенность увеличивается, сопротивление фоторезистора падает и соответственно на выходе делителя (и входе АЦП) напряжение увеличивается. Когда освещенность падает все наоборот.

Arduino UNO урок 8 (Ночник)


На фото ниже, показана собранная схема на макетной плате. Напряжения 0В и 5В берутся с Arduino. Ножка А0 используется как вход АЦП.

Arduino UNO урок 8 (Ночник)


Ниже показан скетч Arduino. В данном уроке мы просто включаем и выключаем LED, который встроен в плату Arduino. Более яркий LED-светодиод, вы можете подключить к ноге 13 (через резистор ~220 Ом). Если будете подключать более мощную нагрузку, такую как лампу накаливания, то ее следует подключать через реле или тиристор.

В коде программы есть закомментированные участки, они служат для отладки. Можно будет контролировать значение АЦП (от 0 до 1024). Также, необходимо в коде изменить значение 500 (порог включения и выключения) на то, которое вы подберете опытным путем, изменяя освещенность.

/*
** Ночник
**
** www.hobbytronics.co.uk
*/
 
int sensorPin = A0;            // устанавливаем входную ногу для АЦП
unsigned int sensorValue = 0;  // цифровое значение фоторезистора
 
void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(9600);        // старт последовательного вывода данных (для тестирования)
}
 
void loop()
{
  sensorValue = analogRead(sensorPin);  // считываем значение с фоторезистора
  if(sensorValue<500) digitalWrite(13, HIGH);   // включаем
  else digitalWrite(13, LOW);   // выключаем
   
  // Для отладки раскомментируйте нижеследующие строки
  //Serial.print(sensorValue, DEC);     // вывод данных с фоторезистора (0-1024)
  //Serial.println("");                 // возврат каретки 
  //delay(500); 
}