Berapa banyak lampu individu yang bisa dikendalikan oleh Arduino

19

Saya ingin menggunakan papan Arduino biasa untuk LED kontrol - apa yang paling lampu saya dapat mengontrol secara individual dari papan?

Apakah ada tutorial tentang cara menghubungkannya?

mad_z
sumber
3
Anda perlu menentukan jika Anda ingin mengontrol satu atau beberapa leds. Juga, saya akan menambahkan "menghindari kontrol serial dan IC tambahan". Jawabannya cenderung tak terbatas jika refresh rate atau perangkat keras bagian tidak kendala.
ppvi

Jawaban:

26

Saya percaya menggunakan Charlie-plexing N garis kontrol N * (N-1) LED. Ada artikel bagus di Wikipedia.

Seorang teman saya, Jimmie P. Rodgers, muat 126 LED pada Arduino Shield. Dia menggunakan charlie-plexing untuk mengontrol LED. Beberapa informasi di papannya ada di - jimmieprodgers.com/2009/12/my-development-process/ (copy archive.org)


Pada pertemuan Kelompok Pengguna Boston Arduino terakhir, Jimmie P. Rodgers menggambar diagram Charlie-plexing sebagai matriks dengan jaring berlabel. Skema yang digambar dengan cara ini tampaknya melakukan pekerjaan yang baik dalam mengkomunikasikan konsep tersebut. Saya membuat beberapa skema yang sama - Lihat http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html

jluciani
sumber
belajar sesuatu yang baru hari ini; Anda memiliki upvote saya :-)
JonathanD
4
Perlu diingat dengan metode ini hanya mungkin untuk menyalakan N-1 pada satu waktu.
AngryEE
2
The jimmieprodgers.comlink dalam jawaban ini sarat dengan virus.
Vivek Maharajh
1
@vivekmaharajh: Saya mengganti tautan dengan tautan ke salinan archive.org dari halaman asli.
Dave Tweed
13

Anda dapat menggunakan Shift Register ( http://en.wikipedia.org/wiki/Shift_register ) untuk mendapatkan sebanyak mungkin keluaran paralel dari aliran serial tunggal seperti yang Anda inginkan.

Anda harus peduli dengan kendala kekuatan Anda. Saya sebenarnya tidak pernah menggunakan Arduino sendiri tetapi saya berasumsi ia memiliki batas saat ini seperti PICs lakukan. Juga, register geser akan memiliki batas saat ini sendiri. Jika Anda mengalami ini, Anda akan perlu melihat menggunakan sesuatu seperti MOSFET untuk memungkinkan Anda untuk mengontrol LED tanpa harus mengeluarkan banyak tenaga langsung dari mikro kontroler Anda.

Kellenjb
sumber
7

Setiap pin mikrokontroler AVR yang diberikan diizinkan untuk sumber hingga 40 mA, dan catu daya total bersumber atau ditenggelamkan oleh chip (yaitu, di tanah dan pin Vcc) harus di bawah 200 mA.

Charlieplexing adalah solusi hebat untuk situasi di mana Anda membutuhkan banyak LED, tetapi dapat bertahan hanya dengan satu LED menyala pada satu waktu. Papan Arduino standar (seperti Duemilanove) menyediakan pin I / O 17 "gratis", tidak termasuk TX, RX, Reset, atau pin 13. Jadi, Anda dapat menghubungkan 17 * 16 = 272 LED. Ini dapat bekerja dengan baik, terutama jika Anda menyalakan satu LED, atau dengan cepat memindai hanya beberapa. Tetapi jika Anda mencoba untuk menerangi seluruh matriks dengan sebuah pola, Anda akan menemukan bahwa masing-masing menyala (sedikit kurang dari) 1/272 waktu, jadi jika arus drive Anda adalah 30 mA pada saat tertentu, setiap LED arus rata-rata sekitar 0,1 mA-- cukup redup.

Jika Anda tidak membutuhkan banyak LED tetapi sebaliknya membutuhkan lebih banyak kecerahan, multiplexing tradisional mungkin merupakan pilihan yang lebih baik. Dalam hal ini, Anda menggunakan beberapa baris sebagai baris dan beberapa sebagai kolom dalam matriks. Jika Anda menggunakan arus LED 10 mA, Anda dapat menentukan matriks 4 kolom dan 13 baris, di mana semua 4 LED dalam satu baris dapat hidup pada satu waktu, dan Anda memindai melalui baris. Kemudian setiap baris pada 1/13 waktu pada arus 10 mA, sehingga arus LED rata-rata bisa setinggi 0,76 mA, TETAPI Anda hanya mendapatkan 4 * 13 = 104 LED. (Jelas lebih cerah per LED daripada dengan charlieplexing.)

Batas dalam contoh terakhir adalah 40 mA per pin pada AVR - karena setiap baris sumber pin mengemudi 4x10 = 40 mA. Jika Anda membiarkan transistor eksternal (yang bisa murah dan kecil) ditambahkan ke output baris, maka Anda dapat menghindari batas tertentu dan menjadi lebih cerah. Misalnya, Anda bisa membuat sebuah array 8x9, dengan 8 baris dan kolom 9, 72 LED sama sekali. Salah satu dari 8 baris pada satu waktu, yang dipilih melalui transistor. Hingga semua 9 LED dalam satu baris tertentu dapat menyala pada satu waktu, didorong pada 20 mA, jadi 180 mA berasal dari transistor, dan Anda tetap berada di bawah batas AVR saat ini. Saat ini rata-rata per LED sekarang 20 mA / 8 = 2,5 mA-- biasanya cukup cerah.

Windell Oskay
sumber
6

Ada tutorial yang sangat bagus dan terperinci di sini yang mencakup bagian tentang menggunakan Arduino untuk menjalankan kubus LED 8x8x8. (Jangan lewatkan film YouTube mereka memiliki hingga)

masukkan deskripsi gambar di sini

Joel Spolsky
sumber
Sepertinya sesuatu yang saya lihat di pameran UFO di Minneapolis sekitar tahun 1979 atau sekitar itu, tapi saya ingat itu ada di sekitar 4096 bola lampu mini. Apakah ada orang lain yang ingat melihat sesuatu seperti itu?
supercat
4

Ada banyak I / O Ekspander di luar sana yang menggunakan bus SPI atau I2C. Dengan modul MSSP tunggal, Anda dapat mengontrol hampir semua output digital seperti LED.

Lihat lembar data Microchip atau catatan aplikasi untuk bagian-bagian berikut:
SPI - MCP23S08
I2C - MCP23008

mjh2007
sumber
1

Dengan 17 pin I / O, tujuh belas NPN transistor (pengikut emitor untuk meningkatkan arus) seharusnya tidak ada masalah khusus yang menunjukkan 272 LED dalam kombinasi sewenang-wenang pada 1/17 siklus kerja, dengan arus rata-rata atau 0,7mA (200mA / 272), dibatasi oleh kemampuan chip untuk menarik 200mA sekaligus. Menambahkan dioda untuk mendapatkan penurunan 0,7 volt akan memungkinkan penambahan 17 LED lainnya (mengurangi siklus kerja menjadi 1/18), meskipun kecerahannya tidak akan sama dengan yang lainnya.

supercat
sumber
Bisakah Anda mengklarifikasi sirkuit seperti apa yang Anda sarankan di sini? Pengikut emitor adalah topologi BJT.
Kevin Vermeer
@reemrevnivek: Lihat edit di atas. Secara mental saya telah melemparkan beberapa variasi, dan mereka menjadi kacau. Jika seseorang menambahkan transistor untuk meningkatkan drive sisi tinggi tetapi bukan drive sisi rendah, mereka harus BJT. Jika seseorang menggunakan transistor untuk keduanya, MOSFET mungkin lebih baik.
supercat
0

Sementara Windell Oskay membuat argumen yang baik yang 104 LED adalah maksimal tanpa menambah lebih banyak transistor, Tom Igoe telah memposting foto-foto matriks 128 LED yang langsung dikontrol oleh satu Arduino Mega - tanpa transistor tambahan, terpisah atau terintegrasi.

Apakah Tom Igoe "kecurangan" oleh singkat melebihi "arus maksimum absolut per pin" yang tercantum dalam datasheet?

davidcary
sumber
2
Tidak, dia curang dengan menggunakan mega Arduino. :) Mega memiliki lebih banyak pin IO daripada arduino normal.
Christopher Biggs
@unixbigot - Sedih, saya berharap untuk melihat hack keren yang melibatkan penggunaan kembali pin reset untuk mengemudi LED, atau penggunaan dioda drop ..
Kevin Vermeer
1
Tautan Anda sudah mati, dan Anda mungkin harus menautkan ke jawaban Windell Oskay . Tampaknya tidak penting ketika Anda memposting, tetapi saat lebih banyak jawaban muncul, posting Anda menjadi jauh dari yang lain.
Kevin Vermeer
@KevinVermeer: ​​Tautan diperbaiki dengan menunjuk ke copy.org dari halaman asli.
Dave Tweed