Действительно, на основе любого светодиода можно соорудить весьма недурственный датчик освещенности вроде того, который меряет освещенность на улице, чтобы автоматически включать лампу возле подъезда вечером.
Пост можно было озаглавить «удивительное рядом» — несмотря на то, что при внимательном рассмотрении принцип действия становится понятен довольно быстро, о подобном применении светодиодов знает, наверное, не каждый.
Метод я увидел вот тут: www.arduino.cc/playground/Learning/LEDSensor, быстренько проверил — работает!
Вот так это цепляется к Arduino/Freeduino:

Идея проста — если приложить к светодиоду обратное напряжение (pin 2 == 1, pin 3 == 0), то это зарядит собственную паразитную емкость ног микроконтролера. Если теперь переключить 2-ю ногу на вход, и не забыть отключить подтягивающий резистор, то емкость будет разряжаться обратным током фотодиода, который зависит от освещенности, и через некоторое время нога переключится в лог. 0. Паразитная емкость конечно мала, но ведь и обратный ток светодиода невелик, а микроконтроллер дьявольски быстр! :) Поэтому время разряда можно спокойно измерять.
Вот исходник, иллюстрирующий данный подход:
Пост можно было озаглавить «удивительное рядом» — несмотря на то, что при внимательном рассмотрении принцип действия становится понятен довольно быстро, о подобном применении светодиодов знает, наверное, не каждый.
Метод я увидел вот тут: www.arduino.cc/playground/Learning/LEDSensor, быстренько проверил — работает!
Вот так это цепляется к Arduino/Freeduino:

Идея проста — если приложить к светодиоду обратное напряжение (pin 2 == 1, pin 3 == 0), то это зарядит собственную паразитную емкость ног микроконтролера. Если теперь переключить 2-ю ногу на вход, и не забыть отключить подтягивающий резистор, то емкость будет разряжаться обратным током фотодиода, который зависит от освещенности, и через некоторое время нога переключится в лог. 0. Паразитная емкость конечно мала, но ведь и обратный ток светодиода невелик, а микроконтроллер дьявольски быстр! :) Поэтому время разряда можно спокойно измерять.
Вот исходник, иллюстрирующий данный подход:
--- LED_Sensor.pde ---
void setup() {
Serial.begin(9600);
}
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, DEC); // Выводим значение счетчика в COM-порт
delay(100); // Пауза, чтобы не переполнять буфер COM-порта
}
---Еще одним достоинством метода является то, что никто не мешает использовать тот же самый светодиод по своему прямому назначению.