Mundarija:

Yulduzli osmonni boshqaruvchi galstuk: 9 qadam (rasmlar bilan)
Yulduzli osmonni boshqaruvchi galstuk: 9 qadam (rasmlar bilan)

Video: Yulduzli osmonni boshqaruvchi galstuk: 9 qadam (rasmlar bilan)

Video: Yulduzli osmonni boshqaruvchi galstuk: 9 qadam (rasmlar bilan)
Video: Тушда Юлдуз курса нима булади 2024, Noyabr
Anonim
Image
Image
Yulduzli osmon Led galstuk
Yulduzli osmon Led galstuk
Yulduzli osmon Led galstuk
Yulduzli osmon Led galstuk

Biroz oldin men dollar do'konida tolali optikasi bo'lgan bolalar o'yinchog'ini topdim va u bilan nima qilishim haqida o'ylay boshladim.

Men aqldan ozgan g'oyalardan biri, yulduzli osmon effekti bilan galstuk taqish edi.

Menda hali ham arduino pro mini, adafruit taxtalari va batareyalar bor edi, ehtimol bu loyihaga mos keladi.

Shunday qilib, men o'z shahrimdagi lombardda chiroyli keng galstuk topib, jihozga mos keladigan qutini topganimdan so'ng, men uni tanlashga harakat qilib, uni qurishga qaror qildim.

Bu ko'rsatma sizga buni qanday qilganimni ko'rsatadi.

U arduino pro mini, adafruit powerboost 500 zaryadlovchi, emmerich icr 18650nh-sp va 5 ta oq LEDda ishlaydi. Kod LEDning yorqinligini tasodifiy qiladi. (Videoning dastlabki 40 soniyasi 3x tezlikda)

1 -qadam: sxemalar va apparat

Sxemalar va apparat
Sxemalar va apparat
Sxemalar va apparat
Sxemalar va apparat

Men quyidagi uskuna ishlataman:

- Muzli oq LEDli va 220 Ohmli rezistorli tenglikni.

-Arduino pro mini (men nokaut ishlatganman)

-Adafruit Powerboost 500 zaryadlovchi qurilmasi

-Emmerich Li-ion, ICR-18650NH-SP

- optik tolalar (har xil o'lchamdagi)

2 -qadam: PCB LEDlarini joylashtirish

LEDni joylashtirish uchun tenglikni joylashtirish
LEDni joylashtirish uchun tenglikni joylashtirish
LEDni joylashtirish uchun tenglikni joylashtirish
LEDni joylashtirish uchun tenglikni joylashtirish
LEDni joylashtirish uchun tenglikni joylashtirish
LEDni joylashtirish uchun tenglikni joylashtirish

Men LEDni ushlab turish uchun tenglikni kesib tashladim va uni asosiy tenglikka lehimlash uchun LED pinlarini ishlatdim.

Barcha katodlarni (-) GND ga ulab, pinlarning yarmini lehimlash uchun ishlatib, asosiy PCBga yopishdi.

Barcha anodlarni (+) rezistorlarga va kabellar bilan arduinoga ulangan.

LEDlarning har biri quyidagi PWM portlaridan biriga ulangan bo'lishi kerak: 3, 5, 6, 9, 10, 11

Aqlsiz, men bu loyihada juda ko'p xatolarga yo'l qo'ydim va to'g'ri PWM portlarini tekshirishni unutib qo'ydim, shuning uchun bir necha keyinroq qayta sotishimga to'g'ri keldi. Yuqori/past bilan sinovdan o'tgan, shuning uchun men buni keyinroq payqadim.

Men 7 ta LED bilan boshladim, lekin faqat 6 ta PWM porti bor edi va men qayta sotilgan LEDlardan biri vafot etdi. Men faqat 5 ta ishlaydigan LEDni saqladim va 6 -chisini ishlatmayapman.

3 -qadam: qutini yasash

Qutini yasash
Qutini yasash
Qutini yasash
Qutini yasash
Qutini yasash
Qutini yasash
Qutini yasash
Qutini yasash

Men Bosch GRO (Dremel kabi) va matkap yordamida batareyaning shaklini, tugmachasini, mikro-usb portini, Arduino va optik tolalarni sarlavhalarini kesib oldim. (chang niqobidan foydalaning!)

Batareyani korpusga 2 tasma bilan yopishtirdi.

Adafruit taxtasi va tenglikni o'rnatish uchun vintlar ishlatilgan.

Ochilish va yopilishdagi ishqalanish ba'zi simlarni shikastlab qo'ydi. Men ularni qayta sotishim va uning takrorlanishiga yo'l qo'ymaslik uchun elim ishlatishim kerak edi.

4 -qadam: bog'ichni tayyorlash

Bog'lamani tayyorlash
Bog'lamani tayyorlash
Bog'lamani tayyorlash
Bog'lamani tayyorlash
Bog'lamani tayyorlash
Bog'lamani tayyorlash

Rezina varaqqa moslash uchun galstukning pastki qismidan tikuv olib tashlandi.

Uskunani yashirish va kerak bo'lganda unga kira olish uchun men fermuardan foydalanishga qaror qildim.

Men tikuv mashinasini yaxshi bilmayman, shuning uchun mening shirin onam galstukning orqasiga fermuar qo'ydi.

Bu tugagandan so'ng, men galstukdagi rezina varaqni yopishtirdim. Men matoni to'yingan va old tomondan ko'rinadigan juda ko'p elim ishlatishdan qo'rqardim, shuning uchun uni tekislashga va ko'p ishlatmaslikka harakat qildim. Umuman olganda, bu juda yaxshi ko'rinadi, lekin ba'zi joylarda men juda ko'p yoki juda kam yopishqoqlikni payqadim, chunki u matodan o'tgan yoki matoga yaxshi yopishmagan. Yaxshiyamki, bu yorug'lik nurida yaqin masofadan ko'rinmaydi.

Endi quti va galstuk tayyor. Fiberoptikani yopishtirish vaqti keldi!

5 -qadam: Fiberoptikani yopishtirish

Fiberoptikani yopishtirish
Fiberoptikani yopishtirish
Fiberoptikani yopishtirish
Fiberoptikani yopishtirish
Fiberoptikani yopishtirish
Fiberoptikani yopishtirish
Fiberoptikani yopishtirish
Fiberoptikani yopishtirish

O'yinchoqning bitta katta tolali optik tolali simlari bor edi, ular osongina ajralib ketardi. Men dastlab ularni birma -bir yopishtirishga harakat qildim, lekin tez orada kichik to'plamlar yasab, ularni bir vaqtning o'zida LEDga yopishtirish yaxshiroq ekanligini payqadim. Bu elim quriguncha uni barqaror saqlashni osonlashtiradi. Buni aniqlaydigan birinchi LEDni chalkashtirib yubordi.

Shaffof elim ishlatganingizga ishonch hosil qiling! Men ishlatganim juda sekin quriydi va men birinchi LEDda tez quritadigan elim oqarib ketdi, bu esa birinchi LEDning ba'zi tolalarini kamroq yorqinroq qildi.

Yorug'lik oqmasligi uchun va LEDlarni ajratish uchun men kichik qora rezina choyshablarni yopishtirdim.

Choyshablardan biri korpusning yopilishiga to'sqinlik qildi, shuning uchun qopqog'ini yopib qo'yish uchun rezina tasma qo'shdim.

6 -qadam: Fiberoptikani galstuk orqali o'tkazish

Fiberoptikani galstuk orqali joylashtirish
Fiberoptikani galstuk orqali joylashtirish
Fiberoptikani galstuk orqali joylashtirish
Fiberoptikani galstuk orqali joylashtirish
Fiberoptikani galstuk orqali joylashtirish
Fiberoptikani galstuk orqali joylashtirish

Pastki qismdan boshlab, teshiklarni igna bilan chimdim va tolalarni birma -bir o'tkazdim. Har bir LEDning tolalari tasma bo'ylab tasodifiy tarqaladi.

Men qutining og'irligini ushlab turish uchun galstukning kichik qismigacha borishi kerak bo'lgan orqa tomonga qora chiziqni yopishtirdim, lekin men barcha simlarni o'tkazib, simlarning tarangligini sezganimdan keyin yopishtirishga qaror qildim. galstuk bilan bog'liq hamma narsa yaxshiroq fikr edi va chiziqni kesib tashladi.

O'yinchoqning optik tolali simlari juda qisqa bo'lgani uchun ularni galstukning hamma joyiga o'rnatish qiyin edi. Men qutini joylashtirishda cheklangan edim va hamma narsani xohlaganimdek tekis qilishda qiynaldim.

7 -qadam: Fiberoptikani galstukka yopishtirish

Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish
Fiberoptikani galstukka yopishtirish

Simlarning rezina varaqdan chiqishiga yo'l qo'ymaslik va galstukni tekis qilib qo'yish uchun barcha optik tolali simlarni rezina varaqqa yopishtirdim.

Bosim paytida qisqichni galstukka yopishtirmaganligimga ishonch hosil qilish uchun orasiga bir oz qog'oz qo'ydim. Bu unchalik yaxshi ko'rinmaydi, lekin yaxshi ishlaydi. Va u yopilganda uni ko'rmaysiz.

Yelim quriganidan keyin old qismidagi simlarni kesib tashladim va eng baland simning tepasida joylashgan rezina varaqni biroz kesib tashladim, chunki galstuk juda uzun edi.

Oq ko'ylakli fotosuratlar kauchukning oxirgi qismini kesib olishdan oldin qilingan.

8 -qadam: Kod

Men galstuk uchun yozgan kodim ostida.

Barcha LEDlar "o'rtacha" ga ega (aslida o'rtacha emas, balki o'rtacha nashrida).

Bu o'rtacha darajaga yetishi bilan u 3/4 imkoniyat bilan pastroq yorqinlikka o'tishga qaror qiladi. Bundan tashqari, u tasodifiy ravishda yangi minimal yorqinlikni, maksimal yorqinlikni, minimal va maksimal nashrida kutish vaqtini va har bir turda (1-255) 5 ta oldindan belgilangan qiymatdan tezlikni oshiradi yoki kamaytiradi. Keyin u yana o'rtacha darajaga yetguncha tsikl qiladi. Faqat ikkita LED bir vaqtning o'zida yuqori tsiklda bo'lishi mumkin.

Har bir davlat tamsayı (1-7) bilan ifodalanadi, u avg-past, past-o'rtacha, past kutish, yangilanish va hokazo.

Kodni arduino -ga yuklash haqida ma'lumot olish uchun www.arduino.cc saytiga qarang

/ * Yulduzli osmon galstugi * * Bu tasodifiy ravishda tasodifiy ravishda 5 ta LEDni o'rtacha ko'rsatkichdan pastgacha * yoki yuqori yorqinligini tasodifiy pastroq, balandroq va vaqtli sozlash bilan * yulduzli osmonga o'xshatib, optik tolalar bilan ishlatganda. * Bu holda ular teng ravishda amalga oshiriladi. * * Yuqoriga/pastga imkoniyat = 1/4 yuqoriga, 3/4 pastga, maksimal 2 * bir vaqtning o'zida maksimalga ko'tariladi. * * O'rtacha o'zgarishsiz qoladi. * Minimal, maksimal va vaqt variantlari tasodifiy o'zgaradi * har safar LED yana o'rtacha ko'rsatkichga yetganda 5 variantdan. * * Billi Jaspers tomonidan yaratilgan, 2019 yil may. *

/ Pinlarni e'lon qiling

int LED01 = 3; int LED02 = 5; int LED03 = 6; int LED04 = 9; int LED05 = 11;

// Vaqt o'zgaruvchilari

imzosiz uzoq joriy vaqt; imzosiz uzoq kutish vaqti [5]; imzosiz uzoq lastRound;

// LED o'zgaruvchilari

int yorqinMin [5] = {10, 10, 10, 10, 10}; // Minimal nashrida int brightAvg [5] = {200, 200, 200, 200, 200}; // o'rtacha yorqinligi int brightMax [5] = {240, 240, 240, 240, 240}; // Maksimal nashrida int timeWaitLow [5] = {1000, 1000, 1000, 1000, 1000}; // Kutish vaqti int timeWaitAvg [5] = {5000, 5000, 5000, 5000, 5000}; // Kutish vaqti int timeWaitMax [5] = {4000, 3000, 3000, 3000, 3000}; // Kutish vaqti int increment [5] = {2, 5, 4, 5, 2}; // nashrida o'sish int currentBright [5] = {200, 230, 210, 210, 235}; // Hozirgi yorqinlik

// LED o'zgaruvchilarining imkoniyatlari

int yorqinMinPos [5] = {5, 20, 40, 5, 20}; // Minimal yorqinlik imkoniyatlari int brightMaxPos [5] = {240, 245, 230, 225, 245}; // Maksimal yorqinlik imkoniyatlari int timeLowPos [5] = {3000, 5000, 4000, 2000, 1000}; // Yorug'likning past imkoniyatlarini kutish vaqti int timeHighPos [5] = {3000, 1000, 500, 2000, 4000}; // int timeAvgPos yuqori yorqinlik imkoniyatlarini kutish vaqti [5] = {3000, 5000, 4000, 7000, 8000}; // O'rtacha yorqinlik imkoniyatlarini kutish vaqti int incrementPos [5] = {2, 4, 5, 3, 1}; // yorqinlik imkoniyatlarini oshirish

// O'zgaruvchilar

bool ishga tushirish = rost; // Boshlash sozlamalarini boshlash kerakmi?

// Yo'nalish o'zgaruvchilari

/* 0 = O'rtacha kutish 1 = O'rtacha Pastga o'tish 2 = Kutish Past 3 = Pastga O'rta 4ga borish = O'rtacha Maksga 5 ga borish = Maksda kutish 6 = Avg 7ga o'tish = O'zgaruvchilarni yangilash*/ int statusLED [5] = {0, 0, 0, 0, 0}; int miqdoriHighLED = 0; int refreshRate = 50; bool statusWaiting [5] = {yolg'on, yolg'on, yolg'on, yolg'on, yolg'on}; // Led kutmoqda?

// Tasodifiy o'zgaruvchilar

uzoq tasodifiy son; // Uzoq tasodifiy sonni saqlash uchun uzoq randomNumberTwo; // Ikkinchi tasodifiy sonni saqlash uchun uzoq

// hisoblagichlar

int i = 0; // Asosiy tsikl uchun hisoblagich

bo'sh o'rnatish () {

Serial.begin (115200); // Seriyali randomSeed -ni ishga tushiring (analogRead (A0)); // Tasodifiy urug'larni o'rnating

// Chiqishlarni e'lon qilish

pinMode (LED01, OUTPUT); pinMode (LED02, OUTPUT); pinMode (LED03, OUTPUT); pinMode (LED04, OUTPUT); pinMode (LED05, OUTPUT); }

// LEDlarga ma'lumotlarni yozing

void writeToLED () {analogWrite (LED01, currentBright [0]); analogWrite (LED02, currentBright [1]); analogWrite (LED03, currentBright [2]); analogWrite (LED04, currentBright [3]); analogWrite (LED05, currentBright [4]); }

// Asosiy halqa

void loop () {if (startup) {// Ishga tushirish sozlamalari lastRound = millis (); // lastRound -ni yuklash writeToLED () uchun o'rnating; // LEDni ishga tushirish uchun boshlang'ich ma'lumotlarni yozish = noto'g'ri; // Ishga tushirishni o'chirish} currentTime = millis (); // Joriy vaqtni o'rnating

agar (currentTime - lastRound> = refreshRate) {

for (i = 0; i <5; i ++) {if (statusLED == 7) {// -7- Led randomNumber = random tasodifiy yangilanadi (5); yorqinMin = yorqinMinPos [randomNumber]; // Minimal nashrida tasodifiy qiymatni belgilang randomNumber = random (5); brightMax = brightMaxPos [randomNumber]; // Maksimal nashrida tasodifiy qiymatni belgilang randomNumber = random (5); timeWaitLow = timeLowPos [randomNumber]; // Kam kutish vaqti uchun tasodifiy qiymatni o'rnating randomNumber = random (5); timeWaitMax = timeHighPos [randomNumber]; // Yuqori kutish vaqti uchun tasodifiy qiymatni o'rnating randomNumber = random (5); timeWaitAvg = timeAvgPos [randomNumber]; // O'rtacha kutish vaqti uchun tasodifiy qiymatni o'rnating randomNumber = random (5); increment = incrementPos [randomNumber]; // Tasodifiy qiymatni oshirish uchun tasodifiy qiymatni belgilang randomNumber = random (2); // randomNumberTwo = random (2) yo'nalishi uchun tasodifiy qiymatni o'rnating; // yo'nalish uchun tasodifiy qiymatni o'rnating, agar (randomNumber == 1 && randomNumberTwo == 0 && amountHighLED = brightAvg ) {statusLED = 0; // Agar eng past nuqtada: Kutish ortiga o'ting} else {currentBright = currentBright +o'sish ; // Boshqa: yuqori yorqinlik}} else if (statusLED == 2) {// -2- Agar pastda kutilsa (! StatusWaiting ) {// Agar kutmasangiz: waitTime = millis (); // Kutish vaqtining holatini o'rnatingWaiting = true; // kutishni boshlang} else if if (statusWaiting && currentTime-waitTime > = timeWaitLow ) {// Agar kutish VA timeWaitAvg o'tgan bo'lsa: statusWaiting = noto'g'ri; // Status kutishni to'xtatingLED = 3; // StatusLed ni yangilanishni kutish}} holatiga qo'ying, aks holda (statusLED == 1) {// -1- agar (currentBright <= brightMin ) {statusLED = 2; // Agar eng past nuqtada: Kutish pastiga o'ting} boshqa {currentBright = currentBright -inrement ; // Boshqasi: Yorqinligi pastroq}} else if if (statusLED == 6) {// -6- If the current: statusWaiting = noto'g'ri; // Status kutishni to'xtatingLED = 6; // StatusLed ni yangilanishni kutish}} holatiga qo'ying, aks holda (statusLED == 4) {// -4- Agar "currentBright > = brightMax ) {statusLED = 5; // Agar eng past nuqtada: Kutish darajasiga o'ting} boshqa {currentBright = currentBright +o'sish ; // Boshqa: yuqori yorqinlik}} else if (statusLED == 0) {// -0- O'rtacha kutish, agar (! StatusWaiting ) {// Kutmasa: kutishTime = millis (); // Kutish vaqtining holatini o'rnatingWaiting = true; // kutishni boshlang} else if if (statusWaiting && currentTime-waitTime > = timeWaitAvg ) {// Agar kutish VA vaqt WaitAvg o'tgan bo'lsa: statusWaiting = noto'g'ri; // Status kutishni to'xtatingLED = 7; // StatusLed ni yangilash kutilmoqda qilib belgilang}}} i = 0; lastRound = millis (); // Oxirgi tur tugagandan so'ng o'rnating. writeToLED (); // Barcha ma'lumotlarni LEDga yozing}}

9 -qadam: Yakuniy mahsulot

Image
Image
Yakuniy mahsulot
Yakuniy mahsulot
Yakuniy mahsulot
Yakuniy mahsulot

Menimcha, bu yaxshi ishladi. Galstuk juda qalin, qattiq, uzun yoki og'ir emas va yulduz effekti ajoyib ko'rinadi.

Tavsiya: