Мазмұны:

Arduino LED көңіл -күй текшесін жақсарту (қарапайым) (бейне қосылған): 4 қадам
Arduino LED көңіл -күй текшесін жақсарту (қарапайым) (бейне қосылған): 4 қадам

Бейне: Arduino LED көңіл -күй текшесін жақсарту (қарапайым) (бейне қосылған): 4 қадам

Бейне: Arduino LED көңіл -күй текшесін жақсарту (қарапайым) (бейне қосылған): 4 қадам
Бейне: Антикризисная замена Arduino - LGT8F328P! Дефицит полупроводников 2024, Шілде
Anonim
Arduino LED көңіл -күй текшесін жақсарту (қарапайым) (бейне қосылған)
Arduino LED көңіл -күй текшесін жақсарту (қарапайым) (бейне қосылған)

'Earl жасаған LED шағын көңіл -күй кубы жобасын көргеннен кейін мен LED Mood Cube жақсартылған нұсқасын жасауды шештім. Менің нұсқам түпнұсқадан гөрі күрделірек болады, себебі ол түпнұсқадан сәл үлкенірек болады, түпнұсқа текшеге қарағанда екі түрлі түсті болады (сары мен ақ қосылады), түстердің шексіз айналуы және т.б. жарықдиодты шамдарды сымдармен қосу туралы түсінікті түсінгендер үшін жарықдиодты шамдарды одан әрі қолдану бойынша тәжірибе үшін жақсы жоба болуы керек.

1 -қадам: материалдар

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

Mood Cube жасау үшін сізге бірнеше материалдар қажет:

  • Нан тақтасы
  • Ардуино - (мұнда Леонардо бар)
  • Arduino қуат көзі / USB кабелі
  • Нан тақтасы
  • Өтпелі сымдар (олардың көпшілігі, мен 29 сымды қолдандым)
  • Қызыл жарықдиодты x 2
  • Көк жарықдиодты x 2
  • Жасыл жарық диоды x 2
  • Сары жарық диоды x 2
  • Ақ жарықдиодты x 1
  • 9 резистор
  • Нанға сәйкес келетін үлкен қорап (мен аяқ киім қорабын қолдандым)
  • Пышақ
  • Қағаз

2 -қадам: код

Мұнда берілген кодтың кейбір түсіндірмелері:

Жобаның редакторы бұл кодтарды жасағандықтан, кодтардың несиесі менің жобамның бастапқы көзіне түседі. Мен олардың кейбірін күрделене түсіру арқылы жақсарттым. Кейбір кодтарда сіз // 改 соңында көре аласыз. Бұл дегеніміз, бұл кодты мен өңдеймін, сондықтан ол менің бастапқы көзден өзгеше.

Менде Arduino Creator кодының нұсқасы бар.

/* Қызыл, жасыл және көк түсті 3 жарықдиодты сөндіру коды (RGB) Өшіру үшін сізге екі нәрсені жасау қажет: 1. Көрсеткіңіз келетін түстерді сипаттаңыз.

ТҮСТІ сипаттау:

Түс-бұл қызыл, жасыл және көк жарықдиодты басқаратын 0-100 мөлшеріндегі үш пайыздық массив

Қызыл - қызыл жарық диоды толық, көк және жасыл сөндірілген

int red = {100, 0, 0} Ақшыл түс - бұл барлық үш жарықдиодты 30% int dimWhite = {30, 30, 30} және т.б.

Кейбір кең таралған түстер төменде берілген немесе өзіңіз жасай аласыз

Тапсырысты ТІЗУ:

Бағдарламаның негізгі бөлігінде түстердің пайда болуын қалайтын ретті тізімдеу керек, мысалы. crossFade (қызыл); crossFade (жасыл); crossFade (көк);

Бұл түстер сол тәртіпте пайда болады, олар жоғалады

бір түс және келесі түс

Сонымен қатар, реттеуге болатын 5 қосымша параметр бар:

1. Бастапқы түс қара болып орнатылады (осылайша бірінші түс жоғалады), бірақ сіз бастапқы түс кез келген басқа түске орнатуға болады 2. Ішкі цикл 1020 интеракция үшін жұмыс істейді; «күту» айнымалысы бір кроссфейдтің шамамен ұзақтығын орнатады. Теориялық тұрғыдан алғанда, 10 мс -тің «күтуі» ~ 10 секундқа созылады. Іс жүзінде, код басқа функцияларды орындайды, бұл менің тақтамен ~ 11 секундқа дейін баяулайды. YMMV. 3. Егер «қайталау» мәні 0 -ге орнатылса, бағдарлама шексіз циклде болады. егер ол санға орнатылса, ол сол циклды айналдырады, содан кейін тізбектегі соңғы түске тоқтайды. («Қайтару» мәнін 1 -ге қойыңыз, ал егер ақыр соңында жоғалуын қаласаңыз, соңғы түсті қара етіп жасаңыз.) 4. «ұстап тұру» айнымалысы бар, ол түс болған кезде «ұстау» миллисекундына ауысады. аяқталды, бірақ келесі түс басталмай тұрып. 5. Отладка шығысын сериялық мониторға жіберуді қаласаңыз, ЖЕБІЛУ жалаушасын 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 black [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 жасыл [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // көк көк [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 сары сары [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // purple int күлгін [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // orange int қызғылт [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // pink int pink [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // т.б.

// Бастапқы түсті орнатыңыз

int redVal = қара [0]; int grnVal = қара [1]; int bluVal = қара [2]; int ylwVal = қара [3]; // wh int whiVal = қара [4]; // 改

int wait = 15; // 10 мс ішкі CrossFade кідірісі; баяу түсу үшін ұлғайту // 改

int hold = 1; // Түс аяқталғанда, келесі crossFade алдында қосымша ұстау // 改 int DEBUG = 1; // ҚАТЕСТІРУ есептегіші; егер 1 -ге орнатылса, мәндерді serial loop арқылы кері жазады 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; // 改

// Жарық диодты шығуларды орнатыңыз

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 (қайталау) {// Біз соңғы рет цикл жасаймыз ба?

j += 1; if (j> = қайталау) {// Біз әлі бармыз ба? шығу (j); // Олай болса, тоқтаңыз. }}}

/* БҰЛ СҰРАҚТЫҢ АСТЫНДА - МАТЕМА - МҰНЫ НЕГІЗДЕР ҮШІН ӨЗГЕРТУ КЕРЕК.

Бағдарлама келесідей жұмыс істейді:

Қызыл жарық диодты 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).

Бір немесе жоғары арасындағы қадам қаншалықты үлкен болуы керек екенін анықтау үшін

Жарық диодты шамалардың біреуінің астына белгі қойыңыз, біз CalcStep () деп атаймыз, ол бастапқы және соңғы мәндер арасындағы абсолютті алшақтықты есептейді, содан кейін мәнді реттеу арасындағы қадамның өлшемін анықтау үшін сол аралықты 1020-ға бөледі. */

int calcStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Жалпы айырмашылық неде? if (қадам) {// Егер ол нөлге тең болмаса, қадам = 1020 / қадам; // 1020 -ға бөлу} қайтару қадамы; }

/* Келесі функция - CalcVal. Цикл мәні болғанда, мен, түстердің біріне сәйкес келетін қадам өлшеміне жетеді, ол сол түстің мәнін 1 -ге арттырады немесе азайтады (R, G және B әрқайсысы бөлек есептеледі.) */

int calcVal (int қадамы, int val, int i) {

if ((қадам) && i % step == 0) {// Егер қадам нөлге тең болмаса және оның мәнін өзгерту уақыты, if (қадам> 0) {// қадам оң болса, мәнді көбейтіңіз… val += 1; } if if (255 -қадам) {val = 255; } else if (val <0) {val = 0; } қайтару құны; }

/* crossFade () пайыздық түстерді a -ға түрлендіреді

0-255 диапазоны, содан кейін 1020 рет айналады, әр уақытта мәнді жаңарту қажет пе, жоқ па, соны тексеріңіз, содан кейін түс мәндерін дұрыс түйреуіштерге жазыңыз. */

жарамсыз 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 stepY = есептеу қадамы (алдыңғыY, Y); // step int stepW = calcStep (prevW, W); // 改

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

analogWrite (redPin, redVal); // Жарық диодты түйреуіштерге ағымдағы мәндерді жазыңыз

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 (« /»); // 改} ҚАТЕСТІРУ += 1; }} // Келесі цикл үшін ағымдағы мәндерді жаңарту prevR = redVal; prevG = grnVal; prevB = bluVal; prevY = ylwVal; // алдыңғы W = whiVal; // 改 кешіктіру (ұстап тұру); // Циклды жалғастырмас бұрын қосымша «күту» миллисекундына кідірту}

3 -қадам: реттеу

Орнату
Орнату
Орнату
Орнату
Орнату
Орнату
  1. Нанды алыңыз.
  2. Жарықдиодты шам жарқырауы үшін сымдарды қосудың демонстрациясы:

    1. Жарық диодты тақтаға қойыңыз. Ұзын ұшын солға, қысқа ұшын оңға қойыңыз.
    2. Өткізгіш сымның бір ұшын светодиодтың ұзын ұшымен бір қатарда орналасқан жерге қойыңыз. Екінші ұшын Digital PWM бөліміне қойыңыз. Кодта сары жарық диодты 10 мен 5 -ке, қызыл түсті 6 мен 11 -ге, көк түсті 8 мен 13 -ке, жасылды 7 мен 12 -ге, ақырында ақ жарықдиодты 9 -ға қосу керек екені көрсетілген.
    3. Резистордың бір ұшын жарық диодтың қысқа ұшымен бір қатарға қойыңыз. Екінші ұшын жақын жерге қойыңыз.
    4. Светодиодтың қысқа ұшымен бір қатарға жатпайтын резистордың ұшымен сол қатардағы басқа өтпелі сымның ұшын салыңыз. Сымның екінші ұшын теріс зарядтау қатарына қойыңыз.
    5. Теріс зарядтау қатарына тағы бір өтпелі сымның ұшын қойып, екінші ұшын GND -ге қойыңыз.
  3. 2 -қадамды 9 рет жарық диодты жарықтандырғыңыз келгенше 8 рет қайталаңыз
  4. Нан тақтасын қораптың ішіне салыңыз. Мұнда бірнеше ескертулер:

    1. Мен қуат көзін қолдандым. Қораптан өтіп, нан тақтасына қосылу үшін қызметтік пышақ көмегімен сымдарыңыз үшін кішкене тесік жасаңыз.
    2. Қораптың бір жағы ашық екеніне көз жеткізіңіз. Аяқ киім қорапшасының бір жағы ашық. Егер қорап толығымен жабық болса, ашық кеңістік жасау үшін қораптың бір жағын кесіңіз.
    3. Бетін қағазбен ештеңемен жабыңыз. Бұл жарықдиодты шамдар қағаздан жарқырауы үшін.

Ұсынылған: