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

LED спираль мод: 4 алхам (зурагтай)
LED спираль мод: 4 алхам (зурагтай)

Видео: LED спираль мод: 4 алхам (зурагтай)

Видео: LED спираль мод: 4 алхам (зурагтай)
Видео: Камера ANBIUX ДВУГЛАЗКА УДИВИЛА после ОБНОВЛЕНИЯ!!! 2024, Арваннэгдүгээр
Anonim
LED спираль мод
LED спираль мод
LED спираль мод
LED спираль мод
LED спираль мод
LED спираль мод

Би бүх төрлийн LED туузанд дуртай. Би тэдэнтэй хамт солонгын сайхан гэрэл хийсэн. Хаягддаггүй хүмүүс хүртэл ашигтай байдаг. Би захын шүхрийг гадаа гэрэлтүүлж, хавирган дээр нь хавчуулав. Миний спираль мод үлээхэд би уртаараа туузыг боож боохоор шийдсэн.

Алхам 1: Хянагч

Хянагч
Хянагч
Хянагч
Хянагч
Хянагч
Хянагч

Би хаяггүй RGB LED ашиглахаар шийдсэн. Энэ нь би програмчлагдсан эффект өгч чадна гэсэн үг боловч бүх ледүүд нэгэн зэрэг өнгө өөрчлөгддөг. Энэ нь бас хянагч хэрэгтэй болно гэсэн үг юм. Би arduino uno ашиглаж, анхны туршилтыг RGB бамбай ашиглан хийж болох байсан ч эцсийн эцэст нүцгэн Atmega328 чиптэй дан самбар ашигласан. Зорилтот програмистыг сольж, чипийг шууд програмчлах шаардлагатай байв.

Надад бусад чийдэнгийн төслүүдээс үлдсэн олон самбар байсан. Миний оронд шүхэр дээрээ хийсэн шиг хямдхан урьдчилсан програмчилсан хянагчийг чөлөөтэй ашиглаарай.

Би модны суурь болгон удаан хөндлөн нэвтрүүлгийн демог ашигласан.

/** Улаан, ногоон, цэнхэр өнгийн 3 LED хөндлөн бүдгэрэх код (RGB) * Бүдгэрүүлэхийн тулд та хоёр зүйлийг хийх хэрэгтэй: * 1. Харуулахыг хүссэн өнгөө тайлбарлана уу * 2. Хүссэн дарааллаа жагсаана уу. Тэд өнгөө алдах болно * * ӨНГИЙН ДЭЛГЭРҮҮЛЭГ: * Өнгө бол 0-100 гэсэн гурван хувийн массив бөгөөд улаан, ногоон, цэнхэр LED-ийг удирдах * * Улаан бол улаан LED бүрэн, цэнхэр, ногоон унтраалттай * int улаан = {100, 0, 0} * Бүдэг цагаан өнгө нь 30% -ийн бүх гурван LED юм * int dimWhite = {30, 30, 30} * гэх мэт * * Зарим нийтлэг өнгийг доор үзүүлэв, эсвэл өөрийн гараар хий * * ЖАГСАХ ЗАХИАЛГА: * Хөтөлбөрийн үндсэн хэсэгт та өнгө оруулахыг хүссэн дарааллаа * жагсаах хэрэгтэй. * crossFade (улаан); * crossFade (ногоон); * crossFade (цэнхэр); * * Эдгээр өнгөнүүд нь дарааллаар гарч ирэх бөгөөд нэг өнгөнөөс алга болж, дараагийн өнгөөр солигдох болно * * Нэмж дурдахад 5 нэмэлт тохиргоог хийж болно: * 1. Анхны өнгийг хар болгож тохируулна (ингэснээр эхний өнгө бүдгэрнэ. in), гэхдээ * та анхны өнгийг өөр өнгө болгох боломжтой * 2. Дотоод гогцоо нь 1020 интеракцид зориулагдсан; 'хүлээх' хувьсагч * нь нэг хөндлөн огтлолын ойролцоо үргэлжлэх хугацааг тохируулдаг. Онолын хувьд * 10 ms -ийн 'хүлээх' нь ~ 10 секундын crossFade хийх ёстой. * Практикт код нь гүйцэтгэж буй бусад функцууд үүнийг * самбар дээр ~ 11 секунд хүртэл удаашруулдаг. YMMV. * 3. Хэрэв 'давталт' -ыг 0 гэж тохируулсан бол програм тодорхойгүй хугацаанд эргэх болно. * Хэрэв энэ нь тоонд тохируулагдсан бол тэр тооны давталт хийх болно, * дараа нь дарааллын сүүлчийн өнгө дээр зогсох болно. ('Буцах' гэж 1 болгож тохируулаад *, сүүлд нь бүдгэрүүлэхийг хүсч байвал сүүлчийн өнгийг хар болго.) * 4. Нэмэлт 'барих' хувьсагч байдаг бөгөөд * програмыг 'секундэд хадгалах' миллисекундийг дамжуулдаг. өнгө дууссан *, гэхдээ дараагийн өнгө эхлэхээс өмнө. * 5. Хэрэв та дибаг хийх гаралтыг цуваа дэлгэц рүү илгээхийг хүсвэл DEBUG тугийг 1 болгож тохируулна уу. * * Хөтөлбөрийн дотоод хэсэг нь тийм ч төвөгтэй биш боловч тэдгээр нь * бага зэрэг төвөгтэй байдаг - дотоод үйл ажиллагааг үндсэн гогцооноос доогуур тайлбарласан болно. * * 2007 оны 4 -р сар, Клэй Ширки *

/ Гаралт

int grnPin = 9; // Ногоон LED, дижитал зүүтэй холбогдсон 10 int redPin = 10; // Улаан LED, дижитал зүү 9 int bluPin = 11 -т холбогдсон; // Цэнхэр LED, дижитал зүү 11 -т холбогдсон

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

int black [3] = {0, 0, 0}; int цагаан [3] = {100, 100, 100}; int улаан [3] = {100, 0, 0}; int ногоон [3] = {0, 100, 0}; int blue [3] = {0, 0, 100}; int шар [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // гэх мэт

// Анхны өнгийг тохируулна уу

int redVal = хар [0]; int grnVal = хар [1]; int bluVal = хар [2];

int wait = 3; // 10ms дотоод crossFade саатал; аажмаар бүдгэрэхийн тулд нэмэгдүүлэх

int hold = 0; // Дараагийн crossFade хийхээс өмнө өнгө дууссаны дараа заавал барина int DEBUG = 0; // DEBUG тоолуур; хэрэв 1 гэж тохируулсан бол утгуудыг serial int loopCount = 60 -ээр буцааж бичих болно; // DEBUG -ийг хэр олон удаа мэдээлэх ёстой вэ? int давталт = 0; // Зогсоохын өмнө бид хэдэн удаа эргэх ёстой вэ? (Зогсолтгүй 0) int j = 0; // Давталтын тоолуур

// Өнгөний хувьсагчдыг эхлүүлэх

int prevR = redVal; int prevG = grnVal; int prevB = bluVal;

// LED гаралтыг тохируулна уу

void setup () {pinMode (redPin, OUTPUT); // зүүг гаралтын pinMode (grnPin, OUTPUT) болгон тохируулдаг; pinMode (bluPin, OUTPUT);

if (DEBUG) {// Хэрэв бид дибаг хийх утгыг харахыг хүсч байвал …

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

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

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

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

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

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

* * Хөтөлбөр дараах байдлаар ажилладаг: * Улаан LED-ийг 0-10-аас, * ногооныг 0-5-аас, цэнхэрийг 10-аас 7 хүртэл * арван алхамаар хөдөлгөдөг хөндлөн огтлолыг төсөөлөөд үз дээ. * Бид 10 алхамыг тоолж, өнгөний утгыг жигд алхамаар нэмэгдүүлэх эсвэл багасгахыг хүсч байна. * A + нь утгыг 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) байдаг. * * 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 [3]) {

// 0-255 руу хөрвүүлэх int R = (өнгө [0] * 255) / 100; int G = (өнгө [1] * 255) / 100; int B = (өнгө [2] * 255) / 100;

int stepR = тооцоолохАлхам (өмнөхR, R);

int stepG = тооцоолох алхам (prevG, G); int stepB = тооцоолох алхам (prevB, B);

for (int i = 0; i <= 1020; i ++) {redVal = calcVal (stepR, redVal, i); grnVal = тооцохVal (stepG, grnVal, i); bluVal = тооцохVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // Одоогийн утгыг LED тээглүүрт бичнэ үү

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal);

хойшлуулах (хүлээх); // Циклийг үргэлжлүүлэхийн өмнө 'хүлээх' миллисекундийг түр зогсооно уу

if (DEBUG) {// Хэрэв бид цуваа гаралт авахыг хүсвэл үүнийг хэвлэх

if (i == 0 эсвэл i % loopCount == 0) {// эхлэл, мөн loopCount бүр Serial.print ("Loop/RGB: #"); Цуваа.хэвлэх (i); Serial.print ("|"); Цуваа.хэвлэх (redVal); Serial.print (" /"); Цуваа.хэвлэх (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Дараагийн давталтын одоогийн утгыг шинэчлэх prevR = redVal; prevG = grnVal; prevB = bluVal; хойшлуулах (барих); // Циклийг үргэлжлүүлэхийн өмнө заавал 'хүлээх' миллисекунд түр зогсооно уу}

Алхам 2: Модыг боох

Модыг боох
Модыг боох
Модыг боох
Модыг боох
Модыг боох
Модыг боох
Модыг боох
Модыг боох

Би ус нэвтэрдэггүй тууз ашигласан, учир нь эдгээр нь гадаа байх болно. Тэд бие даан наалддаг байсан ч би тэднийг байрандаа байлгахын тулд утсаар уясан. Энгийн бөгөөд хялбар хакердах. Туузан дамжуулагчийн хүч чадал нь тэжээлийн эх үүсвэрийг доод талаас нь тэжээж, дээд талаас нь од руу гаргах боломжийг олгодог.

Алхам 3: Дээд талд байгаа одыг бүү мартаарай

Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай
Дээд талд байгаа одыг бүү мартаарай

Оддын хувьд би анхаарлаа хандуулахын тулд 10W хос чип ашигласан. Би тэднийг халаагуур болгон зэс хуудсан дээр гагнав. Бага зэрэг үлдсэн тул би илүү их тууз хэрэглэж болох байсан.

Алхам 4: Үүнийг туршиж үзээрэй

Image
Image

Эхний оролдлогын хурд хэт хурдан байсан ….

Намайг тайвшруулсны дараа үнэхээр сайхан харагдаж байсан.

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