Действительно, на основе любого светодиода можно соорудить весьма недурственный датчик освещенности вроде того, который меряет освещенность на улице, чтобы автоматически включать лампу возле подъезда вечером.
Пост можно было озаглавить «удивительное рядом» — несмотря на то, что при внимательном рассмотрении принцип действия становится понятен довольно быстро, о подобном применении светодиодов знает, наверное, не каждый.
Метод я увидел вот тут: 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-порта } ---Еще одним достоинством метода является то, что никто не мешает использовать тот же самый светодиод по своему прямому назначению.