Перейти к содержанию

Rgb Контроллер. Нужна Помощь В Коде И Схеме


Рекомендуемые сообщения

Имеется RGB светодиодная лента (3 метра, 300 диодов). Пульт от родного контроллера сдох, а перепрограммировать его на другие коды кнопок не реально, об этом я убедился в своей другой теме об этой проблеме.

Так вот, хочу сделать контроллер на ардуино. Научился считывать коды кнопок с любого пульта. Еле-еле нашёл код со схемой для контроллера, но он не много не подходит.

Схема такова: С пульта RGB диод включается и выключается, меняется основной цвет и вроде всё. И это для одного диода, а у меня лента (тут, я думаю, нужно просто лишние резисторы убрать, т.к. в ленте они есть).

В чём мне нужна помощь - доделать код, чтобы можно было вкл/выкл, менять цвет, яркость каждого цвета, пару переливающихся режимов.

Ну и со схемой. Питание будет от адаптера 12В 6А.

Кому не лень, помогите пожалуйста.

Вот фото проекта и код того, что я нарыл в нете:

*

/*
* IRrecord: record and play back IR signals as a minimal
* An IR detector/demodulator must be connected to the input RECV_PIN.
* An IR LED must be connected to the output PWM pin 3.
* A button must be connected to the input BUTTON_PIN; this is the
* send button.
* A visible LED can be connected to STATUS_PIN to provide status.
*
* The logic is:
* If the button is pressed, send the IR code.
* If an IR code is received, record it.
*
* Version 0.11 September, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
#include <IRremote.h>
#define led1 9
#define led2 10
#define led3 6
int RECV_PIN = 5;
int BUTTON_PIN = 7;
int STATUS_PIN = 13;
int r = 0;
int g = 0;
int b = 0;
IRrecv irrecv(RECV_PIN);
IRsend irsend;

int fading = 0; // se = 1 effetti luminosi
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(BUTTON_PIN, INPUT);
pinMode(STATUS_PIN, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
// Storage for the recorded code
int codeType = -1; // The type of code
unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw
int codeLen; // The length of the code
int toggle = 0; // The RC5/6 toggle state
// Stores the code for later playback
// Most of this code is just logging
void storeCode(decode_results *results) {
codeType = results->decode_type;
int count = results->rawlen;
if (codeType == UNKNOWN) {
Serial.println("Received unknown code, saving as raw");
codeLen = results->rawlen - 1;
// To store raw codes:
// Drop first value (gap)
// Convert from ticks to microseconds
// Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
for (int i = 1; i <= codeLen; i++) {
if (i % 2) {
// Mark
rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
Serial.print(" m");
}
else {
// Space
rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
Serial.print(" s");
}
Serial.print(rawCodes[i - 1], DEC);
}
Serial.println("");
}
else {
if (codeType == NEC) {
Serial.print("Received NEC: ");
if (results->value == REPEAT) {
// Don't record a NEC repeat value as that's useless.
Serial.println("repeat; ignoring.");
return;
}
}
else if (codeType == SONY) {
Serial.print("Received SONY: ");
}
else if (codeType == RC5) {
Serial.print("Received RC5: ");
}
else if (codeType == RC6) {
Serial.print("Received RC6: ");
}
else {
Serial.print("Unexpected codeType ");
Serial.print(codeType, DEC);
Serial.println("");
}
Serial.println(results->value, HEX);
codeValue = results->value;
codeLen = results->bits;
}
}
int lastButtonState;
void loop() {
if (fading == 1) {
analogWrite(led1,r);
r=r+random(5);
r=r-random(5);
delay(10);
analogWrite(led2,g);
g=g+random(5);
g=g-random(5);
delay(15);
analogWrite(led3,;
b=b+random(5);
b=b-random(5);
delay(5);
Serial.println("random");

}

if (irrecv.decode(&results)) {
digitalWrite(STATUS_PIN, HIGH);
storeCode(&results);
//Serial.println(results->value,HEX);
if (codeValue == 0xA16EC03F) {
analogWrite(led1,0);
analogWrite(led2,0);
analogWrite(led3,0);
Serial.println("spento");
}
if (codeValue == 0xA16E34CB) {
fading = 0;
analogWrite(led1,255);
analogWrite(led2,0);
analogWrite(led3,0);
Serial.println("r");
}
if (codeValue == 0xA16ED42B) {
fading = 0;
analogWrite(led1,0);
analogWrite(led2,255);
analogWrite(led3,0);
Serial.println("g");
}
if (codeValue == 0xA16E54AB) {
fading = 0;
analogWrite(led1,0);
analogWrite(led2,0);
analogWrite(led3,255);
Serial.println("b");
}
if (codeValue == 0xA16E0CF3) {
fading = 1- fading;
}
irrecv.resume(); // resume receiver
digitalWrite(STATUS_PIN, LOW);
}
}

*

af724a9a0f5fc75f8ffff4e594f7fdd9.jpeg

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Сразу скажу, я не профи, и опыта у меня мало. могу ошибаться во всем, что пишу)

Судя по этому коду и фото - светодиод подключен тремя анодами к ШИМ выходам Ардуино - и общим катодом на землю.

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

не знаю какая у вас лента. у меня 300 светиков на 5 метров было. то есть 60 светодиодов на 1 метр в секции по 3 шт итого 20 секций. 20 * 3 * 0.020 мА = 1.2 А на метр.

3 метра моей ленты требовали бы 3.6 А. а максимальный ток НА ВЫВОДЕ АРДУИНО 40мА.

И в ленте(по крайней мере я только такие встречал у себя) общий +12V, то есть общий анод и три катода.

Нужно использовать NPN транзисторы, которые током с базы управляют током коллектор-эмиттер.

Мне для моих маленьких отрезков (по 3 светодиода от ленты отрезал) хватало микросхемы ULN2003(вытащил из драйверов двигателей, заказанных когда то с eBay) - которая выполняла функцию транзисторов - и ШИМ выход управлял микросхемой - и транзисторы зажигали ленту от внешнего питания 12В. там до 500мА на канале можно было протянуть.

Какая у Вас лента? что написано на четырех контактах? +12v R G B ? фото можно? Правда ли 3 метра и 300 диодов? на метр получается 100 штук?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Какая у Вас лента? что написано на четырех контактах? +12v R G B ? фото можно? Правда ли 3 метра и 300 диодов? на метр получается 100 штук?

Я ошибся. У меня 5 метров, 300 диодов, 60 на 1 м. Вот эта.

Питание 12 в. На ленте так и написано: 12 R G B

После создания этой темы порылся ещё в нете и нашёл кое что:

здесь можно взять часть схемы, всю её правую часть, как я понял (для питания)

а здесь остальная схема (подключение к ардуино) и код.

Что скажете?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Что скажете?

Вот где-то видел эту схему http://s5.hostingkartinok.com/uploads/images/2014/02/00b8c8087d49d5140e2216e5cac53e63.jpg

Да она подходит, только взять из нее нужно правую часть от МК 12,14,16 ноги и вправо резисторы транзисторы и лента.

Стабилизатор напряжения вверху справа 78L05. Он не нужен так как в ардуино уже встроен стабилизатор на 5 вольт. можно питать ардуину от 12В.

со схемой понятно.

Другой момент, как вы считаете коды кнопок вашего пульта?

Ссылка на комментарий
Поделиться на другие сайты

это не сложно. тоже при помощи ардуино.

проверял, работает.

Ну да. А код тогда останется тот же, как вы здесь привели пример в первом сообщении. просто придется подобрать другие резисторы - которые будут между ногой ардуины и транзисторами. только в Вашем примере у светодиода общий катод, а там у ленты общий +12В - его подключать параллельно ардуине.

Еще есть такой контакт на ардуине в районе 3.3V, 5V, GND , GND, VIN) вот именно этот VIN или 9V у кого как - оттуда будет идти ток и напряжение, которыми питается ардуина. Только я не знаю есть ли там какое то ограничение. поэтому я бы подключил ленту не от этого выхода а параллельно ардуине. Хотя наверно можно и от него.

Ссылка на комментарий
Поделиться на другие сайты

придется подобрать другие резисторы

как их подбирать? я в этом не силён.

Еще есть такой контакт на ардуине в районе 3.3V, 5V, GND , GND, VIN)

почитал на апмерке, да, там напряжение такое же как и питание.

На счёт кода думаю, что может второй пример лучше использовать. В первом чёт намудрено, да и кнопка какая-то в схеме...

и надо бы мне схему начертить и сюда закинусь на суд

кстати схему с транзисторами брал тут

Изменено пользователем palikar
Ссылка на комментарий
Поделиться на другие сайты

как их подбирать? я в этом не силён.

Вот в этом я тоже не силен)) Я сам начал осваивать электротехнику только после покупки ардуино))

По ссылке как раз есть второй способ через ULN2003 - я вот так делал - по сути там 7 транзисторов. которые выполняют ту же функцию. только все сделано одной микросхемой. Я использовал 3 ноги от той микросхемы. Можно, если необходим больший ток на канал. больше 500мА - тогда замкнуть паралельно 2 канала микросхемы, как на картинке на том же сайте http://www.getchip.net/wp-content/uploads/RGB-ULN-640x263.jpg

Но вот на самом сайте cxem.net нашел статью http://cxem.net/beginner/beginner61.php думаю стоит попробовать сделать как там. и код программы есть для примера.

А по поводу резисторов - вам нужно рассчитать максимальный ток для базы .и его и ограничить резистором. только вот как это я не знаю)

вот тут есть формулы http://cxem.net/beginner/beginner88.php

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...