ไฟแต่ละดวงสามารถควบคุมอาร์ดูโน่ได้กี่ตัว


19

ฉันต้องการใช้บอร์ด Arduino เป็นประจำเพื่อควบคุมไฟ LED - ไฟใดที่ฉันสามารถควบคุมได้มากที่สุดจากเมนบอร์ด?

มีการสอนเกี่ยวกับวิธีการขอขึ้นหรือไม่?


3
คุณต้องระบุว่าคุณต้องการควบคุม led หนึ่งหรือหลายตัว นอกจากนี้ฉันจะเพิ่ม "หลีกเลี่ยงการควบคุมอนุกรมและไอซีเพิ่มเติม" คำตอบมีแนวโน้มที่จะไม่มีที่สิ้นสุดหากอัตราการรีเฟรชหรือชิ้นส่วนฮาร์ดแวร์ไม่มีข้อ จำกัด
ppvi

คำตอบ:


26

ฉันเชื่อว่าการใช้ Charlie-plexing N บรรทัดควบคุมไฟ LED N * (N-1) มีบทความที่ดีเกี่ยวกับ Wikipedia

เพื่อนคนหนึ่งของฉัน Jimmie P. Rodgers พอดีกับ LEDs 126 ดวงบน Arduino Shield เขาใช้ charlie-plexing เพื่อควบคุมไฟ LED ข้อมูลบางอย่างในบอร์ดของเขาอยู่ที่ - jimmieprodgers.com/2009/12/my-development-process/ (สำเนา archive.org)


ในการประชุมกลุ่มผู้ใช้บอสตัน Arduino ครั้งล่าสุด Jimmie P. Rodgers ดึงไดอะแกรม Charlie-plexing เป็นเมทริกซ์ที่มีตาข่ายที่มีป้ายกำกับ แผนงานที่ดึงมาในลักษณะนี้ดูเหมือนจะทำงานได้ดีในการสื่อสารแนวคิด ฉันสร้างแผนผังที่คล้ายกันสองสามข้อ - ดูที่http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html


เรียนรู้สิ่งใหม่วันนี้; คุณมี upvote ของฉัน :-)
JonathanD

4
โปรดทราบว่าวิธีนี้เป็นไปได้ที่จะเปิด N-1 LED ในแต่ละครั้งเท่านั้น
AngryEE

2
jimmieprodgers.comการเชื่อมโยงในคำตอบนี้จะเต็มไปด้วยไวรัส
Vivek Maharajh

1
@vivekmaharajh: ฉันแทนที่ลิงค์ด้วยลิงค์ไปยังสำเนา archive.org ของหน้าต้นฉบับ
Dave Tweed

13

คุณสามารถใช้ Shift Registers ( http://en.wikipedia.org/wiki/Shift_register ) เพื่อรับเอาต์พุตขนานจำนวนมากจากสตรีมอนุกรมเดียวตามที่คุณต้องการ

คุณจะต้องเกี่ยวข้องกับข้อ จำกัด พลังงานของคุณ จริง ๆ แล้วฉันไม่เคยใช้ Arduino แต่ฉันคิดว่ามันมีขีด จำกัด ในปัจจุบันเหมือนที่ PIC ทำ นอกจากนี้การลงทะเบียนกะจะมีข้อ จำกัด ในปัจจุบันด้วยตนเอง หากคุณพบเจอสิ่งนี้คุณจะต้องดูที่การใช้ MOSFET เพื่อให้คุณสามารถควบคุมไฟ LED โดยไม่ต้องดึงพลังงานจำนวนมากจากไมโครคอนโทรลเลอร์โดยตรง


7

ขาไมโครคอนโทรลเลอร์ AVR ที่ได้รับอนุญาตอนุญาตให้มีแหล่งได้ถึง 40 mA และแหล่งจ่ายไฟทั้งหมดที่ได้มาหรือจมโดยชิป (เช่นที่พื้นและพิน Vcc) จะต้องต่ำกว่า 200 mA

Charlieplexing เป็นทางออกที่ดีสำหรับสถานการณ์ที่คุณต้องการจำนวนมากของ LED แต่จะได้รับโดยมีเพียงหนึ่งไฟ LED สว่างในเวลา บอร์ด Arduino มาตรฐาน (เช่น Duemilanove) ให้หมุด I / O 17 "ฟรี" ไม่นับ TX, RX, รีเซ็ตหรือขา 13 ดังนั้นคุณสามารถต่อ LED 17 * 16 = 272 ได้ สิ่งนี้สามารถทำงานได้ดีโดยเฉพาะอย่างยิ่งหากคุณยังคงมีไฟ LED ดวงเดียวหรือสแกนระหว่างสองสามดวงได้อย่างรวดเร็ว แต่ถ้าคุณพยายามทำให้เมทริกซ์ทั้งหมดมีลวดลายคุณจะพบว่าแต่ละตัวนั้นเปิดอยู่ (น้อยกว่า) 1/272 ของเวลาดังนั้นถ้าไดรฟ์ของคุณมีกระแส 30 mA ในช่วงเวลาใดก็ตาม LED แต่ละตัว กระแสเฉลี่ยจะประมาณ 0.1 mA - สลัวสวย

หากคุณไม่ต้องการไฟ LED จำนวนมาก แต่ต้องการความสว่างมากกว่าการมัลติเพล็กซ์แบบดั้งเดิมอาจเป็นตัวเลือกที่ดีกว่า ในกรณีนี้คุณใช้บางบรรทัดเป็นแถวและบางคอลัมน์เป็นเมทริกซ์ หากคุณใช้กระแสไฟ LED 10 mA คุณสามารถกำหนดเมทริกซ์ 4 คอลัมน์และ 13 แถวโดยที่ไฟ LED ทั้ง 4 อันในหนึ่งแถวสามารถเปิดได้ในแต่ละครั้งและคุณสแกนผ่านแถวต่างๆ จากนั้นแต่ละแถวจะอยู่ที่ 1/13 ของเวลาที่กระแส 10 mA ดังนั้นกระแส LED เฉลี่ยสามารถสูงถึง 0.76 mA แต่คุณจะได้รับ 4 * 13 = 104 LEDs เท่านั้น (สว่างยิ่งขึ้นต่อ LED แน่นอนกว่าด้วย charlieplexing)

ขีด จำกัด ในตัวอย่างสุดท้ายคือ 40 mA ต่อขาบน AVR-- เนื่องจากแต่ละแถวขับหมุดแหล่งที่มา 4x10 = 40 mA หากคุณอนุญาตให้ทรานซิสเตอร์ภายนอก (ซึ่งอาจมีราคาถูกและเล็ก) เพิ่มลงในเอาต์พุตแถวคุณสามารถหลีกเลี่ยงข้อ จำกัด นั้นและสว่างขึ้น ตัวอย่างเช่นคุณสามารถสร้างอาร์เรย์ 8x9 โดยมี 8 แถวและคอลัมน์ 9 LED 72 ดวงพร้อมกัน หนึ่งใน 8 แถวนั้นถูกเปิดใช้งานในแต่ละครั้งโดยเลือกผ่านทรานซิสเตอร์ LED ทั้งหมด 9 ดวงในแถวที่กำหนดสามารถเปิดได้พร้อมกันขับเคลื่อนที่ 20 mA ดังนั้น 180 mA จึงมาจากทรานซิสเตอร์และคุณยังคงอยู่ภายใต้ขีด จำกัด ปัจจุบันของ AVR ปัจจุบันเฉลี่ยต่อ LED ตอนนี้ 20 mA / 8 = 2.5 mA - โดยปกติแล้วจะสว่างพอสมควร


6

มีบทช่วยสอนที่มีรายละเอียดดีมากที่นี่ซึ่งรวมถึงส่วนเกี่ยวกับการใช้ Arduino เพื่อเรียกใช้คิวบ์ LED 8x8x8 (อย่าพลาดภาพยนตร์ YouTube ที่มีให้)

ป้อนคำอธิบายรูปภาพที่นี่


ดูเหมือนสิ่งที่ฉันเห็นในงานนิทรรศการยูเอฟโอในมินนิอาโปลิสประมาณปี 1979 หรือราว ๆ นั้น แต่ฉันจำได้ว่าอยู่ที่ไหนสักแห่งรอบ ๆ หลอดไฟขนาดเล็ก 4096 มีใครอีกบ้างที่จำได้เห็นอะไรแบบนั้น?
supercat

4

มีตัวขยาย I / O มากมายที่ใช้ SPI หรือ I2C บัส ด้วยโมดูล MSSP เดียวคุณสามารถควบคุมเอาต์พุตดิจิตอลจำนวนนับไม่ถ้วนเช่น LED

ดูเอกสารข้อมูลทางเทคนิคหรือหมายเหตุการใช้งานของ Microchip สำหรับชิ้นส่วนต่อไปนี้:
SPI - MCP23S08
I2C - MCP23008


1

ด้วยหมุด I / O 17 ตัวทรานซิสเตอร์ NPN สิบเจ็ดตัว (ผู้ติดตามตัวส่งสัญญาณเพื่อเพิ่มกระแส) ไม่ควรมีปัญหาใด ๆ ในการแสดงไฟ LED 272 ชุดรวมกันตามอำเภอใจที่ 1/17 รอบการทำงานมีกระแสเฉลี่ยหรือ 0.7mA (200mA / 272) ถูก จำกัด ด้วย ความสามารถของชิปในการดึงลงครั้งละ 200mA การเพิ่มไดโอดเพื่อให้ได้กระแสไฟลดลง 0.7 โวลต์จะช่วยให้สามารถเพิ่มไฟ LED อีก 17 ดวง (ลดรอบการทำงานเป็น 1/18) แม้ว่าความสว่างจะไม่ตรงกับที่อื่น


คุณช่วยอธิบายเกี่ยวกับวงจรที่คุณแนะนำที่นี่ได้ไหม? Emitter follower เป็นโครงสร้างของ BJT
Kevin Vermeer

@reemrevnivek: ดูการแก้ไขด้านบน ฉันได้รับการเปลี่ยนแปลงทางจิตใจบางอย่างและพวกเขาก็สับสนกัน หากมีการเพิ่มทรานซิสเตอร์เพื่อเพิ่มไดรฟ์ด้านสูง แต่ไม่ใช่ไดรฟ์ด้านล่างพวกเขาจำเป็นต้องเป็น BJT หากมีใครใช้ทรานซิสเตอร์สำหรับทั้งสอง mosfets อาจจะดีกว่า
supercat

0

ในขณะที่ Windell Oskay ให้เหตุผลที่ดีว่า 104 LEDs เป็นจำนวนสูงสุดโดยไม่ต้องเพิ่มทรานซิสเตอร์มากขึ้น Tom Igoe ได้โพสต์รูปถ่ายของเมทริกซ์ของไฟ LED 128 ตัวที่ควบคุมโดยตรงโดย Arduino Mega เดียว - ไม่มีทรานซิสเตอร์พิเศษแยกหรือรวม

Tom Igoe "โกง" โดยเกินกว่า "กระแสสูงสุดต่อขาแน่นอน" ที่แสดงไว้ในแผ่นข้อมูลหรือไม่?


2
เปล่าสิเขาโกงโดยใช้เมกะ arduino :) mega มี IO IO มากขึ้นกว่า arduino ปกติ
Christopher Biggs

@unixbigot - เศร้าฉันหวังว่าจะได้เห็นแฮ็คสุดยอดที่เกี่ยวข้องกับการใช้หมุดรีเซ็ตสำหรับการขับ LED หรือไดโอดการใช้งานลดลง ..
Kevin Vermeer

1
การเชื่อมโยงของคุณคือตายและคุณอาจจะเชื่อมโยงไปยังคำตอบ Windell Oskay ของ อาจไม่สำคัญเมื่อคุณโพสต์ แต่เมื่อมีคำตอบปรากฏขึ้นโพสต์ของคุณจะห่างจากที่อื่น
Kevin Vermeer

@KevinVermeer: ​​แก้ไขลิงก์โดยชี้ไปที่ copy.org copy ของหน้าต้นฉบับ
Dave Tweed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.