เราได้สร้างชุดบทเรียน Raspberry Pi ซึ่งเราได้กล่าวถึงการเชื่อมต่อของ Raspberry Pi กับส่วนประกอบพื้นฐานทั้งหมดเช่น LED, LCD, ปุ่ม, มอเตอร์ DC, เซอร์โวมอเตอร์, Stepper Motor, ADC, shift Register เป็นต้นนอกจากนี้เรายังมี เผยแพร่ โครงการ Raspberry Pi ง่ายๆ สำหรับผู้เริ่มต้นพร้อมกับโครงการ IoT ที่ดี วันนี้ในความต่อเนื่องของบทเรียนเหล่านี้เราจะไปควบคุม 8x8 Matrix LED โมดูลโดย Raspberry Pi เราจะเขียนโปรแกรม python เพื่อแสดงอักขระบนโมดูลเมทริกซ์
ตรวจสอบ Interfacing 8x8 LED Matrix กับ Arduino และ LED Matrix พร้อม AVR Microcontorller
ส่วนประกอบที่ต้องการ:
ที่นี่เราจะใช้ ราสเบอร์รี่ Pi 2 รุ่น B กับ Raspbian Jessie OS ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์พื้นฐานทั้งหมดได้กล่าวไว้ก่อนหน้านี้คุณสามารถค้นหาได้ในบทนำ Raspberry Pi และ Raspberry PI LED กะพริบเพื่อเริ่มต้นใช้งานนอกเหนือจากที่เราต้องการ:
- บอร์ด Raspberry Pi
- แหล่งจ่ายไฟ (5v)
- ตัวเก็บประจุ 1000uF (เชื่อมต่อกับแหล่งจ่ายไฟ)
- ตัวต้านทาน1KΩ (8 ชิ้น)
โมดูลเมทริกซ์ LED 8x8:
โมดูลเมทริกซ์ LED ขนาด 8 * 8 ประกอบด้วย LED 64 ดวง (ไดโอดเปล่งแสง) ซึ่งจัดเรียงในรูปแบบของเมทริกซ์ดังนั้นชื่อจึงเป็นเมทริกซ์ LED โมดูลขนาดกะทัดรัดเหล่านี้มีให้เลือกหลายขนาดและหลายสี สามารถเลือกได้ตามความสะดวก การกำหนดค่า PIN ของโมดูลดังแสดงในภาพ โปรดทราบว่า pinouts ของโมดูลไม่ได้เรียงตามลำดับดังนั้น PIN จึงควรมีหมายเลขตามที่แสดงในภาพเพื่อหลีกเลี่ยงข้อผิดพลาด
มีเทอร์มินัลทั่วไป 8 + 8 = 16 ในโมดูล LED Matrix เหนือพวกเขาเรามีขั้วบวกทั่วไป 8 ขั้วและขั้วลบทั่วไป 8 ขั้วในรูปแบบ 8 แถวและ 8 คอลัมน์สำหรับการเชื่อมต่อ LED 64 ในรูปแบบเมทริกซ์ หากต้องวาดโมดูลในรูปแบบของแผนภาพวงจรเราจะได้ภาพดังที่แสดงด้านล่าง:
ดังนั้นสำหรับ 8 แถวเรามี8 ขั้วบวกทั่วไป (9, 14, 8, 12, 17, 2, 5) พิจารณาแถวแรก LED จาก D1 ถึง D8 มีขั้วบวกทั่วไปและพินจะนำออกมาที่ PIN9 ของโมดูล LED Matrix เมื่อเราต้องการให้ LED หนึ่งดวงหรือทั้งหมดใน ROW ติดอยู่ขาที่เกี่ยวข้องของ LED MODULE ควรขับเคลื่อนด้วย + 3.3v
เช่นเดียวกับขั้วบวกทั่วไปเรามี8 ขั้วลบทั่วไปเป็นคอลัมน์ (13, 3, 4, 10, 6, 11, 15, 16) สำหรับการต่อสายดิน LED ใด ๆ ในคอลัมน์ใด ๆ จะต้องต่อสายดินขั้วลบทั่วไปตามลำดับ
คำอธิบายวงจร:
การเชื่อมต่อระหว่างRaspberry Pi และโมดูลเมทริกซ์ LEDแสดงอยู่ในตารางด้านล่าง
หมายเลขพินโมดูลเมทริกซ์ LED |
ฟังก์ชัน |
หมายเลขพิน Raspberry Pi GPIO |
13 |
บวก 0 |
GPIO12 |
3 |
ข้อดี 1 |
GPIO 22 |
4 |
ข้อดี 2 |
GPIO27 |
10 |
บวก 3 |
GPIO25 |
6 |
บวก 4 |
GPIO17 |
11 |
บวก 5 |
GPIO24 |
15 |
บวก 6 |
GPIO23 |
16 |
ข้อดี 7 |
GPIO18 |
9 |
เชิงลบ 0 |
GPIO21 |
14 |
ข้อเสีย 1 |
GPIO20 |
8 |
ข้อเสีย 2 |
GPIO26 |
12 |
ข้อเสีย 3 |
GPIO16 |
1 |
ข้อเสีย 4 |
GPIO 19 |
7 |
ข้อเสีย 5 |
GPIO13 |
2 |
ข้อเสีย 6 |
GPIO6 |
5 |
ข้อเสีย 7 |
GPIO5 |
นี่คือแผนภาพวงจรสุดท้ายสำหรับการเชื่อมต่อเมทริกซ์ LED 8x8 กับ Raspberry Pi:
คำอธิบายการทำงาน:
ในที่นี้เราจะใช้Multiplexing Techniqueเพื่อแสดงอักขระบนโมดูลเมทริกซ์ LED 8x8 เรามาดูรายละเอียดเกี่ยวกับการมัลติเพล็กซ์นี้กัน สมมติว่าเราต้องการเปิด LED D10 ในเมทริกซ์หรือไม่เราต้องจ่ายไฟให้ PIN14 ของโมดูลและต่อสาย PIN3 ของโมดูล ด้วย LED D10 นี้จะเปิดขึ้นตามที่แสดงในรูปด้านล่าง สิ่งนี้ควรได้รับการตรวจสอบก่อนเพื่อให้ MATRIX ทราบว่าทุกอย่างเป็นไปตามลำดับ
ตอนนี้สมมติว่าถ้าเราต้องการเปิด D1 เราจำเป็นต้องจ่ายไฟ PIN9 ของเมทริกซ์และต่อสายดิน PIN13 ด้วย LED D1 นั้นจะเรืองแสง ทิศทางปัจจุบันในกรณีนี้จะแสดงในรูปด้านล่าง
ตอนนี้สำหรับส่วนที่ยุ่งยากให้พิจารณาว่าเราต้องการเปิดทั้ง D1 และ D10 ในเวลาเดียวกัน ดังนั้นเราควรจ่ายไฟทั้ง PIN9, PIN14 และกราวด์ทั้ง PIN13, PIN3 สิ่งนี้จะเปิด LED D1 และ D10 แต่จะเปิด LED D2 และ D9 ด้วย เป็นเพราะพวกเขาใช้เทอร์มินัลร่วมกัน ดังนั้นหากเราต้องการเปิดไฟ LED ตามแนวทแยงเราจะต้องเปิดไฟ LED ทั้งหมดตลอดทาง ดังแสดงในรูปด้านล่าง:
เพื่อหลีกเลี่ยงปัญหานี้เราจะใช้เทคนิคที่เรียกว่า Multiplexingนอกจากนี้เรายังได้พูดถึงเทคนิคการมัลติเพล็กซ์นี้ในขณะที่เชื่อมต่อเมทริกซ์ LED 8x8 กับ AVR เรากำลังอธิบายอีกครั้ง เทคนิคการมัลติเพล็กซ์เดียวกันนี้ยังใช้ใน Scrolling Text บนเมทริกซ์ LED 8x8 กับ Arduino และไมโครคอนโทรลเลอร์ AVR
สายตามนุษย์ไม่สามารถจับความถี่ได้มากกว่า 30 HZ นั่นคือถ้าไฟ LED ติดและดับอย่างต่อเนื่องที่อัตรา 30HZ ขึ้นไป ตาจะมองเห็น LED เป็น ON อย่างต่อเนื่อง อย่างไรก็ตามไม่ใช่กรณีนี้และ LED จะเปิดและปิดอยู่ตลอดเวลา เทคนิคนี้เรียกว่า Multiplexing
ตัวอย่างเช่นเราต้องการเปิดเฉพาะ LED D1 และ LED D10 โดยไม่ต้องเปิด D2 และ D9 เคล็ดลับคือก่อนอื่นเราจะจ่ายไฟให้เฉพาะ LED D1 โดยใช้ PIN 9 & 13 และรอ 1mSEC จากนั้นเราจะปิด จากนั้นเราจะจ่ายไฟให้กับ LED D10 โดยใช้ PIN 14 & 3 และรอ 1mSEC จากนั้นจะปิด วงจรจะดำเนินไปอย่างต่อเนื่องด้วยความถี่สูงและ D1 & D10 จะเปิดและปิดอย่างรวดเร็วและไฟ LED ทั้งสองดวงจะเปิดต่อเนื่องต่อตาของเรา หมายความว่าเรากำลังจ่ายไฟให้กับแถว (LED) ทีละแถวเท่านั้นซึ่งจะช่วยลดโอกาสในการเปิดไฟ LED อื่นในแถวอื่น ๆ เราจะใช้เทคนิคนี้เพื่อแสดงตัวอักษรทั้งหมด
เราสามารถทำความเข้าใจเพิ่มเติมได้จากตัวอย่างเดียวเช่นหากเราต้องการแสดง“ A” บนเมทริกซ์ดังที่แสดงด้านล่าง:
อย่างที่บอกเราจะเปิดหนึ่งแถวในทันที
ที่ t = 0m วินาที PIN09 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ อยู่ต่ำในขณะนี้) ในเวลานี้ PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 จะต่อสายดิน (พิน COLUMN อื่น ๆ จะสูงในขณะนี้)
ที่ t = 1m SEC PIN14 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ อยู่ต่ำในขณะนี้) ในเวลานี้ PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 จะมีการต่อสายดิน (พิน COLUMN อื่น ๆ จะสูงในขณะนี้)
ที่ t = 2m วินาที PIN08 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ อยู่ต่ำในขณะนี้) ในเวลานี้ PIN13, PIN3, PIN15, PIN16 จะต่อสายดิน (พิน COLUMN อื่น ๆ จะสูงในขณะนี้)
ที่ t = 3m วินาที PIN12 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ ต่ำในขณะนี้) ในเวลานี้ PIN13, PIN3, PIN15, PIN16 จะต่อสายดิน (พิน COLUMN อื่น ๆ อยู่ในระดับสูงในขณะนี้)
ที่ t = 4m SEC PIN01 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ ต่ำในขณะนี้) ในเวลานี้ PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 จะมีการต่อสายดิน (พิน COLUMN อื่น ๆ จะสูงในขณะนี้)
ที่ t = 5m SEC PIN07 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ อยู่ต่ำในขณะนี้) ในเวลานี้ PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 จะถูกต่อลงดิน (พิน COLUMN อื่น ๆ จะสูงในขณะนี้)
ที่ t = 6m SEC PIN02 ถูกตั้งค่าเป็น HIGH (หมุด ROW อื่น ๆ อยู่ในขณะนี้ต่ำ) ในเวลานี้ PIN13, PIN3, PIN15, PIN16 จะต่อสายดิน (พิน COLUMN อื่น ๆ อยู่ในระดับสูงในขณะนี้)
ที่ t = 7m วินาที PIN05 ถูกตั้งค่าเป็น HIGH (พิน ROW อื่น ๆ ต่ำในเวลานี้) ในเวลานี้ PIN13, PIN3, PIN15, PIN16 จะต่อสายดิน (พิน COLUMN อื่น ๆ ในขณะนี้สูง)
ด้วยความเร็วนี้จอแสดงผลจะแสดงเป็นอักขระ“ A” อย่างต่อเนื่องดังแสดงในรูป
โปรแกรม Python สำหรับการแสดงอักษรบน LED เมทริกซ์โดยใช้ราสเบอร์รี่ Piได้รับด้านล่าง โปรแกรมอธิบายได้ดีจากความคิดเห็น ค่าพอร์ตสำหรับแต่ละอักขระจะได้รับในโปรแกรม คุณสามารถแสดงอักขระใดก็ได้ที่คุณต้องการโดยเพียงแค่เปลี่ยนค่า "pinp" ใน "for loops" ในโปรแกรมที่กำหนด ตรวจสอบวิดีโอสาธิตด้านล่างด้วย