CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Делаем клон BlinkM. Или наш ответ Чемберлену


Постепенно нашу жизнь заполняют умные вещи. Смартфоны, смартТВ, умные скороварки, умные автомобили и т.п. И вот дело дошло даже до «умных светодиодов»!!! Итак, спешу представить: BlinkM это RGB-светодиод с управлением по I2C. Как я себе представляю, областями применения интеллектуальных светодиодов является декоративная подсветка интерьера, автомобильная светотехника, другие программируемые светотехнические решения. После беглого знакомства с описанием этого «зверька» больше всего меня впечатлило две вещи: 1-размеры и простота, а 2-ое — НЕАДЕКВАТНОСТЬ цены на готовое изделие!!! Пробежавшись по официальному сайту, заметил много интересных «прибамбасов»!!!.. Тут тебе и COMMUNICATOR для подключения к Ардуино, какой-то SEQUENCER, и примеры стыковки на разных языках программирования и т.д. Ну и чего греха таить, «глазки загорелись» и ОЧЕНЬ захотелось воочию поиграть с этой штукой. Но купить !?!?!? Неа. Абсолютно никакого желания :) Да и любимый жизненный принцип моего хорошего друга: «Это не наш метод. Мы сделаем сами, пусть по выходу окажется и в два раза дороже!». :)

Вектор намечен. Сделаем самостоятельно!
Короткий поход на радиорынок.
Расходы:
-> Attiny45 — (около 2$). Правда в корпусе SOIC, а я хотел изначально в DIP-e (но вышло даже лучше).
-> RGB светодиод — (0.5$)
-> SMD-резисторы — (пусть еще 0.5$)

ИТОГО: 3$
Заинтересовались? Тогда читаем дальше :)
Поиски RGB-светодиода на радиорынке закончились покупкой «ноунемовского», типа такого:


Схема «нагуглилась» достаточно быстро, но содержала ошибку… Вот исправленный вариант:


При повторении я постарался максимально приблизиться к оригинальному изделию, хотя бы по контактам :) К сожалению, конденсатор по питанию пришлось исключить :(

Вот, что вышло (размер платы 12х12 мм):




Будьте внимательны при повторении. Это вид на плату сверху (НЕ СКВОЗЬ ПЛАТУ!!!). Медный слой сверху. Однако при распечатке из SprintLayout-а, если выбрать птичку «ЗЕРКАЛЬНО» — печатается совсем не так, как задумано… Я и раньше замечал эту «странность». Но как правило, это происходило, когда я распечатывал типа «маски» расположения элементов, что не являлось критичным.
А тут пришлось прибегнуть к небольшой «военной хитрости»: я «отзеркалил» плату в редакторе, а при выводе на печать птичку «Зеркально» не ставил, и все вышло очень даже неплохо.

После распечатывания, Вы должны получить изображение как на картинке ниже.
Делал сразу две платы, себе и приятелю. (Потом я и третью плату запаял :))



ЛУТим


А вот после 20-ти минутного «купания» в хлорном железе:


Ну, поехали паять:


Последние штрихи, запаиваем микроконтроллер и RGB-светодиод.


Подражая «оригиналу», я впаивал только четыре штырька, а крайние «пятачки» (сигналы RST и MISO)-при необходимости припаяем провода. Фактически это придется сделать только один раз, прошивая Attiny.


Я остался ОЧЕНЬ доволен получившемся результатом :).

Приступаем ко второй части «марлезонского балета», а именно прошивка микроконтроллера. Ниже картинка, каким образом подключается BlinkM к программатору.

Для прошивки грех не воспользоваться имеющимся (смайлик) программатором USBTinyISP.


В каталоге архива проекта, в папке FIRMWARE\!!_Original\ находится софт для прошивки и сама прошивка. Однако, прошивка не является открытой и предназначена для некоммерческого использования. Кому религия не позволяет, можете воспользоваться альтернативной FIRMWARE\CYZ_RGB. An alternative firmware. (Просто укажите утилите ReflashBlinkM.exe месторасположение альтернативной прошивки). Я человек не особо щепетильный, поэтому прошил оригинальной для Attiny45.



Уже и не припомню, почему у меня ни Arduino IDE, ни ReflashBlinkM.exe не работают с библиотекой rxtxSerial.dll (77759 байт). Причину этого явления можно поискать на официальном сайте Arduino. «Пофикшенная» версия rxtxSerial.dll (98381 байт) заботливо располагается в папке FIRMWARE\!!_Original\!_Fix_rxtxSerial. Если столкнетесь с аналогичной проблемой, просто замените эту библиотеку.


Во время прошивки, светодиод весело «перемаргивает»!
Вот и все! Заветная надпись REFLASHING DONE! Мои поздравления!

Поиграться с полученным клоном BlinkM-а у меня было пока совсем мало времени. Ниже то, что успел сделать :)

Пока у меня на руках было два BlinkM, попробовал «покомандовать» ими по отдельности. Меняем адрес устройства (так как изначально они все отвечают по адресу 0х09):


При выполнении следующего кода, к шина I2C (выводы А5 и А4 на Ардуино) подключен только один BlinkM, адрес которого и будем менять. Адрес должен записаться в EEPROM
#include <Wire.h>
void setup()
{
  Wire.begin();
}

void loop()
{
Wire.beginTransmission(0);// активируем I2C
  Wire.write('A');  // 'A' Команда изменения адреса устройства 
  Wire.write(0x12); // Новый адрес 
  Wire.write(0xd0); // 
  Wire.write(0x0d); // 
  Wire.write(0x12); // Новый адрес
  Wire.endTransmission();    // завершаем I2C
}


Подключаем два, имеющихся BlinkM-а:


А тут ВИДЕО демонстрашки, код которой приведен ниже:
Общий смысл — плавное изменение цвета следующий образом: красный->желтый->зеленый->синий->фиолетовый.



/*
  BlinkM (Ghost D. Clone) Demo sketch
  Плавное изменение цвета от красного до фиолетового
  и так по кругу. Красоты ради, второй BlinkM будет отображать цвета наоборот от фиолетового к красному
  Скетч слеплен на скорую руку из готовых решений. Так, что не критикуйте сильно :)
 
*/

#include <Wire.h>

const int address = 0x09;   // I2C адрес 1-го BlinkM
const int address1 = 0x12;  // I2C адрес 2-го BlinkM

int color = 0; // Переменная отвечающая за цвет в системе HSB
byte R, G, B;  // составляющие цвета. Красный, зеленый,синий

void setup()
{
  Wire.begin(); // подключаем I2C библиотеку
}

void loop()
{
  int brightness = 255; 

 HSB_To_RGB(color, brightness);//вызываем функцию преобразования hSB в RGB
 //саму функцию нашел готовую
  
  Wire.beginTransmission(address);
  // Взято "один в один" из даташита :)
  Wire.write('c');           // 'c' == fade to color
  Wire.write(R);             // value for red channel
  Wire.write(B);             // value for blue channel
  Wire.write(G);             // value for green channel
  Wire.endTransmission();    // leave I2C bus

 HSB_To_RGB(255-color, brightness);// а это для второго BlinkM 
Wire.beginTransmission(address1);// для красоты, в обратной последовательности
  Wire.write('c');           //
  Wire.write(R);             //
  Wire.write(B);             //
  Wire.write(G);             //
  Wire.endTransmission();    //

  color++;           // увеличиваем счетчик цвета в HSB
  if (color > 255)    
     color = 0;
     delay(100);
}

void HSB_To_RGB( int hue, int brightness)
{
    unsigned int scaledHue = (hue * 6);
    // segment 0 to 5 around the color wheel
    unsigned int segment = scaledHue / 256;
    // position within the segment 
    unsigned int segmentOffset = scaledHue - (segment * 256); 

    unsigned int complement = 0;
    unsigned int prev = (brightness * ( 255 -  segmentOffset)) / 256;
    unsigned int next = (brightness *  segmentOffset) / 256;
   

    switch(segment ) {
    case 0:      // red
     R = brightness;
         G = next;
     B = complement;
    break;
    case 1:     // yellow
    R = prev;
    G = brightness;
    B = complement;
    break;
    case 2:     // green
    R = complement;
    G = brightness;
    B = next;
    break;
    case 3:    // cyan
    R = complement;
    G = prev;
    B = brightness;
    break;
    case 4:    // blue
    R = next;
    G = complement;
    B = brightness;
    break;
   case 5:      // magenta
    default:
    R = brightness;
    G = complement;
    B = prev;
    break;
    }
}


Резюме. Поставленную задачу, изготовить клон BlinkM своими руками, я выполнил. Результат мне самому понравился, а это ВАЖНО.
Полезность в хозяйстве «умного светодиода»? Это пока открытый вопрос.

Все необходимое для повторения, а также фото и даташиты заботливо сложены в архивчик :) Пользуйтесь на здоровье!

Комментарии (6)

RSS свернуть / развернуть
+
0
Сделал. Работает. Но очень сильно мерцает при изменении цвета. Не сталкивались?
avatar

igorkkk

  • 6 августа 2013, 17:37
+
0
Нет, вроде повезло с этим. И как понять мерцает? Это происходит на всех «основных» цветах или при включении одного из…

Я единственное столкнулся с одним RGB светодиодом (выпаянный из старого видика), он был странный, для него пришлось ставить одинаковые резисторы.
avatar

Ghost_D

  • 7 августа 2013, 05:06
+
0
1. Решение есть. В микросхеме по умолчанию установлен фуз CKDIV8 — его надо сбросить. То есть по умолчанию LOW бит равен 0x62 а нужно установить 0xe2.

2. У Вас в схеме, после слов «Схема «нагуглилась» достаточно быстро:» ошибочка. 5 и 6 ножка перепуталась местами.
avatar

igorkkk

  • 7 августа 2013, 07:32
+
0
А ведь верно! Спасибо, за внимательность. Вот что значит, «взял с интернета». Слава богу, при разводке печатной платы я этой схемой не пользовался… Постараюсь исправить (если это возможно).
avatar

Ghost_D

  • 7 августа 2013, 08:40
+
0
… пришлось мне поломать голову. Во-первых, прошивал я микросхемы не Ардуино, а программатором через стороннюю отладочную плату. Возможно тот способ прошивки, который описан здесь и меняет фуз, а при программировании hex файлов напрямую это, естественно не происходит. Ну и соединял после программирования по Вашей схеме. То есть в итоге дикое мерцание (до ряди в глазах) и ноль реакции на шину :-) Ступор!
Предлагаю Вам внести в статью замечание о фузах. Думаю, через некоторое время статья будет востребована и вот в связи с чем.
Есть такой очень популярный проект — подсветка лестницы, посмотрите на habrahabr. Там реализация ШИМ управления одноцветными диодными лентами. Я себе такую сделал.
Но хочется большего. Управление цветными лентами на основе I2C и сборки дарлингтона будет повеселее. И проводов поменьше. Надо лишь делать плату ATtiny45 + uln2003a на каждую ступеньку.
avatar

igorkkk

  • 7 августа 2013, 09:05
+
0
Огромное СПАСИБО внимательным людям :) Схему поправил… Про фьюзы и другие варианты прошивки пока нету времени разбираться… (Дача и сезон отпусков полностью поглощают все свободное время).
avatar

Ghost_D

  • 9 августа 2013, 17:24

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.