สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
สวัสดีทุกคน, ฉันชอบทำงานกับจอแสดงผล LED ที่มี 7 เซ็กเมนต์หรือดอทเมทริกซ์ และฉันได้ทำโปรเจ็กต์ต่างๆ กับพวกมันแล้ว
ทุกครั้งที่พวกมันน่าสนใจเพราะมีเวทมนตร์บางอย่างในวิธีที่พวกมันสามารถทำงานได้เพราะสิ่งที่คุณเห็นมันคือภาพลวงตา!
จอแสดงผลมีพินจำนวนมากสำหรับการเชื่อมต่อกับ Arduino (หรือไมโครคอนโทรลเลอร์อื่น) และทางออกที่ดีที่สุดคือการใช้เทคนิคของ data multiplexing เพื่อลดการใช้พอร์ตของพวกเขา
เมื่อคุณทำเช่นนี้ แต่ละเซ็กเมนต์หรือไฟ LED แต่ละดวงจะถูกเปิดขึ้นในชั่วขณะหนึ่ง (มิลลิวินาทีหรือน้อยกว่า) แต่การทำซ้ำหลายครั้งต่อวินาทีจะสร้างภาพลวงตาของภาพที่คุณต้องการให้แสดง
สำหรับผม สิ่งที่น่าสนใจที่สุดคือการพัฒนาตรรกะ โปรแกรมเพื่อค้นหาว่าพวกเขาสามารถแสดงข้อมูลที่ถูกต้องตามโครงการของคุณได้อย่างไร
ในโครงการเดียวที่ใช้จอแสดงผลต้องใช้เวลามากในการประกอบส่วนประกอบทั้งหมดบนเขียงหั่นขนมที่มีสายไฟจำนวนมากสำหรับการเชื่อมต่อ
ฉันรู้ว่ามีจอแสดงผลต่างๆ มากมายในตลาดที่ใช้ I2C ด้วยวิธีง่ายๆ (หรือไม่) ในการเขียนโปรแกรมและฉันก็ใช้มันเหมือนกัน แต่ฉันชอบที่จะทำงานกับส่วนประกอบมาตรฐาน เช่น 74HC595 (multiplexer IC) และ ULN2803 (ไดรเวอร์) เพราะ สิ่งเหล่านี้ช่วยให้คุณควบคุมโปรแกรมของคุณได้มากขึ้น และยังมีความแข็งแกร่งและความน่าเชื่อถือในการใช้งานของคุณอีกด้วย
เพื่อลดความซับซ้อนของกระบวนการประกอบ ฉันได้พัฒนาโมดูล LED Dipslay เพื่อวัตถุประสงค์หลายอย่างโดยใช้ส่วนประกอบที่ธรรมดาและทั่วไปในโลกของ Arduino
ด้วยโมดูลนี้ คุณสามารถทำงานกับดอทเมทริกซ์ที่มีไฟ LED สองสีในขนาดมาตรฐานสองขนาด (ใหญ่และเล็ก) และคุณยังสามารถควบคุมจอแสดงผล 7 Seg x 4 Digits ที่พบได้ทั่วไปและหาซื้อได้ง่ายในตลาด
และคุณยังสามารถทำงานกับโมดูลเหล่านี้แบบเรียงซ้อนแบบอนุกรม (ข้อมูลต่าง ๆ ในจอแสดงผล) หรือแบบขนาน (ข้อมูลเดียวกันในจอแสดงผล)
มาดูกันว่าโมดูลนี้สามารถทำงานและช่วยคุณในการพัฒนาได้อย่างไร !
วิดีโอ (โมดูลจอแสดงผล LED)
วิดีโอ (การทดสอบดอทเมทริกซ์)
ความนับถือ, ลัคซิลวา
ขั้นตอนที่ 1: ส่วนประกอบ
PCB (แผงวงจรพิมพ์)
- 74HC595 (03 x)
- ULN2803 (02 x)
- ทรานซิสเตอร์ PNP - BC327 (08 x)
- ตัวต้านทาน 150 โอห์ม (16 x)
- ตัวต้านทาน 470 โอห์ม (08 x)
- ตัวเก็บประจุ 100 nF (03 x)
- ไอซีซ็อกเก็ต 16 พิน (03 x)
- ไอซีซ็อกเก็ต 18 พิน (02 x)
- ขั้วต่อพินตัวเมีย - 6 พิน (8 x)
- ส่วนหัวของพิน 90º (01 x)
- ส่วนหัวของพิน 180º (01 x)
- Conector Borne KRE 02 หมุด (02 x)
- PCB (01 x) - ผลิตขึ้น
คนอื่น
- Arduino Uno R3 / นาโน / คล้ายคลึงกัน
- จอแสดงผล LED 04 หลัก x 7 ส่วน - (แอโนดทั่วไป)
- LED Dot Matrix Dual Color (เขียว & แดง) - (คอมมอนแอโนด)
หมายเหตุสำคัญ:
- ฉันใส่แผ่นข้อมูลของส่วนประกอบที่สำคัญที่สุดทั้งหมดเป็นข้อมูลอ้างอิงเท่านั้น แต่คุณต้องตรวจสอบแผ่นข้อมูลของส่วนประกอบของคุณเองก่อนใช้งาน
- บอร์ดนี้ได้รับการออกแบบมาเพื่อใช้แสดงผลของ COMMON ANODE เท่านั้น
ขั้นตอนที่ 2: ต้นแบบแรก
ต้นแบบแรกของฉันทำบนเขียงหั่นขนมเพื่อทดสอบวงจร
หลังจากนั้นฉันสร้างต้นแบบอีกอันโดยใช้กระดานสากลดังที่คุณเห็นในภาพ
บอร์ดประเภทนี้น่าสนใจในการผลิตต้นแบบอย่างรวดเร็ว แต่คุณรู้ว่ายังคงมีสายไฟจำนวนมาก
เป็นโซลูชันที่ใช้งานได้จริง แต่ไม่สวยงามนักเมื่อเปรียบเทียบกับ PCB ที่ผลิตในขั้นสุดท้าย (ตัวสีน้ำเงิน)
ฉันไม่เก่งเรื่องการบัดกรีเพราะฉันไม่มีประสบการณ์เพียงพอกับกระบวนการนี้ แต่ถึงอย่างนั้นฉันก็ได้ผลลัพธ์ที่ดีทั้งจากประสบการณ์และที่สำคัญกว่านั้น: ฉันไม่ได้เผาส่วนประกอบใด ๆ และไม่มีมือของฉัน !
ผลลัพธ์ในกระดานถัดไปของฉันน่าจะดีขึ้นเนื่องจากการฝึกฝน
ด้วยเหตุนี้ฉันขอแนะนำให้คุณลองประสบการณ์แบบนี้เพราะมันจะยอดเยี่ยมสำหรับคุณ
เพียงจำไว้ว่าให้ดูแลเตารีดร้อนและพยายามอย่าใช้เวลามากกว่าสองสามวินาทีกับส่วนประกอบเพื่อหลีกเลี่ยงการไหม้ !!
และสุดท้ายใน Youtube คุณจะพบวิดีโอมากมายเกี่ยวกับการบัดกรีซึ่งคุณสามารถเรียนรู้ได้ก่อนเข้าสู่โลกแห่งความเป็นจริง
ขั้นตอนที่ 3: การออกแบบ PCB
ฉันออกแบบ PCB นี้โดยใช้ซอฟต์แวร์เฉพาะเพื่อผลิตบอร์ดสองชั้น และได้รับการพัฒนาหลายเวอร์ชันก่อนหน้านี้
ตอนแรกฉันมีเวอร์ชันเดียวสำหรับจอแสดงผลแต่ละประเภท และหลังจากนั้นฉันตัดสินใจรวมทุกอย่างไว้ในเวอร์ชันเดียว
เป้าหมายการออกแบบ:
- ง่ายและมีประโยชน์สำหรับต้นแบบ
- ติดตั้งง่ายและขยายได้
- สามารถใช้จอแสดงผลได้ 3 แบบ
- ความกว้างสูงสุดของดอทเมทริกซ์ขนาดใหญ่ของ LED
- ความยาวสูงสุดที่ 100 มม. เพื่อลดต้นทุนการผลิตบอร์ด
- ใช้ส่วนประกอบแบบดั้งเดิมแทน SMD เพื่อหลีกเลี่ยงปัญหามากขึ้นในระหว่างกระบวนการบัดกรีแบบแมนนวล
- บอร์ดจะต้องเป็นแบบแยกส่วนเพื่อเชื่อมต่อกับบอร์ดอื่นในคาสเคด
- เอาต์พุตแบบอนุกรมหรือแบบขนานสำหรับบอร์ดอื่น
- บอร์ดหลายตัวต้องควบคุมโดย Arduino เท่านั้น
- ข้อมูลเพียง 3 สายสำหรับการเชื่อมต่อของ Arduino
- การเชื่อมต่อไฟภายนอก 5V
- เพิ่มความคงทนทางไฟฟ้าโดยใช้ทรานซิสเตอร์และไดรเวอร์ (ULN2803) เพื่อควบคุม LEDS
สังเกต:
เกี่ยวกับรายการสุดท้ายนี้ ฉันแนะนำให้คุณอ่านคำแนะนำอื่นของฉันเกี่ยวกับส่วนประกอบเหล่านี้:
การใช้ Shift Register 74HC595 กับ ULN2803, UDN2981 และ BC327
การผลิต PCB:
หลังจากออกแบบเสร็จแล้ว ฉันก็ส่งไปยังผู้ผลิต PCB ที่ประเทศจีนหลังจากค้นหาหลายครั้งกับซัพพลายเออร์ในท้องถิ่นและในประเทศต่างๆ
ปัญหาหลักเกี่ยวข้องกับจำนวนบอร์ดเทียบกับต้นทุน เพราะฉันต้องการเพียงไม่กี่บอร์ด
ในที่สุด ฉันก็ตัดสินใจสั่งซื้อแบบปกติ (ไม่ใช่การสั่งซื้อด่วนเนื่องจากมีค่าใช้จ่ายที่สูงกว่า) เพียง 10 แผงกับบริษัทที่ประเทศจีน
หลังจากนั้นเพียง 3 วัน บอร์ดก็ถูกผลิตขึ้นและส่งให้ฉันข้ามโลกในอีก 4 วัน
ผลลัพธ์ก็เยี่ยม !!
ภายในหนึ่งสัปดาห์หลังจากคำสั่งซื้อ บอร์ดอยู่ในมือของฉันแล้ว และฉันรู้สึกประทับใจมากกับคุณภาพสูงและความเร็วที่รวดเร็ว !
ขั้นตอนที่ 4: การเขียนโปรแกรม
สำหรับการเขียนโปรแกรม คุณต้องคำนึงถึงแนวคิดที่สำคัญบางประการเกี่ยวกับการออกแบบฮาร์ดแวร์และเกี่ยวกับ shift register 74HC595
หน้าที่หลักของ 74HC595 คือการแปลง 8-Bit Serial-In เป็น 8 Parallel-Out Shift
ข้อมูลอนุกรมทั้งหมดไปที่พิน #14 และในแต่ละสัญญาณนาฬิกา บิตจะไปยังพินแบบขนานที่ตรงกัน (Qa ถึง Qh)
หากคุณส่งข้อมูลมากขึ้นอย่างต่อเนื่อง บิตจะถูกย้ายทีละตัวไปที่พิน #9 (Qh') เป็นเอาต์พุตแบบอนุกรมอีกครั้ง และด้วยฟังก์ชันนี้ คุณจึงสามารถใส่ชิปอีกตัวที่เชื่อมต่อในคาสเคดได้
สำคัญ:
ในโครงการนี้ เรามีไอซี 74HC595 สามตัว สองงานแรกเพื่อควบคุมคอลัมน์ (ด้วยตรรกะที่เป็นบวก) และอันสุดท้ายเพื่อควบคุมเส้น (ด้วยตรรกะเชิงลบเนื่องจากการทำงานของทรานซิสเตอร์ PNP)
ตรรกะเชิงบวกหมายความว่าคุณต้องส่งสัญญาณระดับสูง (+5V) จาก Arduino และตรรกะเชิงลบหมายความว่าคุณต้องส่งสัญญาณระดับต่ำ (0V)
ดอทเมทริกซ์ของ LEDs
- อย่างแรกคือสำหรับเอาต์พุตของแคโทดของ LED สีแดง (8 x) >> COLUMN RED (1 ถึง 8)
- ประการที่สองสำหรับเอาต์พุตL ของแคโทดของ LED สีเขียว (8 x) >> COLUMN GREEN (1 ถึง 8)
- อันสุดท้ายสำหรับเอาต์พุตของแอโนดของไฟ LED ทั้งหมด (08 x สีแดงและสีเขียว) >> LINES (1 ถึง 8)
ตัวอย่างเช่น หากคุณต้องการเปิดเฉพาะ LED สีเขียวของคอลัมน์ 1 และบรรทัดที่ 1 คุณต้องส่งข้อมูลซีเรียลตามลำดับต่อไปนี้:
1º) LINES
~10000000 (เปิดเฉพาะบรรทัดแรกเท่านั้น) - สัญลักษณ์ ~ คือการแปลงบิตทั้งหมดจาก 1 เป็น 0 และในทางกลับกัน
2º) คอลัมน์ สีเขียว
10000000 (เปิดเฉพาะคอลัมน์แรกของ LED สีเขียวเท่านั้น)
3º) คอลัมน์ RED
00000000 (คอลัมน์ทั้งหมดของ LED สีแดงดับ)
คำสั่ง Arduino:
shiftOut(dataPin, clockPin, LSBFIRST, ~B10000000); //ตรรกะเชิงลบของเส้น
shiftOut(dataPin, clockPin, LSBFIRST, B10000000); //ตรรกะเชิงบวกสำหรับคอลัมน์สีเขียว
shiftOut(dataPin, clockPin, LSBFIRST, B00000000); //ตรรกะเชิงบวกสำหรับคอลัมน์สีแดง
สังเกต:
คุณยังสามารถรวม LED ทั้งสองดวง (สีเขียวและสีแดง) เข้าด้วยกันเพื่อสร้างสีเหลืองได้ดังนี้:
shiftOut(dataPin, clockPin, LSBFIRST, ~B10000000);
shiftOut(dataPin, clockPin, LSBFIRST, B10000000);
shiftOut(dataPin, clockPin, LSBFIRST, B10000000);
7 ส่วนแสดง
สำหรับการแสดงประเภทนี้ ลำดับจะเหมือนกัน ข้อแตกต่างเพียงอย่างเดียวคือ คุณไม่จำเป็นต้องใช้ไฟ LED สีเขียว
1º) DIGIT (1 ถึง 4 จากซ้ายไปขวา) ~10000000 (ตั้งค่าหลัก #1)
~01000000 (ตั้งค่าหลัก #2)
~00100000 (ตั้งหลัก #3)
~00010000 (ตั้งค่าหลัก #4)
2º) ไม่ได้ใช้
00000000 (บิตทั้งหมดตั้งค่าเป็นศูนย์)
3º) กลุ่ม (A ถึง F และ DP - ตรวจสอบแผ่นข้อมูลที่แสดงของคุณ)
10000000 (ชุดส่วน A)
01000000 (ชุดเซ็กเมนต์ B)
00100000 (ชุดเซ็กเมนต์ C)
00010000 (ชุดเซ็กเมนต์ D)
00001000 (ชุดเซ็กเมนต์ E)
00000100 (ชุดเซ็กเมนต์ F)
00000010 (ชุดเซ็กเมนต์ G)
00000001 (ตั้งค่า DP)
ตัวอย่าง Arduino เพื่อตั้งค่า Display #2 ด้วยหมายเลข 3:
shiftOut (dataPin, clockPin, LSBFIRST, ~B01000000); // ตั้งค่า DISPLAY 2 (ตรรกะเชิงลบ)
shiftOut(dataPin, clockPin, LSBFIRST, 0); // ตั้งค่าข้อมูลเป็นศูนย์ (ไม่ได้ใช้)
shiftOut (dataPin, clockPin, LSBFIRST, B11110010); //กำหนดเซ็กเมนต์ A, B, C, D, G)
สุดท้าย การใช้กระบวนการนี้ทำให้คุณสามารถควบคุม LED ใดๆ ของจอแสดงผลได้ และคุณยังสามารถสร้างอักขระพิเศษใดๆ ที่คุณต้องการได้อีกด้วย
ขั้นตอนที่ 5: การทดสอบ
ต่อไปนี้คือโปรแกรมสองโปรแกรมเป็นตัวอย่างการทำงานของโมดูลการแสดงผล
1) การแสดงการนับถอยหลัง (จาก 999.9 วินาทีเป็นศูนย์)
2) Dot Matrix (ตัวเลข 0 ถึง 9 และตัวอักษร A ถึง Z)
3) นาฬิกาดิจิตอล RTC ในจอแสดงผล LED 4 หลักและ 7 ส่วน
อันสุดท้ายนี้เป็นการอัปเดต Digital Clock เวอร์ชันแรกของฉัน
ขั้นตอนที่ 6: บทสรุป & ขั้นตอนต่อไป
โมดูลนี้จะมีประโยชน์ในทุกโครงการในอนาคตที่ต้องการจอแสดงผล LED
ในขั้นตอนต่อไป ฉันจะรวบรวมบอร์ดเพิ่มเติมเพื่อทำงานกับพวกมันในโหมดคาสเคด และฉันจะพัฒนาไลบรารีด้วยเพื่อทำให้การเขียนโปรแกรมง่ายขึ้น
ฉันหวังว่าคุณจะสนุกกับโครงการนี้
โปรดส่งความคิดเห็นของคุณมาให้ฉันเพราะนี่เป็นสิ่งสำคัญในการปรับปรุงโครงการและข้อมูลของคำแนะนำนี้
ความนับถือ, ลัคซิลวา
26.พ.ค. 2559