วัตถุประสงค์
- ฝึกต่อวงจรโดยใช้อุปกรณ์ 7-Segment Display บนเบรดบอร์ด และใช้งานร่วมกับบอร์ด Arduino
- เขียนโปรแกรม Arduino เพื่อแสดงตัวเลข โดยใช้อุปกรณ์ 7-Segment Display
รายการอุปกรณ์
- แผงต่อวงจร (เบรดบอร์ด) 1 อัน
- บอร์ด Arduino (ใช้แรงดัน +5V) 1 บอร์ด
- อุปกรณ์ 7-Segment Display 1 ตัว
- ปุ่มกดแบบสี่ขา 1 ตัว
- ตัวต้านทาน 330Ω หรือ 470Ω 7 ตัว
- ตัวต้านทาน 1kΩ 1 ตัว
- ตัวต้านทาน 10kΩ 1 ตัว
- ทรานซิสเตอร์ NPN เบอร์ PN2222A 1 ตัว
- สายไฟสําหรับต่อวงจร 1 ชุด
ขั้นตอนการทดลอง
- ศึกษาการใช้งาน และตำแหน่งของขาต่างๆ ของอุปกรณ์ 7-Segment Display (ใช้แบบ Common-Cathode) จากเอกสาร (ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกำหนดสถานะ LOW หรือ HIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง 0 ถึง 9
- ต่อตัวต้านทาน 330Ω หรือ 470Ω จำนวน 7 ตัว แบบอนุกรมกับขา a, b, c, d, e, f, g แต่ละขาของอุปกรณ์ 7-Segment Display ตามผังวงจรในรูปที่ 3.2.1
- ต่อขา CC (Common Cathode) ไปยัง Gnd ของวงจร
- เชื่อมต่อขา D3, D4, D5, D6, D7, D8, D9 ของบอร์ด Arduino ไปยังขา a, b, c, d, e, f, g ของอุปกรณ์ 7-Segment Display (ผ่านตัวต้านทาน 330Ω หรือ 470Ω ที่ต่ออนุกรมอยู่สำหรับแต่ละขา)
- เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทำขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
- ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ +5V และ Gndจากบอร์ด Arduino ไปยังเบรดบอร์ด เพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) และไม่ต้องใช้แหล่งจ่ายควบคุมแรงดันจากภายนอก ให้ระวังการต่อสลับขั้วสายไฟ และระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
- แก้ไขโค้ดสำหรับ Arduino ให้สามารถแสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการเปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที
- แก้ไขวงจร โดยต่อวงจรตามผังวงจรในรูปที่ 3.2.3 ให้สังเกตว่า มีการต่อวงจรปุ่มกดแบบ Pull-upเพื่อใช้เป็นอินพุต-ดิจิทัลให้บอร์ด Arduino และมีการต่อวงจรทรานซิสเตอร์แบบ NPN เพื่อใช้ควบคุมการไหลของกระแสจากขา CC ของ 7-Segment Display ผ่านตัวทรานซิสเตอร์ NPN จากขา Collector (C) ไปยังขา Emitter (E) และ GND ของวงจรตามลำดับ
- แก้ไขโค้ดสำหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการเปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลก็ต่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กดจะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)
รูปที่ 3.2.1 : ผังวงจรสำหรับเชื่อมต่อบอร์ด Arduino
(ตัวอย่างนี้ใช้ 7-Segment Display แบบ Common-Cathode)
รูปที่ 3.2.3 : ผังวงจรสำหรับเชื่อมต่อบอร์ด Arduino
(ควบคุมการทำงาน 7-Segment Dispay ได้ด้วยทรานซิสเตอร์ NPN)
โค้ดตัวอย่างสำหรับ Arduino
// Add your code below for global variables, constants.
const byte SEVEN_SEG[7] = {3,4,5,6,7,8,9};
void setup() {
for (int i=0; i < 7; i++) {
pinMode( SEVEN_SEG[i], OUTPUT );
digitalWrite( SEVEN_SEG[i], HIGH );
}
}
void loop() {
// Write your code below
}
โค้ดการทดลองที่ 3.2.7
const byte SEVEN_SEG[7] = {3, 4, 5, 6, 7, 8, 9};
byte number[10][7] = {{1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 0},
{1, 1, 0, 1, 1, 0, 1}, {1, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1},
{1, 0, 1, 1, 0, 1, 1}, {1, 0, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 0, 1, 1}};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode (SEVEN_SEG[i], OUTPUT);
digitalWrite (SEVEN_SEG[i], number[1][i]);
}
}
void loop() {
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 7; y++) {
pinMode (SEVEN_SEG[y], OUTPUT);
digitalWrite (SEVEN_SEG[y], number[x][y]);
//delay(100);
}
delay(1000);
}
}
โค้ดการทดลองที่ 3.2.9
const byte SEVEN_SEG[7] = {3, 4, 5, 6, 7, 8, 9};
const byte SW = 2;
const byte s = 10;
byte number[10][7] = {{1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 0},
{1, 1, 0, 1, 1, 0, 1}, {1, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1},
{1, 0, 1, 1, 0, 1, 1}, {1, 0, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 0, 1, 1}
};
void setup() {
}
void loop() {
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 7; y++) {
if (digitalRead(SW) == LOW) {
pinMode (s, OUTPUT);
digitalWrite (s, HIGH);
} else {
pinMode (s, OUTPUT);
digitalWrite (s, LOW);
x=0;
y=0;
}
pinMode (s, OUTPUT);
pinMode (SEVEN_SEG[y], OUTPUT);
digitalWrite (SEVEN_SEG[y], number[x][y]);
} delay(1000);
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น