т.е. к катоду подключить – плюс (HIGH), а к аноду – минус (LOW)
то тем самым мы зарядим собственную паразитную емкость ножек микроконтроллера и светодиода.
Если теперь переключить pin 2 на вход и отключить внутренний подтягивающий резистор,
чтобы этого добиться – нужно для порта, сконфигурированного, как ВХОД
командой
pinMode(port,INPUT);
выполнить команду
digitalWrite(port,LOW); // отключаем подтягивающий резистор
и наоборот — команда
digitalWrite(port, HIGH); // подключаем подтягивающий резистор
— подключит подтягивающий резистор
то паразитная ёмкость будет разряжаться обратным током светодиода, который зависит от его освещенности. Через некоторое время нога переключится в логический 0.
Вот это время разряда, зависящее от освещённости светодиода мы и должны измерить ;)
Паразитная ёмкость, разумеется, мала, но и обратный ток светодиода тоже —
поэтому время разряда можно успешно измерить :)
PHP код:
// Пример исползования светодиода в качестве фотодатчика
// Схема подключения:
//
// + digital 2
// |
// <
// > 100 ohm resistor
// <
// |
// |
// -----
// / \ LED
// -----
// |
// |
// + digital 3
//
// мы будем подавать положительное напряжение на digital 2 и
// низкое напряжение в digital 3. Т.о. на светодиод будет подано обратное напряжение.
// Разумеется, светодиод светиться не будет, но будет заряжаться паразитная ёмкость
// соединения светодиода и ног микроконтроллера Arduino.
//
// Потом мы отключаем выход с digital2 и считаем
// за какой промежуток времени заряд разрядится через светодиод.
// Причём скорость разряда зависит от освещённости светодиода.
// Чем ярче свет, тем быстрее паразитная ёмкость будет разряжаться на Digital3.
//
// Т.о. сразу виден недостаток идеи - в темноте время разряда может быть довольно большим.
// изолируем pin 2 от светодиода
pinMode(LED_N_SIDE,INPUT);
digitalWrite(LED_N_SIDE,LOW); // отключаем втроенный в МК подтягивающий резистор
// считаем сколько требуется времени на разряд до логического нуля
for ( j = 0; j < 65535; j++)
{
if ( digitalRead(LED_N_SIDE)==0 )
break;
}
Serial.println(j, DEC); // Выводим значение счетчика в COM-порт
//delay(100); // Пауза, чтобы не переполнять буфер COM-порта
}
На видео это наглядно продемонстрировано
20.08.2009, 03:28
(vS)
Re: Touch pad на Arduino и датчики из светодиодов
ипона мама, мультитач пряма :)
а софтик этот доступен побалаваца?
21.10.2009, 21:40
Mr.DIRTer
Re: Touch pad на Arduino и датчики из светодиодов
А в чем может быть проблема, если при собранной схеме и прошитой ардуине, время ни как не зависит от освещенности(очень большие скачки). Может ли быть проблема в качестве светодидода?
21.10.2009, 23:02
Chip
Re: Touch pad на Arduino и датчики из светодиодов
У тебя какое время получилось?
21.10.2009, 23:41
Mr.DIRTer
Re: Touch pad на Arduino и датчики из светодиодов
Код:
33388
57755
11822
41508
16666
1902
36416
Вот как-то так выходит...
22.10.2009, 01:58
Chip
Re: Touch pad на Arduino и датчики из светодиодов
может быть ты диод не правильно поставил?
Я проверил у меня работает
22.10.2009, 02:22
Mr.DIRTer
Re: Touch pad на Arduino и датчики из светодиодов
Спасибо, пока не нашел свою ошибку, но думаю она где-то рядом. Если можно скажите какое время в комнатном освещении примерно получается?
22.10.2009, 02:27
Chip
Re: Touch pad на Arduino и датчики из светодиодов
Белые с синими светодиодами не подойдут.
Вот параметры: оранжевым цветом при включенной лампе и черным при выключенной
Я светодиод подключаю без резистора.
Подправил немножко код, теперь в темноте счетчик прекращает цикл при переполнении, что гораздо быстрей чем ждать полного разряда емкости