arduino nano, подключил светодиодную ленту - мерцает

Martovsky
Offline
Зарегистрирован: 08.04.2014

Собрал вместе arduino nano, таймер, светодиодную ленту. 

Написал код что б свет горел с заданной яркотью в зависимости от времени суток с плавным изменением освещения. Всё горит меняется но есть проблема. Время от времени начинает мерцать, точнее один из каналов чаще синий, включается выключается, иногда несколько каналов. Изначально собрал на мосфетах. Думал проблема из-за них, собрал на ULN2003A. Результат тот же. Думал что блок питания. Подключал Ардуино к 5 вольтовому блоку питания, а ардуино к 12 вольтовому, земли объединял, результат тот же. 

Буду благодарен за любую помощь

Новичок в таком, поэтому всё несколько кривовато и неуклюже.

Кусок кода на всякий:

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

#define REDPIN 6
#define GREENPIN 5
#define BLUEPIN 3

 DateTime now;
   
void setup () {
  pinMode(REDPIN, OUTPUT);   pinMode(GREENPIN, OUTPUT);   pinMode(BLUEPIN, OUTPUT);
 
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();
  
  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    // rtc.adjust(DateTime(__DATE__, __TIME__));

  }

}

void loop () {
   now = rtc.now();      int hour = now.hour();
   // Проверяем в зависимости от этого запускаем процедуру которая обсчитывает что выставлять на канал
   if (hour >= night || hour < voshod)  pnight(); //night
   else if (hour < day1) pvoshod(); //voshod
// и так далее

    setled(); // процедура корректируем и устанавливаем яркость на канал
}
 
  void pnight() { }
  void pvoshod() { }  
 //и так далее 
 
void setled() {
// усложнено для того что бы все изменения были плавные
  int l=0;
   if (r < rnew && r <= 255) {r++;l=1;}else if (r > rnew && r > 0) {r--;l=1;}
   if (g < gnew && g <= 255) {g++;l=1;} else if (g > gnew && g > 0) {g--;l=1;}
   if (b < bnew && b <= 255) {b++;l=1;} else if (b > bnew && b > 0) {b--;l=1;}
  if (l==1) {
    analogWrite(REDPIN, r);   
    analogWrite(GREENPIN, g); 
    analogWrite(BLUEPIN, b); 
//вывожу в терминал значения ,что бы проверить как обсчитывает программа вижу, что проблема мигания не в подсчётах. 
    Serial.print("rgbnew "); Serial.print(rnew);Serial.print(' '); Serial.print(gnew);Serial.print(' '); Serial.print(bnew); Serial.println();
    Serial.print("RGB "); Serial.print(r);Serial.print(' '); Serial.print(g);Serial.print(' '); Serial.print(b); Serial.println();
   
  l=0;}
 // Serial.println();
}
    
}

 

Martovsky
Offline
Зарегистрирован: 08.04.2014
Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Глазу видно мерцание, или только через фотоаппарат? Поставьте конденсатор 100 uF параллельно ленте... Ну и задержки (delay(10)) в функции изменении яркости сделайте...

Martovsky
Offline
Зарегистрирован: 08.04.2014

Глазу видно, очень хорошо.

Задержка  есть сразу после выполнения процедуры по изменению яркости delay(400);

 

Сори за мои познания, не совсем понял куда цеплять его "Поставьте конденсатор 100 uF параллельно ленте... "

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Martovsky пишет:

Сори за мои познания, не совсем понял куда цеплять его "Поставьте конденсатор 100 uF параллельно ленте... "

ШИМ - это, грубо говоря, прямоугольный сигнал, и ULN-ка Вам его аккуратно повторяет на ленту. Соответственно, чтобы уменьшить пульсацию, надо ставить на питание ленты сглаживающий конденсатор.

Martovsky
Offline
Зарегистрирован: 08.04.2014

Правильно понял таким образом? И так для каждого цвета?

И такой же подойдёт 16V 100uF /6*11/ 105°С               SB016M0100BZF-0611

carduino.ru
Offline
Зарегистрирован: 06.12.2011

А какое количество светодиодов в Вашей ленте?

Martovsky
Offline
Зарегистрирован: 08.04.2014

примерно 2 метра ленты 5050 по 60 на метр

carduino.ru
Offline
Зарегистрирован: 06.12.2011

С макс. током получается в допуске.

Мерцает по тму что очень длинные програмные задержки

Уберите все что связано с Serial и мерцание заметно уменьшиться

Или рагулируйте яркость светодиодов в обработчике прерывания по таймеру

Martovsky
Offline
Зарегистрирован: 08.04.2014

"Или рагулируйте яркость светодиодов в обработчике прерывания по таймеру" про это поподробнее

Serial убирал полностью из кода, тоже думал на него. 

 

SatBoom
Offline
Зарегистрирован: 16.02.2014

у меня через TIP122 нормально без мерцания 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Можете за основу взять проект Ardulight

axill
Offline
Зарегистрирован: 05.09.2011

Andrey_Y_Ostanovsky пишет:

ШИМ - это, грубо говоря, прямоугольный сигнал, и ULN-ка Вам его аккуратно повторяет на ленту. Соответственно, чтобы уменьшить пульсацию, надо ставить на питание ленты сглаживающий конденсатор.

Сам ШИМ не причина мерцания. Причина - переключения настолько медленные, что распознаются глазом. Либо частота ШИМ слишком низкая, либо программа делает скачкообразные изменения заметные глазу

сам только что сделал управление светодиодами ШИМ на 1кгц - визуально очень плавное изменение тем более что ШИМ настроен на 10бит (1024 значения)

Ставить конденсатор как вы рекомендовали не верно с точки зрения схемотехники. В момент открытия ключей токи для uln2003 будут в разы больше допустимых. Надо ставить RC или LC фильтр. При токах как у автора эффективнее LC фильтр. Однако если причина мерцания низкая частота ШИМ, то индуктивность и конденсатор нужны громадные, причем по три штуки (на каждый канал по дросселю и конденсатору). Применение фильтра на выходе оправдано когда нужно вместо ШИМ иметь сглаженное постоянное напряжение, это важно например для некоторых моторов. Но для светодиодов сглаживание не нужно. Куда правильнее исправить программу или поднять частоту. Не нужен тут фильтр

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Martovsky пишет:

примерно 2 метра ленты 5050 по 60 на метр

Из аналогичного описания: Power: 5.4W/M, что при 12V даст ток 450 mA на метр, у Вас их два, т.е. почти ампер... На сколько там рассчитана ULN-ка?

axill
Offline
Зарегистрирован: 05.09.2011

Andrey_Y_Ostanovsky пишет:

Из аналогичного описания: Power: 5.4W/M, что при 12V даст ток 450 mA на метр, у Вас их два, т.е. почти ампер... На сколько там рассчитана ULN-ка?

расчитана на 500ма на канал, два канала в паралель и будет 1а

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

axill пишет:

расчитана на 500ма на канал, два канала в паралель и будет 1а

При какой частоте ШИМ-а из нее не пойдет дым от такой нагрузки? :)

axill
Offline
Зарегистрирован: 05.09.2011

При частоте в сотни герц-единицы килогерц точно с ними ничего не случится, транзисторные сборки в uln2003 имеют хорошее насыщение от логических уровней, а значит будут нормально открываться

но ваши опасения оправданы, только по другой причине. Посмотрел даташит - 500ма на канал, но не более 2.5а на всю микросхему. Значит автору надо менять решение. Можно поставить две uln и включить по три-четыре канала, скажем 4-R + 2-G на одной микросхеме и 2-G + 4-B на второй

Martovsky
Offline
Зарегистрирован: 08.04.2014

axill пишет:

Andrey_Y_Ostanovsky пишет:

ШИМ - это, грубо говоря, прямоугольный сигнал, и ULN-ка Вам его аккуратно повторяет на ленту. Соответственно, чтобы уменьшить пульсацию, надо ставить на питание ленты сглаживающий конденсатор.

Сам ШИМ не причина мерцания. Причина - переключения настолько медленные, что распознаются глазом. Либо частота ШИМ слишком низкая, либо программа делает скачкообразные изменения заметные глазу

сам только что сделал управление светодиодами ШИМ на 1кгц - визуально очень плавное изменение тем более что ШИМ настроен на 10бит (1024 значения)

Ставить конденсатор как вы рекомендовали не верно с точки зрения схемотехники. В момент открытия ключей токи для uln2003 будут в разы больше допустимых. Надо ставить RC или LC фильтр. При токах как у автора эффективнее LC фильтр. Однако если причина мерцания низкая частота ШИМ, то индуктивность и конденсатор нужны громадные, причем по три штуки (на каждый канал по дросселю и конденсатору). Применение фильтра на выходе оправдано когда нужно вместо ШИМ иметь сглаженное постоянное напряжение, это важно например для некоторых моторов. Но для светодиодов сглаживание не нужно. Куда правильнее исправить программу или поднять частоту. Не нужен тут фильтр

 

В программе все изменения плавные. градация 255 изменения делаются не больше чем на 1 с delay(400); (почему то не скопировал в код).

Отслеживал значения через сериал, так вот когда происходит мерцание в принципе не вызывается процедура analogWrite

Вопрос как увеличить частоту ШИМ? Может быть я принципе не правильно подключил и надо было не аналогово ?

 

2 ULN поставить не проблема поизже проверю. 

axill
Offline
Зарегистрирован: 05.09.2011

Мое личное мнение, что если функция ардуино не устраивает, то уже пора отказываться от функции ардуино и открывать даташит на МК, в данном случае на atmega328p. Там есть раздел с таймерами и в каждом таймере раздел register description. Это по началу кажется, что все сложно, но на самом деле настроить ШИМ под свои нужды совсем не сложно. У atmega328p три таймера, в каждом таймере по два канала PWM. Два таймера 8ми битных, один 16-ти битный. У 16ти битного на самом деле можно настроить разрешение на разное количество бит. Можно сделать тоже 8ми битный. Вам нужны три канала, значит нужны два таймера. Вам нужен будет один из режимов fastPWM, настроив предделитель можно подобрать подходящую частоту. Для светодиодов рекомендую частоту от 500гц до 2кгц

Как бы если пойдете по такому пути то готов подсказать и поправить. Но нужно понимать, что погружение в даташиты постепенно ведет к отказу от стандартных настроек ардуины) перенастройка таймеров может сломать такие функции как millis(). 

axill
Offline
Зарегистрирован: 05.09.2011

кстати

если ваша картинка наверху правильная, то вы перепутали входы и выходы ULN2003, с 1-7 это входы, а 10-16 выходы

Martovsky
Offline
Зарегистрирован: 08.04.2014

Ну это поспешил набросать красивую схему. Подключено всё правильно.  Как у вас на схеме

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Martovsky пишет:

Вопрос как увеличить частоту ШИМ? Может быть я принципе не правильно подключил и надо было не аналогово ?

Попробуйте с цифрового (3, 5, 6, 9, 10 или 11), только на него надо digitalWrite делать.

Martovsky
Offline
Зарегистрирован: 08.04.2014

Andrey_Y_Ostanovsky пишет:

Martovsky пишет:

Вопрос как увеличить частоту ШИМ? Может быть я принципе не правильно подключил и надо было не аналогово ?

Попробуйте с цифрового (3, 5, 6, 9, 10 или 11), только на него надо digitalWrite делать.

Не правильно выразился, на схеме правильно показано куда подключено. Сеичас подключено на 3,5,9.

поставил 2  ULN2003A вроде как поярче гореть стало, но мерцание осталось. Код подправил задержку поставил сразу после вызова процедуры analogWrite.

Самое странное вчера сколько не смотрел мерцает только один канал который на синий цвет выходит. Порт пытался переткнуть на 9,10,11 все равно мерцание. При небольшой яркости очень заметно прям включился, выключился. 

 

Сеичас задумался я использую процедуру analogWrite, а вы написали digitalWrite? 

Смущает синтаксис digitalWrite(pin, value) где - value: значение HIGH или LOW

А нужны же плавные переходы.

 

Схема сеичас: 

SatBoom
Offline
Зарегистрирован: 16.02.2014

Может у вас прерывания дергают часы реального времени что и отражается на мерцании. Так как ШИМ сидит на одноим из таймеров. уберите их и посмотрите будет мерцания или нет. 

SatBoom
Offline
Зарегистрирован: 16.02.2014

думаю что вам придется делать программный шим. 

axill
Offline
Зарегистрирован: 05.09.2011

SatBoom пишет:

Может у вас прерывания дергают часы реального времени что и отражается на мерцании. Так как ШИМ сидит на одноим из таймеров. уберите их и посмотрите будет мерцания или нет. 

Почитайте даташит на atmega328, прерывания и вообще исполнение кода не влияют на работу апаратного ШИМ, на то ор и аппаратный ШИМ, чтобы работать независимо от исполнения кода программы

SatBoom
Offline
Зарегистрирован: 16.02.2014

вот и нет, в даташите на атмего328 может и так но здесь это реализовано по другому и вобще библиотеки Ардуино кривые.

прирывания сидят на таймере, шим ипосльзует этот таймер, от сюда и глюк. 

leshak
Offline
Зарегистрирован: 29.09.2011

>думаю что вам придется делать программный шим. 

Да ну ладно? С каких это пор програмный стал предпочтительней? Его делают, как правило от отчаяния (в 99% когда не хватает количества аппаратных).

Топикстартеру:

В объяснениях вы говорите про delay(400) - в коде его не видно. На схеме у вас нарисованны использование выходов D11, D6,D5

В коде у вас D6,D5,D3

Что такое rnew? Где оно объявлено, чему равно, когда меняется - неведомо.

Даже если предположить что вся логика "все изменения плавные" - правильная, то никакой плавности не будет. У вас же setLed вызывается "чаще как только можно". Никаких попыток "переодически ее вызывать" - не видно. Следовательно "разгоратся/гаснуть" диод будет за доли секунды. Что и видно как "мигание". 

И вообще, вначале выясните в чем у вас проблема. В аппаратной части или в софтовой. Отключите свой RTC. Отложите свой скетч в сторону. Сделайте чистый скетч, у которого в setup(), только три pinMode и три analogWrite.  Убедитесь что у вас работает шим. 

axill
Offline
Зарегистрирован: 05.09.2011

Martovsky если мерцает только голубой и только на малой яркости, предлагаю сделать следующее. 1. В программе установить фиксированную яркость на все три канала, такую яркость при которой заметно мерцание. 2. Убедиться еще раз, что дело только в голубом, для этого лучше поочередно подключать только одир канал, чтобы другой не мешал восприятию 3. Переключите голубой на тот канал где был зеленый и красный, чтобы убедиться, что голубой моргает не зависимо от подключения.

если подтвердится, что проблема только с голубым, то это скорее всего связано с особенностью восприятия и решения может быть два : 1 таки повысить частоту ШИМ перенастроив таймеры 2. Исключить програмно для голубого те значения яркости при которых есть мерцания

axill
Offline
Зарегистрирован: 05.09.2011

SatBoom пишет:

вот и нет, в даташите на атмего328 может и так но здесь это реализовано по другому и вобще библиотеки Ардуино кривые.

прирывания сидят на таймере, шим ипосльзует этот таймер, от сюда и глюк. 

ардуина нано работает на atmega328 и какие бы ардуино не писала библиотеки МК будет работать в полном соответствии с даташитом. Не пишите глупости в виде советов другим. Сами можете заблуждаться сколько угодно)

нет никакой проблемы в том, чтобы один и тот же таймер использовать и для ШИМ и для прерываний

Martovsky
Offline
Зарегистрирован: 08.04.2014

Приношу извение за лёгкий бардак. Всё скидывал на скорую руку. Постараюсь исправиться в этом посте. 

На данный момент вот что имею:

Схема:

Полный код на данный момент: 

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
#define REDPIN 6
#define GREENPIN 5
#define BLUEPIN 3
 const int voshod = 7, day1 = 9, zenit = 13, day2 = 16, zakat = 20, night = 23, koofvz = 50, delayled = 50;
 int r = 0,g = 0,b = 0, rnew = 0,gnew = 0,bnew = 0, blgr=0;
 DateTime now;
   
void setup () {
  pinMode(REDPIN, OUTPUT);   pinMode(GREENPIN, OUTPUT);   pinMode(BLUEPIN, OUTPUT);
 
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();
}

void loop () {
  
   now = rtc.now();      int hour = now.hour();
   if (hour >= night || hour < voshod)  pnight(); //night
   else if (hour < day1) pvoshod(); //voshod
   else if (hour < zenit) pday(); // day1
   else if (hour < day2) ppolden(); // polden
   else if (hour < zakat) pday();  //day2
   else if (hour < night) pzakat();   // zakat
   setled(); //корректируем и устанавливаем яркость
   delay(400);
}

  void pday() { rnew=200; gnew=200; bnew=200;  }

  void ppolden() { 
         if (now.hour()==zenit && now.minute()<55) {rnew=200 + now.minute(); gnew= 200 + now.minute(); bnew= 200 + now.minute();}
         if (now.hour()==(day2-1) && now.minute()>5) {rnew=255 - now.minute(); gnew= 255 - now.minute(); bnew= 255 - now.minute();}         
         else {rnew=255; gnew=255; bnew=255;}
         if (rnew > 255) rnew=255;
         if (gnew > 255) gnew=255;   
         if (bnew > 255) bnew=255;
      }

  void pnight() { 
         if (now.hour()==night && now.minute()<3) {rnew=0; gnew= now.minute()/2; bnew= now.minute();}
         if (now.hour()==(voshod-1) && now.minute()>56) {rnew=0; gnew= (60 - now.minute())/2; bnew= 60 - now.minute();}         
         else {rnew=0; gnew=1; bnew=3;}
         if (gnew < 0) gnew=0;   
         if (bnew < 0) bnew=0;
     }

  void pvoshod() { 
       if (now.hour()==voshod && now.minute() <= 10)  {rnew=0; gnew=0; bnew=0;}
       else{     
         rnew = 50+(((now.hour() - voshod)*60+now.minute()-10)*60 + now.second())/koofvz;
         gnew = (((now.hour() - voshod)*60+now.minute()-10)*60 + now.second())/koofvz;
         bnew = -20+(((now.hour() - voshod)*60+now.minute()-10)*60 + now.second())/koofvz;
         if (rnew > 200) rnew=200;
         if (gnew > 200) gnew=200;   
         if (bnew > 200) bnew=200;
         if (rnew < 0) rnew=0;
         if (gnew < 0) gnew=0;   
         if (bnew < 0) bnew=0;
       }
  }  
  
  void pzakat() { 
       if (now.hour()==(night-1) && now.minute() >= 50)  {rnew=0; gnew=0; bnew=0;}
       else{
         rnew = 240-(((now.hour()- zakat)*60+now.minute())*60 + now.second())/koofvz;
         gnew = 225-(((now.hour()- zakat)*60+now.minute())*60 + now.second())/koofvz;
         bnew = 200-(((now.hour()- zakat)*60+now.minute())*60 + now.second())/koofvz;
         if (rnew < 0) rnew=0;
         if (gnew < 0) gnew=0;   
         if (bnew < 0) bnew=0;
         if (rnew > 200) rnew=200;
         if (gnew > 200) gnew=200;   
         if (bnew > 200) bnew=200;
       }
  }

void setled() {
  int l=0;
   if (r < rnew && r <= 255) {r++;l=1;}else if (r > rnew && r > 0) {r--;l=1;}
   if (g < gnew && g <= 255) {g++;l=1;} else if (g > gnew && g > 0) {g--;l=1;}
   if (b < bnew && b <= 255) {b++;l=1;} else if (b > bnew && b > 0) {b--;l=1;}
  if (l==1) {
    analogWrite(REDPIN, r);   
    analogWrite(GREENPIN, g); 
    analogWrite(BLUEPIN, b); 
  l=0;}
}

 

 

axill
Offline
Зарегистрирован: 05.09.2011

Поддержу leshak, найдите первоаричину, замените скетч на самый простой и добейтесь приемлемого свечения

потом вернетесь к отладке нужной логики

leshak
Offline
Зарегистрирован: 29.09.2011

Первое что бросается в глаза использование int для хранение яркости каналов. Поэтому в Serial вы будете видеть что "все хорошо", а в реальности там может быть совсем другое. Вообщем "переходите на byte" и смотрите что у вас получается (ну естественно после того как проверите/убедитесь, что у вас нет проблем с железом/подключением). Или делайте map в 0...255, когда выводите эти переменные на analogWrite

Martovsky
Offline
Зарегистрирован: 08.04.2014

Исправил на byte результат тот же.

Упростил программу до простейшей установки сигнала в конкретное значение. Всю логику убрал. Всё делал в основной процедуре.

90     analogWrite(REDPIN, 50);  
91     analogWrite(GREENPIN, 50);
92     analogWrite(BLUEPIN, 50);

Яркость выставлял вручную смотрел что получится. 

1) Если только синий в любых значениях не мерцает. горит идиально.

2) При яркости больше 150, мерцания почти не заметно при любых раскладах. 

3) Меньше 150, пик где-то в районе 50 (может быть просто особенность восприятия):

 - если все 3 цвета запустить (например 50 50 50,но не обязательно одинаково) мерцат канал, на который подключен синий.      

    -----менял на включеной ардуино каналы синий и любой другой, мигать начинает тот который подключаешь на место синего)

    -----Переставлял синий на другой порт (9, 10, 11) всеравно мерцает. 

 - если 2 цвета, то ярко выраженого мерцания одного цвета не вижу, но есть небольшое мерцание просто заметное глазу

 

leshak
Offline
Зарегистрирован: 29.09.2011
Martovsky пишет:
Упростил программу до простейшей установки сигнала в конкретное значение. Всю логику убрал. Всё делал в основной процедуре.

 
Чисто на всякий случай. Дайте целиком (что-бы пины видеть и проч.). Можно, когда код вставляете на второй вкладочке поставить галочку "свернуть код", что-бы визуально не раздувать тему.
 

Martovsky пишет:

 
1) Если только синий в любых значениях не мерцает. горит идиально.
 
 
Возможно это намек на "проблемы с питанием". Причем как в части +5v так и +12v (но второе - вероятней).
Или... "электроника - наука о контактах". Перепроверить. И управлаяющие пины арудины. И подключение ленты к ULN. И, особенно, качество соединения всех земель.
 
BTW: а сколько у вас ленточка-то кушает?  Амперметром померять?  Каждый канал - отдельно. И все вместе Во время замера подключать канал напрямую к блоку питания. Не через ULN. Когда "все вместе" еще и напряжение посмотреть.
 

Martovsky пишет:

 
    -----менял на включеной ардуино каналы синий и любой другой, мигать начинает тот который подключаешь на место синего)
 

 
Немного не понятно, что такое "место синего". Предположим у вас, на ULN R это IN7/OUT7, а Blue это IN2/OUT2
 
Выставляете в скетче яркость, ОДИНАКОВУЮ для R и B такую, что-бы "красный горел ровно, а на синем - четко видно мерцание ".  Более ардуину не трогаем.
 
 
1. Меняем, со стороны ULN, местами проводочки идущие к IN2 и IN7 - кто начал мерцать? 
2. Возвращаем IN2 и IN7 в первоначальное состояние.  (IN2=B, IN7=R)
3. Меняем местами проводочки идущие к OUT2 и OUT7 - кто мерцает?
 
Martovsky
Offline
Зарегистрирован: 08.04.2014

leshak пишет:

Немного не понятно, что такое "место синего".

Менял местами проводки подключенные к пинам на самой ардуине

gregoryl
Offline
Зарегистрирован: 09.09.2013

В вашей схеме меня смущает только одно, у вас лента с общим +, обычно ленты с общей землей и управлять ими при помощи ULN2003 не получается. Или я чего-то не понял ?

leshak
Offline
Зарегистрирован: 29.09.2011

gregoryl пишет:

В вашей схеме меня смущает только одно, у вас лента с общим +, обычно ленты с общей землей и управлять ими при помощи ULN2003 не получается. Или я чего-то не понял ?

Все правильно вы поняли. Только с "обычно" ошиблись. Я бы сказал даже наоборот. У меня - перед глазами. Лежит секция ленточки у которой четыре выхода подписаны +12v,G,R,B . И зажигается она именно подачей нуля на G,R,B. И замечательно рулилась, в свое время с помощью ULN2003 (сейчас через полевики осваиваю).