Занятие47-48

Программирование "умных"светильников

Сегодня мы будем делать бескнопочный светильник, который загорается, когда в комнате темно и гаснет, когда светло.

Для решения этой задачи мы будем использовать фоторезистор.

Фоторезистор (или LDR) VT90N2 — компонент, меняющий сопротивление в зависимости от количества света падающего на него. В полной темноте он имеет максимальное сопротивление в сотни килоом, а по мере роста освещённости сопротивление уменьшается до десятков килоом.

Чтобы посмотреть показания фоторезистора в полной темноте и на свету будем использовать программу:

#define LDR_PIN  A0

void setup()

{

  pinMode(LDR_PIN  , INPUT);

  Serial.begin(9600);

}

void loop()

{

int  fr = analogRead(LDR_PIN);

Serial.print (round(fr));

Serial.print ("\n");

delay(100);

}

Чтобы посмотреть, какие показания фоторезистора выдаются на печать, надо открыть Инструменты/Монитор последовательного порта. Определяем показания в полной темноте и на свету (самое большое и самое маленькое число).

Теперь, чтобы яркость светодиода соответствовала показаниям фоторезистора ( в темноте яркость светодиода была максимальна и, наоборот, на свету - минимальна), необходимо произвести преобразования:

fr=map(fr, 540, 910, 255, 0); Здесь 540 - минимальное показание фоторезистора, а 910 - максимальное

Чтобы светодиод светился с нужной яркостью, напишем программу:

#define LED_PIN 3

#define LDR_PIN  A0

void setup()

{

  pinMode(LED_PIN, OUTPUT);

  pinMode(LDR_PIN  , INPUT);

 }

void loop()

{

  int  fr = analogRead(LDR_PIN);

 fr=map(fr, 540, 910, 255, 0);

 analogWrite(LED_PIN, fr);

 delay(100);

}

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