Isi kandungan:

Pokok Spiral LED: 4 Langkah (dengan Gambar)
Pokok Spiral LED: 4 Langkah (dengan Gambar)

Video: Pokok Spiral LED: 4 Langkah (dengan Gambar)

Video: Pokok Spiral LED: 4 Langkah (dengan Gambar)
Video: Wooden Spiral Christmas Tree Construction 2024, Julai
Anonim
Pokok Spiral LED
Pokok Spiral LED
Pokok Spiral LED
Pokok Spiral LED
Pokok Spiral LED
Pokok Spiral LED

Saya suka semua jenis jalur LED. Saya membuat cahaya pelangi yang bagus dengan mereka. Malah yang tidak dapat dihubungi berguna. Saya telah membuat lampu luar payung pasar yang terang dengan melekatkannya pada tulang rusuk unbrella sehingga ketika pokok spiral saya meletup, saya memutuskan untuk membungkus panjang jalur yang dipimpin di sekelilingnya.

Langkah 1: Pengawal

Pengawal
Pengawal
Pengawal
Pengawal
Pengawal
Pengawal

Saya memutuskan untuk menggunakan led RGB yang tidak dapat diatasi. Ini bermakna saya boleh mempunyai kesan yang diprogramkan tetapi semua led berubah warna secara serentak. Ini juga bermaksud pengawal diperlukan. Saya mungkin menggunakan arduino uno dan melakukan ujian awal menggunakan perisai RGB tetapi akhirnya menggunakan papan tunggal khusus dengan cip Atmega328 yang kosong. Hanya perlu menukar programmer sasaran dan memprogramkan chip secara langsung.

Saya mempunyai banyak papan yang tersisa dari projek lampu yang lain. Jangan ragu untuk menggunakan alat kawalan dalam talian yang murah seperti yang saya pakai pada payung saya sebagai gantinya.

Saya akhirnya menggunakan demo crossfade yang perlahan sebagai asas pokok.

/ ** Kod untuk 3 LED silang, merah, hijau dan biru (RGB) * Untuk membuat pudar, anda perlu melakukan dua perkara: * 1. Huraikan warna yang ingin anda paparkan * 2. Senaraikan pesanan yang anda mahukan mereka memudar * * MENJELASKAN WARNA: * Warna hanyalah susunan tiga peratus, 0-100, * mengawal LED merah, hijau dan biru * * Merah adalah LED merah sepenuhnya, biru dan hijau mati * int merah = {100, 0, 0} * Dim red putih adalah ketiga LED pada 30% * int dimWhite = {30, 30, 30} * dll * * Beberapa warna biasa disediakan di bawah, atau buat warna anda sendiri * * DAFTAR PESANAN: * Di bahagian utama program, anda perlu menyenaraikan urutan * yang anda mahu warna muncul, misalnya * crossFade (merah); * crossFade (hijau); * crossFade (biru); * * Warna-warna itu akan muncul dalam urutan itu, memudar dari * satu warna dan ke warna berikutnya * * Selain itu, ada 5 tetapan pilihan yang dapat Anda sesuaikan: * 1. Warna awal diatur ke hitam (sehingga warna pertama memudar dalam), tetapi * anda boleh menetapkan warna awal menjadi warna lain * 2. Gelung dalaman berjalan selama 1020 interaksi; pemboleh ubah 'tunggu' * menetapkan jangka masa jangka masa satu crossfade. Secara teori, * 'tunggu' 10 ms harus membuat crossFade ~ 10 saat. Dalam praktik *, fungsi lain yang dilakukan kod ini perlahan * hingga ~ 11 saat di papan saya. YMMV. * 3. Sekiranya 'ulangan' diatur ke 0, program akan dilambung selama-lamanya. * jika diatur ke angka, ia akan mengulangi bilangan kali, * kemudian berhenti pada warna terakhir dalam urutan. (Tetapkan 'kembali' ke 1, * dan buat warna terakhir menjadi hitam jika anda mahu ia pudar di akhir.) * 4. Terdapat pemboleh ubah 'tahan' pilihan, yang melewati program * untuk 'tahan' milisaat ketika warna selesai, * tetapi sebelum warna seterusnya bermula. * 5. Tetapkan bendera DEBUG ke 1 jika anda mahu output debug * dihantar ke monitor bersiri. * * Program dalaman tidak rumit, tetapi * agak cerewet - cara kerja dalaman dijelaskan * di bawah gelung utama. * * April 2007, Clay Shirky *

/ Pengeluaran

int grnPin = 9; // LED hijau, disambungkan ke pin digital 10 int redPin = 10; // LED Merah, disambungkan ke pin digital 9 int bluPin = 11; // LED biru, disambungkan ke pin digital 11

// Susunan warna

int hitam [3] = {0, 0, 0}; int putih [3] = {100, 100, 100}; int merah [3] = {100, 0, 0}; int hijau [3] = {0, 100, 0}; int biru [3] = {0, 0, 100}; int kuning [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // dan lain-lain.

// Tetapkan warna awal

int redVal = hitam [0]; int grnVal = hitam [1]; int bluVal = hitam [2];

int menunggu = 3; // Kelewatan crossFade dalaman 10ms; meningkat untuk pudar yang lebih perlahan

int tahan = 0; // Tahan pilihan apabila warna selesai, sebelum crossFade int DEBUG = 0 seterusnya; // Kaunter DEBUG; jika ditetapkan ke 1, akan menulis kembali nilai melalui int int loopCount = 60; // Berapa kerapkah laporan DEBUG? ulangan int = 0; // Berapa kali kita mesti melancarkan sebelum berhenti? (0 tanpa henti) int j = 0; // Loop counter untuk diulang

// Memulakan pemboleh ubah warna

int prevR = redVal; int prevG = grnVal; int prevB = bluVal;

// Siapkan output LED

batal persediaan () {pinMode (redPin, OUTPUT); // menetapkan pin sebagai output pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT);

if (DEBUG) {// Sekiranya kita ingin melihat nilai untuk debug…

Serial.begin (9600); // … sediakan siri ouput}}

// Program utama: senaraikan urutan crossfades

gelung kosong () {crossFade (merah); crossFade (hijau); crossFade (biru); crossFade (kuning);

jika (ulangi) {// Adakah kita mengulangi sebilangan kali yang terbatas?

j + = 1; if (j> = ulangi) {// Adakah kita masih ada? jalan keluar (j); // Jika ya, berhenti. }}}

/ * DI BAWAH LINE INI ADALAH MATI - ANDA TIDAK PERLU MENGUBAH INI UNTUK DASAR

* * Program ini berfungsi seperti ini: * Bayangkan crossfade yang menggerakkan LED merah dari 0-10, * hijau dari 0-5, dan biru dari 10 hingga 7, dalam * sepuluh langkah. * Kami ingin mengira 10 langkah dan meningkatkan atau * menurunkan nilai warna dengan kenaikan yang sama rata. * Bayangkan a + menunjukkan kenaikan nilai dengan 1, dan - * sama dengan menurunkannya. Pudar 10 langkah kami akan kelihatan seperti: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + * G + + + + + * B - - - * * Merah naik dari 0 hingga 10 dalam sepuluh langkah, hijau dari * 0-5 dalam 5 langkah, dan biru jatuh dari 10 hingga 7 dalam tiga langkah. * * Dalam program sebenarnya, peratusan warna ditukar menjadi * 0-255 nilai, dan ada 1020 langkah (255 * 4). * * Untuk mengetahui seberapa besar langkah yang harus ada di antara satu-atau-ke-bawah dari salah satu nilai LED, kami memanggil calculepep (), * yang mengira jurang mutlak antara nilai-nilai awal dan akhir, * dan kemudian membahagikan jurang itu dengan 1020 untuk menentukan ukuran langkah * antara penyesuaian nilai. * /

int calculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Apakah jurang keseluruhan? if (langkah) {// Sekiranya bukan sifar, langkah = 1020 / langkah; // bahagikan dengan 1020} langkah kembali; }

/ * Fungsi seterusnya adalah calculVal. Apabila nilai gelung, i, * mencapai ukuran langkah yang sesuai untuk salah satu warna *, ia menambah atau menurunkan nilai warna itu dengan 1. * (R, G, dan B masing-masing dikira secara berasingan.) * /

int calculateVal (langkah int, int val, int i) {

if ((step) && i% step == 0) {// Sekiranya langkah tidak sifar dan waktunya untuk menukar nilai, jika (langkah> 0) {// tambah nilai jika langkah positif… val + = 1; } lain jika (langkah 255) {val = 255; } lain jika (val <0) {val = 0; } pulangan val; }

/ * crossFade () menukar warna peratusan menjadi a

* Julat 0-255, kemudian gelung 1020 kali, periksa untuk melihat apakah * nilainya perlu dikemas kini setiap kali, kemudian tulis * nilai warna ke pin yang betul. * /

kekosongan crossFade (warna int [3]) {

// Tukar ke 0-255 int R = (warna [0] * 255) / 100; int G = (warna [1] * 255) / 100; int B = (warna [2] * 255) / 100;

int stepR = hitungLangkah (prevR, R);

int stepG = hitungLangkah (prevG, G); int stepB = hitungLangkah (prevB, B);

untuk (int i = 0; i <= 1020; i ++) {redVal = calculVal (stepR, redVal, i); grnVal = calculVal (stepG, grnVal, i); bluVal = calculVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // Tuliskan nilai semasa ke pin LED

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal);

kelewatan (tunggu); // Jeda untuk 'tunggu' milisaat sebelum meneruskan gelung

if (DEBUG) {// Jika kita ingin output bersiri, cetak di

if (i == 0 atau i% loopCount == 0) {// permulaan, dan setiap loopCount kali Serial.print ("Loop / RGB: #"); Cetakan bersiri (i); Cetakan bersiri ("|"); Serial.print (redVal); Cetakan bersiri ("/"); Serial.print (grnVal); Cetakan bersiri ("/"); Serial.println (bluVal); } DEBUG + = 1; }} // Kemas kini nilai semasa untuk gelung seterusnya prevR = redVal; prevG = grnVal; prevB = bluVal; kelewatan (tahan); // Jeda untuk pilihan 'tunggu' milisaat sebelum meneruskan gelung}

Langkah 2: Membungkus Pokok

Membungkus Pokok
Membungkus Pokok
Membungkus Pokok
Membungkus Pokok
Membungkus Pokok
Membungkus Pokok
Membungkus Pokok
Membungkus Pokok

Saya menggunakan jalur kalis air kerana ini akan berada di luar rumah. Mereka melekat sendiri tetapi saya dengan cepat menindaklanjuti ikatan wayar untuk memastikan mereka tetap bertahan. Hack yang mudah dan senang. Keupayaan daya umpan jalur menjadikannya mudah untuk memasukkan bekalan kuasa ke bahagian bawah dan mengeluarkan kuasa dari bahagian atas ke bintang.

Langkah 3: Jangan Lupakan Bintang di Atas

Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas
Jangan Lupakan Bintang di Atas

Untuk bintang saya menggunakan sepasang cip 10W untuk mendapat perhatian. Saya menyoldernya ke kepingan tembaga sebagai heatsink. Saya boleh menggunakan lebih banyak jalur kerana masih ada sedikit baki.

Langkah 4: Mencuba

Image
Image

Percubaan pertama mempunyai kelajuan terlalu cepat….

Setelah saya menenangkannya, ia kelihatan sangat bagus.

Disyorkan: