ในบทช่วยสอนนี้เราจะออกแบบจอแสดงผล LED Matrix Scrolling ขนาด 8x8 โดยใช้ Arduino Unoซึ่งจะแสดงตัวอักษรแบบเลื่อน
เมทริกซ์ LED 8x8 ประกอบด้วยไฟ LED 64 ดวง (ไดโอดเปล่งแสง) ซึ่งจัดเรียงในรูปแบบของเมทริกซ์ดังนั้นชื่อจึงเป็นเมทริกซ์ LED เรากำลังจะสร้าง Matrix นี้โดยการบัดกรี LED 64 ดวงเหล่านี้เข้ากับ perfboard หรือ DOT PCB ไฟ LED อาจมีสีใดก็ได้เลือกสีที่มีให้คุณ จากนั้นเราจะเขียนโปรแกรมสำหรับ Arduino เพื่อควบคุมเมทริกซ์ LED 64 ดวงเหล่านี้ UNO ตามโปรแกรมจะให้พลังงาน LED ที่เหมาะสมเพื่อแสดงอักขระในรูปแบบการเลื่อน
ส่วนประกอบที่ต้องการ:
- Arduino Uno
- ไฟ LED 64 ดวง
- Perfboard พร้อมเครื่องมือบัดกรีอื่น ๆ
- ตัวต้านทาน1KΩ (8 ชิ้น)
- แหล่งจ่ายไฟ (5v)
คำอธิบายวงจรและการทำงาน:
มี LED 64 ดวงจัดเรียงในรูปแบบเมทริกซ์ เราจึงมี 8 คอลัมน์และ 8 แถว เหนือแถวและคอลัมน์เหล่านั้นขั้วบวกทั้งหมดในแถวจะถูกรวมเข้าด้วยกัน สำหรับแต่ละแถวจะมีCommon Positive Terminal หนึ่งตัวสำหรับ LED ทั้ง 8 แถวในแถวนั้น ดังแสดงในรูปด้านล่าง
ดังนั้นสำหรับ 8 แถวเรามีขั้วบวกทั่วไป 8 ขั้ว พิจารณาแถวแรกดังที่เห็นในรูปไฟ LED 8 ดวงจาก D57 ถึง D64 มีขั้วบวกทั่วไปและแสดงด้วย 'POSITIVE0' ตอนนี้ถ้าเราต้องการเรืองแสง LED หนึ่งตัวหรือทั้งหมดในแถวแรกของเมทริกซ์เราควรเปิด PIN0 ของ LED Matrix ในทำนองเดียวกันหากเราต้องการเรืองแสง LED ใด ๆ (หรือทั้งหมด) ใน ROW ใด ๆ เราจำเป็นต้องจ่ายไฟให้กับ Common Positive Terminal Pin ที่เกี่ยวข้องของแถวนั้น
สิ่งนี้ยังไม่จบและการออกจาก MATRIX ROWS ด้วยอุปทานเชิงบวกจะไม่ให้ผลอะไรเลย เราจำเป็นต้องกราวด์ฟิล์มเนกาทีฟ LED เพื่อให้เรืองแสง ดังนั้นในเมทริกซ์ LED 8x8 ขั้วลบทั้งหมดของ LED ในคอลัมน์ใด ๆ จะถูกรวมเข้าด้วยกันเพื่อสร้างขั้วลบทั่วไปแปดขั้วเช่นเดียวกับขั้วลบทั้งหมดในคอลัมน์แรกจะเชื่อมต่อเข้าด้วยกันกับ PIN-A1 (NEGATIVE7) ดังแสดงในรูปด้านล่าง:
ควรใส่ใจกับพินเหล่านี้ในขณะที่บัดกรี LED บน Perfboard
ตอนนี้ถ้าเราต้องการกราวด์ LED ใด ๆ ในคอลัมน์แรกเราจะกราวด์ PIN-A1 (NEGATIVE7) ของ MATRIX และจะกราวด์ LED ทั้งหมดในคอลัมน์แรก กระบวนการเดียวกันนี้ใช้กับคอลัมน์เชิงลบอื่น ๆ ทั้งหมดเจ็ดคอลัมน์
ตั้งแต่ตอนนี้คุณก็รู้แล้วว่า Common Positive and Common Negative ทำงานอย่างไร มารวมกันเพื่อดูว่ามันทำงานร่วมกันอย่างไรและวงจรสุดท้ายสำหรับการเลื่อนจอแสดงผล LED Matrix 8x8จะมีลักษณะดังนี้:
การขับเมทริกซ์ LED 8x8 โดยใช้ Multiplexing:
ตอนนี้สมมติว่าเราต้องการเปิด LED57 จากนั้นเราต้องจ่ายไฟ PIN0 ของ UNO และกราวด์ PIN-8 ของ UNO ตอนนี้สำหรับการเปิดทั้ง LED57 และ LED50 เราจำเป็นต้องจ่ายไฟ PIN0, PIN1 และกราวด์ PIN8, PIN9 แต่การทำเช่นนั้นจะไม่เพียง แต่เปิด D57, D50 แต่ยังรวมถึง D49, D58 ด้วย เพื่อหลีกเลี่ยงการที่เราใช้เทคนิคที่เรียกว่าMultiplexingเราได้กล่าวถึงเทคนิค Multiplex นี้แล้วในรายละเอียด LED Matrix 8x8 อ่านบทความนั้นเพื่อดูคำอธิบายโดยละเอียด เรากำลังอธิบายเกี่ยวกับ Multiplexing โดยสังเขป
สายตาของมนุษย์ไม่สามารถจับความถี่ได้มากกว่า 30 HZ นั่นคือถ้า LED เปิดและปิดอย่างต่อเนื่องที่อัตรา 30HZ ขึ้นไป ตาจะมองเห็น LED เป็น ON อย่างต่อเนื่อง อย่างไรก็ตามไม่ใช่กรณีนี้และ LED จะเปิดและปิดอยู่ตลอดเวลา เทคนิคนี้เรียกว่าMultiplexing
ตัวอย่างเช่นเราต้องการเปิดเฉพาะ LED57 และ LED50 โดยไม่ต้องเปิด D49 และ D58 เคล็ดลับคือก่อนอื่นเราจะจ่ายไฟให้แถวแรกเพื่อเปิด LED57 และรอ 1mSEC จากนั้นเราจะปิด จากนั้นเราจะจ่ายไฟให้กับแถวที่สองเพื่อเปิด LED50 และรอ 1mSEC จากนั้นจะปิด วงจรจะดำเนินไปอย่างต่อเนื่องด้วยความถี่สูงและ LED57 & LED50 จะเปิดและปิดอย่างรวดเร็วและไฟ LED ทั้งสองดวงจะเปิดต่อเนื่องต่อตา หมายความว่าเรากำลังจ่ายไฟให้กับทีละแถวเท่านั้นซึ่งจะช่วยลดโอกาสในการเปิดไฟ LED อื่น ๆ ในแถวอื่น ๆ เราจะใช้เทคนิคนี้เพื่อแสดงตัวอักษรทั้งหมด
นอกจากนี้ยังมีไลบรารีชื่อ LedControlMS.h เพื่อดูแลความซับซ้อนทั้งหมดของการมัลติเพล็กซ์นี้ซึ่งคุณจะต้องป้อนอักขระหรือตัวเลขที่คุณต้องการพิมพ์บนเมทริกซ์ LED เท่านั้นตรวจสอบเมทริกซ์ Arduino LED กับโครงการ MAX7219 สำหรับรายละเอียดเพิ่มเติม
คำอธิบายการเขียนโปรแกรม:
ใน Code ของเราเราได้เขียนค่าทศนิยมสำหรับแต่ละอักขระและตั้งโปรแกรมค่าเหล่านี้ลงใน Arduino โปรแกรมได้เขียนเพื่อเลื่อนค่าเหล่านี้ไปยังแถวถัดไปทุกๆ 0.2 วินาทีซึ่งจะเห็นว่าเป็นการเลื่อนตัวอักษรขึ้นไปมันง่ายมาก
หากต้องการเปลี่ยนอักขระที่จะแสดงเพียงแค่แทนที่ค่าในอาร์เรย์ ถ่าน ALPHA ตามค่าอักขระที่ระบุด้านล่าง
24,60,102,126,102,102,102,0,0,0, // ก 124,102,102,124,102,102,124,0,0,0, // B 60,102,96,96,96,102,60,0, 0,0, // C 120,108,102,102,102,108,120,0, 0,0, // D 126,96,96,120,96,96,126,0, 0,0, // E 126,96,96,120,96,96,96,0, 0,0, // F 60,102,96,110,102,102,60, 0, 0,0, // G 102,102,102,126,102,102,102,0, 0,0, // H 60,24,24,24,24,24,60,0, 0,0, // I 30,12,12,12, 12,108,56,0, 0,0, // J 102,108,120,112,120,108,102,0, 0,0, // K 96,96,96,96,96,96,126,0, 0,0, // L 99,119,127,107,99, 99,99,0, 0,0, // M 102,118,126,126,110,102,102,0, 0,0, // N 60,102,102,102,102,102,60,0, 0,0, // O 124,102,102,124,96,96,96,0, 0,0, // หน้า 60,102,102,102,102,60,14,0, 0,0, // Q 124,102,102,124,120,108,102,0, 0,0, // R 60,102,96,60,6,102,60,0, 0,0, // S 126, 24,24,24,24,24,24,0, 0,0, // T 102,102,102,102,102,102,60,0, 0,0, // U 102,102,102,102,102,60,24,0, 0,0, // V 99,99,99,107,127,119,99,0, 0,0, // ว 102,102,60,24,60,102,102,0, 0,0, // X 102,102,102,60,24,24,24,0, 0,0, // Y 126,6,12, 24,48,96,126,0, 0,0, // ซ
เช่นถ้าคุณต้องการแสดง DAD บน LED Matrixจากนั้นให้แทนที่ค่าอักขระในอาร์เรย์ ถ่าน ALPHA ก่อน โดยใส่ค่าสำหรับอักขระ D, A และ D จากรายการด้านบน:
ถ่าน ALPHA = {0,0,0,0,0,0,0,0,0,0,0,0, 120,108,102,102,102,108,120,0,0,0, 24,60,102,126,102,102,102,0,0,0, 120,108,102,102,102,108,120,0,0, 0, 0,0,0,0,0,0,0,0,0,0,0};
ค่าทั้งหมดตอนนี้คือ 5 * 10 = 50 ค่าดังนั้น
แทนที่สำหรับ (int x = 0; x <142; x ++) // 150-8 (เพื่อหยุดการล้น) {…….. ด้วยสำหรับ (int x = 0; x <42; x ++) // 50-8 (หยุดล้น) {……..
ดังนั้นคุณต้องเปลี่ยนหมายเลข
ด้วยวิธีนี้คุณได้ทำการเขียนโปรแกรมและตอนนี้คุณสามารถเลื่อนข้อความใด ๆ บน 8x8 LED Matrixตรวจสอบรหัสเต็มด้านล่างด้วยการสาธิตวิดีโอ