Daftar Isi:

64 Pixel RGB LED Display - Klon Arduino Lain: 12 Langkah (dengan Gambar)
64 Pixel RGB LED Display - Klon Arduino Lain: 12 Langkah (dengan Gambar)

Video: 64 Pixel RGB LED Display - Klon Arduino Lain: 12 Langkah (dengan Gambar)

Video: 64 Pixel RGB LED Display - Klon Arduino Lain: 12 Langkah (dengan Gambar)
Video: Perbedaan Led Strip Ws2811 Vs Ws2812B ┃SP107e controller rgb led 2024, November
Anonim
Tampilan LED 64 Pixel RGB - Klon Arduino Lain
Tampilan LED 64 Pixel RGB - Klon Arduino Lain
Tampilan LED 64 Pixel RGB - Klon Arduino Lain
Tampilan LED 64 Pixel RGB - Klon Arduino Lain
Tampilan LED 64 Pixel RGB - Klon Arduino Lain
Tampilan LED 64 Pixel RGB - Klon Arduino Lain

Tampilan ini didasarkan pada Matriks LED 8x8 RGB. Untuk tujuan pengujian itu terhubung ke papan Arduino standar (Diecimila) menggunakan 4 register geser. Setelah membuatnya berfungsi, saya mengizinkannya pada PCB yang dibuat-buat. Register geser memiliki lebar 8-bit dan mudah dihubungkan dengan protokol SPI. Modulasi lebar pulsa digunakan untuk mencampur warna, lebih lanjut tentang itu nanti. Bagian dari RAM MCU digunakan sebagai framebuffer untuk menampung gambar. RAM video diuraikan oleh rutin interupsi di latar belakang, sehingga pengguna dapat melakukan hal-hal berguna lainnya seperti berbicara dengan PC, tombol baca, dan potensiometer. Informasi lebih lanjut tentang "Arduino": www.arduino.cc

Langkah 1: Modulasi Lebar Pulsa untuk Mencampur Warna

Modulasi Lebar Pulsa untuk Mencampur Warna
Modulasi Lebar Pulsa untuk Mencampur Warna

Modu lebar pulsa - APA ?Modulasi lebar pulsa pada dasarnya mengubah daya yang diumpankan ke perangkat listrik ON dan OFF cukup cepat. Hasil daya yang dapat digunakan dari rata-rata matematis dari fungsi gelombang persegi yang diambil selama interval satu periode. Semakin lama fungsi tetap dalam posisi ON, semakin banyak daya yang Anda dapatkan. PWM memiliki efek yang sama pada kecerahan LED seperti dimmer pada lampu AC. Tugas selanjutnya adalah mengontrol kecerahan 64 LED RGB (= 192 LED tunggal!) secara individual dengan cara yang murah dan mudah, sehingga seseorang bisa mendapatkan keseluruhan spektrum warna. Sebaiknya tidak ada kedipan atau efek mengganggu lainnya. Persepsi kecerahan nonlinier yang ditunjukkan oleh mata manusia tidak akan diperhitungkan di sini (misalnya perbedaan antara kecerahan 10% dan 20% tampak "lebih besar" daripada antara 90% dan 100%). Gambar (1) mengilustrasikan prinsip kerja algoritma PWM. Katakanlah kode tersebut diberi nilai 7 untuk kecerahan LED (0, 0). Lebih jauh lagi, ia mengetahui bahwa ada maksimum N langkah dalam kecerahan. Kode menjalankan N loop untuk semua kemungkinan tingkat kecerahan dan semua loop yang diperlukan untuk melayani setiap LED di semua baris. Jika penghitung loop x di loop kecerahan lebih kecil dari 7, LED menyala. Jika lebih besar dari 7, LED dimatikan. Melakukan ini dengan sangat cepat untuk semua LED, tingkat kecerahan, dan warna dasar (RGB), setiap LED dapat disesuaikan secara individual untuk menampilkan warna yang diinginkan. Pengukuran dengan osiloskop menunjukkan bahwa kode penyegaran tampilan membutuhkan waktu CPU sekitar 50%. Sisanya dapat digunakan untuk melakukan komunikasi serial dengan PC, membaca tombol, berbicara dengan pembaca RFID, mengirim I2C data ke modul lain…

Langkah 2: Berbicara dengan Shift Register dan LED

Berbicara dengan Shift Register dan LED
Berbicara dengan Shift Register dan LED
Berbicara dengan Shift Register dan LED
Berbicara dengan Shift Register dan LED

Register geser adalah perangkat yang memungkinkan untuk memuat data secara serial dan output paralel. Operasi sebaliknya juga dimungkinkan dengan chip yang sesuai. Ada tutorial bagus tentang register geser di situs web arduino. LED digerakkan oleh register geser 8-bit dari tipe 74HC595. Setiap port dapat sumber atau tenggelam sekitar 25mA saat ini. Total arus per chip yang ditenggelamkan atau bersumber tidak boleh melebihi 70mA. Keripik ini sangat murah, jadi jangan membayar lebih dari sekitar 40 sen per potong. Karena LED memiliki karakteristik arus/tegangan eksponensial, maka perlu ada resistor pembatas arus. Menggunakan hukum Ohm: R = (V - Vf) / IR = resistor pembatas, V = 5V, Vf = tegangan maju LED, I = arus yang diinginkan LED merah memiliki tegangan maju sekitar 1.8V, biru dan hijau berkisar dari 2.5V hingga 3.5V. Gunakan multimeter sederhana untuk menentukannya. Untuk reproduksi warna yang tepat, seseorang harus mempertimbangkan beberapa hal: sensitivitas spektral mata manusia (merah/biru: buruk, hijau: baik), efisiensi LED pada panjang gelombang dan arus tertentu. Dalam praktiknya, seseorang cukup mengambil 3 potensiometer dan menyesuaikannya hingga LED menunjukkan cahaya putih yang sesuai. Tentu saja arus LED maksimum tidak boleh dilampaui. Yang juga penting di sini adalah bahwa register geser yang menggerakkan baris harus memasok arus ke LED 3x8, jadi lebih baik tidak mendorong arus terlalu tinggi. Saya berhasil dengan membatasi resistor 270Ohm untuk semua LED, tapi itu tergantung pada pembuatan matriks LED tentunya. Register geser dihubungkan dengan serial SPI. SPI = Serial Peripheral Interface (Gambar (1)). Berlawanan dengan port serial pada PC (asynchronous, tidak ada sinyal clock), SPI membutuhkan clock line (SRCLK). Lalu ada garis sinyal yang memberi tahu perangkat saat data valid (pilih chip / latch / RCLK). Akhirnya ada dua jalur data, satu disebut MOSI (master out slave in), yang lain disebut MISO (master in slave out). SPI digunakan untuk antarmuka sirkuit terpadu, seperti I2C. Proyek ini membutuhkan MOSI, SRCLK dan RCLK. Selain itu, jalur aktifkan (G) juga digunakan. Siklus SPI dimulai dengan menarik garis RCLK ke LOW (Gambar (2)). MCU mengirimkan datanya pada jalur MOSI. Keadaan logisnya disampel oleh register geser di tepi naik garis SRCLK. Siklus diakhiri dengan menarik garis RCLK kembali ke TINGGI. Sekarang data tersedia di output.

Langkah 3: Skema

Skema
Skema
Skema
Skema

Gambar (1) menunjukkan bagaimana register geser dihubungkan. Mereka adalah daisy-chain, sehingga data dapat digeser ke dalam rantai ini dan juga melaluinya. Oleh karena itu menambahkan lebih banyak register geser itu mudah.

Gambar (2) menunjukkan sisa skema dengan MCU, konektor, kuarsa… File PDF terlampir berisi seluruh karya, paling baik untuk dicetak.

Langkah 4: Kode Sumber C++

Kode Sumber C++
Kode Sumber C++
Kode Sumber C++
Kode Sumber C++
Kode Sumber C++
Kode Sumber C++

Dalam C/C++ biasanya seseorang harus membuat prototipe fungsi sebelum mengkodekannya.#include int main(void);void do_something(void);int main(void) { do_something();}void do_something(void) { /* comment */ }Arduino IDE tidak memerlukan langkah ini, karena prototipe fungsi dihasilkan secara otomatis. Oleh karena itu prototipe fungsi tidak akan muncul dalam kode yang ditampilkan di sini. Gambar (1): setup() functionImage (2): spi_transfer() fungsi menggunakan hardware SPI chip ATmega168 (berjalan lebih cepat)Gambar (3): kode framebuffer menggunakan interupsi overflow timer1. Potongan kode yang memiliki tampilan agak samar untuk pemula, mis while(!(SPSR & (1<<SPIF))) {} menggunakan register MCU secara langsung. Contoh ini dalam kata-kata: "sementara SPIF-bit di register SPSR tidak disetel tidak melakukan apa-apa". Saya hanya ingin menekankan bahwa untuk proyek standar, sebenarnya tidak perlu berurusan dengan hal-hal ini yang terkait erat dengan perangkat keras. Pemula tidak perlu takut dengan ini.

Langkah 5: Gadget Selesai

Gadget Selesai
Gadget Selesai
Gadget Selesai
Gadget Selesai
Gadget Selesai
Gadget Selesai

Setelah menyelesaikan semua masalah dan menjalankan kode, saya hanya perlu membuat tata letak PCB dan mengirimkannya ke rumah yang luar biasa. Terlihat jauh lebih bersih:-)Gambar (1): papan pengontrol terisi penuhGambar (2): sisi depan PCB kosong Gambar (2): sisi belakangAda konektor yang memutus PORTC dan PORTD chip ATmega168/328 dan 5V/GND. Port ini berisi serial RX, TX lines, I2Jalur C, jalur I/O digital dan 7 jalur ADC. Ini dimaksudkan untuk menumpuk perisai di bagian belakang papan. Spasi ini cocok untuk menggunakan perfboard (0,1in). Bootloader dapat di-flash menggunakan header ICSP (berfungsi dengan USBtinyISP adafruit). Segera setelah selesai, cukup gunakan adaptor serial USB/TTL FTDI standar atau yang serupa. Saya juga telah menambahkan jumper auto-reset-disable. Saya juga telah membuat skrip Perl kecil (lihat blog saya), yang memungkinkan reset otomatis dengan kabel FTDI yang biasanya tidak berfungsi di luar kotak (jalur RTS vs. DTR). Ini berfungsi di Linux, mungkin di MAC. Papan sirkuit tercetak dan beberapa KIT DIY tersedia di blog saya. Solder SMD diperlukan! Lihat file PDF untuk instruksi bangunan dan sumber untuk matriks LED.

Langkah 6: Aplikasi: Monitor Beban CPU untuk Linux Menggunakan Perl

Ini adalah monitor beban yang sangat mendasar dengan plot riwayat. Ini didasarkan pada skrip Perl yang mengumpulkan "rata-rata beban" sistem setiap 1 detik menggunakan iostat. Data disimpan dalam array yang digeser pada setiap pembaruan. Data baru ditambahkan di bagian atas daftar, entri terlama akan didorong keluar. Informasi lebih rinci dan unduhan (kode…) tersedia di blog saya.

Langkah 7: Aplikasi: Berbicara dengan Modul Lain Menggunakan I²C

Aplikasi: Berbicara dengan Modul Lain Menggunakan I²C
Aplikasi: Berbicara dengan Modul Lain Menggunakan I²C

Ini hanyalah bukti prinsip dan sejauh ini bukan solusi paling sederhana untuk pekerjaan ini. Menggunakan I2C memungkinkan untuk secara langsung menangani hingga 127 papan "slave". Di sini papan di sisi kanan dalam video adalah "master" (yang memulai semua transfer), papan kiri adalah budak (menunggu data). Saya2C membutuhkan 2 saluran sinyal dan saluran listrik biasa (+, -, SDA, SCL). Karena ini adalah bus, semua perangkat terhubung secara paralel.

Langkah 8: Aplikasi: "Game Cube":-)

Aplikasi
Aplikasi

Hanya pemikiran aneh. Yang ini juga cocok dengan kandang kayu yang ditampilkan di halaman intro. Ada 5 tombol di bagian belakang yang bisa digunakan untuk bermain game sederhana. AKHIR ?

Langkah 9: Menampilkan Gambar / Animasi pada Matriks - Peretasan Cepat

Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat
Menampilkan Gambar / Animasi di Matrix - Peretasan Cepat

Jadi hanya ada 8x8 piksel dan beberapa warna yang tersedia. Pertama, gunakan sesuatu seperti Gimp untuk memperkecil ukuran gambar favorit Anda menjadi 8x8 piksel dan menyimpannya sebagai format mentah ".ppm" (bukan ASCII). PPM mudah dibaca dan diproses dalam skrip Perl. Menggunakan ImageMagick dan alat baris perintah "mengubah" tidak akan berfungsi dengan baik. Unggah kode arduino baru, lalu gunakan skrip Perl untuk mengunggah ke pengontrol. Kedipan itu hanyalah ketidakcocokan antara penyegaran LED dan kecepatan bingkai kamera saya. Setelah memperbarui kode sedikit, itu berjalan cukup lancar. Semua gambar ditransfer langsung melalui serial seperti yang Anda lihat. Animasi yang lebih panjang dapat disimpan dalam EEPROM eksternal seperti yang dilakukan di berbagai papan spoke-pov.

Langkah 10: Kontrol Interaktif Animasi Tersimpan

Mengapa membiarkan mikrokontroler bersenang-senang? Kultus Arduino adalah semua tentang komputasi fisik dan interaksi, jadi tambahkan saja potensiometer dan kendalikan! Menggunakan salah satu dari 8 input konverter analog ke digital membuatnya sangat sederhana.

Langkah 11: Menampilkan Video Langsung

Menggunakan skrip Perl dan beberapa modul membuatnya cukup mudah untuk menampilkan video langsung semu pada sistem X11. Itu dikodekan di linux dan dapat bekerja pada MAC juga. Ini berfungsi seperti ini: - dapatkan posisi kursor mouse - ambil kotak piksel NxN yang berpusat di kursor - skala gambar menjadi 8x8 piksel - kirim ke papan LED - mengulang

Langkah 12: Lebih Ringan Hampir Gratis

Lebih Ringan Hampir Gratis
Lebih Ringan Hampir Gratis

Hanya dengan dua langkah kecerahan dapat ditingkatkan sedikit. Ganti resistor 270Ω dengan resistor 169Ω dan dukung register geser 74HC595 lainnya ke IC5.

Direkomendasikan: