โมดูลแสดงผล LED หลายโมดูล: 6 ขั้นตอน (พร้อมรูปภาพ)
โมดูลแสดงผล LED หลายโมดูล: 6 ขั้นตอน (พร้อมรูปภาพ)
Anonim
Image
Image
โมดูลแสดงผล LED หลายตัว
โมดูลแสดงผล LED หลายตัว
โมดูลแสดงผล LED หลายตัว
โมดูลแสดงผล LED หลายตัว

สวัสดีทุกคน, ฉันชอบทำงานกับจอแสดงผล 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 (เขียว & แดง) - (คอมมอนแอโนด)

หมายเหตุสำคัญ:

  1. ฉันใส่แผ่นข้อมูลของส่วนประกอบที่สำคัญที่สุดทั้งหมดเป็นข้อมูลอ้างอิงเท่านั้น แต่คุณต้องตรวจสอบแผ่นข้อมูลของส่วนประกอบของคุณเองก่อนใช้งาน
  2. บอร์ดนี้ได้รับการออกแบบมาเพื่อใช้แสดงผลของ COMMON ANODE เท่านั้น

ขั้นตอนที่ 2: ต้นแบบแรก

ต้นแบบแรก
ต้นแบบแรก
ต้นแบบแรก
ต้นแบบแรก
ต้นแบบแรก
ต้นแบบแรก
ต้นแบบแรก
ต้นแบบแรก

ต้นแบบแรกของฉันทำบนเขียงหั่นขนมเพื่อทดสอบวงจร

หลังจากนั้นฉันสร้างต้นแบบอีกอันโดยใช้กระดานสากลดังที่คุณเห็นในภาพ

บอร์ดประเภทนี้น่าสนใจในการผลิตต้นแบบอย่างรวดเร็ว แต่คุณรู้ว่ายังคงมีสายไฟจำนวนมาก

เป็นโซลูชันที่ใช้งานได้จริง แต่ไม่สวยงามนักเมื่อเปรียบเทียบกับ PCB ที่ผลิตในขั้นสุดท้าย (ตัวสีน้ำเงิน)

ฉันไม่เก่งเรื่องการบัดกรีเพราะฉันไม่มีประสบการณ์เพียงพอกับกระบวนการนี้ แต่ถึงอย่างนั้นฉันก็ได้ผลลัพธ์ที่ดีทั้งจากประสบการณ์และที่สำคัญกว่านั้น: ฉันไม่ได้เผาส่วนประกอบใด ๆ และไม่มีมือของฉัน !

ผลลัพธ์ในกระดานถัดไปของฉันน่าจะดีขึ้นเนื่องจากการฝึกฝน

ด้วยเหตุนี้ฉันขอแนะนำให้คุณลองประสบการณ์แบบนี้เพราะมันจะยอดเยี่ยมสำหรับคุณ

เพียงจำไว้ว่าให้ดูแลเตารีดร้อนและพยายามอย่าใช้เวลามากกว่าสองสามวินาทีกับส่วนประกอบเพื่อหลีกเลี่ยงการไหม้ !!

และสุดท้ายใน Youtube คุณจะพบวิดีโอมากมายเกี่ยวกับการบัดกรีซึ่งคุณสามารถเรียนรู้ได้ก่อนเข้าสู่โลกแห่งความเป็นจริง

ขั้นตอนที่ 3: การออกแบบ PCB

การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ 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

  1. อย่างแรกคือสำหรับเอาต์พุตของแคโทดของ LED สีแดง (8 x) >> COLUMN RED (1 ถึง 8)
  2. ประการที่สองสำหรับเอาต์พุตL ของแคโทดของ LED สีเขียว (8 x) >> COLUMN GREEN (1 ถึง 8)
  3. อันสุดท้ายสำหรับเอาต์พุตของแอโนดของไฟ 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