Как считать положительные электрические импульсы?
У меня есть устройство с одним мигающим светодиодом.
Я хочу подсчитать количество морганий. Я планировал сделать это с помощью Arduino. Я подключу две клеммы светодиодного входа к цифровым входным контактам Arduino и посчитаю количество положительных импульсов напряжения
Я просто хочу знать, возможно ли это? и если да, то не могли бы вы подсказать код для того же самого?
@SSR, 👍3
Обсуждение2 ответа
Вы должны подсчитывать не количество импульсов, а количество переходов от 0 до VCC вольт или от VCC до 0 вольт (называется нарастающим или задним фронтом).
Если вы не хотите паять, вы также можете использовать светочувствительный резистор (LDR) рядом со светодиодом, чтобы измерить разницу в яркости. См. также замечание Крисла ниже.
Подсчет можно выполнять вручную (в цикле, проверяя как можно чаще или необходимо) или настроив таймер для проверки нарастания или спада фронтов.
Я приведу псевдокод, чтобы вы могли понять реальный код:
bool _ldrPin;
unsigned long int _counter;
setup()
{
// Установить порт
Serial.begin(9600);
// Установить LDR
setAnalogPin(X, INPUT);
_ldrPin = readAnalog(X);
}
loop()
{
if (!_ldrPin && readAnalog(X) == HIGH)
{
// Нарастающий фронт, увеличение счетчика
_counter++;
Serial.Write(_counter);
_ldrPin = true;
}
else if (ldrPin && readAnalog(X) == LOW)
{
// Спадающий фронт, статус сброса
_ldrPin = false;
}
}
Там нет "светодиодного резистора". Я думаю, вы имеете в виду светочувствительный резистор. Хотя я бы не рекомендовал LDR для измерения моргания, они довольно медленные. В зависимости от частоты мигания это вполне может быть слишком медленным. Фототранзистор - лучший выбор (фототранзистор - это в основном диод в обратном направлении, который становится проводящим свет), он может работать очень быстро., @chrisl
Сэр, я планирую паять. Но я думаю, что мне придется припаять оба провода от светодиода. Я тонкая разница в напряжении является относительной, так как я могу сравнить разницу между напряжением (когда светодиод светится) с использованием цифровых контактов., @SSR
@chrisl Спасибо за уведомление (я имею в виду действительно светочувствительный резистор). Я никогда не пробовал фоторезистор (добавил ваше имя, проголосовал за ваш комментарий)., @Michel Keijzers
@SSR По крайней мере, оба провода должны быть к чему-то подключены, иначе у вас не будет (замкнутой) цепи, по крайней мере, со светодиодом в ней. Для сравнения вы можете использовать операционный усилитель, но это, вероятно, стоит другого вопроса., @Michel Keijzers
Обнаружение импульсов светодиода
Вы хотите обнаружить каждый импульс светодиода. Для этого вам понадобится код обнаружения границ. В среду IDE встроен пример Arduino, а информация о функции здесь: https://www.arduino.cc/ ru/Tutorial/BuiltInExamples/StateChangeDetection
Чтобы добавить к объяснению Arduino, вы можете определить либо нарастающий фронт (т. е. переход от НИЗКОГО к ВЫСОКОМУ), либо спадающий фронт (т. е. переход от ВЫСОКОГО к НИЗКОМУ). Я лично предпочитаю следующий код для обнаружения нарастающего фронта. Проще говоря, код можно перевести так:
if ( (lastLedState == LOW) && (ledState == HIGH) )
где ledState
будет назначаться digitalRead
, а lastLedState
будет записывать значение ledState
в конце функции цикла (т. е. непосредственно перед повторным считыванием состояния светодиода).
Полный код
Теперь, если мы оптимизируем приведенное выше утверждение и поместим его в контекст:
unsigned long int pulseCounter = 0;
const int LedInput = 3; // Цифровой вход 3
bool ledState = 0;
bool lastLedState = 0;
void setup() {
}
void loop() {
ledState = digitalRead(LedInput);
// Если светодиод загорается
if (ledState && !lastLedState)
{
// Увеличиваем ваш счетчик
pulseCount++;
}
// Обновить флаг светодиода
lastLedState = ledState;
}
- Красный светодиод не выключается на игровой площадке Adafruit Circuit Classic
- Половинная яркость светодиода Arduino UNO при подключении к цифровому заземлению, но не к аналоговому
- Всегда ли установка значения означает установку pin Arduino?
- Невозможно прочитать состояние светодиода
- Есть ли способ воспроизводить звуки с Arduino без использования звукового экрана?
- В чем разница между analogWrite и digitalWrite?
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
имейте в виду, что светодиод можно включить, подав на светодиод Vcc, но его также можно включить, подав 0 В ... все зависит от того, как светодиод подключен в цепи, @jsotola
Посмотрите в IDE Ардуино. Существует пример под названием «Пример изменения состояния». Это то, что вам нужно., @Delta_G
Попытка использовать напряжение на светодиоде может не сработать, потому что оно изменяется только от 0 В до прямого напряжения около 2 В (+/- какая-то десятая). Используйте комментарий jsotola и используйте сторону, которая переключается, это также может быть на токоограничивающем резисторе., @the busybee