เพิ่งจะผ่านปีใหม่ 2014 มางั้นวันนี้เราหาอะไรที่เขา Theme กันหน่อยครับ วันนี้เราเสนอบทความเรื่อง การใช้งาน 8x8 LEX matrix ครับ
ก่อนอื่นต้องบอกว่าที่จะเล่าให้ฟังวันนี้จะเป็นเรื่องของ LED แบบสีเดียวนะครับ โอกาสหน้าถึงจะไปต่อที่ RGB LED นะครับ เนื่องจาก LED สีเดียวนี้จะเป็นพื้นฐานที่สำคัญครับ ก่อนเราจะไปต่อได้
ทีนี้ลองมาดูที่ตัว LED 8x8 Matrix ของเราดูก่อนครับ อันว่าเป็น 8x8 แล้วก็จะต้องใช้ 16 PIN กันเลยทีเดียว นี่แค่สีเดียวนะครับ ถ้าเป็น 3 สี ก็จะมากกว่านี้อีก 3 เท่า งั้นคำถามแรกของคนหัดเริ่มใช้ อุปกรณ์คัวนี้ ที่ผมคิดว่าต้องสงสัยกันทุกคนคือ มันจะคุมได้ไง ขาเยอะขนาดนี้ ถ้าเป็น Arduino UNO รุ่นเล็กก็ไม่พอกันเลย หรือ ถ้าเป็นรู่นใหญ่ก็เหนื่อยเดินสาย แถม Port หายไปมากๆ ไม่ต้องพูดถึง การต่อแบบหลายๆ Panel หรือ LED RGB ครับ แทบจะเป็นไปไม่ได้
ก่อนที่จะเฉลยคำตอบ ผมจะให้ดูภายในของ LED Matrix กันก่อนนะครับ LED Matrix ที่เราใช้กันก็มี Schematic แบบภาพด้านล่างนี้ครับ คือ มี 8 Pin คุม Column และ 8 Pin คุม Row ก็ยังสงสัยใช่มั้ยครับว่ามันมี 64 LED แล้วใช้ 16 Pin ได้ไงเนี่ย
คืออย่างนี้ครับ มันมีเทคนิคนิดนึงคือ การเปลี่ยนแปลงอะไรก็ตามที่เร็วกว่า 20 ms ตาของมนุษย์จะไม่สามารถแยกแยะได้ครับ เช่น ถ้าหลอด LED กระพริบเร็วโดยมีช่วงเวลาระหว่างที่ติดและดับสั้นกว่า 20 ms แล้วสายตาของคนจะไม่เห็นว่ามันกระพริบครับ เราเรียกปรากฏการณ์นี้ว่า "Persistence of Vision" ดังนั้นเราจึง Drive LED 8x8 Matrix นี้โดยการควบคุมมันทีละแถว จากนั้นเปลี่ยนแถวไปเรื่อยๆ จนครบถึงแถวที่ 8 แล้วเริ่มบังคับใหม่ที่แถวแรก เป็นอย่างนี้เรื่อยๆไป โดยการควบคุมที่ว่านี้จะต้องกวาดไปให้ครบทุกแถวภายใน 20 ms ครับ ทำแบบนี้เราจะเห็นภาพเต็มทั้ง 64 ดวง ตามที่เราบังคับ โดยไม่ต้องควบคุมพร้อมๆกันทุกดวงครับ
http://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf
ยกตัวอย่างนะครับ ถ้าเราต้องการให้ LED 8x8 Matrix แสดงหน้ายิ้มแบบรูปด้านบน เราก็จัดการมันทีละแถวครับ
แถวแรก เราเปิด ROW 1 (PIN 9) ค้างไว้ เพราะเราจะจัดการกับแถวแรกก่อน จากนั้นก็มาเปิด LED Column ที่ 3 4 5 และ 6 เปิดด้วย โดยการส่งสัญญาณไปที่ PIN 4 10 6 11 สั้นๆครับ ไม่ต้องนาน จากนั้นก็ไปจัดการที่ Row ที่ 2 (PIN 14) จากนั้นก็เปิด PIN 3 กับ 15 ทำแบบนี้ไปเรื่อยๆ จนครบทุก ROW และให้ได้ภาพตามที่ต้องการครับ ถ้างงก็ดู wiring diagram ด้านบน ประกอบกับรูปหน้ายิ้มครับ
เอาล่ะเมื่อรู้เทคนิค Persistence of vision ไปแล้ว แต่ก็ยังต้องจัดการกับ PIN ด้วยครับ ถึงอย่างนั้นเราก็ยังต้องใช้ตั้ง 16 Pin ต่อ 1 แผง ภาพที่แสดงบนสุดนั้นใช้ 4 แผงนะครับ
วิธีการก็คือการส่งข้อมูลเข้าไปทีละ 1 บิต จนครบแล้วค่อยให้ไปเรียงออกที่ขาทั้ง 16 ของ LED Matrix พร้อมๆกัน ซึ่งจะได้การควบคุม 1 Row การทำงานแบบนี้เราต้องใช้ IC ที่เรียกว่า "Shift Register" ครับ ถ้าใครเรียน Digital Design หรือ Logic Design ก็คงจะเคยได้ยินกันบ้าง ประกอบการส่งข้อมูลแบบ SPI (Seral Peripheral Interface) รวมร่างใน IC ตัวเดียว
กลายเป็นว่าเราจะใช้สายเหลือ 5 เส้นต่อแผงครับ (VCC GND DIN CS และ CLK) จากนั้นก็ใช้ Library บน Arduino ครับ เราจะใช้ของ MAX7219CNG ครับ ตัวนี้เราสามารถใช้งานได้กับทั้ง 7 segment LED 2 digit ก็ได้ หรือ จะเอามาใช้กับ LED 8x8 Matrix ก็ได้ครับ (แต่ได้ 1 แผง)
หรือถ้าอยากดิบ และเลือดวิศวกรไฟฟ้าเข้าสิงแรงๆ ก็แบบนี้เลยครับ (ผมเปล่านะครับ) จัดไป เอา MAX7219 1 ตัวต่อกับ LED 8x8 Matrix 1 แผง ในรูปนี้ 4 แผงก็ 8 ตัว แต่ละตัวละก็มีสายไฟประมาณ 20 เส้นเห็นจได้ 4 แผงก็ซัดไปใกล้ๆ ร้อยเท่านั้นเอง
แต่ถ้าไม่ไหว ทางนี้ดีกว่าครับ เรามีชุด Drive สำเร็จรูป ที่มาพร้อมชุด Drive ซึ่งใช้ MAX7219 ที่ว่าไปครับ
อธิบายไปนาน มาเริ่มต่อกันดีกว่าครับ (แบบดิบๆ ด้านบนผมขอลาก่อนนะครับ) ถ้าใช้ชุด Drive LED 8x8 Matrix นี้ก็แค่ต่อสาย 5 เส้นอย่างที่ว่า จะใช้ PIN ไหนก็ไปเลือกเอาใน Sketch ครับ ผมเลือกใช้ Library "LedControlMS" นะครับ มาพร้อมตัวอย่างเรียบร้อย และ ฟรีตามปกติ
/* pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
#define NBR_MTX 2
LedControl lc=LedControl(12,11,10, NBR_MTX);
http://www.instructables.com/files/orig/FPQ/KJ0L/HKBG6QPG/FPQKJ0LHKBG6QPG.rar
โหลดมาแล้วติดตั้งไว้ใน Folder Library นะครับ จากนั้นก็ลอง Sketch ที่ชื่อ "MakeSpace_LEDMatrix" นะครับ
ถ้าต่อถูก ก็จะเห็นการแสดงค่าของ LED ตามที่ Sketch ควบคุม และมีการนับตัวเลขให้ดู จะเห็นว่าคำสั่งที่ให้มาคือ
lc.setLed(0,0,0,true); ซึ่งจะกำหนดตำแหน่งที่แสดง LED High และระดับความสว่างได้ด้วย
lc.clearDisplay(0); คำสั่ง Clear
scrollLeft('O'); เลื่อนซ้าย
scrollRight('O'); เลื่อนขวา
คราวนี้มาลองต่อแบบ 4 อันเรียงกันครับ ลักษณะการต่อก็คือเอาขาด้านบนที่เหลือ ไปต่อกับ ขาด้านล่างขอ Panel ถัดไปครับ
ลองดูรายละเอียดตามนี้ครับ
http://www.instructables.com/id/Multiple-LED-Matrixes-with-Arduino/#step0
เรียบร้อยครับ เราสามารถใช้บอร์ขับที่ว่านี้กับ LED 8x8 Matrix ขนาดใหญ่ หรือ แบบที่ต่่อเองก็ได้นะครับ ไม่ได้จำกัดเฉพาะการใช้งานเฉพาะแบบที่ขายนี้เท่านั้น
จบแค่นี้ครับ ถ้าต้องการสอบถามหรือเสนอแนะก็ยินดีครับ ไปที่ Facebook ของเราตามที่อยู่ด้านล่างเลยครับ
ลิงค์ที่น่าสนใจ
http://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf
โดย Mountain A
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,417,779 ครั้ง |
ผู้ชมทั้งหมด | 5,920,859 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 3 ต.ค. 2568 |