Затемнение нескольких светодиодов с помощью потенциометра

Я работаю над небольшим проектом. У меня 13 светодиодов, которыми нужно управлять индивидуально (включать или выключать); Поскольку у меня нет 13 контактов ШИМ, я использовал потенциометр для изменения яркости.

Это работает нормально, пока все светодиоды остаются в том состоянии, в котором они есть. Но как только один светодиод включается или выключается, это влияет на яркость всех остальных светодиодов.

На картинке ниже вы можете увидеть, как я их подключил. У меня есть аналоговые контакты A0, A1, A2 и A3, занятые какими-то кнопками.

Кто-нибудь знает, как можно затемнить яркость светодиодов так, чтобы сами светодиоды не влияли на яркость?

(примечание: я программист, а не инженер-электрик. Ответы, связанные с кодом, мне (обычно) легко понять. Ответы, касающиеся аппаратного обеспечения, нет.);

Текущая настройка

, 👍-1

Обсуждение

Возможно, плата расширения, такая как [эта от Adafruit](https://www.adafruit.com/product/815), которая дает вам 16 отдельных выходов ШИМ., @chrisl

из тура: «Не спрашивайте о... Любом вопросе, для ответа на который не требуется знание платформы Arduino (попробуйте Stack Overflow для общих вопросов по программированию или электротехнику для общих вопросов по электронике)», @Juraj

@chrisl Спасибо за это предложение! Это немного дороговато, но я присмотрюсь к этому. Вы случайно не знаете, могу ли я подключить несколько плат I2C к Arduino?, @Animiles

@Юрай, думаю, ты прав. Однако предложение Крисла требует некоторых знаний в области Arduino, и, поскольку у меня нет сложной схемы, я лично считаю, что этот форум будет лучшим местом. Мне нужно решение этой проблемы, и это не обязательно должно быть чисто электротехническое решение :) (Но я учту это в следующий раз. Спасибо, что упомянули об этом), @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