Когда мне рассказали, что можно из светодиода сделать датчик освещения, я заинтересовался. Мне показали, как это работает, и я удивился. Итак начнем.
Все очень просто: если приложить к светодиоду обратное напряжение (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) так как везде разная освещенность.