Когда мне рассказали, что можно из светодиода сделать датчик освещения, я заинтересовался. Мне показали, как это работает, и я удивился. Итак начнем.
Все очень просто: если приложить к светодиоду обратное напряжение (pin 2 == 1, pin 3 == 0), то это зарядит собственную (паразитную) емкость ног микроконтроллера. Если теперь переключить 2-ю ногу на вход, и не забыть отключить подтягивающий резистор, то емкость будет разряжаться обратным током фотодиода, который зависит от освещенности, и через некоторое время нога переключится в лог. 0.
И просто измеряем время заряда.
int led=13;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void LOOP()
{
LONG int j;
// Прикладываем обратное напряжение
// это зарядит собственную емкость вывода 2
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
pinMode(2, INPUT);
// Переключаем 2й вывод на вход
digitalWrite(2, LOW);
// и отключаем на нем подтягивающий резистор
// Считаем сколько времени потребуется,
// чтобы емкость разрядилась до логич. 0
FOR ( j = 0; j < 128000; j++)
{
IF (digitalRead(2)==0) break;
}
Serial.println(j);
// Выводим значение счетчика в COM-порт
delay(100);
// Пауза, чтобы не переполнять буфер COM-порта
IF(j<4000)
digitalWrite(led,HIGH);
ELSE
digitalWrite(led,LOW);
}
Советую вам менять значение if(j<4000) так как везде разная освещенность.


