วัตถุประสงค์
1. ฝึกต่อวงจรโดยใช้อุปกรณ์ 7-Segment Display บนเบรดบอร์ด และใช้งานร่วมกับบอร์ด Arduino2. เขียนโปรแกรม Arduino เพื่อแสดงตัวเลข โดยใช้อุปกรณ์ 7-Segment Display
รายการอุปกรณ์
- แผงต่อวงจร (เบรดบอร์ด) 1 อัน- บอร์ด Arduino (ใช้แรงดันลอจิก +5V) 1 บอร์ด
- อุปกรณ์ 7-Segment Display 1 ตัว
- ปุ่มกดแบบสี่ขา 1 ตัว
- ตัวต้านทาน 330Ω หรือ 470Ω 7 ตัว
- ตัวต้านทาน 1kΩ 1 ตัว
- ตัวต้านทาน 10kΩ 1 ตัว
- ทรานซิสเตอร์ NPN เบอร์ PN2222A 1 ตัว
- สายไฟสําหรับต่อวงจร 1 ชุด
ขั้นตอนการทดลอง
1. ศึกษาการใช้งาน และตำแหน่งของขาต่างๆ ของอุปกรณ์ 7-Segment Display (ใช้แบบ Common-
Cathode) จากเอกสาร (ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกำหนดสถานะ
LOW หรือ HIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง 0 ถึง 9
![]() |
ที่มา : http://www.microtivity.com/p/IS211/7-segment-led-display-2-digit-red-static-common-cathode-pack-of-2 |
2. ต่อตัวต้านทาน 330Ω หรือ 470Ω จำนวน 7 ตัว แบบอนุกรมกับขา a, b, c, d, e, f, g แต่ละขาของ
อุปกรณ์ 7-Segment Display ตามผังวงจรในรูปที่ 3.2.1
![]() |
credit : เอกสารประกอบการเรียน Logic Design of Digital System ,ดร. เรวัต ศิริโภคาภิรมย์ |
3. ต่อขา CC (Common Cathode) ไปยัง Gnd ของวงจร
4. เชื่อมต่อขา D3, D4, D5, D6, D7, D8, D9 ของบอร์ด Arduino ไปยังขา a, b, c, d, e, f, g ของ
อุปกรณ์ 7-Segment Display (ผ่านตัวต้านทาน 330Ω หรือ 470Ω ที่ต่ออนุกรมอยู่สำหรับแต่ละขา)
5. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทำขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
![]() |
credit : เอกสารประกอบการเรียน Logic Design of Digital System ,ดร. เรวัต ศิริโภคาภิรมย์ |
8. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ +5V และ Gnd
จากบอร์ด Arduino ไปยังเบรดบอร์ด เพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) และไม่ต้องใช้
แหล่งจ่ายควบคุมแรงดันจากภายนอก ให้ระวังการต่อสลับขั้วสายไฟ และระวังการต่อถึงกันทางไฟฟ้า
ของสายไฟทั้งสองเส้น
6. แก้ไขโค้ดสำหรับ Arduino ให้สามารถแสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการ
เปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที
7. แก้ไขวงจร โดยต่อวงจรตามผังวงจรในรูปที่ 3.2.3 ให้สังเกตว่า มีการต่อวงจรปุ่มกดแบบ Pull-up
เพื่อใช้เป็นอินพุต-ดิจิทัลให้บอร์ด Arduino และมีการต่อวงจรทรานซิสเตอร์แบบ NPN เพื่อใช้ควบคุม
การไหลของกระแสจากขา CC ของ 7-Segment Display ผ่านตัวทรานซิสเตอร์ NPN จากขา
Collector (C) ไปยังขา Emitter (E) และ GND ของวงจรตามลำดับ
![]() |
credit : เอกสารประกอบการเรียน Logic Design of Digital System ,ดร. เรวัต ศิริโภคาภิรมย์ |
8. แก้ไขโค้ดสำหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการ
เปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลก็ต่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กด
จะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)
ผลการทดลอง
Example Code Arduino
คำถามท้ายการทดลอง
1. วงจรทรานซิสเตอร์แบบ NPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทำงาน
- ทรานซิสเตอร์มีหน้าที่ ในการควบคุมการไหลของแรงดันซึ่งเป็นการควบคุมการติด/ดับของ 7-Segment Display ในวงจรนี้ โดยเมื่อทำการกดปุ่มจะทำให้เกิดแรงดันขึ้นที่ ขา B จึงทำให้ กระแสจะไหลจาก C ไป E ได้ ทำให้วงจรทำงานได้ แต่เมื่อไม่กดปุ่มขา B ไม่รับแรงดัน ทำให้ กระแสจากขา C ไหลผ่านไปไม่ได้
2. ถ้าจะใช้ 7-Segment Display สองหลักพร้อมกัน เช่น เพื่อแสดงผลเป็นตัวเลข “00” ถึง “99”
โดยเพิ่มขึ้นทีละหนึ่ง ทุกๆ 1 วินาที (1000 มิลลิวินาที) แล้ววนกลับไปที่ “00” ใหม่ได้ จะต้อง
ออกแบบวงจร และเขียนโค้ด Arduino ควบคุมอย่างไร
const byte SEVEN_SEG[7] = {0,1,2,3,4,5,6};
const byte SEVEN_SEG2[7] = {7,8,9,10,11,12,13};
const byte DIGIT_7SEG[] ={
B00111111, //0
B00000110, //1
B01011011, //2
B01001111, //3
B01100110, //4
B01101101, //5
B01111100, //6
B00000111, //7
B01111111, //8
B01101111 //9
};
byte count = 0;
void setup() {
for (int i=0; i < 7; i++) {
pinMode( SEVEN_SEG2[i], OUTPUT );
digitalWrite( SEVEN_SEG2[i], HIGH );
}
for (int i=0; i < 7; i++) {
pinMode( SEVEN_SEG[i], OUTPUT );
digitalWrite( SEVEN_SEG[i], HIGH );
}
}
void loop() {
displayDigit(0, count%10);
displayDigit(1, (count-(count%10))/10);
count = (count+1) % 100;
delay(1000);
}
void displayDigit(int switch_digi, byte value) {
if ( 0 <= value && value < 10 ) {
byte value = DIGIT_7SEG[ count ];
if(switch_digi == 0){
for (int i=0; i<8; i++) {
digitalWrite(SEVEN_SEG[i], (value & 1) );
value>>= 1;
}
}else{
for (int i=0; i<8; i++) {
digitalWrite(SEVEN_SEG2[i], (value & 1) );
value>>= 1;
}
}
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น