Cara membuat informan yang sangat mencolok dari modul P10 dan Arduino LED.
Tujuan : Sambungkan dengan cepat matriks P10 LED besar (16x32cm) ke PC atau perangkat lain, ubah semua ini menjadi informan yang sangat mencolok dan cerah dengan perubahan dinamis dari informasi yang ditampilkan. Ada banyak aplikasi untuk hal seperti itu, dan seperti yang ditunjukkan oleh latihan, itu menarik perhatian. Bayangkan saja, sekarang semua orang akan tahu pasti bahwa AC Anda berfungsi dan pintu seharusnya tertutup!

Lampu latar bukan dari jendela, tetapi dari panel;)
Suatu kali saya melihat matriks kusam 8x8 LED untuk Arduino dan dengan biayanya saya merasa sedih. Diputuskan untuk menetes ke arah garis berjalan yang siap pakai untuk iklan luar ruangan dan apa yang mengejutkan saya ketika semuanya berubah menjadi standar dan semuanya karena orang tidak tahu apa-apa tentang pembaruan informasi yang dinamis melalui port eksternal. Menggali lebih dalam, ditemukan bahwa dalam semua produk seperti modul LED yang khas (matriks LED) digunakan.
Semua orang melihat layar iklan luar ruang yang terang mulai dari garis-garis kecil yang menjalar ke TV besar. Layar-layar ini dirangkai dari rangkaian modul-modul LED dan dikendalikan oleh pengontrol khusus, yang harganya meningkat dalam proporsi langsung dengan ukuran layar.

Modul LED ini cukup murah. Sekitar $ 6, harga tergantung pada ukuran dan warna. Ini lebih rumit dengan pengontrol. Harga yang paling sederhana dapat dibandingkan dengan satu panel LED. Namun, sebagian besar dari mereka "disesuaikan" untuk bekerja dalam mode menunjukkan "presentasi" yang sudah disiapkan sebelumnya dan tidak dapat secara dinamis mengubah informasi yang ditampilkan. Saya akui bahwa saya hanya secara singkat berkenalan dengan fungsi dari pengontrol yang paling sederhana, tetapi ini ternyata cukup untuk dipahami - lebih murah dan lebih cepat untuk melakukan hal-hal yang diperlukan pada pengontrol Arduino universal. Ini akan memungkinkan Anda untuk menghubungkan beberapa modul dengan cukup tenang. Tapi kita akan mulai dengan satu.
Modul LED (P10) terlihat seperti ini:

http://digital-wizard.net/avr_projects/p10_led_display_panel_interface
Bahkan, ini hanya sebuah matriks LED yang disolder ke output dari register geser, kita tidak akan pergi ke hutan sirkuit, modul semua standar dan berbeda hanya dalam ukurannya. P10 berarti antara dua dioda yang berdekatan 10mm. Ada panel monokromatik, dua warna dan bahkan RGB. Bagi mereka yang tertarik dengan detail sudah ada artikel serupa, tetapi dengan bias ke tingkat yang lebih rendah.
Perangkat keras
Dan bagi mereka yang ingin dengan cepat mendapatkan hasil yang bisa Anda "rasakan", Anda perlu:
- Satu matriks LED.
- Arduino (Saya menggunakan mini, tetapi akan lebih mudah bagi nano untuk tidak menggunakan adaptor tambahan untuk komunikasi dengan PC).
- Catu daya untuk 5V / 3A. Matriksnya rakus, jika Anda menyalakan semua dioda maka Anda membutuhkan banyak daya.
- Kabel koneksi (Biasanya dilengkapi dengan matriks.)
- Keinginan untuk menyelesaikan pekerjaan.
Kami akan membuat desain monolitik yang baru saja dicolokkan ke stopkontak dan PC untuk menampilkan informasi berharga kami (mis. tingkat Bitcoin) .
Hal ini diperlukan untuk mengambil loop dari matriks, memotongnya menjadi setengah solder dalam rangkaian sederhana ke Arduino.

Jika Anda menggunakan Arduino Mini atau UNO, maka Anda harus menyolder ke pin yang sesuai dengan analogi.
Jika karena alasan tertentu Anda tidak memiliki kabel, Anda dapat menggantinya dengan kabel MIDI yang menghubungkan konektor MIDI (opsi untuk orang tua) ke papan dengan kartu suara lama atau menggantinya dengan dua colokan Dupont (ibu) dengan 8 pin. Pada prinsipnya, konektornya standar, terlihat cukup mudah.

Tetapi dalam 10 menit saya mendapatkan desain berikut, adaptor USBtoUART tambahan menggantung yang tidak akan Anda miliki jika Anda tidak menggunakan Arduino Mini.

Perangkat kerasnya sudah siap, Anda hanya perlu menghubungkan PSU 5V / 3A tambahan untuk memberi daya pada matriks. Untuk melakukan ini, ia memiliki konektor terpisah, plus ke plus, minus ke minus. Sebaliknya, itu bisa, tetapi tidak akan berhasil. Meskipun aneh, karena semua orang tahu bahwa elektron, seperti biasa, mengalir dari plus ke minus. Dan jika kita memperhitungkan bahwa elektron bermuatan negatif, maka sama sekali tidak jelas mengapa mereka mengalir ke kutub negatif ...;) Mereka memikirkan hal-hal yang lebih pendek.

Saya harap Anda menghubungkan catu daya lebih andal, dan metode saya hanya cocok jika Anda memiliki banyak catu daya cadangan. Arduin bisa dibaut ( bukan sekrup penyadapan! ) ke panel itu sendiri, panel telah memasang lubang berulir.
Itu saja, biarkan para dewa DIY memaafkan saya, tetapi hari ini tidak ada pita biru. Tidak layak menghabiskan sumber daya yang begitu berharga untuk hal-hal yang tidak berharga.
Bagian perangkat lunak
Jika Anda berpikir bahwa perlu memahami cara memprogram hal ini dari tiga huruf (antarmuka SPI), maka saya dapat mengecewakan Anda - semuanya jauh lebih sederhana. Seperti biasa, semua sepeda diciptakan sebelum kita dan lebih dari sekali. Sebenarnya suka artikel ini . Ada perpustakaan siap pakai DMD dan DMD2 dan menggambar bermuara pada fakta bahwa dalam sketsa Anda hanya perlu menunjukkan apa, bagaimana dan di mana untuk menghasilkan, semuanya adalah keuntungan!
Setelah bermain sedikit dengan bentuk persegi dari pustaka ini, saya sampai pada kesimpulan bahwa menggulirkan teks dalam DMD2 terlihat βsedihβ, meskipun ada lebih banyak opsi dan kontrol kecerahan di sana. Akibatnya, ia memutuskan yang pertama dan mengingat bahwa "Anda adalah seorang programmer" menambahkan kontrol kecerahan primitif ke dalamnya. Di sini perlu disebutkan bahwa matriks ini bersinar sangat cerah. Pada akhir debugging, itu akan membakar kornea.
Secara umum, semua yang perlu Anda lakukan adalah mengunggah sketsa ke papan tulis, tetapi itu dari direktori tempat Anda akan membongkar arsip saya, karena saya sedikit memodifikasinya. file beberapa perpustakaan yang ada di tempat yang sama. Menambahkan kontrol kecerahan dan SPI yang sedikit overclock, mungkin sesuatu yang lain, saya tidak ingat. Rabatet? Jangan disentuh!
Untuk kejelasan yang lebih besar, saya menambahkan sensor suhu 18v20. Jika Anda tidak menghubungkan satu, maka suhu tidak akan ditampilkan. Menurut ide saya, berat tertentu dalam gram akan ditampilkan di sana, tetapi Anda hanya dapat menampilkan angka. Untuk mengubah teks yang menggulir dari bawah, Anda hanya perlu "memuat" ke port COM Arduino menggunakan format khusus, semacam urutan ESC. Terlampir adalah skrip Python yang hanya mengirim waktu saat ini ke panel.
Format perintah:
- 0x1B (ESC) + 0x40 ("@") // Identifikasi, mengembalikan ID string perangkat "P10_DISPLAY_V01 \ r \ n"
- 0xOC (CLR) // Bersihkan layar.
- 0x1F (AS) + 0x58 ("X") + 0x80 // Atur kecerahan layar, kecerahan maksimum 0x80.
- 0x1F (AS) + 0x52 ("B") + String // Tetapkan garis bawah yang akan bergulir.
- 0x1F (AS) + 0x0A ("LF") + 0x31, 0x32, 0x33, 0x34, 0x35 // Lewati angka lima digit yang ditampilkan di bagian atas "12345"
Saya tidak menemukan yang jadi dan saya harus menggambar font Rusia 5 * 7. Mungkin sepeda, tetapi apakah kita selalu melakukan semuanya secara rasional?
Sketsa:
Kode//====================== OneWire ==================================== #include <OneWire.h> OneWire ds2 (2); String res = ""; byte type_s; byte data[12]; byte addr_ds2[8]; bool temp_sensor_2_found = false; float temp1 = 999; //=================================================================== #include <SPI.h> #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7rus.h" #define CLR 0x0C #define US 0x1F #define ESC 0x1B #define LF 0x0A static const char ID[] = "P10_DISPLAY_V01\r\n"; // Device ID #define DISPLAYS_ACROSS 1 #define DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN); // , . #define max_char1 6 #define max_char2 176 unsigned char message1[max_char1] = {0x20,0x30,0x30,0x30,0x30,0x00}; // stores you message unsigned char message2[max_char2]; // stores you message unsigned char r_char; byte index1 = 4; byte index2 = 176; int i; long scrollSpeed = 25; char test[] = { 0x84,0x80,0x20,0x87,0x84,0x90,0x80,0x82,0x91,0x92,0x82,0x93,0x85,0x92,0x20,0x92, 0x8E,0x20,0x81,0x8B,0x80,0x83,0x8E,0x84,0x80,0x90,0x9F,0x20,0x97,0x85,0x8C,0x93, 0x20,0x8C,0x9B,0x20,0x8D,0x85,0x91,0x8C,0x8E,0x92,0x90,0x9F,0x20,0x8D,0x88,0x20, 0x8D,0x80,0x20,0x97,0x92,0x8E,0x20,0x88,0x20,0x82,0x8E,0x8F,0x90,0x85,0x8A,0x88, 0x20,0x82,0x91,0x85,0x8C,0x93,0x21,0x00}; //============================================================================= bool get_sensor(byte addr[8], OneWire ds) { // if (! ds.search (addr)) { ds.reset_search (); delay (250); return false; } // if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("get_sensor:CRC is not valid!"); return false; } // switch (addr[0]) { case 0x10: //Chip = DS18S20 type_s = 1; break; case 0x28: //Chip = DS18B20 type_s = 0; break; case 0x22: //Chip = DS1822 type_s = 0; break; default: Serial.println("get_sensor:Device is not a DS18x20 family device."); return false; } return true; } //============================================================================= double get_temp(byte addr[8], OneWire ds) { double celsius; ds.reset (); ds.select (addr); // ds.write (0x44, 1); // , delay (750); ds.reset (); ds.select (addr); ds.write (0xBE); // for (int i = 0; i < 9; i++) { // data[i] = ds.read (); } // , int raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw << 3; else if (cfg == 0x20) raw = raw << 2; else if (cfg == 0x40) raw = raw << 1; } celsius = (double)raw / 16.0; return celsius; }; //============================================================================= void massage2BufClear () { for(i=0; i<max_char2; i++) { message2[i] = '\0'; } index2=0; } //
Operasi kecerahan penuh:
Bekerja dengan kecerahan manusia:
Bekerja dengan pemuatan waktu dinamis dari PC menggunakan skrip Python:
Semua penyimpangan dengan pengguliran disebabkan oleh pemotretan pada kamera, untuk mata dari jarak normal, semuanya terlihat cukup halus dan mudah dibaca.
Perlu dicatat bahwa itu benar-benar gratis untuk menghubungkan beberapa modul secara seri dan cukup tunjukkan ini dalam sketsa untuk mendapatkan layar yang lebih besar. Keterbatasan dimulai hanya setelah sejumlah panel dan mereka terkait dengan kinerja terbatas Arduino dan antarmuka SPI-nya. Terima kasih ElectricFromUfa untuk ikhtisar terperinci dan terperinci dari panel dan banyak lagi!
Mungkin di masa depan saya akan melakukan hal yang sama pada STM32F103C8T6 dan pada ESP-12F, semuanya harus bergerak lebih cepat di sana.
Referensi:
1. Tautan ke arsip dengan sketsa dan terkait.
2. Tautan lain ke BitBucket