Tentang proyek ini
Pendahuluan
Ini adalah proyek Arduino pertama saya. Karya saya terinspirasi oleh beberapa proyek pembuat yang menciptakan Persistence of Vision Displays [2,3,4].
Kegigihan penglihatan (POV) mengacu pada ilusi optik di mana beberapa gambar terpisah menyatu menjadi satu gambar dalam pikiran manusia dan diyakini sebagai penjelasan untuk persepsi gerakan di bioskop dan film animasi [1].
Proyek [2,3,4] mengimplementasikan tampilan globe POV, menggunakan LED diskrit dan register geser diskrit. Sebagai gantinya, perangkat saya menggunakan silinder berputar dan strip LED RGB siap pakai sebagai Tampilan POV.
Fitur utama Silinder POV saya adalah:
- Tampilan POV (Persistence of Vision)
- Menampilkan gambar GIF animasi pada silinder yang berputar
- Gambar GIF disimpan di RAM atau Flash Arduino
- Komunikasi dengan PC melalui Bluetooth
Ikhtisar Teknis
- 4 Strip LED RGB berdasarkan LPD8806
- Ukuran layar 151 x 40 piksel
- Termasuk modul Bluetooth HC06
- Dikendalikan melalui Bluetooth dari PC
Konstruksi Mekanik
Konstruksi mekanik ditunjukkan pada gambar di bawah ini.
Perangkat ini terdiri dari sasis dan rotor. Sasis terdiri dari dua piringan kayu lapis melingkar yang dihubungkan melalui tiga batang berulir. Jarak antar piringan adalah 120 mm. Di tengah ada dua bantalan bola dan poros. Untuk poros juga digunakan batang berulir. Poros digerakkan oleh motor listrik melalui dua roda gigi mahkota dan sabuk bergigi. Kecepatan rotasi hingga 1300 RPM (22 Hz).
Rotor terdiri dari dua silinder styrofoam dan dua piringan aluminium melingkar. Silinder styrofoam direkatkan ke piringan bawah. Disk atas dapat dihapus. Digunakan untuk memasang rotor ke poros.
Elektronik terletak di bagian atas rotor. Ini mencakup bagian-bagian berikut:
- Perisai buatan sendiri untuk papan Arduino Due
Catu daya (7.5V) diumpankan ke papan catu daya melalui kontak geser dan cincin kontak.
Empat strip LED dengan total 40 LED RBG digunakan. Mereka terhubung dengan kabel ke Arduino Shield.
Empat strip LED ditempatkan seperti yang ditunjukkan pada gambar di bawah ini. Dengan menggunakan empat strip LED yang digeser jarak pada sumbu Y antara LED dibagi 4. Jarak pada sumbu X ditangani oleh SW. SW memperbarui semua 40 LED 151 kali per putaran. Kisi dalam gambar sesuai dengan piksel yang terlihat.
Sirkuit Elektronik
Sirkuit elektronik ditunjukkan dalam skema PDF terlampir.
Ada papan catu daya dengan pengatur tegangan LM317. Tegangan input 7,5 Volt dan tegangan output 4,6 Volt. Regulator tegangan memasok papan Arduino Due dan strip LED.
Ada juga perisai buatan sendiri untuk Arduino. Ini berisi kabel konektor ke strip LED dan sirkuit untuk penerima IR. Penerima IR digunakan untuk mendeteksi posisi rotor. Ini terhubung ke input timer/interupsi Arduino.
Ada empat strip LED bernama STRIP0 hingga STRIP3. Setiap strip memiliki 5 driver LED LPD8806 dan 10 LED RBG. STRIP0 terhubung ke USART0 dan STRIP1 terhubung ke USART1. Kedua USART beroperasi dalam mode SPI. STRIP2 dan STRIP3 dihubungkan secara seri dan digerakkan oleh antarmuka SPI Arduino.
Untuk komunikasi dengan PC, modul Bluetooth HC-06 terhubung ke USART3. Modul Bluetooth disuplai oleh 3,3 Volt yang disediakan oleh papan Arduino.
Perangkat Lunak Arduino
Software Arduino terdiri dari program utama (mpc.ino ) dan perpustakaan berikut:
- bt - Driver SW untuk modul Bluetooth
- LDP8806 - Driver SW untuk strip LED
- MemoriBebas - Fungsi untuk mendeteksi memori RAM kosong yang tersedia
- mpcgif - Pemutaran file GIF yang terletak di RAM atau memori Flash
- gambar - Gambar GIF internal disimpan dalam Flash
- jejak - Fungsi untuk debugging SW
Output berkala dari gambar ke strip LED dilakukan dengan penggerak interupsi. Ada dua buffer frame toggle. Setiap frame buffer menampung satu gambar dengan ukuran 40 x 151 piksel. Setiap piksel adalah indeks palet warna satu byte. Sementara satu frame buffer dikeluarkan ke strip LED melalui interupsi dan DMA, buffer frame lainnya disiapkan oleh program utama (misalnya dengan fungsi decoding gambar GIF). Pemindahan buffer frame dilakukan oleh rutin interupsi frame.
Ada satu interupsi frame per putaran yang dipicu oleh sensor IR. Frame interupsi rutin mengukur (melalui timer perangkat keras) kecepatan evolusi dan memprogram interupsi kolom periodik (satu per kolom, yaitu 150 interupsi per putaran) dengan timer perangkat keras. Rutin interupsi kolom mengeluarkan kolom saat ini ke strip LED. Untuk alasan kinerja, keluaran dilakukan melalui tiga saluran DMA yang beroperasi sepenuhnya secara paralel.
Kode sumber Arduino lengkap tersedia di github.
Program Kontrol PC
Program Kontrol PC (pccp ) adalah alat baris perintah yang ditulis dalam C++. Itu berjalan di bawah Cygwin dan berkomunikasi dengan Arduino melalui Bluetooth. pccp memungkinkan untuk mengontrol Silinder POV dengan perintah karakter tunggal berikut:
- 0-7 - isi layar dengan warna (hitam, merah, kuning, hijau, cyan, biru, ungu, putih)
- t - menggambar kurva segitiga (sebagai gambar percobaan)
- s - mengaktifkan atau menonaktifkan rotasi gambar yang ditampilkan
- r - menggambar satu baris
- c - menggambar satu kolom
- y - memutar ulang gambar GIF internal yang disimpan dalam memori Flash
- f - unduh file GIF eksternal dari PC melalui BT
- x - memutar file GIF eksternal yang diunduh
pccp juga menyediakan antarmuka ke antarmuka pengguna grafis. Selanjutnya ini menampilkan kecepatan rotasi saat ini (dalam Hz dan s) dan nilai penghitung bingkai.
Kode sumber lengkap tersedia di github.
Antarmuka Pengguna Grafis
Antarmuka pengguna grafis adalah Aplikasi Windows Universal. Ini memungkinkan untuk memilih file GIF yang akan ditampilkan oleh Silinder POV. Aplikasi telah diturunkan dari aplikasi FilePicker dari "Microsoft Windows Universal Samples" [5].
Kode sumber lengkap tersedia di github.
Referensi
[1] https://en.wikipedia.org/wiki/Persistence_of_vision
[2] GLOBE LED RGB - POV - 40 x 200
[3] RGB Tampilan Globe POV
[4] POV Globe Display RGB - Deskripsi proyek (dalam bahasa Jerman)
[5] https://github.com/Microsoft/Windows-universal-samples
Kode
Kode sumber Arduino untuk POV Cylinder
https://github.com/hanoba/povc-arduino Program Kontrol PC untuk Silinder POV
Ini adalah program baris perintah C++ yang berjalan di bawah Cygwinhttps://github.com/hanoba/povc-pccp Antarmuka Pengguna Grafis untuk Silinder POV
Ini adalah Aplikasi Universal Windowshttps://github.com/hanoba/povc-win-app