Baru-baru ini, deskripsi proyek DIY asli berdasarkan Raspberry Pi dan panel LED muncul di jaringan . Tujuan dari proyek ini adalah untuk memvisualisasikan tingkat beban prosesor PC. Untuk ini, animasi digunakan pada panel LED perangkat buatan sendiri.
Semakin tinggi beban pada CPU, semakin tinggi suhu chip dan semakin panas warna panel LED. Beban minimum berwarna biru dan biru, maksimum oranye dan merah. Jumlah total LED yang terlibat mencapai 12.000. Di bawah potongan adalah deskripsi proyek, elemen-elemennya, ditambah kode sumber perangkat lunak yang memastikan pengoperasian gadget.
Beginilah semuanya terlihat:
Bagaimana ide proyek itu muncul?
Tahun lalu, penulis menghadiri Kongres Komunikasi Chaos ke-36 (36C3), di mana dia melihat sejumlah besar proyek DIY, termasuk kubus LED. Dia sangat terkesan dengan ini.
Sebagian besar proyek ini tentang respons perangkat terhadap faktor eksternal. Jadi, saat perangkat diputar di tangan, perangkat itu berkilauan dengan semua warna pelangi, menunjukkan gambar berwarna-warni.
Sebastian Staacks memutuskan untuk mengembangkan proyeknya sendiri - perangkat yang dapat menunjukkan tingkat beban prosesor PC. Tidak ada pengertian praktis tertentu, ini adalah proyek yang hanya untuk bersenang-senang. Total biaya sistem dalam perakitan adalah $ 150.
Implementasi proyek
Cara kerja kubus LED ditunjukkan di atas. Sekarang beberapa detail. Perangkat menyala secara otomatis setelah boot PC yang terhubung.
Penulis mengatakan bahwa dia mencoba membuat warna dan animasi senetral mungkin agar tidak mengganggu pengguna PC saat bekerja (atau bermain).
Perangkat keras dan perangkat lunak
Desain perangkatnya sangat sederhana. Inilah yang akan dilihat oleh orang yang ingin membongkar perangkat.
"Kubus" hanya memiliki tiga sisi. Ini dilakukan untuk mengurangi biaya dan menyederhanakan desain. Jika semua aspek berhasil, proyek itu akan terlalu mahal.
Penulis memesan panel LED dari Aliexpress, memilih kombinasi harga dan kualitas terbaik. Itu tidak mudah, kata dia, karena pemasok jarang memberikan spesifikasi detail untuk produknya. Karenanya, tidak selalu jelas apakah panel-panel ini cocok untuk proyek tersebut. Hasilnya, pengembang membeli panel dengan LED 64x64 RGB dan catu daya 5V.
Unit 50W dengan 10A dan 5V digunakan untuk menyalakan panel ini. Adaptor memberi daya pada driver matriks Adafruit, yang terhubung ke panel melalui Raspberry Pi. Hal utama adalah karakteristik catu daya mencakup konsumsi sistem.
Manajemen panel
Sedangkan untuk "raspberry", pengembang menggunakan Raspberry Pi 2. Saat ini, perangkat papan tunggal ini tidak dapat dianggap terlalu ketinggalan zaman secara moral, untuk tujuan seperti itu sudah cukup. Selain itu, hampir tidak memanas selama operasi, yang tidak bisa dikatakan tentang generasi ketiga dan keempat.
Modul WiFi eksternal dihubungkan ke papan untuk menghilangkan kabel untuk menghubungkan ke jaringan. Hampir tidak ada yang diperlukan untuk menyolder, kecuali untuk beberapa operasi dengan Adafruit RGB Matrix Bonnet.
Beginilah tampilan struktur akhir saat dipasang. Untuk memberikan semua bentuknya, penulis menggunakan case yang dicetak pada printer 3D.
Panel tidak direkatkan sehingga dapat dikeluarkan dari casing kapan saja. Dudukan Raspberry Pi juga disediakan. Anda juga dapat mencetak alas kubus, tetapi secara keseluruhan, semuanya terlihat bagus dan sebagainya.
Sekarang tentang perangkat lunak. Dengan perangkat keras, semuanya lebih mudah, tetapi dengan perangkat lunak manajemen Anda harus mengotak-atik. OpenGL shader digunakan untuk animasi. Selain itu, skrip berjalan pada PC yang mentransfer karakteristik prosesor ke "malinka".
Perangkat lunak yang paling penting adalah program C ++ kecil yang memanipulasi kubus. Ini menggunakan pustaka matriks rpi-rgb-led-khusus . Secara khusus, diperlukan untuk membuka port UDP untuk mendapatkan karakteristik kerja prosesor dengan PC, serta OpenGL untuk merender animasi. Rincian pekerjaan perpustakaan dapat ditemukan di sini .
Untuk menginstal, Anda membutuhkan script dari Adafruit . Petunjuk penginstalan tersedia di tautan yang ditentukan.
Berikut adalah opsi untuk menyesuaikan panel
//LED Matrix settings
RGBMatrix::Options defaults;
rgb_matrix::RuntimeOptions runtime;
defaults.hardware_mapping = "adafruit-hat-pwm";
defaults.led_rgb_sequence = "RGB";
defaults.pwm_bits = 11;
defaults.pwm_lsb_nanoseconds = 50;
defaults.panel_type = "FM6126A";
defaults.rows = 64;
defaults.cols = 192;
defaults.chain_length = 1;
defaults.parallel = 1;
Harap dicatat bahwa pwm_bits dan pwm_lsb_nanoseconds tidak terlihat terlalu penting, tetapi sangat penting - terutama untuk kualitas gambar. Secara khusus, pwm_bits menentukan jumlah bit PWM, yang menentukan jumlah langkah warna. Kelemahan dari meningkatkan nilai ini adalah menurunkan kecepatan refresh panel LED. Anda dapat meningkatkan parameter dengan mengurangi pengaturan pwm_lsb_nanoseconds - jika panel Anda mendukung nilai rendah tersebut. Jika Anda akan memotret kubus dengan kamera, lebih baik meningkatkan kecepatan refresh agar semuanya terlihat indah.
Penting agar Pi terus menjalankan RGB Bonnet, jika tidak, artefak akan muncul. Untuk ini, disarankan untuk mencadangkan seluruh inti prosesor.
The proyek dapat ditemukan cpu-statistik-gl.cpp, untuk menggunakannya dalam proyek Anda sendiri. Untuk menggunakan, Anda memerlukan pustaka g ++ -g -o cpu-stats-gl cpu-stats-gl.cpp -std = c ++ 11 -lbrcmEGL -lbrcmGLESv2 -I / opt / vc / include -L / opt / vc / lib -Lrpi -rgb-led-matrix / lib -lrgbmatrix -lrt -lm -lpthread -lstdc ++ -Irpi-rgb-led-matrix / include /. Nah, untuk menambahkan dukungan OpenGl, Anda harus mengikuti instruksi dari Matus Novak .
OpenGl shader
Oke, pada tahap ini perangkat keras sudah selesai, ditambah kode penting untuk mengelola panel. Secara khusus, Anda sudah dapat menampilkan teks, gambar, dan GIF. Tetapi untuk rendering berwarna-warni, Anda perlu menambahkan OpenGL.
Animasi yang menampilkan status prosesor diimplementasikan oleh shader fragmen, mis. sepotong kecil kode yang bekerja secara paralel dengan "kolega". Area seperti itu diperlukan untuk setiap piksel panel.
Untuk memproyeksikan gambar dengan benar ke dalam kubus, penulis membuat tiga pasang segitiga, yang masing-masing menutupi satu sisi kubus. Intinya adalah, jika Anda melihat kubus sebagai objek 3D dan ingin menampilkan bentuk 2D seperti lingkaran, Anda dapat menetapkan koordinat kanvas 2D imajiner di depan wajah Anda ke setiap tepi kubus.
Jika sekarang kita "memperluas" kubus menjadi array persegi panjang piksel yang sebenarnya kita tangani, kita dapat menutupi array itu dengan beberapa segitiga. Kita juga bisa memetakan koordinat "kanvas virtual" ke setiap simpul untuk mendapatkan pemetaan koordinat kanvas kita ke piksel aktual dalam panel array.
Untuk shader, itu sederhana - Anda perlu memberikan koordinat kanvas untuk setiap simpul sebagai buffer array tambahan untuk GPU, memungkinkannya untuk menginterpolasi koordinat tersebut untuk setiap piksel.
Dapatkan status prosesor
Informasi tentang mode operasi prosesor dapat diperoleh melalui protokol UDP dengan skrip dengan Python.
#!/usr/bin/python3
import psutil
import socket
import time
TARGET_IP="192.168.2.45"
TARGET_PORT=1234
while True:
temperature = 0.0
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
temperature /= 5.0
cores = psutil.cpu_percent(percpu=True)
out = str(temperature) + "," + ",".join(map(str, sorted(cores, reverse=True)))
socket.socket(socket.AF_INET, socket.SOCK_DGRAM).sendto(out.encode("utf-8"), (TARGET_IP, TARGET_PORT))
Pada PC penulis, skrip dimulai secara otomatis, IP statis digunakan untuk pekerjaan, disediakan untuk kubus LED.
Pada titik ini, semuanya harus berfungsi sebagaimana mestinya.
Apakah Anda menyukai proyek ini? Mungkin Anda telah mengembangkan sesuatu yang serupa atau, sebaliknya, unik? Beri tahu kami di komentar.