Мазмұны:

Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 қадам (суреттермен)
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 қадам (суреттермен)

Бейне: Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 қадам (суреттермен)

Бейне: Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 қадам (суреттермен)
Бейне: Arduino & Neopixel Coke Bottle Party Light 2024, Қараша
Anonim
Image
Image

Менің ұлым Дуон ескі кокс бөтелкелерінен және жарқыраған таяқшалардан жасалған өте керемет мерекелік шамды көреді және біз оның мектептегі емтихандарына дайындық жасай аламыз ба деп сұрайды PartAYYY !!! Мен сенімдімін, бірақ біз оқитын Adafruit Neopixel сақиналарының кейбірін алғыңыз келмей ме … Ол маған бос көзбен қарайды. Өйткені, ол менің не айтып тұрғанымды білмейді, бірақ әкем өзі оқыған неопиксельді сақиналармен ойнауға мүмкіндік тапты, және біз бәріміз білетін әкелердің ұрпақтары өсіретін ең жақсы 10 себептердің бірін білеміз. Гаджеттермен ойнауға кешірім, олар әркім өз балалары үшін деп айтады.

Бұл өте қарапайым жоба, ол өте керемет көрінеді. Біз 3 ескі кокс бөтелкесінен, ағаш табақтан және ойын алаңының тіреуішінен - жертөледе жатқан заттарды - Arduino -мен (Леонардо біздің жағдайда, бірақ кез келген Genuino тақтасы жасайды!) Және үш неопикселді сақинадан тұрғыздық.. Мен 9 светодиодты сақинаға тапсырыс бердім, бірақ сол бағамен 12 жарықдиодты сақинамен аяқталды. Бұл тәтті болды, бірақ ұңғымаларды бітеуді білдірді-12 жарықдиодты сақиналардың ені 35 мм, керісінше 23 мм. Сізге не қажет:

  • Genuino/Arduino тақтасы (Біз Леонардоны қолдандық, бірақ кез келген тақта жасайды)
  • 3 неопиксельді сақина (әрқайсысы 12 жарықдиодты): оларды Adafruit -тен алыңыз және сол жақсы адамдарға қолдау көрсетіңіз
  • 1000 мкф 6.3в немесе одан жақсы конденсатор
  • 300-500 Ом резисторы
  • Ағаш табақ, немесе төртбұрышты ағаш немесе неопикселдерді орнатып, кокс бөтелкелерін үстіне қоюға болатын кез келген нәрсе
  • Пластинаны бекітудің қандай да бір түрі - ойын алаңының тірегі біз үшін жақсы жұмыс жасады
  • 9В қабырғадағы сүйел
  • 40 мм тесік
  • Болттар, жаңғақтар, шайбалар, аралықтар
  • Қатты ядролық сым
  • Дәнекерлеуіш пен дәнекер
  • Нан тақтасы
  • Arduino үшін пластикалық корпус. Сіз далаға шығып, планетаның екінші жағында өндірілген және контейнерде сізге жақын орналасқан қоймаға жөнелтілген миллиондаған жылдық мұнайдан жасалған, пластикалық қаптаманы сатып ала аласыз. Порттар біркелкі етіп кесіліп, атмосфераға көмірқышқыл газын шашатын фургонмен сіздің есігіңізге жеткізіледі. Немесе сіз менің істегенімді істей аласыз және ескі тасталған пластикалық қорапты қолдана аласыз.. бұл жағдайда дәріхана шкафында жатқан Мадагаскар таспасының көмекші қорабы… және онда бірнеше тесік бұрғылаңыз. Дәріс осымен аяқталады. ЖАСАЙЫҚ…

1 -қадам: негізді жасаңыз

Базаны жасаңыз
Базаны жасаңыз
Базаны жасаңыз
Базаны жасаңыз

Сіз өзіңіздің жертөлеңізде бар кез келген қоқыстардан өзіңіздің базаңызды импровизациялай аласыз немесе тіпті ағаш қорапты немесе электрониканы жасыратын нәрсені қолдана аласыз.

Алдымен біз ағаш пластинада біркелкі орналасқан үш тесікті бұрғыладық. Неопиксель сақиналары отыратындай үлкен. Суретте тесіктер бұрғымен бұрғыланған ұңғымалар. Ақыр соңында, 12-жарықдиодты сақиналардың көлемі үлкен болғандықтан, біз тесікпен тесіктерді бұрғылауға тура келді. Бұл табақша арқылы өтуді білдірді, және сақиналарды тереңдігі 2 мм тереңдіктегі ұңғыларға ұқыпты түрде кіргізудің орнына, саңылаулар үшін орталық тесікпен мен сақиналарды бекітіп қойдым… пластинаның. Соттамаңыз. Сіз бәрібір менің дизайндағы табақтың түбін көре алмайсыз. Және ол қосылған кезде қараңғы болады. Сонымен қатар - жабысқақ таспаның не қатесі бар?

Пластинаның төменгі жағындағы тақтайша мен бір компонент - конденсатор үшін табақ пен кронштейн арасындағы саңылау қажет болды, ол мен кронштейннің ішіне қоюды жоспарлап отырдым. Мен болтты біліктерге жеткілікті бос орын беру үшін уақытша аралықтар жиынтығын қойдым - шамамен 3 см, нан тақтасының биіктігі және сымдарды сындырмау үшін. Мен әр бұрышта екі ағаш анкерлік болтты қолдандым, себебі олар биіктігі дұрыс болды және тартпада жатыр … бос бұрандалар, болттар, шегелер, тот басқан тізбектер, шланг муфталары, ескі монеталар, күтпеген жерден өткір заттар және барлық тәсілдермен биттер мен бобтардың жиынтығы, олар сізге керек емес нәрсені ұсына отырып, аппараттық дүкенге баруды сиқырлы түрде құтқарады.

Мен жертөледен табылған ойын алаңындағы бақыт туралы бақытсыздық, оның табақшасында тесіктер болған. Темір бұрғылаудың қажеті жоқ! Негізде төрт болтты тесік болды, біз ағаш тақтайшасына сәйкес келетін төрт тесікті бұрғыладық.

Содан кейін біз готикалық қара түстердің бәрін бояумен боядық.

2 -қадам: Неопиксель сақиналарын дайындау

Неопиксель сақиналарын дайындау
Неопиксель сақиналарын дайындау

Сізге сымдарды неопиксель сақиналарына дәнекерлеу қажет: олардың барлығына арналған кіріс сымы, екеуіне арналған деректерді шығаратын сым және әрқайсысына қуат пен жер. Сізге қанша ұзындық қажет деп ойласаңыз, оны қосыңыз. Сіз әрқашан артық сымды үзіп тастай аласыз, тым қысқа созуға болмайды. Адафруттың ескертуін біліңіз:

Бұл сақиналарға сымдарды дәнекерлеу кезінде, дәнекерлеу түйіршіктері мен қысқа тұйықталуларға аса мұқият болу керек. Компоненттер арасындағы қашықтық өте тығыз! Сымды алдыңғы жағынан және дәнекерлеуді артқы жағына салу жиі оңай.

Мен майданға кетер алдында осыны оқығанымды қалаймын. Мен бірде -бір светодиодты күйдіре алмадым, бірақ мен оны қосқанға дейін терлеп кететін етіп шетін күйдірдім. Сондай -ақ, егер мен нұсқаулықты оқыған болсам, жарықдиодқа аллигатор қысқышын салмау туралы ескертуді оқыған болар едім. Менің кеме апаттарым сіздің маякыңыз болсын.

Неопиксель тізбекті сақиналармен сақиналайды, демек сіз олардың барлық жарық диодтарын Arduino-дан бір сақинаның шығыс сымынан екіншісінің кіріс ұяшығына жалғау арқылы басқара аласыз. Әр сақинаға қуат пен жер сымдары қажет.

3 -қадам: сым

Сымдар
Сымдар

Оны жоғарыдағы Фритзингтегідей байланыстырыңыз-Arduino-ның 6-түйіні деректерді бірінші сақинаға апарады, бұл сақинадан алынған деректер келесіге, келесідегі деректерге шығады. Соңғы қоңырау туралы деректер. Сізге соңғы сақинаның дерексіз сымы қажет емес.

Сыйымдылығы 1000 мкФ нан тақтасының оң және теріс рельстері арасында өтеді. Бұл қалпақ сақиналарды қуаттың көтерілуінен қорғайды және Adafruit NeoPixel Uberguide-дің ең жақсы тәжірибе бөлімі ұсынады. Бірінші неопиксельдегі деректердегі резисторды Adafruit компаниясы да ұсынады-бұл Fritzing-те 1K, бірақ ұсынылатын қарсылық 300-500 Ом.

Құрылымда мен сымдарды пластинаның артқы жағындағы Neopixels -тен ортаға бекітілген нанға дейін өткіздім. Осылайша, сіз тек үш ұзын сымды базалық блокқа қосуыңыз керек: қуат, жер және деректер. Мен бұл сымдарды өте ұзын етіп жасадым-базада көп сақтау орны бар, бұл тақтаны қайта бағдарламалау үшін шығарып алуға мүмкіндік береді.

4 -қадам: Кодекс

«loading =» жалқау «менің баламның музыкалық-реактивті нұсқасын алғысы келетінін айтты. Оны 18-ге толғанға дейін қабылдады, бірақ міне!

Қосымша жабдықтар:

1 бір полюсті, қос лақтыру қосқышы 1 Автоматтандыруды басқаратын микрофон (мен AdaFruit MAX9184 қолдандым) 1 1uF-100uF конденсаторы (кез келген мән)

Микрофонның дұрыс жұмыс істеуі үшін шын мәнінде автоматты кірісті басқару керек. AGC қоршаған ортаның шуын үнемі іріктеп отырады және фонды қарастыратын шекті жоғарылатады және төмендетеді, сондықтан сіздің жарық осы фондағы шыңдарға жауап береді. AdaFruit микрофоны керемет: сіз үнсіз бөлмеден шығасыз, онда бір дауыстың дыбысы оны жасөспірімдерге толы бөлме мен музыканың шулығы бар толық кеш режиміне көшіруге болады, және ол тек музыканың ырғағын қабылдайды. жақсы Баламалы, реттелетін кіріс микрофонының тақтасында мүмкін емес нәзік және қатал шағын потенциометр бар. Құрылғыны жарамсыз ету үшін қоршаған орта дыбысына көп өзгеріс қажет емес: шамдар үнемі қосылады немесе үнемі қараңғы болады. AGC сиқыр сияқты жұмыс істейді.

Мен бұралмалы тест үлгісін немесе музыканы қолдану мүмкіндігін алғым келді, сондықтан мен орталық сымды VIN -ге ауыстыруды, ал бір сымды 4 -ке, екіншісін Леонардоның 8 -ші істігіне жалғадым. Бұл түйреуіштерді HIGH немесе LOW сынау арқылы біз коммутатордың қандай күйде екенін және сәйкесінше филиал кодын біле аламыз.

7 -қадам: микрофонды қосу

Микрофонды қосу
Микрофонды қосу

Микрофонды 1-100 мкФ конденсатор арқылы аналогтық түйреуіш 0-ге беріңіз. Егер сіздің конденсатор поляризацияланған болса, шығыс штыры оң жаққа (жасыл сым) өтеді.

CodeGirlJP-ге төменде бейімделген Trinket-Color-by-Sound режимі үшін рахмет:

// Arduino және NeoPixels көмегімен дыбысты белсендірілген жарықдиодты шамдар

#қосу

#define MIC_PIN A0 // Микрофон Леонардо а0 түйреуішіне бекітілген

#dinefine LED_PIN 6 // Леонардодағы 6 -істікке бекітілген NeoPixel светодиодты анықтаңыз #N_PIXELS 36 -ді анықтаңыз // светодиодтағы пиксель саны !!!!!! Орнату кезінде пикселдер санын реттеңіз. Бұл 3 неопиксельді сақина үшін дұрыс !!!!!! #define N 100 // Әр оқылған сайын алынатын үлгілер саны Үлгілер #анықтауды өшіруді кешіктіру деп атайды 5 Кешіктіру // әр өшу мөлшерінің кідіріс уақыты #анықтайтын шу 30 -деңгей // микрофонның орташа шуылының көлбеу деңгейі

// NeoPixel жолағын жоғарыда анықталған мәндермен инициализациялаңыз:

Adafruit_NeoPixel жолағы = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

int үлгілері [N]; // жинақ жиынының үлгісін сақтау

int periodFactor = 0; // периодты есептеу үшін ms санын қадағалау int t1 = -1; // көлбеу уақыттары> 100 анықталды. int T; // миллисекундтарға масштабталған уақыт арасындағы кезең // екі жинақталған деректердің көлбеуі нүкте байт periodChanged = 0; const int SwitchPinMusic = 4; // Ауыстыру позициясы үшін түйреуіш музыка сезімталдығы const int SwitchPinSwirl = 8; // Коммутатор позициясының түйрегіші Test Pattern (айналдыру) int MusicbuttonState = 0; // Музыканың сезімталдығы үшін қосулы логикалық айнымалы

// Arduino орнату әдісі

жарамсыз орнату () {

strip.begin ();

ledsOff (); кешіктіру (500); displayColor (Дөңгелек (100)); strip.show (); кешіктіру (500); oddWheel (Wheel (100)); strip.show (); кешіктіру (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, ауысқан, құлаған);

}

// Arduino цикл әдісі

void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // HIGH егер қосқыш Музыка сезімталдығына қойылса MusicbuttonState = digitalRead (SwitchPinMusic); // егер қосқыш Test үлгісіне орнатылса, (SwirlbuttonState == LOW) {readSamples (); // SwirlbuttonState = digitalRead (SwitchPinSwirl) музыкалық іріктеу процедурасын іске қосыңыз; // Коммутатордың өзгертілгенін тексеріңіз} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Би (); // SwirlbuttonState = digitalRead (SwitchPinSwirl) айналымын тексеру схемасын іске қосу; // Коммутатордың өзгергенін тексеріңіз

}

}

бос би () {

while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (жолақ. Түс (0, 255, 0), 50); // Green SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (жолақ. Түс (0, 0, 255), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe (жолақ. Color(0, 0, 0, 255), 50); // Ақ RGBW // Театрға пиксель іздеу жіберу… SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (жолақ. Түс (127, 127, 127), 50); // White SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (жолақ. Түс (127, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (жолақ. Түс (0, 0, 127), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); кемпірқосақ (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); кемпірқосақ циклы (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); театрChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Микрофоннан алынған деректердің үлгісін оқу және өңдеу void readSamples () {for (int i = 0; i0) {eğim = үлгілер - үлгілер [i -1]; } else {еңіс = үлгілер - үлгілер [N -1]; } // Көлбеудің шулыдан жоғары екенін тексеріңіз - шу деңгейінде анықталмаған дыбыс, егер (abs (көлбеу)> шуыл деңгейі) {if (еңіс <0) {calcPeriod (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} басқа {ledsOff (); // TheaterChaseRainbow (50); } periodFactor += 1; кешіктіру (1); }}

жарамсыз есептеу кезеңі (int i)

{if (t1 == -1) {// t1 t1 = i орнатылмаған; } else {// t1 орнатылды, осылайша calc period int period = periodFactor*(i - t1); periodChanged = T == кезең? 0: 1; T = кезең; //Serial.println(T); // t1 жаңа i мәніне қалпына келтіру t1 = i; periodFactor = 0; }}

uint32_t getColor (int кезеңі)

{if (period == -1) return Wheel (0); else if (period> 400) Wheel (5) қайтарады; else return Wheel (карта (-1*кезең, -400, -1, 50, 255)); }

void fadeOut ()

{for (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Жолақты кешіктіруді жаңарту (fadeDelay); periodFactor += fadeDelay; }}

void fadeIn ()

{strip.setBrightness (100); strip.show (); // Жолақты жаңарту // түсі өшеді (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); // жолақ.шоу (); // Жолақты кешіктіруді жаңарту (fadeDelay); periodFactor+= fadeDelay; }}

void ledsOff ()

{fadeOut (); үшін (int i = 0; i

void displayColor (uint32_t түсі)

{for (int i = 0; i

жарамсыз тақ дөңгелегі (uint32_t түсі)

{for (int j = 0; j <256; j ++) {// дөңгелектегі барлық 256 түсті цикл үшін (int q = 0; q <3; q ++) {for (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, Wheel ((i+j) % 255))); // әрбір үшінші пиксельді} strip.show () қосыңыз;

кешіктіру (1);

үшін (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // әрбір үшінші пиксельді өшіру}}} fadeIn (); }

// Нүктелерді бірінен соң бірін түспен толтырыңыз

void colorWipe (uint32_t c, uint8_t күту) {үшін (uint16_t i = 0; i

жарамсыз кемпірқосақ (uint8_t күтіңіз) {

uint16_t i, j;

for (j = 0; j <256; j ++) {for (i = 0; i

// Аздап өзгеше, бұл кемпірқосақты барлық жерде бірдей таратады

жарамсыз кемпірқосақ циклы (uint8_t күту) {uint16_t i, j;

for (j = 0; j <256*5; j ++) {// дөңгелектегі барлық түстің 5 циклы үшін (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); кешіктіру (күту); }}

// Театр стиліндегі жорғалайтын шамдар.

void teatrChase (uint32_t c, uint8_t күту) {for (int j = 0; j <10; j ++) {// (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // әрбір үшінші пиксельді} strip.show () қосыңыз;

кешіктіру (күту);

for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // әрбір үшінші пикселді өшіру}}}}

// Кемпірқосақ әсері бар театр стиліндегі жорғалайтын шамдар

void театрChaseRainbow (uint8_t күту) {for (int j = 0; j <256; j ++) {// дөңгелектегі барлық 256 түстерді цикл үшін; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Wheel ((i+j) % 255))); // әрбір үшінші пиксельді қосу} strip.show ();

кешіктіру (күту);

for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // әрбір үшінші пикселді өшіру}}}}

// Түс мәнін алу үшін 0 -ден 255 -ке дейінгі мәнді енгізіңіз.

// Түстер r - g - b - r -ге ауысу болып табылады. uint32_t Wheel (байт WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {қайтару жолағы. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; қайтару жолағы. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; қайтару жолағы. Color (WheelPos * 3, 255 - WheelPos * 3, 0); }

void Switched () {

strip.show (); readSamples (); }

Түсініктемелерде мені өлтірмес бұрын (Жақсы болу саясатын есте сақтаңыз !!) Мен жүктегеннен кейін түсіндім, бұл менің кодымның кейбірі. PIN 4 пен PIN 8 -ді HIGH үшін үнемі тексерудің қажеті жоқ. Қосқыш бір полюсті қос лақтыру болғандықтан, біреуінің мәнін екіншісінен шығаруға болады: тек біреуін тексеру қажет. Сіз MusicButtonState -ті оқу мен жазуға қатысты барлық сілтемелерді алып тастай аласыз және SwirlButtonState -ті тестілеу арқылы бәрін тиімді басқара аласыз, егер сізде жады аз болса немесе басқа процедуралармен жұмыс жасасаңыз. Бірақ жоғарыдағы код жұмыс істейді.

Егер кімде -кім дыбыс режимдерін шудың деңгейін ғана емес, жиілікті де сезінгісі келсе және дыбыс спектрі бойымен қозғалыстарға жауап ретінде жарық спектрін жоғары және төмен сырғыту үшін біркелкі код жазғысы келсе, түсініктемелердегі сілтемені қалдырыңыз. қалай жасадыңыз.

Ләззат алыңыз!

Ұсынылған: