Занятие41-42
Задача:
Ракета летит в космосе. Все приборы горят "нормально" (светодиодная шкала пульсирует: то вверх, то вниз). При встрече с НЛО подается сигнал тревоги: горят все светодиоды шкалы. Встречу с НЛО отслеживает фоторезистор. Потенциометр позволяет настроить уровень попадания света на фоторезистор.
В этой модели используются шкала светодиодов, фоторезистор и потенциометр.
Фоторезистор (или LDR) VT90N2 — компонент, меняющий сопротивление в зависимости от количества света падающего на него. В полной темноте он имеет максимальное сопротивление в сотни килоом, а по мере роста освещённости сопротивление уменьшается до десятков килоом.
Потенциометр (переменный резистор) – полупроводниковый прибор, который поворотом движка изменяет сопротивление от нуля до номинального сопротивления в 10 кОм.
Вспомогательная задача:
Ночной светильник с управляемой яркостью.
Если количество света, падающего на фоторезистор, соответствует «условной темноте» включается светодиод, а если показания соответствуют «условному свету», то светодиод отключается. Переход от условного света к условной темноте регулируется с помощью потенциометра.
Сначала дадим имена для пинов со светодиодом, фоторезистором и потенциометром с помощью директив:
#define LED_PIN 13
#define LDR_PIN A0
#define POT_PIN A1
Далее с помощью команды pinMode (pin,OUTPUT) устанавливаем пин со светодиодом как выход, а пин с потенциометром и с фоторезистором как вход.
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(LDR_PIN , INPUT);
pinMode(POT_PIN, INPUT);
}
Далее считываем уровень освещенности и записываем в переменную int lightness («светлота»)
int lightness = analogRead(LDR_PIN);
Затем считываем значение с потенциометра и записываем в переменную int threshold (порог между темнотой и светом)
int threshold = analogRead(POT_PIN);
Зададим значение логической переменной tooDark (слишком темный), определяющей темно ли сейчас.
boolean tooDark = (lightness < threshold);
Если показания фоторезистора меньше показаний потенциометра, это будет соответствовать тому, что сейчас темно и значение переменной tooDark будет 1, иначе значение будет равно 0.
Если слишком темно (tooDark= =1), то включаем свет и задерживаем на 0,1сек, иначе – выключаем.
if (tooDark==1)
{
digitalWrite(LED_PIN, HIGH);
delay(10);
}
else
{
digitalWrite(LED_PIN, LOW);
delay(10);
}
Решение:
#define LED_PIN 13
#define LDR_PIN A0
#define POT_PIN A1
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(LDR_PIN , INPUT);
pinMode(POT_PIN, INPUT);
}
void loop()
{
int lightness = analogRead(LDR_PIN);
int threshold = analogRead(POT_PIN);
boolean tooDark = (lightness < threshold);
if (tooDark==1)
{
digitalWrite(LED_PIN, HIGH);
delay(10);
}
else
{
digitalWrite(LED_PIN, LOW);
delay(10);
}
}