Затемнение нескольких светодиодов с помощью потенциометра
Я работаю над небольшим проектом. У меня 13 светодиодов, которыми нужно управлять индивидуально (включать или выключать); Поскольку у меня нет 13 контактов ШИМ, я использовал потенциометр для изменения яркости.
Это работает нормально, пока все светодиоды остаются в том состоянии, в котором они есть. Но как только один светодиод включается или выключается, это влияет на яркость всех остальных светодиодов.
На картинке ниже вы можете увидеть, как я их подключил. У меня есть аналоговые контакты A0, A1, A2 и A3, занятые какими-то кнопками.
Кто-нибудь знает, как можно затемнить яркость светодиодов так, чтобы сами светодиоды не влияли на яркость?
(примечание: я программист, а не инженер-электрик. Ответы, связанные с кодом, мне (обычно) легко понять. Ответы, касающиеся аппаратного обеспечения, нет.);
@Animiles, 👍-1
Обсуждение1 ответ
Лучший ответ:
Прочитайте банк с помощью AnalogRead(). Не подключайте его вообще к светодиодам, просто 5В, Gnd и дворник к А5 (любой из контактов аналогового входа). Светодиоды просто переходят от резистора на одной ножке к земле на другой (или 5 В, зависит от того, анод или катод подключен к резистору).
Затем используйте программное ШИМ для управления светодиодами.
Например:
byte potPin = A5;
int potValue;
byte ledPin[] = {2,3,4,5,6,7,8,9,10,11,12,13,14};
byte x;
void setup(){
for (x=0; x<13; x=x+1){
pinMode (ledPin[x], OUTPUT);
}
}
void loop(){
potvalue = analogRead (potPin); // значение от 0 до 1023
for (x = 0; x<13; x=x+1){
digitalWrite (ledPin[x], HIGH);
delayMicroseconds(potValue);
// 0 = максимальная яркость, 1023 (1,023 мс) будет самой тусклой
// манипулируем значением potValue, если 1023 недостаточно тусклое — удваиваем его, утраиваем и т. д.
digitalWrite (ledPin[x], LOW);
delayMicroseconds(potValue);
}
}
Здесь вы можете поиграть с другими настройками управления яркостью.
вопрос в том, «Но как только один светодиод включается или выключается, это влияет на яркость всех остальных светодиодов». Это решает проблему?, @Juraj
@Juraj Это работает как обычный ШИМ, но это будет довольно сложно сделать, в то время как Arduino нужно делать другие вещи, особенно те, где используется «delay()». Это основная причина, почему я не думаю, что его предложение подойдет для моего проекта. В противном случае, я думаю, это должно сработать., @Animiles
Нетрудно было бы изменить это на стиль кода «Мигание без задержки» и избавиться от задержкиМикросекунды()., @CrossRoads
но разве общая проблема с яркостью не связана с подключением светодиодов (последовательное или параллельное)?, @Juraj
Светодиоды, как показано на рисунке, имеют только общую массу или +5. Они не подключены последовательно или параллельно — каждый имеет свой собственный драйвер (выходной контакт Arduino)., @CrossRoads
Другой код требует времени, и светодиоды будут иметь максимальную яркость, когда я делаю некоторые световые эффекты, но после некоторых настроек мне удалось найти работающий рукописный ШИМ-способ изменения их яркости. Мне потребовалось пару дней, прежде чем я придумал, как это реализовать, но сейчас это работает почти идеально. Спасибо за предложение!, @Animiles
Рад, что у вас все работает хорошо., @CrossRoads
- RGB LED с помощью потенциометра и кнопки
- Управлять яркостью светодиода с помощью потенциометра без кода, а также считывать значение потенциометра?
- ШИМ-управление, как остановить мерцание светодиода?
- Как регулировать светодиод на плате?
- Компонент с управляемым сопротивлением от Arduino?
- Светодиод не включается с ультразвуковым датчиком
- Проблема с потенциометром
- Питание светодиодной ленты - Сколько ампер?
Возможно, плата расширения, такая как [эта от Adafruit](https://www.adafruit.com/product/815), которая дает вам 16 отдельных выходов ШИМ., @chrisl
из тура: «Не спрашивайте о... Любом вопросе, для ответа на который не требуется знание платформы Arduino (попробуйте Stack Overflow для общих вопросов по программированию или электротехнику для общих вопросов по электронике)», @Juraj
@chrisl Спасибо за это предложение! Это немного дороговато, но я присмотрюсь к этому. Вы случайно не знаете, могу ли я подключить несколько плат I2C к Arduino?, @Animiles
@Юрай, думаю, ты прав. Однако предложение Крисла требует некоторых знаний в области Arduino, и, поскольку у меня нет сложной схемы, я лично считаю, что этот форум будет лучшим местом. Мне нужно решение этой проблемы, и это не обязательно должно быть чисто электротехническое решение :) (Но я учту это в следующий раз. Спасибо, что упомянули об этом), @Animiles