Daftar Isi:
Video: Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video): 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:55
Setelah melihat proyek kubus mood kecil LED yang dibuat oleh 'earl, saya memutuskan untuk membuat versi yang lebih baik dari LED Mood Cube. Versi saya akan lebih kompleks daripada yang asli, karena akan sedikit lebih besar dari yang asli, memiliki dua warna lebih banyak dibandingkan dengan kubus asli (ditambahkan kuning dan putih), memiliki jumlah rotasi warna yang tak terbatas, dll. Ini harus menjadi proyek yang baik untuk mempraktekkan penggunaan lampu LED lebih lanjut bagi mereka yang memahami konsep menghubungkan lampu LED dengan kabel.
Langkah 1: Bahan
Berikut adalah beberapa bahan yang Anda perlukan untuk membuat Mood Cube ini:
- Papan tempat memotong roti
- Arduino - (Saya punya Leonardo di sini)
- Catu daya Arduino / kabel USB
- Papan tempat memotong roti
- Kabel Jumper (Banyak, saya menggunakan 29 kabel)
- LED merah x 2
- LED biru x 2
- LED hijau x 2
- LED kuning x 2
- LED putih x 1
- 9 resistor
- Kotak cukup besar untuk muat papan tempat memotong roti (saya menggunakan kotak sepatu)
- Kegunaan pisau
- Kertas
Langkah 2: Kode
Beberapa penjelasan untuk kode yang diberikan di sini:
Kredit kode diberikan ke sumber asli proyek saya karena editor proyek membuat kode-kode ini. Saya hanya memperbaiki beberapa dari mereka dengan membuatnya lebih kompleks. Dalam beberapa kode, Anda mungkin melihat //改 di akhir. Artinya kode ini saya edit sendiri, jadi berbeda dengan sumber asli saya.
Saya juga memiliki versi kode di Arduino Creator.
/* Kode cross-fading 3 LED, merah, hijau dan biru (RGB) Untuk membuat fade, Anda perlu melakukan dua hal: 1. Jelaskan warna yang ingin ditampilkan 2. Cantumkan urutan fade in yang Anda inginkan
DESKRIPSI WARNA:
Warna hanyalah susunan tiga persentase, 0-100, mengendalikan LED merah, hijau, dan biru
Merah adalah LED merah penuh, biru dan hijau mati
int red = { 100, 0, 0 } Putih redup adalah ketiga LED pada 30% int dimWhite = {30, 30, 30} dst.
Beberapa warna umum disediakan di bawah ini, atau buat sendiri
DAFTAR ORDER:
Di bagian utama program, Anda perlu membuat daftar urutan warna yang ingin Anda tampilkan, mis. crossFade(merah); crossFade(hijau); crossFade(biru);
Warna-warna itu akan muncul dalam urutan itu, memudar
satu warna dan ke yang berikutnya
Selain itu, ada 5 pengaturan opsional yang dapat Anda sesuaikan:
1. Warna awal diatur ke hitam (jadi warna pertama memudar), tetapi Anda dapat mengatur warna awal menjadi warna lain 2. Loop internal berjalan selama 1020 interaksi; variabel 'tunggu' menetapkan perkiraan durasi satu crossfade. Secara teori, 'menunggu' 10 ms harus membuat crossFade ~10 detik. Dalam praktiknya, fungsi lain yang dilakukan kode memperlambat ini hingga ~ 11 detik di papan saya. YMMV. 3. Jika 'repeat' disetel ke 0, program akan berulang tanpa batas. jika diatur ke angka, itu akan mengulang beberapa kali, lalu berhenti pada warna terakhir dalam urutan. (Atur 'kembali' ke 1, dan buat warna terakhir menjadi hitam jika Anda ingin memudarkannya di akhir.) 4. Ada variabel 'tahan' opsional, yang menghentikan program selama milidetik 'tahan' saat warna selesai, tetapi sebelum warna berikutnya dimulai. 5. Setel flag DEBUG ke 1 jika Anda ingin output debug dikirim ke monitor serial.
Bagian dalam program tidak rumit, tetapi mereka
sedikit rewel -- cara kerja bagian dalam dijelaskan di bawah loop utama.
April 2007, Clay Shirky
*
/ Keluaran
int ylwPin = 5; // LED kuning, terhubung ke pin digital 5 //改 int pin merah = 6; // LED merah, terhubung ke pin digital 6 //改 int grnPin = 7; // LED hijau, terhubung ke pin digital 7 //改 int bluPin = 8; // LED Biru, terhubung ke pin digital 8 //改 int whiPin = 9; // LED putih, terhubung ke pin digital 9 //改 int ylwPin2 = 10; // LED kuning, terhubung ke pin digital 10 //改 int redPin2 = 11; // LED merah, terhubung ke pin digital 11 //改 int grnPin2 = 12; // LED hijau, terhubung ke pin digital 12 //改 int bluPin2 = 13; // LED biru, terhubung ke pin digital 13 //改
// Array warna
int hitam[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };//改 int putih[9] = { 100, 100, 100, 100, 100, 100, 100, 100, 100 };//改 int merah[9] = { 0, 0, 100, 0, 0, 0, 100, 0, 0 };//改 int hijau[9] = { 0, 100, 0, 0, 0, 0, 0, 100, 0 };//改 int biru[9] = { 0, 0, 0, 100, 0, 0, 0, 0, 100 };//改 int kuning[9] = { 100, 0, 0, 0, 0, 100, 0, 0, 0 }; //改 int ungu[9] = { 0, 50, 0, 50, 0, 0, 50, 0, 50 }; //改 int oranye[9] = { 50, 50, 0, 0, 0, 50, 50, 0, 0 }; //改 int merah muda[9] = { 0, 50, 0, 0, 50, 0, 0, 50, 0, }; //改 // dll.
// Setel warna awal
int redVal = hitam[0]; int grnVal = hitam[1]; int bluVal = hitam[2]; int ylwVal = hitam[3]; //改 int whiVal = hitam[4]; //改
int tunggu = 15; // 10ms penundaan crossFade internal; peningkatan untuk fade yang lebih lambat //改
int tahan = 1; // Penahanan opsional saat warna selesai, sebelum crossFade berikutnya //改 int DEBUG = 1; // penghitung DEBUG; jika disetel ke 1, akan menulis nilai kembali melalui serial int loopCount = 60; // Seberapa sering DEBUG harus melaporkan? int ulangi = 0; // Berapa kali kita harus mengulang sebelum berhenti? (0 tanpa berhenti) //改 int j = 0; // Penghitung lingkaran untuk pengulangan
// Inisialisasi variabel warna
int prevR = redVal; int prevG = grnVal; int prevB = bluVal; int sebelumnya = ylwVal; int prevW = whiVal; //改
// Siapkan output LED
void setup() { pinMode(redPin, OUTPUT); // menetapkan pin sebagai output pinMode(grnPin, OUTPUT); pinMode(bluPin, OUTPUT); pinMode(ylwPin, OUTPUT); //改 pinMode(whiPin, OUTPUT); //改 pinMode(grnPin2, OUTPUT); //改 pinMode(bluPin2, OUTPUT); //改 pinMode(ylwPin2, OUTPUT); //改 pinMode(redPin2, OUTPUT); //改
if (DEBUG) { // Jika kita ingin melihat nilai untuk debugging…
Serial.begin(9600); // …mengatur keluaran serial } }
// Program utama: daftar urutan crossfades
void loop() { crossFade(merah); crossFade(hijau); crossFade(biru); crossFade(kuning); crossFade(putih); crossFade(merah muda); crossFade(ungu); crossFade(oranye);
if (repeat) { // Apakah kita mengulang beberapa kali?
j + = 1; if (j >= repeat) { // Apakah kita sudah sampai? keluar(j); // Jika demikian, berhenti. } } }
/* DI BAWAH GARIS INI ADALAH MATEMATIKA -- ANDA TIDAK PERLU MENGUBAH INI UNTUK DASAR
Program ini bekerja seperti ini:
Bayangkan sebuah crossfade yang menggerakkan LED merah dari 0-10, hijau dari 0-5, dan biru dari 10 ke 7, dalam sepuluh langkah. Kami ingin menghitung 10 langkah dan menambah atau mengurangi nilai warna secara bertahap. Bayangkan a + menunjukkan menaikkan nilai sebesar 1, dan a - sama dengan menurunkannya. 10 langkah fade kami akan terlihat seperti:
1 2 3 4 5 6 7 8 9 10
R + + + + + + + + + + G + + + + + B - - -
Merah naik dari 0 menjadi 10 dalam sepuluh langkah, hijau dari
0-5 dalam 5 langkah, dan biru turun dari 10 menjadi 7 dalam tiga langkah.
Dalam program nyata, persentase warna diubah menjadi
0-255 nilai, dan ada 1020 langkah (255*4).
Untuk mengetahui seberapa besar langkah yang harus ada antara satu naik- atau
down-tick salah satu nilai LED, kita sebut calcountStep(), yang menghitung kesenjangan absolut antara nilai awal dan akhir, dan kemudian membagi celah itu dengan 1020 untuk menentukan ukuran langkah antara penyesuaian nilai. */
int calStep(int prevValue, int endValue) {
int langkah = endValue - prevValue; // Berapa jarak keseluruhannya? if (langkah) { // Jika bukan nol, langkah = 1020 / langkah; // bagi dengan 1020 } kembalikan langkah; }
/* Fungsi selanjutnya adalah countVal. Ketika nilai loop, i, mencapai ukuran langkah yang sesuai untuk salah satu warna, itu menambah atau mengurangi nilai warna itu sebesar 1. (R, G, dan B masing-masing dihitung secara terpisah.) */
int calVal(int langkah, int val, int i) {
if ((langkah) && i % langkah == 0) { // Jika langkah bukan nol dan waktunya untuk mengubah nilai, if (langkah > 0) { // menambah nilai jika langkah positif… val += 1; } else if (langkah 255) { val = 255; } else if (val < 0) { val = 0; } nilai kembali; }
/* crossFade() mengonversi warna persentase menjadi a
rentang 0-255, lalu loop 1020 kali, periksa untuk melihat apakah nilainya perlu diperbarui setiap kali, lalu tulis nilai warna ke pin yang benar. */
void crossFade(int warna) { //改
// Konversi ke 0-255 int R = (warna[0] * 255) / 100; int G = (warna[1] * 255) / 100; int B = (warna[2] * 255) / 100; int Y = (warna[3] * 255) / 100; //改 int W = (warna[4] * 255) / 100; //改
int langkahR = hitungLangkah(sebelumnya, R);
int langkahG = hitungLangkah(sebelumnya, G); int langkahB = hitungLangkah(sebelumnyaB, B); int langkahY = hitungLangkah(sebelumnya, Y); //改 int langkahW = hitungLangkah(sebelumnyaW, W); //改
for (int i = 0; i <= 1020; i++) { redVal = menghitungVal(langkahR, redVal, i); grnVal = menghitungVal(langkahG, grnVal, i); bluVal = menghitungVal(langkahB, bluVal, i); ylwVal = menghitungVal(langkahY, ylwVal, i); //改 whiVal = countVal(langkahW, whiVal, i); //改
analogWrite(redPin, redVal); // Tulis nilai saat ini ke pin LED
analogWrite(grnPin, grnVal); analogWrite(bluPin, bluVal); analogWrite(ylwPin, ylwVal); //改 analogWrite(whiPin, whiVal); //改 analogWrite(grnPin2, grnVal); //改 analogWrite(bluPin2, bluVal); //改 analogWrite(ylwPin2, ylwVal); //改 analogWrite(redPin2, redVal); //改
tunda (tunggu); // Jeda selama 'tunggu' milidetik sebelum melanjutkan perulangan
if (DEBUG) { // Jika kita menginginkan serial output, print di
if (i == 0 atau i % loopCount == 0) { // awal, dan setiap loopCount kali Serial.print("Loop/RGBYW: #"); Serial.print(i); Serial.print(" | "); Serial.print(redVal); Serial.print(" / "); Serial.print(grnVal); Serial.print(" / "); Serial.println(bluVal); Serial.print(" / "); Serial.println(ylwVal); //改 Serial.print(" / "); //改 Serial.println(whiVal); //改 Serial.print(" / "); //改 } DEBUG += 1; } } // Perbarui nilai saat ini untuk loop berikutnya prevR = redVal; sebelumnya = grnVal; sebelumnyaB = bluVal; sebelumnya = ylwVal; //改 prevW = whiVal; //改 tunda(tahan); // Jeda untuk opsional 'tunggu' milidetik sebelum melanjutkan loop }
Langkah 3: Siapkan
- Dapatkan papan tempat memotong roti.
-
Demo menghubungkan kabel sehingga lampu LED bisa bersinar:
- Letakkan LED di papan tempat memotong roti. Tempatkan ujung yang lebih panjang di sebelah kiri dan ujung yang lebih pendek di sebelah kanan.
- Tempatkan salah satu ujung kabel jumper di tempat yang berada di baris yang sama dengan ujung LED yang lebih panjang. Tempatkan ujung lainnya ke bagian Digital PWM. Kode tersebut menentukan LED kuning untuk dihubungkan ke 10 dan 5, yang merah ke 6 dan 11, yang biru ke 8 dan 13, yang hijau ke 7 dan 12, dan akhirnya LED putih ke 9.
- Tempatkan salah satu ujung resistor pada baris yang sama dengan ujung LED yang lebih pendek. Tempatkan ujung lainnya di suatu tempat dekat.
- Tempatkan ujung kabel jumper lain yang sebaris dengan ujung resistor yang tidak sebaris dengan ujung LED yang lebih pendek. Tempatkan ujung kabel yang lain pada baris muatan negatif.
- Tempatkan ujung kabel jumper lainnya pada baris muatan negatif dan tempatkan ujung lainnya pada GND.
- Ulangi Langkah 2 sebanyak 8 kali saat Anda ingin 9 LED bersinar
-
Tempatkan papan tempat memotong roti di dalam kotak. Beberapa pengingat di sini:
- Saya menggunakan catu daya. Buat lubang kecil untuk kabel Anda menggunakan pisau utilitas untuk melewati kotak dan sambungkan ke papan tempat memotong roti.
- Pastikan kotak sebagai salah satu sisi yang terbuka. Sebuah kotak sepatu sudah memiliki satu sisi yang terbuka. Jika kotak tertutup sepenuhnya, potong salah satu sisi kotak untuk membuat ruang terbuka.
- Tutupi sisi tanpa apa-apa dengan kertas. Ini untuk lampu LED bersinar melalui kertas.
Direkomendasikan:
Lampu Suasana Hati LED $1 Dengan ATtiny13 dan WS2812: 7 Langkah
Lampu Mood LED $1 Dengan ATtiny13 dan WS2812: Ini adalah lampu mood murah dengan empat mode.1. Percikan pelangi. Sebuah percikan cahaya bergerak ke atas dari waktu ke waktu dan secara bertahap berubah warna.2. Cahaya pelangi. Cahaya stabil yang secara bertahap berubah warna.3. Simulasi api lilin.4. Mati. Anda boleh
Lampu Suasana Hati (DIY): 3 Langkah
Lampu Suasana Hati (DIY): Lámpara yang dapat diprogram sesuai dengan keinginan Anda untuk sala pase de un ambiente normal a un ambiente que llame la atención. Esta lámpara cuenta con dos modos, controlados tan solo con un botón! Un modo manual en el que podrás decidir que warna se asienta más
Lampu Suasana Hati Diego Castillo 20764: 4 Langkah
Lampu Suasana Hati Diego Castillo 20764: "Lampu Suasana Hati" La lampara de sentimientos es capas de funcionar en 2 modos: Manual y Automático.En modo Manual los colores podrán ser regulados a través de 3 potensi dan modo Automático lo que determinara el color de tu lampara, será
Lampu Suasana Hati 20387: 3 Langkah
Lampu Suasana Hati 20387: Este proyecto konsisten untuk membangun kembali laut capaz de tener principalmente dos modos de funcionamiento utilizando un módulo de leds RGB. El modo automático tomará informasi del medio ambiente por medio de dos sensores analógico
Lampu Suasana Hati Dengan RGB Led: 4 Langkah
Mood Lamp Dengan RGB Led: Este proyecto se trató de hacer una lampara de *sentimientos* utilizando un Arduino Uno. Primero senecesitan varios materiales como jumper, leds RGB o Neopixel, tergantung pada desain hacer. En este caso utilizaremos led RGB con ánodo común