Mundarija:

Arduino LED kayfiyat kubini takomillashtirish (oddiy) (video kiritilgan): 4 qadam
Arduino LED kayfiyat kubini takomillashtirish (oddiy) (video kiritilgan): 4 qadam

Video: Arduino LED kayfiyat kubini takomillashtirish (oddiy) (video kiritilgan): 4 qadam

Video: Arduino LED kayfiyat kubini takomillashtirish (oddiy) (video kiritilgan): 4 qadam
Video: Антикризисная замена Arduino - LGT8F328P! Дефицит полупроводников 2024, Noyabr
Anonim
Arduino LED kayfiyat kubini yaxshilash (oddiy) (video kiritilgan)
Arduino LED kayfiyat kubini yaxshilash (oddiy) (video kiritilgan)

"Earl" tomonidan yaratilgan LED kichkina kayfiyatli kub loyihasini ko'rib, men LED Mood Cube -ning takomillashtirilgan versiyasini yaratishga qaror qildim. Mening versiyam asl nusxadan ko'ra murakkabroq bo'ladi, chunki u asl nusxadan biroz kattaroq bo'ladi, asl kubga qaraganda ikkita rangga ega bo'ladi (sariq va oq qo'shilgan), ranglarning cheksiz ko'p aylanishi va boshqalar. LED chiroqlarini simlar bilan ulash kontseptsiyasini tushunganlar uchun LED chiroqlarini keyingi ishlatish bo'yicha yaxshi loyiha bo'lishi kerak.

1 -qadam: materiallar

Materiallar
Materiallar
Materiallar
Materiallar

Mood Cube -ni yaratish uchun sizga ba'zi materiallar kerak bo'ladi.

  • Non paneli
  • Arduino - (menda Leonardo bor)
  • Arduino quvvat manbai / USB kabeli
  • Non paneli
  • Jumper simlari (ularning ko'pchiligi, men 29 ta sim ishlatganman)
  • Qizil LED x 2
  • Moviy LED x 2
  • Yashil LED x 2
  • Sariq LED x 2
  • Oq LED x 1
  • 9 ta rezistor
  • Non taxtasiga mos keladigan katta quti (men poyabzal qutisini ishlatardim)
  • Foydali pichoq
  • Qog'oz

2 -qadam: kod

Bu erda berilgan kod uchun ba'zi tushuntirishlar:

Loyihaning muharriri bu kodlarni yaratgani uchun kodlarning krediti mening loyihamning asl manbasiga to'g'ri keladi. Men ulardan ba'zilarini murakkablashtirgan holda yaxshiladim. Ba'zi kodlarda siz oxirida // see ni ko'rishingiz mumkin. Bu shuni anglatadiki, bu kod men tomonidan tahrir qilingan, shuning uchun u asl manbadan farq qiladi.

Menda Arduino Creator -da kodning bir versiyasi bor.

/* Qizil, yashil va ko'k rangdagi 3 ta LEDning o'zaro o'tishi kodi (RGB) Fades yaratish uchun siz ikkita narsani qilishingiz kerak: 1. Ko'rsatmoqchi bo'lgan ranglarni ta'riflang 2. Ularni o'chirishni xohlagan tartibni sanab bering.

Rang tavsifi:

Rang-bu qizil, yashil va ko'k LEDlarni boshqaruvchi 0-100 gacha bo'lgan uch foizli yig'indidir

Qizil - qizil LED to'liq, ko'k va yashil o'chirilgan

int red = {100, 0, 0} Dim oq - bu uchta LED, 30% int dimWhite = {30, 30, 30} va boshqalar.

Ba'zi umumiy ranglar quyida keltirilgan yoki o'zingiz qilishingiz mumkin

Buyurtmani ro'yxatga olish:

Dasturning asosiy qismida siz ranglar ko'rinadigan tartibni ro'yxatlashingiz kerak, masalan. crossFade (qizil); crossFade (yashil); crossFade (ko'k);

Bu ranglar shu tartibda paydo bo'ladi, o'chadi

bitta rang va ikkinchisiga

Bundan tashqari, siz sozlashingiz mumkin bo'lgan 5 ta ixtiyoriy sozlamalar mavjud:

1. Boshlang'ich rang qora rangga o'rnatiladi (shuning uchun birinchi rang o'chadi), lekin siz boshlang'ich rangni boshqa har qanday rangga o'rnatishingiz mumkin. "kutish" o'zgaruvchisi bitta o'zaro faoliyat yurishning taxminiy davomiyligini belgilaydi. Nazariy jihatdan, 10 milodiy "kutish" ~ 10 soniya oralig'ida o'tishi kerak. Amalda, kod boshqa funktsiyalarni bajaradi, bu mening taxtamda ~ 11 sekundgacha sekinlashadi. YMMV. 3. Agar "takrorlash" 0 ga o'rnatilgan bo'lsa, dastur noma'lum muddatga aylanadi. agar u raqamga o'rnatilgan bo'lsa, u bu sonni bir necha marta aylantiradi, keyin ketma -ketlikdagi oxirgi rangda to'xtaydi. ("Qaytish" ni 1 ga o'rnating va agar oxirigacha so'nib ketishini xohlasangiz, oxirgi rangni qora rangga aylantiring.) 4. Ixtiyoriy "ushlab turish" o'zgaruvchisi mavjud, u rang ushlab turganda millisekundlarni ushlab turishga yordam beradi. to'liq, lekin keyingi rang boshlanishidan oldin. 5. Agar siz disk raskadrovka chiqishini ketma -ket monitorga yuborishni xohlasangiz, DEBUG bayrog'ini 1 ga o'rnating.

Dasturning ichki qismi murakkab emas, lekin ular

biroz chalkashlik bor - ichki ish asosiy halqa ostida tushuntirilgan.

2007 yil aprel, Kley Shirkiy

*

/ Chiqish

int ylwPin = 5; // Sariq LED, raqamli pin 5 ga ulangan // 改 int redPin = 6; // Qizil LED, raqamli pin 6 ga ulangan // 改 int grnPin = 7; // Yashil LED, raqamli pin 7 ga ulangan // 改 int bluPin = 8; // Moviy LED, raqamli pin 8 ga ulangan // 改 int whiPin = 9; // Oq LED, raqamli pin 9 ga ulangan // 改 int ylwPin2 = 10; // sariq LED, raqamli pin 10 ga ulangan // 改 int redPin2 = 11; // Qizil LED, raqamli pin 11 ga ulangan // 改 int grnPin2 = 12; // Yashil LED, raqamli pin 12 ga ulangan // 改 int bluPin2 = 13; // Moviy LED, raqamli pin 13 ga ulangan // 改

// Rangli massivlar

int qora [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // 改 int oq [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100}; // qizil int [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // yashil int [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // 改 int ko'k [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 int sariq [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // 改 int binafsha [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // 改 int apelsin [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // 改 int pushti [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // va boshqalar.

// Boshlang'ich rangni o'rnating

int redVal = qora [0]; int grnVal = qora [1]; int bluVal = qora [2]; int ylwVal = qora [3]; // 改 int whiVal = qora [4]; //

int kutish = 15; // 10 ms ichki crossFade kechikishi; sekinroq pasayishi uchun o'sish // 改

int hold = 1; // Rang tugaganda, keyingi crossFade oldidan ixtiyoriy ushlab turish // 改 int DEBUG = 1; // DEBUG hisoblagichi; agar 1 ga o'rnatilgan bo'lsa, qiymatlarni ketma -ket int yozadi loopCount = 60; // DEBUG qancha tez -tez xabar berishi kerak? int takrorlash = 0; // To'xtashdan oldin necha marta aylanishimiz kerak? (To'xtovsiz 0) // 改 int j = 0; // Takrorlash uchun taymer

// Rang o'zgaruvchilarini ishga tushiring

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

// LED chiqishlarini sozlash

void setup () {pinMode (redPin, OUTPUT); // pinlarni chiqish pinMode (grnPin, OUTPUT) sifatida belgilaydi; pinMode (bluPin, OUTPUT); pinMode (ylwPin, OUTPUT); // 改 pinMode (whiPin, OUTPUT); // 改 pinMode (grnPin2, OUTPUT); // 改 pinMode (bluPin2, OUTPUT); // 改 pinMode (ylwPin2, OUTPUT); // 改 pinMode (redPin2, OUTPUT); //

if (DEBUG) {// Agar biz disk raskadrovka uchun qiymatlarni ko'rishni istasak …

Serial.begin (9600); // … ketma -ket chiqishini o'rnatish}}

// Asosiy dastur: o'zaro faoliyat yurishlar tartibini sanab bering

void loop () {crossFade (qizil); crossFade (yashil); crossFade (ko'k); crossFade (sariq); crossFade (oq); crossFade (pushti); crossFade (binafsha rang); crossFade (to'q sariq);

if (takrorlash) {// Biz sonli marta aylanamizmi?

j += 1; if (j> = takrorlash) {// Biz hali bormikan? chiqish (j); // Agar shunday bo'lsa, to'xtating. }}}

/* Quyidagi satr matematika - BUNI ASOSIYALAR UCHUN O'zgartirishingiz shart emas.

Dastur shunday ishlaydi:

O'n qadamda qizil LEDni 0-10 dan, yashilni 0-5 dan, ko'kni 10 dan 7 gacha siljitadigan o'zaro faoliyat chiziqni tasavvur qiling. Biz 10 qadamni sanashni va rang qiymatlarini teng bosqichli qadamlarda oshirishni yoki kamaytirishni xohlaymiz. Tasavvur qiling + Bizning 10 qadamlik pasayishimiz quyidagicha bo'ladi:

1 2 3 4 5 6 7 8 9 10

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

Qizil o'n qadamda 0 dan 10 gacha ko'tariladi, yashil - dan

0-5 5 qadamda, ko'k esa uch bosqichda 10 dan 7 gacha tushadi.

Haqiqiy dasturda rang foizlari aylantiriladi

0-255 qiymatlari va 1020 qadam bor (255*4).

Bir-birining o'rtasida qanchalik katta qadam bo'lishi kerakligini aniqlash uchun

LED qiymatlaridan birini belgilang, biz calcStep () deb ataymiz, u boshlang'ich va oxirgi qiymatlar orasidagi mutlaq bo'shliqni hisoblab chiqadi va keyin qiymatni sozlash orasidagi qadam hajmini aniqlash uchun bu bo'shliqni 1020 ga bo'linadi. */

int hisoblashStep (int prevValue, int endValue) {

int qadam = endValue - prevValue; // Umumiy farq nima? if (qadam) {// Agar u nolga teng bo'lmasa, qadam = 1020 / qadam; // 1020 ga bo'linish} qaytarish bosqichi; }

/* Keyingi funksiya calcVal. Qachon loop qiymati, i, Ranglardan biriga mos keladigan qadam o'lchamiga etadi, bu rangning qiymatini 1 ga oshiradi yoki kamaytiradi (R, G va B har biri alohida hisoblanadi.) */

int hisoblashVal (int qadam, int val, int i) {

if ((qadam) && i % step == 0) {// Agar qadam nolga teng bo'lmasa va uning qiymatini o'zgartirish vaqti, if (qadam> 0) {// qadam ijobiy bo'lsa, qiymatni oshiring … val += 1; } if if (255 -qadam) {val = 255; } if if (val <0) {val = 0; } qaytish val; }

/* crossFade () ranglarning foizini a ga o'zgartiradi

0-255 oralig'ida, keyin 1020 marta aylanib, har safar qiymatni yangilash kerakligini tekshiring, so'ngra rang qiymatlarini to'g'ri pimlarga yozing. */

void crossFade (int color ) {// 改

// 0-255 ga aylantirish int R = (rang [0] * 255) / 100; int G = (rang [1] * 255) / 100; int B = (rang [2] * 255) / 100; int Y = (rang [3] * 255) / 100; // 改 int W = (rang [4] * 255) /100; //

int stepR = hisoblashStep (oldingiR, R);

int stepG = hisoblashStep (oldingiG, G); int stepB = hisoblashStep (oldingi B, B); int stepY = hisoblashStep (oldingi Y, Y); // 改 int stepW = hisoblashStep (oldingi W, V); //

uchun (int i = 0; i <= 1020; i ++) {redVal = calcVal (stepR, redVal, i); grnVal = hisoblashVal (stepG, grnVal, i); bluVal = hisoblashVal (stepB, bluVal, i); ylwVal = hisoblashVal (stepY, ylwVal, i); // 改 whiVal = hisoblashVal (stepW, whiVal, i); //

analogWrite (redPin, redVal); // LED pinlariga joriy qiymatlarni yozing

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

kechiktirish (kutish); // Davrni davom ettirishdan oldin "kutish" millisekundiga pauza qiling

if (DEBUG) {// Agar biz ketma -ket chiqishni xohlasak, uni chop eting

if (i == 0 yoki i % loopCount == 0) {// boshlanishi va har bir loopCount marta Serial.print ("Loop/RGBYW: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Ketma -ket chop etish (grnVal); Serial.print (" /"); Serial.println (bluVal); Serial.print (" /"); Serial.println (ylwVal); // 改 Serial.print (" /"); // 改 Serial.println (whiVal); // 改 Serial.print (" /"); // 改} DEBUG += 1; }} // Keyingi tsikl uchun joriy qiymatlarni yangilang prevR = redVal; prevG = grnVal; prevB = bluVal; prevY = ylwVal; // 改 oldingi W = katta qiymat; // 改 kechiktirish (ushlab turish); // Davrni davom ettirishdan oldin ixtiyoriy "kutish" millisekundiga pauza qiling}

3 -qadam: sozlash

Sozlash
Sozlash
Sozlash
Sozlash
Sozlash
Sozlash
  1. Non taxtasini oling.
  2. LED chirog'i yonishi uchun simlarni ulash demosi:

    1. LEDni non paneliga qo'ying. Uzunroq uchini chapga, qisqa uchini o'ngga qo'ying.
    2. O'tish simining bir uchini LED uzunroq uchi bilan bir qatorda joylashtiring. Boshqa uchini Raqamli PWM bo'limiga joylashtiring. Kodda svetodiodli LEDlar 10 va 5 ga, qizillari 6 va 11 ga, ko'klari 8 va 13 ga, yashillari 7 va 12 ga, nihoyat oq LEDlar 9 ga ulanishi ko'rsatilgan.
    3. Rezistorning bir uchini LEDning qisqa uchi bilan bir qatorga qo'ying. Ikkinchi uchini yaqinroq joyga qo'ying.
    4. LEDning qisqa uchi bilan bir qatorda bo'lmagan rezistorning uchi bilan bir qatorda boshqa o'tish simining uchini joylashtiring. Simning ikkinchi uchini manfiy zaryad qatoriga joylashtiring.
    5. Yana bir o'tish simining uchini manfiy zaryad qatoriga qo'ying va ikkinchi uchini GND ga qo'ying.
  3. 2 -qadamni 8 marta takrorlang, chunki siz 9 ta LED yonishini xohlaysiz
  4. Non panelini qutiga joylashtiring. Bu erda bir nechta eslatmalar:

    1. Men elektr ta'minotidan foydalandim. Ishchi pichoq yordamida simlar uchun kichik teshik yarating, u qutidan o'tib, non paneliga ulanadi.
    2. Qutining bir tomoni ochiq ekanligiga ishonch hosil qiling. Poyafzal qutisining allaqachon ochilgan bir tomoni bor. Agar quti to'liq yopilgan bo'lsa, bo'sh joy yaratish uchun qutining bir tomonini kesib tashlang.
    3. Yonini hech narsa bilan qog'oz bilan yoping. Bu LED yoritgichlar qog'ozdan porlashi uchun.

Tavsiya: