Mundarija:
- 1 -qadam: Nazoratchi
- 2 -qadam: daraxtni o'rash
- 3 -qadam: Yuqoridagi yulduzni unutmang
- 4 -qadam: Sinab ko'ring
Video: LED spiral daraxti: 4 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Men har xil LED chiziqlarni yaxshi ko'raman. Men ular bilan kamalakni yaxshi yoritdim. Hatto manzili bo'lmaganlar ham foydalidir. Men ochiq soyabonni tashqi yoritgich qilib qo'ydim, ularni qovurg'alarimga bog'lab qo'ydim, shuning uchun spiral daraxtim uchib ketganda, men uning atrofiga uzun chiziqli lentani o'rashga qaror qildim.
1 -qadam: Nazoratchi
Men manzilsiz RGB LEDlarini ishlatishga qaror qildim. Bu shuni anglatadiki, men dasturlashtirilgan effektga ega bo'lishim mumkin, lekin barcha LEDlar bir vaqtning o'zida rangini o'zgartiradi. Bu shuni anglatadiki, nazoratchi kerak bo'ladi. Men arduino uno -dan foydalangan bo'lardim va RGB qalqoni yordamida dastlabki sinovlarni o'tkazardim, lekin yakka Atmega328 chipli maxsus taxtadan foydalanishni yakunladim. Faqat maqsadli dasturchini almashtirish va chipni to'g'ridan -to'g'ri dasturlash kerak edi.
Menda boshqa lampalar loyihalaridan qolgan bu taxtalar ko'p edi. Men o'rniga soyabonimda bo'lgani kabi, arzonroq, oldindan dasturlashtirilgan boshqaruvchidan foydalaning.
Men daraxtning asosi sifatida sekin crossfade demosidan foydalandim.
/** Qizil, yashil va ko'k rangdagi 3 ta LEDni kesib o'tish kodi (RGB) * Xira qilish uchun siz ikkita narsani qilishingiz kerak: * 1. Ko'rsatmoqchi bo'lgan ranglarni ta'riflang * 2. Kerakli tartibni sanab bering. * * Rangni ta'riflash: * Rang-bu uch foizli 0-100, * qizil, yashil va ko'k LEDlarni boshqaruvchi * * Qizil-qizil LED to'liq, ko'k va yashil o'chirilgan * int qizil = {100, 0, 0} * To'q rangli oq - bu uchta LED, 30% * int dimWhite = {30, 30, 30} * va hokazo * * Ba'zi umumiy ranglar quyida keltirilgan yoki o'zingiz yaratasiz * * Ro'yxatga olish Buyurtma: * Dasturning asosiy qismida siz ranglarning paydo bo'lishini xohlagan tartibni * ko'rsatishingiz kerak, masalan. * crossFade (qizil); * crossFade (yashil); * crossFade (ko'k); * * Bu ranglar shu tartibda paydo bo'ladi, bitta rangdan o'chadi va keyingi rangga o'tadi * * Bundan tashqari, siz sozlashingiz mumkin bo'lgan 5 ta ixtiyoriy sozlamalar mavjud: * 1. Dastlabki rang qora rangga o'rnatiladi (shuning uchun birinchi rang o'chadi) in), lekin * siz boshlang'ich rangni boshqa har qanday rangga o'rnatishingiz mumkin * 2. Ichki tsikl 1020 ta o'zaro ishlash uchun ishlaydi; "kutish" o'zgaruvchisi * bitta o'zaro faoliyat yurishning taxminiy davomiyligini belgilaydi. Nazariy jihatdan, 10 milodiy "kutish" ~ 10 soniya oralig'ida o'tishi kerak. Amalda, kod boshqa funktsiyalarni sekin -asta ~ 11 soniyagacha bajaradi. YMMV. * 3. Agar "Takrorlash" 0 ga o'rnatilgan bo'lsa, dastur abadiy aylanadi. * agar u raqamga o'rnatilgan bo'lsa, u bu sonni aylantiradi, * keyin ketma -ketlikdagi oxirgi rangda to'xtaydi. ("Qaytish" ni 1, * ga qo'ying va oxirgi rangni qora rangga aylantiring.) * 4. Ixtiyoriy "ushlab turish" o'zgaruvchisi mavjud bo'lib, u "ushlab turish" millisekundiga o'tkaziladi. rang tugadi, * lekin keyingi rang boshlanishidan oldin. * 5. Agar siz disk raskadrovka chiqishini ketma -ket monitorga yuborishni xohlasangiz, DEBUG bayrog'ini 1 ga o'rnating. * * Dasturning ichki qismlari murakkab emas, lekin ular biroz chalkash - ichki ishlar asosiy tsikl ostida * tushuntirilgan. * * 2007 yil aprel, Kley Shirkiy *
/ Chiqish
int grnPin = 9; // Yashil LED, raqamli pin 10 int redPin = 10 ga ulangan; // Qizil LED, raqamli pin 9 ulangan bluPin = 11; // Moviy LED, raqamli pin 11 ga ulangan
// Rangli massivlar
int qora [3] = {0, 0, 0}; int oq [3] = {100, 100, 100}; int qizil [3] = {100, 0, 0}; int yashil [3] = {0, 100, 0}; ko'k ko'k [3] = {0, 0, 100}; int sariq [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // va boshqalar.
// Boshlang'ich rangni o'rnating
int redVal = qora [0]; int grnVal = qora [1]; int bluVal = qora [2];
int kutish = 3; // 10 ms ichki crossFade kechikishi; sekinroq pasayishi uchun ortadi
int hold = 0; // Rang tugaganda ixtiyoriy ushlab turish, keyingi crossFade int DEBUG = 0gacha; // DEBUG hisoblagichi; agar 1 ga o'rnatilgan bo'lsa, qiymatlarni ketma -ket int yozadi loopCount = 60; // DEBUG qancha tez -tez xabar berishi kerak? int takrorlash = 0; // To'xtashdan oldin necha marta aylanishimiz kerak? (To'xtovsiz 0) int j = 0; // Takrorlash uchun taymer
// Rang o'zgaruvchilarini ishga tushiring
int prevR = redVal; int prevG = grnVal; int prevB = bluVal;
// LED chiqishlarini sozlash
void setup () {pinMode (redPin, OUTPUT); // pinlarni chiqish pinMode (grnPin, OUTPUT) sifatida belgilaydi; pinMode (bluPin, OUTPUT);
if (DEBUG) {// Agar biz disk raskadrovka uchun qiymatlarni ko'rishni istasak …
Serial.begin (9600); // … ketma -ket chiqishini o'rnatish}}
// Asosiy dastur: o'zaro faoliyat yurishlar tartibini sanab bering
void loop () {crossFade (qizil); crossFade (yashil); crossFade (ko'k); crossFade (sariq);
if (takrorlash) {// Biz sonli marta aylanamizmi?
j += 1; if (j> = takrorlash) {// Biz hali bormikan? chiqish (j); // Agar shunday bo'lsa, to'xtating. }}}
/* Quyidagi satr matematika - BUNI ASOSIYALAR UCHUN O'zgartirishingiz shart emas.
* * Dastur quyidagicha ishlaydi: * Qizil LEDni 0-10 dan, * yashilni 0-5 dan, ko'kni 10 dan 7 gacha * o'n qadamda siljitadigan xoch chizig'ini tasavvur qiling. * Biz 10 qadamni sanashni va rang qiymatlarini teng qadam bilan oshirishni yoki * kamaytirishni xohlaymiz. * Tasavvur qiling, a + qiymati 1 ga ko'tarilishini bildiradi va a - * uni pasaytirishga teng. Bizning 10 qadamlik pasayishimiz quyidagicha bo'ladi: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + * G + + + + + * B - - - * * Qizil ko'tariladi O'n qadamda 0 dan 10 gacha, yashil rang 5 qadamda * 0-5dan, ko'k esa uch bosqichda 10 dan 7 gacha tushadi. * * Haqiqiy dasturda rang foizlari * 0-255 qiymatiga aylanadi va 1020 qadam (255 * 4) mavjud. * * LED qiymatlaridan birining yuqoriga yoki * pastiga belgi qo'yish qanchalik katta qadam bo'lishi kerakligini aniqlash uchun, biz startStep () deb nomlaymiz, bu boshlanish va tugash qiymatlari orasidagi mutlaq bo'shliqni hisoblab chiqadi *, keyin qiymatni o'zgartirishlar orasidagi qadam * hajmini aniqlash uchun bu bo'shliqni 1020 ga bo'linadi. */
int hisoblashStep (int prevValue, int endValue) {
int qadam = endValue - prevValue; // Umumiy farq nima? if (qadam) {// Agar u nolga teng bo'lmasa, qadam = 1020/qadam; // 1020 ga bo'linish} qaytarish bosqichi; }
/* Keyingi funksiya calcVal. Qachon loop qiymati, i, * * ranglardan biriga mos keladigan qadam o'lchamiga etadi, bu rangning qiymatini 1 ga oshiradi yoki kamaytiradi. * (R, G va B har biri alohida hisoblanadi.) */
int hisoblashVal (int qadam, int val, int i) {
if ((qadam) && i % step == 0) {// Agar qadam nolga teng bo'lmasa va uning qiymatini o'zgartirish vaqti, if (qadam> 0) {// qadam ijobiy bo'lsa, qiymatni oshiring … val += 1; } if if (255 -qadam) {val = 255; } if if (val <0) {val = 0; } qaytish val; }
/* crossFade () ranglarning foizini a ga o'zgartiradi
* 0-255 oralig'ida, keyin 1020 marta aylantirib, * har safar qiymatni yangilash kerakligini tekshiring, so'ngra rang qiymatlarini * to'g'ri pimlarga yozing. */
void crossFade (int rang [3]) {
// 0-255 ga aylantirish int R = (rang [0] * 255) / 100; int G = (rang [1] * 255) / 100; int B = (rang [2] * 255) / 100;
int stepR = hisoblashStep (oldingiR, R);
int stepG = hisoblashStep (oldingiG, G); int stepB = hisoblashStep (oldingi B, B);
uchun (int i = 0; i <= 1020; i ++) {redVal = calcVal (stepR, redVal, i); grnVal = hisoblashVal (stepG, grnVal, i); bluVal = hisoblashVal (stepB, bluVal, i);
analogWrite (redPin, redVal); // LED pinlariga joriy qiymatlarni yozing
analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal);
kechiktirish (kutish); // Davrni davom ettirishdan oldin "kutish" millisekundiga pauza qiling
if (DEBUG) {// Agar biz ketma -ket chiqishni xohlasak, uni chop eting
if (i == 0 yoki i % loopCount == 0) {// boshlanishi va har bir loopCount marta Serial.print ("Loop/RGB: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Ketma -ket chop etish (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Keyingi tsikl uchun joriy qiymatlarni yangilang prevR = redVal; prevG = grnVal; prevB = bluVal; kechiktirish (ushlab turish); // Davrni davom ettirishdan oldin ixtiyoriy "kutish" millisekundiga pauza qiling}
2 -qadam: daraxtni o'rash
Men suv o'tkazmaydigan chiziqlardan foydalanardim, chunki ular ochiq havoda bo'ladi. Ular o'z -o'zidan yopishib olishdi, lekin men tezda ularning o'rnida qolishlari uchun simli rishtalar bilan bog'ladim. Oddiy va oson hack. Chiziqning uzatish qobiliyati quvvat manbaini pastki qismga va yuqori qismdan yulduzga uzatishni osonlashtirdi.
3 -qadam: Yuqoridagi yulduzni unutmang
Yulduz uchun men bir oz e'tiborni jalb qilish uchun 10 Vtli bir juft chipdan foydalandim. Men ularni sovutgich sifatida mis varaqqa lehimladim. Bir oz qolgani uchun men ko'proq tasma ishlatishim mumkin edi.
4 -qadam: Sinab ko'ring
Birinchi urinish tezligi juda tez edi ….
Bir marta tinchlantirdim, bu juda yaxshi ko'rinardi.
Tavsiya:
O'rnatilgan LED 3D bosilgan Rojdestvo daraxti: 10 qadam (rasmlar bilan)
O'rnatilgan LED 3D bosilgan Rojdestvo daraxti: bu 3D-bosma Rojdestvo daraxti, uning ichida o'rnatilgan manzilli LEDlar bor. Yorug'lik effektlari uchun LEDlarni dasturlash va 3D bosilgan tuzilmani diffuzor sifatida ishlatish mumkin. Daraxt 4 bosqichda va asosiy elementda (daraxt
LED Rojdestvo daraxti bezaklari: 15 qadam (rasmlar bilan)
LED Rojdestvo daraxti bezaklari: Bu Rojdestvoda men do'stlarim va oilamga Rojdestvo bezaklarini yasashga qaror qildim. Men bu yil KiCad -ni o'rganyapman, shuning uchun bezaklarni elektron platalardan yasashga qaror qildim. Men taxminan 20-25 ta bezak yasadim. Zeb -ziynat - bu aylana
Spiral boshli Rojdestvo daraxti: 4 qadam (rasmlar bilan)
Spiral Led Rojdestvo daraxti: Salom do'stlar, biz bu spiraldan yasalgan Rojdestvo daraxti yasaymiz
USB bilan ishlaydigan RGB LED Rojdestvo daraxti: 9 qadam (rasmlar bilan)
USB bilan ishlaydigan RGB LED Rojdestvo daraxti: Men fizzPOP a'zosi bo'lgan Makerspace -dagi bir necha do'st do'stlarim uchun Rojdestvo arafasida bir nechta sovg'alar berishga qaror qildim. Men qaror qildimki, men ularni butunlay o'zim quraman, shuning uchun ular to'plamni ishlab chiqaraman, shunda ular bino qurishdan zavqlanishadi
USB bilan ishlaydigan LED Rojdestvo daraxti: 9 qadam (rasmlar bilan)
USB -quvvat bilan ishlaydigan LED Rojdestvo daraxti: Dam olish kunlari men bir nechta do'stlarimga ajoyib narsa bermoqchi edim, o'sha paytga qadar men o'zimga oddiy elektron nazariyasini o'rgatganman va LEDlar bilan oshiq bo'lganman. Shunday qilib, men LEDlarni Rojdestvodan ikki hafta oldin buyurtma qildim, chunki bu etarli vaqt bo'ladi