การทดลองที่ 3.2
การใช้อุปกรณ์7-Segment Display เพื่อแสดงตัวเลขBCD
วัตถุประสงค์
1. ฝึกต่อวงจรโดยใช้อุปกรณ์7-Segment Display บนเบรดบอร์ด และใช้งานร่วมกับบอร์ดArduino
2. เขียนโปรแกรมArduino เพื่อแสดงตัวเลข โดยใช้อุปกรณ์7-Segment Display
รายการอุปกรณ์
- บอร์ดArduino (ใช้แรงดัน+5V) 1 บอร์ด
- อุปกรณ์7-Segment Display 1 ตัว
- ปุ่มกดแบบสี่ขา 1 ตัว
- ตัวต้านทาน330Ω หรือ470Ω 7 ตัว
- ตัวต้านทาน1kΩ 1 ตัว
- ตัวต้านทาน10kΩ 1 ตัว
- ทรานซิสเตอร์NPN เบอร์PN2222A 1 ตัว
- สายไฟสําหรับต่อวงจร 1 ชุด
- แผงต่อวงจร(เบรดบอร์ด) 1 อัน
ขั้นตอนการทดลอง
1. ศึกษาการใช้งาน และตําแหน่งของขาต่างๆ ของอุปกรณ์7-Segment Display (ใช้แบบCommonCathode) จากเอกสาร(ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกําหนดสถานะ LOW หรือHIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง0 ถึง9
datasheet |
2. ต่อตัวต้านทาน330Ω หรือ470Ω จํานวน7 ตัว แบบอนุกรมกับขาa, b, c, d, e, f, g แต่ละขาของอุปกรณ์7-Segment Display ตามผังวงจรในรูปที่3.2.1
ผังวงจรที่ 3.2.1 |
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
6. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ+5V และGnd จากบอร์ดArduino ไปยังเบรดบอร์ด เพื่อใช้เป็นแรงดันไฟเลี้ยง(VCC และGND) และไม่ต้องใช้ แหล่งจ่ายควบคุมแรงดันจากภายนอก ให้ระวังการต่อสลับขั้วสายไฟ และระวังการต่อถึงกันทางไฟฟ้า ของสายไฟทั้งสองเส้น
7. แก้ไขโค้ดสําหรับArduino ให้สามารถแสดงตัวเลขตั้งแต่0 ถึง9 แล้ววนซ้ํา โดยเว้นระยะเวลาในการ
เปลี่ยนเป็นตัวเลขถัดไปประมาณ1 วินาที
8. แก้ไขวงจร โดยต่อวงจรตามผังวงจรในรูปที่3.2.2 ให้สังเกตว่า มีการต่อวงจรปุ่มกดแบบPull-up เพื่อใช้เป็นอินพุต-ดิจิทัลให้บอร์ดArduino และมีการต่อวงจรทรานซิสเตอร์แบบNPN เพื่อใช้ควบคุม การไหลของกระแสจากขาCC ของ7-Segment Display ผ่านตัวทรานซิสเตอร์NPN จากขา Collector (C) ไปยังขาEmitter (E) และGND ของวงจรตามลําดับ
ผังวงจรที่ 3.2.2 |
9. แก้ไขโค้ดสําหรับArduino เพื่อให้แสดงตัวเลขตั้งแต่0 ถึ ง9 แล้ววนซ้ํา โดยเว้นระยะเวลาในการ เปลี่ยนเป็นตัวเลขถัดไปประมาณ1 วินาที แต่จะแสดงผลก็ ต่อเมื่อกดปุ่มPB1 ค้างไว้ แต่ถ้าไม่กด จะต้องไม่แสดงผลตัวเลขใดๆ(ไม่ติด)
การทดลองที่ 3.2.1
รูปการต่อวงจรจริง |
โค้ด Arduino การทดลองที่ 3.2.1
const byte SEVEN_SEG[7] = { 3,4,5,6,7,8,9};
byte Digit[10] = {
B0111111,
B0000110, B1011011,
B1001111,
B1100110,
B1101101,
B1111101,
B0000111,
B1111111,
B1101111
};
int num = 0;
void setup() {
for (int i=0; i < 7; i++) {
pinMode( SEVEN_SEG[i], OUTPUT );
digitalWrite( SEVEN_SEG[i], HIGH );
}
}
void loop() {
disp(num);
num = (num + 1) % 10; delay(1000);
}
void disp(byte num) {
byte value = Digit[num];
for (int i = 0; i < 7; i++) {
digitalWrite( SEVEN_SEG[i], (1 & value) );
value >>= 1;
}
}
byte Digit[10] = {
B0111111,
B0000110, B1011011,
B1001111,
B1100110,
B1101101,
B1111101,
B0000111,
B1111111,
B1101111
};
int num = 0;
void setup() {
for (int i=0; i < 7; i++) {
pinMode( SEVEN_SEG[i], OUTPUT );
digitalWrite( SEVEN_SEG[i], HIGH );
}
}
void loop() {
disp(num);
num = (num + 1) % 10; delay(1000);
}
void disp(byte num) {
byte value = Digit[num];
for (int i = 0; i < 7; i++) {
digitalWrite( SEVEN_SEG[i], (1 & value) );
value >>= 1;
}
}
รูปการต่อวงจรจริง |
โค้ด Arduino การทดลองที่ 3.2.2
const byte npn = 10;
const byte SEVEN_SEG[7] = { 3, 4, 5, 6, 7, 8, 9 };
byte Digit[10] = {
B0111111,//0
B0000110,//1
B1011011,//2
B1001111,//3
B1100110,//4
B1101101,//5
B1111101,//6
B0000111,//7
B1111111,//8
B1101111//9 };
int num = 0;
void setup() {
void setup() {
for (int i = 0; i < 7; i++) {
pinMode( SEVEN_SEG[i], OUTPUT );
digitalWrite( SEVEN_SEG[i], HIGH );
}
pinMode( npn, OUTPUT );
}
void loop() {
void loop() {
if (digitalRead(SW1) == LOW) {
disp(num); num = (num + 1) % 10;
digitalWrite(npn, HIGH);
}
else {
num = 0;
digitalWrite( npn, LOW );
}
delay(1000);
}
void disp(byte num) {
void disp(byte num) {
byte value = Digit[num];
for (int i = 0; i < 7; i++) {
digitalWrite( SEVEN_SEG[i], (1 & value) );
value >>= 1;
}
}
คําถามท้ายการทดลอง
1. วงจรทรานซิสเตอร์แบบNPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทํางาน
2. ถ้าจะใช้7-Segment Display สองหลักพร้อมกัน เช่น เพื่อแสดงผลเป็นตัวเลข“00” ถึง“99” โดยเพิ่มขึ้นทีละหนึ่ง ทุกๆ1 วินาที(1000 มิลลิวินาที ) แล้ ววนกลับไปที่“00” ใหม่ได้ จะต้องออกแบบวงจร และเขียนโค้ดArduino ควบคุมอย่างไร
โค้ด Arduino
1. วงจรทรานซิสเตอร์แบบNPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทํางาน
ตอบ ทรานซิสเตอร์ในวงจร มีไว้เพื่อควบคุมการติด-ดับ ของ 7Segment โดยเมื่อกดปุ่มค้างไว้ แรงดันจะไหลไปที่ขา B ของทรานซิสเตอร์ ทำให้กระแสไหลจาก 7Segment ไปที่ขา C และ E ของทรานซิสเตอร์ เพื่อลง GND ตัว 7Segment จึงติด
const byte mins[] = {
B0111111,
B0000110,
B1011011,
B1001111,
B1100110,
B1101101,
B1111101,
B0000111,
B1111111,
B1100111
};
const byte SEVEN_SEG1 [7] = {1, 2, 3, 4, 5, 6, 7};
const byte SEVEN_SEG2 [7] = {8, 9, 10, 11, 12, 13 };
int i = 0;
int j = 0;
const byte SEVEN_SEG1 [7] = {1, 2, 3, 4, 5, 6, 7};
const byte SEVEN_SEG2 [7] = {8, 9, 10, 11, 12, 13 };
int i = 0;
int j = 0;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode (SEVEN_SEG1[i], OUTPUT);
digitalWrite (SEVEN_SEG1[i], HIGH );
pinMode (SEVEN_SEG2[i], OUTPUT);
digitalWrite (SEVEN_SEG1[i], HIGH );
}
}
void loop() {
byte x = mins[i];
byte y = mins[j];
delay(1000);
for (int k = 0 ; k < 8 ; k++) {
digitalWrite(SEVEN_SEG1[j], x & 1);
digitalWrite(SEVEN_SEG2[j], y & 1);
x >>= 1;
y >>= 1;
}
i++;
j++;
if (i == 10 && j ==10)i = 0,j = 0;
}
อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์
ไม่มีความคิดเห็น:
แสดงความคิดเห็น