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

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 недели спустя...

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

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

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

не знаю какая у вас лента. у меня 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 штук?

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

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

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

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

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

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

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

Что скажете?

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Что скажете?

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

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

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

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

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

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

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

Ну да. А код тогда останется тот же, как вы здесь привели пример в первом сообщении. просто придется подобрать другие резисторы - которые будут между ногой ардуины и транзисторами. только в Вашем примере у светодиода общий катод, а там у ленты общий +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 пользователей онлайн

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