Daftar Isi:

Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video): 4 Langkah
Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video): 4 Langkah

Video: Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video): 4 Langkah

Video: Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video): 4 Langkah
Video: 3 Bocah Terlindas Truk Saat Selfie Di Atas Motor 2024, Juli
Anonim
Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video)
Meningkatkan Kubus Suasana Hati LED Arduino (Sederhana) (Termasuk Video)

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

Bahan
Bahan
Bahan
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

Mempersiapkan
Mempersiapkan
Mempersiapkan
Mempersiapkan
Mempersiapkan
Mempersiapkan
  1. Dapatkan papan tempat memotong roti.
  2. Demo menghubungkan kabel sehingga lampu LED bisa bersinar:

    1. Letakkan LED di papan tempat memotong roti. Tempatkan ujung yang lebih panjang di sebelah kiri dan ujung yang lebih pendek di sebelah kanan.
    2. 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.
    3. Tempatkan salah satu ujung resistor pada baris yang sama dengan ujung LED yang lebih pendek. Tempatkan ujung lainnya di suatu tempat dekat.
    4. 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.
    5. Tempatkan ujung kabel jumper lainnya pada baris muatan negatif dan tempatkan ujung lainnya pada GND.
  3. Ulangi Langkah 2 sebanyak 8 kali saat Anda ingin 9 LED bersinar
  4. Tempatkan papan tempat memotong roti di dalam kotak. Beberapa pengingat di sini:

    1. Saya menggunakan catu daya. Buat lubang kecil untuk kabel Anda menggunakan pisau utilitas untuk melewati kotak dan sambungkan ke papan tempat memotong roti.
    2. 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.
    3. Tutupi sisi tanpa apa-apa dengan kertas. Ini untuk lampu LED bersinar melalui kertas.

Direkomendasikan: