Mündəricat:
- Addım 1: Nəzarətçi
- Addım 2: Ağacın sarılması
- Addım 3: Üstündəki Ulduzu Unutmayın
- Addım 4: Bunu sınayın
Video: LED Spiral Ağacı: 4 Adım (Şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Hər növ LED şeridi sevirəm. Onlarla gözəl bir göy qurşağı işığı yaratdım. Hətta ünvanlandırılmayanlar da faydalıdır. Açıq qabırğaları bağlayaraq parlaq bir bazar çətiri açıq işığı yaratdım, buna görə də spiral ağacım uçduqda ətrafına uzun bir şerit sarımaq qərarına gəldim.
Addım 1: Nəzarətçi
Mən ünvanlı olmayan RGB LED-lərindən istifadə etmək qərarına gəldim. Bu, proqramlaşdırılmış bir effekt verə biləcəyim deməkdir, ancaq bütün LEDlər eyni anda rəngini dəyişir. Bu da bir nəzarətçiyə ehtiyac olacağı deməkdir. Bir arduino uno istifadə edə bilərdim və RGB qalxanı ilə ilkin testləri edə bilərdim, ancaq çılpaq Atmega328 çipi olan xüsusi bir lövhə istifadə edərək sona çatdım. Sadəcə hədəf proqramçını dəyişdirmək və çipi birbaşa proqramlaşdırmaq lazım idi.
Digər lampa layihələrindən qalan çoxlu lövhələrim vardı. Əvəzində çətirimi düzəltdiyim kimi, ucuz proqramlaşdırılmış inline proqramlaşdırıcıdan istifadə etməkdən çekinmeyin.
Ağacın əsası olaraq yavaş bir çarpaz demo istifadə etdim.
/** Qırmızı, yaşıl və mavi rəngli 3 LED (RGB) keçmək üçün kod * Solğunluq yaratmaq üçün iki şeyi etməlisiniz: * 1. Göstərilməsini istədiyiniz rəngləri təsvir edin * 2. İstədiyiniz sıranı sadalayın. * * RENK AÇIQLAMA: * Bir rəng yalnız üç faizlik bir sıra, 0-100, * qırmızı, yaşıl və mavi LEDləri idarə etmək * * Qırmızı tam, mavi və yaşıl sönmüş qırmızı LEDdir * int qırmızı = {100, 0, 0} * Qaranlıq ağ 30% -də olan üç LED -dir * int dimWhite = {30, 30, 30} * və s. * * Bəzi ümumi rənglər aşağıda verilmişdir və ya özünüz edə bilərsiniz * * SİYAHI SİFARİŞ: * Proqramın əsas hissəsində rənglərin görünməsini istədiyiniz * sırasını qeyd etməlisiniz, məsələn. * crossFade (qırmızı); * crossFade (yaşıl); * crossFade (mavi); * * Bu rənglər * bir rəngdən sönərək digər rəngə keçərək sırayla görünəcək * * Əlavə olaraq tənzimləyə biləcəyiniz 5 əlavə parametr var: * 1. Başlanğıc rəng qara rəngdədir (ilk rəng solur) in), lakin * ilkin rəngi hər hansı digər rəng olaraq təyin edə bilərsiniz * 2. Daxili döngə 1020 qarşılıqlı əlaqə üçün çalışır; 'gözləmə' dəyişəni * tək bir çarpaz vuruşun təxmini müddətini təyin edir. Teorik olaraq, * 10 ms -lik 'gözləmə' ~ 10 saniyəlik bir crossFade etməlidir. * Təcrübədə, kodun yerinə yetirdiyi digər funksiyalar lövhəmdə ~ 11 saniyəyə qədər yavaşlayır. YMMV. * 3. 'Təkrarlama' 0 olaraq təyin olunarsa, proqram qeyri -müəyyən olaraq dönər. * bir rəqəmə təyin olunarsa, o dövrəni döndərəcək, * sonra ardıcıllıqla son rəngdə dayanacaq. ('Qayıdış' ı 1, * olaraq təyin edin və sonda solmasını istəsəniz son rəngi qara edin.) * 4. İsteğe bağlı 'tut' dəyişən var, bu zaman 'tut' millisaniyəsini * saxlayır. bir rəng tamamlandı, * lakin növbəti rəng başlamazdan əvvəl. * 5. Hata ayıklama çıxışının * seriyalı monitora göndərilməsini istəyirsinizsə, DEBUG bayrağını 1 olaraq təyin edin. * * Proqramın daxili hissələri mürəkkəb deyil, ancaq bir az qarışıqdır - daxili işləmə əsas döngənin altında * izah edilmişdir. * * Aprel 2007, Clay Shirky *
/ Çıxış
int grnPin = 9; // Yaşıl LED, rəqəmsal pin 10 int redPin = 10 -a bağlıdır; // Qırmızı LED, rəqəmsal pin 9 int bluPin = 11 -ə bağlıdır; // Mavi LED, rəqəmsal pin 11 -ə bağlıdır
// Rəng massivləri
int qara [3] = {0, 0, 0}; int ağ [3] = {100, 100, 100}; int qırmızı [3] = {100, 0, 0}; int yaşıl [3] = {0, 100, 0}; int mavi [3] = {0, 0, 100}; int sarı [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // və s.
// İlkin rəngi təyin edin
int redVal = qara [0]; int grnVal = qara [1]; int bluVal = qara [2];
int wait = 3; // 10 ms daxili crossFade gecikməsi; daha yavaş solması üçün artırın
int hold = 0; // Rəng tamamlandıqda, növbəti crossFade int DEBUG = 0 -a qədər isteğe bağlı tutma; // DEBUG sayğacı; 1 olaraq təyin olunarsa, dəyərləri serial int vasitəsilə yazacaq int loopCount = 60; // DEBUG nə qədər tez -tez hesabat verməlidir? int təkrar = 0; // Dayanmadan əvvəl neçə dəfə dönməliyik? (Dayanmadan 0) int j = 0; // Təkrar etmək üçün döngə sayğacı
// Rəng dəyişənlərini işə salın
int prevR = redVal; int prevG = grnVal; int prevB = bluVal;
// LED çıxışlarını qurun
boş quraşdırma () {pinMode (redPin, ÇIXIŞ); // pinləri çıxış pinMode (grnPin, ÇIXIŞ) olaraq təyin edir; pinMode (bluPin, Çıxış);
if (DEBUG) {// Hata ayıklama üçün dəyərlər görmək istəyiriksə…
Serial.begin (9600); //… serial çıxışı qurun}}
// Əsas proqram: çarpaz vuruşların sırasını sadalayın
void loop () {crossFade (qırmızı); crossFade (yaşıl); crossFade (mavi); crossFade (sarı);
if (təkrar) {// Sonlu dəfə döngə edirikmi?
j += 1; if (j> = təkrar) {// Hələ oradayıq? çıxış (j); // Əgər belədirsə, dayan. }}}
/* AŞAĞIDA BU XƏTƏBAT MATİYADIR - BUNU ƏSASLAR ÜÇÜN DƏYİŞTİRMƏYƏ Gərək YOXDUR
* * Proqram belə işləyir: * Qırmızı LED-i 0-10-dan, yaşıl rəngdən 0-5-dən, mavini 10-dan 7-yə * on addımda hərəkət etdirən bir çarpaz təsəvvür edin. * 10 addımı saymaq və bərabər addımlarla rəng dəyərlərini artırmaq və ya azaltmaq istərdik. * Təsəvvür edin ki, + işarəsi dəyərin 1 -ə yüksəldilməsini göstərir və a - * onu aşağı salmağa bərabərdir. 10 addımlıq solğunluğumuz belə görünür: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + * G + + + + + * B - - - * * Qırmızıdan yuxarı qalxır. On addımda 0 ilə 10, yaşıl 5 addımda * 0-5, mavi isə üç addımda 10-dan 7-yə düşür. * * Həqiqi proqramda rəng faizləri * 0-255 dəyərlərinə çevrilir və 1020 addım (255 * 4) var. * * LED dəyərlərindən birinin yuxarı və ya * aşağı işarəsi arasında nə qədər böyük bir addımın olacağını anlamaq üçün, başlanğıc və bitiş dəyərləri arasındakı mütləq boşluğu hesablayan calcStep () adlandırırıq. addımın ölçüsünü təyin etmək üçün bu boşluğu 1020 -ə bölür. */
int calcStep (int prevValue, int endValue) {
int addım = endValue - prevValue; // Ümumi fərq nədir? if (addım) {// Sıfır deyilsə, addım = 1020/addım; // 1020 ilə bölün} geri dönmə addımı; }
/* Növbəti funksiya calcVal -dır. Döngə dəyəri olduqda, i, * * rənglərdən biri üçün uyğun olan addım ölçüsünə çatır, o rəngin dəyərini 1 artırır və ya azaldır. * (R, G və B hər biri ayrıca hesablanır.) */
int calcVal (int addım, int val, int i) {
if ((addım) && i % addım == 0) {// Addım sıfır deyilsə və bir dəyəri dəyişdirmə vaxtıdırsa, if (addım> 0) {// addım müsbət olarsa dəyəri artırın… val += 1; } başqa əgər (addım 255) {val = 255; } başqa əgər (val <0) {val = 0; } qaytarma dəyəri; }
/* crossFade () faiz rənglərini a -ya çevirir
* 0-255 aralığında, sonra 1020 dəfə döngələr aparın, dəyərin hər dəfə yenilənməsinin lazım olub olmadığını yoxlayın, sonra rəng dəyərlərini düzgün sancaqlara yazın. */
boş crossFade (int rəngi [3]) {
// 0-255-ə çevirmək int R = (rəng [0] * 255) / 100; int G = (rəng [1] * 255) / 100; int B = (rəng [2] * 255) / 100;
int stepR = hesablama Addım (əvvəlkiR, R);
int stepG = hesablama Addım (əvvəlkiG, G); int stepB = hesablama Adımı (əvvəlki B, B);
for (int i = 0; i <= 1020; i ++) {redVal = calcVal (stepR, redVal, i); grnVal = calcVal (stepG, grnVal, i); bluVal = calcVal (stepB, bluVal, i);
analogWrite (redPin, redVal); // LED pinlərinə cari dəyərləri yazın
analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal);
gecikmə (gözləmək); // Döngəyə davam etməzdən əvvəl 'gözləmə' milisaniyələrini dayandırın
if (DEBUG) {// Serial çıxışı istəyiriksə, onu çap edin
if (i == 0 və ya i % loopCount == 0) {// başlanğıc və hər loopCount dəfə Serial.print ("Loop/RGB: #"); Serial. çap (i); Serial.print ("|"); Serial. çap (redVal); Serial.print (" /"); Serial. çap (grnVal); Serial.print (" /"); Serial.println (bluVal); } DEBUG += 1; }} // Növbəti döngə üçün cari dəyərləri yeniləyin prevR = redVal; prevG = grnVal; prevB = bluVal; gecikmə (tutma); // Döngəyə davam etməzdən əvvəl isteğe bağlı 'gözləmə' millisaniyələri üçün fasilə verin}
Addım 2: Ağacın sarılması
Suya davamlı zolaqlar istifadə etdim, çünki bunlar açıq havada olacaq. Öz -özünə yapışdılar, amma qaldıqlarından əmin olmaq üçün tezliklə tel bağlarını izlədim. Sadə və asan hack. Şeridin güc qabiliyyəti, enerji təchizatını aşağıya və yuxarıdan ulduza çıxarmağı asanlaşdırdı.
Addım 3: Üstündəki Ulduzu Unutmayın
Ulduz üçün bir az diqqət çəkmək üçün bir cüt 10W fiş istifadə etdim. Soyuducu olaraq onları mis təbəqəyə lehimlədim. Bir az qaldığı üçün daha çox zolaqdan istifadə edə bilərdim.
Addım 4: Bunu sınayın
İlk cəhd çox sürətli idi ….
Bir dəfə sakitləşdirsəm çox gözəl görünürdü.
Tövsiyə:
İkili Ağacı Mors Dekoder: 7 Adım (Şəkillərlə birlikdə)
İkili Ağac Morse Dekoderi: a. məqalələr {şrift ölçüsü: 110.0%; yazı tipi çəkisi: qalın; şrift tərzi: italik; mətn bəzəyi: heç biri; background-color: red;} a.articles: hover {background-color: black;} Bu təlimat bir Arduino Uno R3.T istifadə edərək Mors Kodunun necə açılacağını izah edir
RGB-LED Tel Ağacı: 9 Adım (Şəkillərlə birlikdə)
RGB-LED Tel Ağacı: RGB-LED tel ağacımı sizinlə bölüşmək istəyirəm. Bir axşam uşaqlıqda tel ağacları qurmağı xatırladım. İndiki vaxtda, xüsusən LED -lərlə, arduinoya bənzər mikrokontrollerlərlə kiçik elektron layihələr qurmaqdan çox zövq alıram. Buna görə öz -özümə düşündüm
RGB LED Maker Ağacı: 15 Adım (Şəkillərlə birlikdə)
RGB LED Maker Ağacı: Yerli istehsalçılarımız, dekabr ayında (2018) Main Street -də nümayiş etdiriləcək bir ağaca sponsorluq etdilər. Beyin fırtınası sessiyamızda, ağacın üzərinə ənənəvi bəzək yerinə gülünc miqdarda LED qoymaq fikri ortaya çıxdı
Spiral Led Milad ağacı: 4 addım (şəkillərlə)
Spiral Led Milad Ağacı: Salam dostlar Bu ağlasığmaz bir spiral başlıqlı Milad ağacı hazırlayacağıq
Super Milad Ağacı İşıqları: 10 Adım (Şəkillərlə birlikdə)
Super Milad Ağacı İşıqları: Bu il əslində sahib olduğum ilk ağac olan bir Milad ağacı aldım. Növbəti məntiqi addım onu bəzəmək idi. Ətrafdakılara baxanda gördüm ki, istədiklərimi yerinə yetirən heç bir işıq yoxdur. İstədiyim tək şey idi