Агуулгын хүснэгт:

Arduino LED Mood Cube сайжруулах (Энгийн) (Видео оруулсан): 4 алхам
Arduino LED Mood Cube сайжруулах (Энгийн) (Видео оруулсан): 4 алхам

Видео: Arduino LED Mood Cube сайжруулах (Энгийн) (Видео оруулсан): 4 алхам

Видео: Arduino LED Mood Cube сайжруулах (Энгийн) (Видео оруулсан): 4 алхам
Видео: Make your own LED Mood Lamp | Arduino + WS2812 2024, Долдугаар сарын
Anonim
Arduino LED Mood Cube -ийг сайжруулах (Энгийн) (Видео оруулсан)
Arduino LED Mood Cube -ийг сайжруулах (Энгийн) (Видео оруулсан)

'Earl -ийн бүтээсэн LED жижиг сэтгэл санааны куб төслийг хараад LED Mood Cube -ийн сайжруулсан хувилбарыг хийхээр шийдлээ. Миний хувилбар анхны хувилбараас арай илүү том байх болно, анхны кубтай харьцуулахад хоёр өөр өнгөтэй байх болно (шар, цагаан нэмсэн), өнгөний хязгааргүй эргэлт гэх мэт. LED гэрлийг утсаар холбох тухай ойлголттой хүмүүст зориулж LED гэрлийг цаашид ашиглах дадлага хийх сайн төсөл байх ёстой.

Алхам 1: Материал

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

Энэхүү Mood Cube хийхэд танд хэрэгтэй хэдэн материал байна:

  • Талхны самбар
  • Ардуино - (энд Леонардо байна)
  • Arduino цахилгаан хангамж / USB кабель
  • Талхны самбар
  • Холбогч утас (тэдгээрийн олон нь, би 29 утас ашигладаг байсан)
  • Улаан LED x 2
  • Цэнхэр LED x 2
  • Ногоон LED x 2
  • Шар LED x 2
  • Цагаан LED х 1
  • 9 резистор
  • Талхны тавцанд багтахаар том хайрцаг (би гутлын хайрцаг ашигласан)
  • Хэрэглээний хутга
  • Цаас

Алхам 2: Код

Энд өгөгдсөн кодын зарим тайлбар:

Төслийн редактор эдгээр кодыг бүтээсэн тул кодын кредит нь миний төслийн анхны эх сурвалж руу ордог. Би зүгээр л заримыг нь илүү төвөгтэй болгож сайжруулсан. Зарим кодын хувьд та эцэст нь // 改 гэж харж болно. Энэ нь энэ кодыг би засварласан гэсэн үг бөгөөд энэ нь миний анхны эх сурвалжаас өөр юм.

Надад бас Arduino Creator дээрх кодын хувилбар бий.

/* Улаан, ногоон, цэнхэр өнгийн 3 LED хөндлөн бүдгэрэх код (RGB) Бүдгэрэхийн тулд та дараах хоёр зүйлийг хийх хэрэгтэй: 1. Харуулахыг хүссэн өнгөө тайлбарлана уу 2. Будуулахыг хүсч буй дарааллаа жагсаана уу.

ӨНГИЙГ ТОДОРХОЙЛОХ:

Өнгө нь улаан, ногоон, цэнхэр өнгийн LED-ийг хянадаг 0-100 гэсэн гурван хувийн массив юм

Улаан бол улаан LED бүрэн, цэнхэр, ногоон унтраалттай

int red = {100, 0, 0} Бүдэг цагаан бол 30% int dimWhite = {30, 30, 30} гэх мэт гурван LED юм.

Зарим нийтлэг өнгийг доор үзүүлэв, эсвэл өөрөө хий

ЗАХИАЛГА ЖАГСААХ:

Хөтөлбөрийн үндсэн хэсэгт та өнгө оруулахыг хүсч буй дарааллаа жагсаах хэрэгтэй. crossFade (улаан); crossFade (ногоон); crossFade (цэнхэр);

Эдгээр өнгөнүүд нь дарааллаар гарч ирэн алга болно

нэг өнгө, нөгөө рүү

Нэмж дурдахад 5 нэмэлт тохиргоог хийх боломжтой.

1. Анхны өнгийг хар гэж тохируулсан (тиймээс эхний өнгө нь бүдгэрнэ), гэхдээ та анхны өнгийг өөр өнгө болгож тохируулж болно 2. Дотоод гогцоо нь 1020 интеракцид ажилладаг; 'хүлээх' хувьсагч нь нэг хөндлөн огтлолын ойролцоо үргэлжлэх хугацааг тогтоодог. Онолын хувьд 10 мс -ийн "хүлээх" нь ~ 10 секундын хөндлөн огтлол хийх ёстой. Практик дээр кодын гүйцэтгэдэг бусад функцууд үүнийг самбар дээр ~ 11 секунд хүртэл удаашруулдаг. YMMV. 3. Хэрэв 'давталт' -ыг 0 гэж тохируулсан бол програм тодорхойгүй хугацаагаар эргэх болно. Хэрэв энэ нь тоонд тохируулагдсан бол тэр хэдэн удаа давтаж, дарааллын сүүлчийн өнгө дээр зогсох болно. ('Буцах' гэж 1 болгож, сүүлд нь бүдгэрүүлэхийг хүсвэл сүүлчийн өнгийг хар болго.) 4. Нэмэлт 'hold' хувьсагч байдаг бөгөөд энэ нь өнгийг өнгөлөх үед 'hold' миллисекундээр дамжуулдаг. дууссан, гэхдээ дараагийн өнгө эхлэхээс өмнө. 5. Хэрэв та дибаг хийх гаралтыг цуваа дэлгэц рүү илгээхийг хүсвэл DEBUG тугийг 1 болгож тохируулна уу.

Хөтөлбөрийн дотоод хэсэг нь тийм ч төвөгтэй биш боловч тэд юм

Бага зэрэг уйтгартай байдаг - дотоод ажлыг үндсэн хэлхээний доор тайлбарласан болно.

2007 оны 4 -р сар, Клей Ширки

*

/ Гаралт

int ylwPin = 5; // Шар LED, дижитал зүү 5 -т холбогдсон // 改 int redPin = 6; // Улаан LED, дижитал зүү 6 -д холбогдсон // 改 int grnPin = 7; // Ногоон LED, дижитал зүү 7 -т холбогдсон // 改 int bluPin = 8; // Цэнхэр LED, дижитал зүү 8 -т холбогдсон // 改 int whiPin = 9; // Цагаан LED, дижитал зүү 9 -т холбогдсон // 改 int ylwPin2 = 10; // Шар LED, дижитал зүү 10 -д холбогдсон // 改 int redPin2 = 11; // Улаан LED, дижитал зүү 11 -т холбогдсон // 改 int grnPin2 = 12; // Ногоон LED, дижитал зүү 12 -т холбогдсон // 改 int bluPin2 = 13; // Цэнхэр LED, дижитал зүү 13 -т холбогдсон // 改

// Өнгөний массив

int хар [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // 改 int цагаан [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100}; // 改 int улаан [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // 改 int ногоон [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // 改 int blue [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 int шар [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // purple int ягаан [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // 改 int улбар шар [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 wait = 15; // 10ms дотоод crossFade саатал; аажмаар бүдгэрэхийн тулд нэмэгдүүлэх // 改

int hold = 1; // Дараагийн crossFade хийхээс өмнө өнгө дууссаны дараа заавал барих // 改 int DEBUG = 1; // DEBUG тоолуур; хэрэв 1 гэж тохируулсан бол утгуудыг serial 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) {// Хэрэв бид дибаг хийх утгыг харахыг хүсч байвал …

Цуваа эхлэх (9600); // … цуврал гаралтыг тохируулах}}

// Үндсэн програм: хөндлөн огтлолын дарааллыг жагсаана уу

void loop () {crossFade (улаан); crossFade (ногоон); crossFade (цэнхэр); crossFade (шар); crossFade (цагаан); crossFade (ягаан); crossFade (ягаан); crossFade (улбар шар);

if (давтах) {// Бид хязгаарлагдмал тооны давталт хийдэг үү?

j += 1; if (j> = давтах) {// Бид одоо болтол байна уу? гарах (j); // Тийм бол боль. }}}

/* ЭНЭ МЭРИЙН ДООР ДЭЭР МАТЕМ - ЭНДИЙН ҮНДСЭНД ӨӨРЧЛӨХ ХЭРЭГГҮЙ.

Хөтөлбөр дараах байдлаар ажилладаг.

Улаан LED-ийг 0-10-аас, ногооныг 0-5-аас, цэнхэрийг 10-аас 7 хүртэл 10 алхамаар хөдөлгөдөг хөндлөн огтлолыг төсөөлөөд үз дээ. Бид 10 алхамыг тоолж, өнгөний утгыг жигд алхамаар нэмэгдүүлэхийг хүсч байна. + Нь утга 1 -ээр өсөхийг илэрхийлдэг гэж төсөөлөөд үз дээ. Бидний 10 алхамаар бүдгэрэх нь дараах байдлаар харагдах болно.

1 2 3 4 5 6 7 8 9 10

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

Улаан нь арван алхамаар 0 -ээс 10 хүртэл өсдөг бол ногоон нь

5 алхамаар 0-5, цэнхэр нь гурван алхамаар 10-аас 7 хүртэл буурдаг.

Бодит програмд өнгөний хувийг хөрвүүлдэг

0-255 утга, 1020 алхам (255*4) байдаг.

Нэг эсвэл дээш хоёрын хооронд хичнээн том алхам байх ёстойг олж мэдэхийн тулд

LED утгуудын аль нэгийг нь сонгоод эхлэх ба дуусах утгуудын хоорондох үнэмлэхүй зөрүүг тооцоолох calcStep () гэж нэрлэдэг бөгөөд дараа нь утгыг тохируулах хоорондох алхамын хэмжээг тодорхойлохын тулд энэ цоорхойг 1020 болгон хуваадаг. */

int тооцоолох Алхам (int prevValue, int endValue) {

int step = endValue - prevValue; // Ерөнхий ялгаа нь юу вэ? if (step) {// Хэрэв энэ нь тэг биш бол step = 1020 / step; // буцах алхамыг 1020 -д хуваах; }

/* Дараагийн функц нь calcVal юм. Давталтын утга байх үед би, өнгөний аль нэгэнд тохирох алхамын хэмжээнд хүрвэл тухайн өнгөний утгыг 1 -ээр нэмэгдүүлж эсвэл бууруулна. (R, G, B тус бүрийг тус тусад нь тооцоолно.) */

int calcVal (int алхам, int val, int i) {

if ((step) && i % step == 0) {// Хэрэв алхам тэг биш бөгөөд утгыг өөрчлөх цаг бол

if (алхам> 0) {// алхам эерэг байвал утгыг нэмэгдүүлнэ… val += 1; } if if (алхам 255) {val = 255; } if if (val <0) {val = 0; } буцах үнэ; }

/* crossFade () нь өнгөний хувийг а болгон хөрвүүлдэг

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 = тооцоолохАлхам (өмнөхR, R);

int stepG = тооцоолох алхам (prevG, G); int stepB = тооцоолох алхам (prevB, B); int stepY = тооцоолохАлхам (өмнөхY, Y); // step int stepW = тооцоолох алхам (prevW, W); // 改

for (int i = 0; i <= 1020; i ++) {redVal = calcVal (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: #"); Цуваа.хэвлэх (i); Serial.print ("|"); Цуваа.хэвлэх (redVal); 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; // 改 өмнөхW = whiVal; // 改 хойшлуулах (барих); // Циклийг үргэлжлүүлэхийн өмнө заавал 'хүлээх' миллисекунд түр зогсооно уу}

Алхам 3: Тохируулах

Тохируулах
Тохируулах
Тохируулах
Тохируулах
Тохируулах
Тохируулах
  1. Талхны самбар ав.
  2. LED гэрлийг гэрэлтүүлэхийн тулд утсыг холбох демо:

    1. LED -ийг талхны тавцан дээр тавь. Урт үзүүрийг зүүн талд, богино үзүүрийг баруун талд байрлуул.
    2. Холбогч утасны нэг үзүүрийг LED -ийн урт төгсгөлтэй ижил эгнээнд байрлуулна. Нөгөө үзүүрийг дижитал ХОУХ -ны хэсэгт байрлуулна. Код нь шар LED -ийг 10 ба 5 -т, улаан өнгийн гэрлийг 6 ба 11 -т, цэнхэрийг 8 ба 13 -т, ногооныг 7 ба 12 -т, эцэст нь цагаан LED -ийг 9 -д холбохыг зааж өгсөн болно.
    3. Резисторын нэг үзүүрийг LED -ийн богино үзүүртэй ижил эгнээнд байрлуулна. Нөгөө үзүүрийг ойрхон газар байрлуул.
    4. LED -ийн богино үзүүртэй нэг эгнээнд ороогүй резисторын төгсгөлтэй ижил эгнээтэй өөр холбогч утасны төгсгөлийг байрлуул. Утасны нөгөө үзүүрийг сөрөг цэнэгийн эгнээнд байрлуулна.
    5. Сөрөг цэнэгийн эгнээнд өөр нэг холбогч утасны төгсгөлийг байрлуулж, нөгөө үзүүрийг GND дээр байрлуул.
  3. 9 LED гэрэлтүүлэхийг хүсч байгаа бол 2 -р алхамыг 8 удаа давт
  4. Талхны хавтанг хайрцаг дотор байрлуул. Энд хэдэн сануулга байна:

    1. Би цахилгаан хангамж ашигласан. Ажлын хутга ашиглан утсандаа жижиг нүх үүсгээд хайрцгаар дамжуулж талхны самбартай холбоно уу.
    2. Хайрцгийг нэг тал нь нээлттэй байгаа эсэхийг шалгаарай. Гутлын хайрцаг аль хэдийн нээлттэй талтай байдаг. Хэрэв хайрцаг бүрэн хаагдсан бол хайрцагны нэг талыг хайчилж авснаар зай гаргах боломжтой болно.
    3. Хажуу талыг нь цаасаар хучихгүй. Энэ бол LED гэрлийг цаасан дээр гэрэлтүүлэх явдал юм.

Зөвлөмж болгож буй: