Съдържание:

Подобряване на Arduino LED куб за настроение (прост) (включено видео): 4 стъпки
Подобряване на Arduino LED куб за настроение (прост) (включено видео): 4 стъпки

Видео: Подобряване на Arduino LED куб за настроение (прост) (включено видео): 4 стъпки

Видео: Подобряване на Arduino LED куб за настроение (прост) (включено видео): 4 стъпки
Видео: Забавно програмиране з@ най-малките ученици 2024, Ноември
Anonim
Подобряване на Arduino LED Mood Cube (Прост) (Включено видео)
Подобряване на Arduino LED Mood Cube (Прост) (Включено видео)

След като видях светодиоден проект за малък куб за настроение, създаден от 'Earl, реших да направя подобрена версия на LED Mood Cube. Моята версия ще бъде по -сложна от оригиналната, тъй като ще бъде малко по -голяма от оригиналната, ще има още два цвята в сравнение с оригиналния куб (добавено жълто и бяло), ще има безкрайно количество въртене на цветове и т.н. трябва да бъде добър проект за практикуване на по -нататъшното използване на LED светлини за тези, които разбират концепцията за свързване на LED светлини с проводници.

Стъпка 1: Материали

Материали
Материали
Материали
Материали

Ето някои материали, които ще ви трябват, за да направите този куб на настроението:

  • Платка
  • Arduino - (тук имам Леонардо)
  • Захранване Arduino / USB кабел
  • Платка
  • Джъмперни проводници (много от тях, използвах 29 проводника)
  • Червен светодиод x 2
  • Син светодиод x 2
  • Зелен светодиод x 2
  • Жълт светодиод x 2
  • Бял светодиод x 1
  • 9 резистора
  • Кутия, достатъчно голяма, за да побере дъската (използвах кутия за обувки)
  • Помощен нож
  • Хартия

Стъпка 2: Код

Няколко обяснения за кода, даден тук:

Заслугата на кодовете е в първоначалния източник на моя проект, тъй като редакторът на проекта е създал тези кодове. Просто подобрих някои от тях, като ги направих по -сложни. В някои кодове може да видите // 改 в края. Това означава, че този код се редактира от мен, така че е различен от първоначалния ми източник.

Имам и версия на кода на Arduino Creator.

/* Код за кръстосано избледняване 3 светодиода, червен, зелен и син (RGB) За да създадете избледняване, трябва да направите две неща: 1. Опишете цветовете, които искате да се показват 2. Избройте реда, в който искате да избледняват

ОПИСАНИЕ НА ЦВЕТ:

Цветът е само масив от три процента, 0-100, контролиращ червените, зелените и сините светодиоди

Червеното е червеният светодиод в пълен размер, син и зелен изключен

int red = {100, 0, 0} Dim white са и трите светодиода при 30% int dimWhite = {30, 30, 30} и т.н.

Някои често срещани цветове са предоставени по -долу или направете свои собствени

СПИСАНЕ НА ПОРЪЧКАТА:

В основната част на програмата трябва да посочите реда, в който искате да се появяват цветове, напр. crossFade (червено); crossFade (зелено); crossFade (синьо);

Тези цветове ще се появят в този ред, избледнявайки

един цвят и в следващия

Освен това има 5 незадължителни настройки, които можете да регулирате:

1. Първоначалният цвят е зададен на черен (така че първият цвят избледнява), но можете да зададете началния цвят на всеки друг цвят 2. Вътрешният цикъл работи за 1020 интеграции; променливата „изчакване“задава приблизителната продължителност на едно кръстосване. На теория едно „изчакване“от 10 ms трябва да направи crossFade от ~ 10 секунди. На практика другите функции, които кодът изпълнява, забавят това до ~ 11 секунди на дъската ми. YMMV. 3. Ако „повтаряне“е зададено на 0, програмата ще се върти за неопределено време. ако е зададено на число, то ще циклира този брой пъти, след което ще спре на последния цвят в поредицата. (Задайте „return“на 1 и направете последния цвят черен, ако искате да избледнее в края.) 4. Има опционална променлива „hold“, която поставя програмата за „hold“милисекунди, когато цветът е завършен, но преди да започне следващият цвят. 5. Задайте флага на DEBUG на 1, ако искате изходът за отстраняване на грешки да бъде изпратен на серийния монитор.

Вътрешността на програмата не е сложна, но те са

са малко придирчиви - вътрешната работа е обяснена под основния контур.

Април 2007 г., Клей Ширки

*

/ Изход

int ylwPin = 5; // Жълт светодиод, свързан към цифров извод 5 // 改 int redPin = 6; // Червен светодиод, свързан към цифров пин 6 // 改 int grnPin = 7; // Зелен светодиод, свързан към цифров извод 7 // 改 int bluPin = 8; // Син светодиод, свързан към цифров пин 8 // 改 int whiPin = 9; // Бял светодиод, свързан към цифров извод 9 // 改 int ylwPin2 = 10; // Жълт светодиод, свързан към цифров извод 10 // 改 int redPin2 = 11; // Червен светодиод, свързан към цифров извод 11 // 改 int grnPin2 = 12; // Зелен светодиод, свързан към цифров извод 12 // 改 int bluPin2 = 13; // Син светодиод, свързан към цифров извод 13 // 改

// Цветни масиви

int черно [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // 改 int бяло [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100}; // 改 int red [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // 改 int green [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // 改 int синьо [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 int жълто [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // 改 int лилаво [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // 改 int orange [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // 改 int pink [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // и т.н.

// Задайте начален цвят

int redVal = черно [0]; int grnVal = черно [1]; int bluVal = черно [2]; int ylwVal = черно [3]; // 改 int whiVal = черно [4]; // 改

int чакане = 15; // 10ms вътрешно закъснение crossFade; увеличаване за по -бавни затихвания // 改

int hold = 1; // Незадължително задържане, когато цветът е завършен, преди следващото crossFade // 改 int DEBUG = 1; // DEBUG брояч; ако е зададено на 1, ще запише стойности обратно чрез сериен int loopCount = 60; // Колко често трябва да докладва DEBUG? int повторение = 0; // Колко пъти трябва да се въртим, преди да спрем? (0 за без спиране) // 改 int j = 0; // Цикъл на цикъл за повторение

// Инициализиране на цветови променливи

int prevR = redVal; int prevG = grnVal; int prevB = bluVal; int prevY = ylwVal; int prevW = whiVal; // 改

// Настройка на LED изходите

void setup () {pinMode (redPin, OUTPUT); // задава изводите като изход pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT); pinMode (ylwPin, OUTPUT); // 改 pinMode (whiPin, OUTPUT); // 改 pinMode (grnPin2, OUTPUT); // 改 pinMode (bluPin2, OUTPUT); // 改 pinMode (ylwPin2, OUTPUT); // 改 pinMode (redPin2, OUTPUT); // 改

if (DEBUG) {// Ако искаме да видим стойности за отстраняване на грешки …

Serial.begin (9600); //… настройте серийния изход}}

// Основна програма: изброяване на реда на кръстосани фасове

void loop () {crossFade (червено); crossFade (зелено); crossFade (синьо); crossFade (жълто); crossFade (бяло); crossFade (розово); crossFade (лилаво); crossFade (оранжево);

if (repeat) {// Обвързваме ли краен брой пъти?

j += 1; if (j> = repeat) {// Още ли сме там? изход (j); // Ако е така, спрете. }}}

/* ПО -ТОЗИ РЕД е МАТЕМАТИКАТА - НЕ ТРЯБВА ДА ИЗМЕНЯТЕ ТОВА ЗА ОСНОВНИТЕ

Програмата работи така:

Представете си кръстосано избледняване, което премества червения светодиод от 0-10, зеления от 0-5 и синия от 10 на 7, на десет стъпки. Бихме искали да преброим 10 -те стъпки и да увеличим или намалим стойностите на цветовете на равномерно стъпаловидни стъпки. Представете си, че + показва повишаване на стойност с 1, а а - равно на намаляване. Нашето 10 стъпково избледняване ще изглежда така:

1 2 3 4 5 6 7 8 9 10

R + + + + + + + + + + G + + + + + B - - -

Червеното се издига от 0 до 10 на десет стъпки, зеленото от

0-5 на 5 стъпки, а синьото пада от 10 на 7 на три стъпки.

В реалната програма процентите на цветовете се преобразуват в

0-255 стойности и има 1020 стъпки (255*4).

За да разберете колко голяма стъпка трябва да има между една нагоре или

надолу отметка на една от стойностите на светодиода, наричаме CalcuStep (), който изчислява абсолютната разлика между началните и крайните стойности и след това разделя тази празнина на 1020, за да определи размера на стъпката между корекциите в стойността. */

int CalculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Каква е общата пропаст? if (стъпка) {// Ако не е нула, стъпка = 1020 / стъпка; // разделяне на 1020} стъпка за връщане; }

/* Следващата функция е CalcuVal. Когато стойността на цикъла, i, достига размера на стъпката, подходящ за един от цветовете, увеличава или намалява стойността на този цвят с 1. (R, G и B се изчисляват отделно.) */

int CalcuVal (int step, int val, int i) {

if ((step) && i % step == 0) {// Ако стъпката не е нула и е време да промените стойност, if (стъпка> 0) {// увеличаване на стойността, ако стъпката е положителна … val += 1; } else if (стъпка 255) {val = 255; } else if (val <0) {val = 0; } обратна клапа; }

/* crossFade () преобразува процентните цветове в a

0-255 диапазон, след това цикли 1020 пъти, като се проверява дали стойността трябва да се актуализира всеки път, след което се записват стойностите на цвета към правилните щифтове. */

void crossFade (int color ) {// 改

// Конвертиране на 0-255 int R = (цвят [0] * 255) / 100; int G = (цвят [1] * 255) / 100; int B = (цвят [2] * 255) / 100; int Y = (цвят [3] * 255) / 100; // 改 int W = (цвят [4] * 255) /100; // 改

int stepR = изчисляване на стъпка (prevR, R);

int stepG = изчисляване на стъпка (prevG, G); int stepB = изчисляване на стъпка (prevB, B); int стъпка Y = изчисляване на стъпка (преди Y, Y); // 改 int stepW = изчисляване на стъпка (prevW, W); // 改

for (int i = 0; i <= 1020; i ++) {redVal = изчисляваVal (stepR, redVal, i); grnVal = изчисляваVal (stepG, grnVal, i); bluVal = изчисляваVal (stepB, bluVal, i); ylwVal = изчисляваVal (stepY, ylwVal, i); // 改 whiVal = изчисляваVal (stepW, whiVal, i); // 改

analogWrite (redPin, redVal); // Записване на текущи стойности в LED изводи

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal); analogWrite (ylwPin, ylwVal); // 改 analogWrite (whiPin, whiVal); // 改 analogWrite (grnPin2, grnVal); // 改 analogWrite (bluPin2, bluVal); // 改 analogWrite (ylwPin2, ylwVal); // 改 analogWrite (redPin2, redVal); // 改

забавяне (изчакване); // Пауза за „чакане“милисекунди, преди да се възобнови цикъла

if (DEBUG) {// Ако искаме сериен изход, отпечатайте го в

if (i == 0 или i % loopCount == 0) {// началото и всеки loopCount пъти Serial.print ("Loop/RGBYW: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); Serial.print (" /"); Serial.println (ylwVal); // 改 Serial.print (" /"); // 改 Serial.println (whiVal); // 改 Serial.print (" /"); // 改} DEBUG += 1; }} // Актуализиране на текущите стойности за следващия цикъл prevR = redVal; prevG = grnVal; prevB = bluVal; prevY = ylwVal; // 改 prevW = whiVal; // 改 забавяне (задържане); // Пауза за незадължителни милисекунди „изчакване“преди възобновяване на цикъла}

Стъпка 3: Настройте

Настройвам
Настройвам
Настройвам
Настройвам
Настройвам
Настройвам
  1. Вземи макета.
  2. Демо на свързващите проводници, така че LED лампата да свети:

    1. Поставете светодиода на дъската. Поставете по -дългия край вляво, а по -късия вдясно.
    2. Поставете единия край на джъмперния проводник на място, което е на един ред с по -дългия край на светодиода. Поставете другия край върху секцията Digital PWM. Кодът посочва жълтите светодиоди да бъдат свързани към 10 и 5, червените към 6 и 11, сините към 8 и 13, зелените към 7 и 12 и накрая белият светодиод към 9.
    3. Поставете единия край на резистор в един ред с по -късия край на светодиода. Поставете другия край някъде близо.
    4. Поставете край на друг джъмпер проводник със същия ред с края на резистора, който не е в същия ред с по -късия край на светодиода. Поставете другия край на проводника върху реда с отрицателен заряд.
    5. Поставете край на още един джъмпер проводник върху реда с отрицателен заряд и поставете другия му край върху GND.
  3. Повторете Стъпка 2 8 пъти, тъй като искате 9 светодиода да светят
  4. Поставете дъската в кутията. Няколко напомняния тук:

    1. Използвах захранване. Създайте малка дупка за проводниците си, като използвате помощен нож, за да преминете през кутията и да се свържете към дъската.
    2. Уверете се, че кутията е една отворена страна. Кутията за обувки вече има една отворена страна. Ако кутията е напълно затворена, отрежете едната страна на кутията, за да направите отворено пространство.
    3. Покрийте страната с нищо с хартия. Това е за LED светлините да светят през хартия.

Препоръчано: