วัตถุประสงค์
- เพื่อให้เข้าใจวิธีการใช้งาน 7-Segment Display
- เพื่อให้สามารถทำการโปรแกรมบอร์ด 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
2. ต่อตัวต้านทาน 330Ω หรือ 470Ω จำนวน 7 ตัว แบบอนุกรมกับขา a, b, c, d, e, f, g แต่ละขาของอุปกรณ์ 7-Segment Display ตามผังวงจรในรูปที่ 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 ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ +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 ของวงจรตามลำดับ
8. แก้ไขโค้ดสำหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการเปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลก็ต่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กดจะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)
รูปที่ 3.2.1: ผังวงจรสำหรับเชื่อมต่อบอร์ด Arduino
(ตัวอย่างนี้ใช้ 7-Segment Display แบบ Common-Cathode)
รูปที่ 3.2.2: อุปกรณ์ 7-Segment Display แบบหนึ่งหลัก (ซ้าย) และแบบสองหลัก (ขวา)
รูปที่ 3.2.3: ผังวงจรสำหรับเชื่อมต่อบอร์ด Arduino
(ควบคุมการทำงาน 7-Segment Display ได้ด้วยทรานซิสเตอร์ NPN)
// 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.1: โค้ดตัวอย่างสำหรับ Arduino
ผลการทดลอง
ในการทดลองครั้งนี้ใช้อุปกรณ์ 7-Segment Display ชนิด Common-Cathode แบบสองหลัก ซึ่งมีวงจรภายในของอุปกรณ์เป็นดังนี้
ภาพวงจรภายในของ 7-Segment Display แบบสองหลัก (รายระเอียด DATASHEET)
ผังวงจร
การต่อวงจรบนเบรดบอร์ด
ในข้อที่ 6 เขียนโค๊ดได้ดังนี้
const byte SEVEN_SEG[7] = {3,4,5,6,7,8,9}; int count=0; const byte DIGIT_SEG[]={ B00111111, //0 B00000110, //1 B01011011, //2 B01001111, //3 B01100110, //4 B01101101, //5 B01111100, //6 B00000111, //7 B01111111, //8 B01101111, //9 }; void setup(){ for (int i=0; i<7; i++){ pinMode( PB_1, INPUT); pinMode (SEVEN_SEG[i], OUTPUT); digitalWrite (SEVEN_SEG[i],HIGH); } } void loop(){ if(count>9)count =0; if (0 <= count && count <10){ byte value = DIGIT_SEG[count]; for (int i=0; i<8; i++){ digitalWrite (SEVEN_SEG[i],(value & 1)); value >>=1; } } count++; delay(1000); } |
ในข้อ 7 เมื่อแก้ไขวงจรจะได้ดังนี้
ผังวงจร
การต่อวงจรบนเบรดบอร์ด
ในข้อ 8 เขียนโค๊ดได้ดังนี้
const byte PB_1=2; const byte SEVEN_SEG[7] = {3,4,5,6,7,8,9}; int count=0; const byte PWR = 10; const byte DIGIT_SEG[]={ B00111111, //0 B00000110, //1 B01011011, //2 B01001111, //3 B01100110, //4 B01101101, //5 B01111100, //6 B00000111, //7 B01111111, //8 B01101111, //9 }; void setup(){ pinMode( PB_1, INPUT); for (int i=0; i<7; i++){ pinMode (SEVEN_SEG[i], OUTPUT); digitalWrite (SEVEN_SEG[i],HIGH); } digitalWrite(PWR,HIGH); } void loop(){ while(digitalRead(PB_1)==0){ delay(1000); if(count>9)count =0; if (0 <= count && count <10){ byte value = DIGIT_SEG[count]; for (int i=0; i<7; i++){ digitalWrite (SEVEN_SEG[i],(value & 1)); value >>=1; } count++; } } count = 0; for (int i=0; i<7; i++){ digitalWrite (SEVEN_SEG[i],LOW); } } |
รูปประกอบการทดลอง
รูประหว่างเริ่มต่อวงจรทดลอง
รูปการต่อวงจรเสร็จสมบูรณ์
รูปวงจรที่เพิ่มทรานซิสเตอร์และสวิตช์เข้าไป
คำถามท้ายการทดลอง
1. วงจรทรานซิสเตอร์แบบ NPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทำงาน
- เพื่อใช้เป็นสวิตช์ในการควบคุมการทำงานของ 7-Segment Display หลักการทำงานของสวิตช์ตัวนี้คือ เมื่อเราจ่ายลอจิคของขา D10 เป็น HIGH จะเกิดแรงดันลอจิคตกคร่อมตัวต้านทาน R6 (1kΩ ) ก่อให้เกิดกระแสไฟฟ้าไหลเข้าขา Base ของทรานซิสเตอร์ ส่งผลให้กระแสไหลผ่านขา Collector และขา Emitter ได้ เมื่อทรานซิสเตอร์ทำงานจะทำให้วงจรของ 7-Segment Display ครบวงจร ตัวอุปกรณ์ดังกล่าวจึงสามารถทำงานได้
2. ถ้าจะใช้ 7-Segment Display สองหลักพร้อมกัน เช่น เพื่อแสดงผลเป็นตัวเลข “00” ถึง “99” โดยเพิ่มขึ้นทีละหนึ่ง ทุกๆ 1 วินาที (1000 มิลลิวินาที) แล้ววนกลับไปที่ “00” ใหม่ได้ จะต้องออกแบบวงจร และเขียนโค้ด Arduino ควบคุมอย่างไร
- เขียนโค๊ดได้ดังนี้
const byte PB_1=2; const byte SEVEN_SEG1[7] = {3,4,5,6,7,8,9}; const byte SEVEN_SEG2[7] = {10,11,12,13,A0,A1,A2}; int count1=0; int count2=0; const byte DIGIT_SEG[]={ B00111111, //0 B00000110, //1 B01011011, //2 B01001111, //3 B01100110, //4 B01101101, //5 B01111100, //6 B00000111, //7 B01111111, //8 B01101111, //9 }; void setup(){ pinMode( PB_1, INPUT); for (int i=0; i<7; i++){ pinMode (SEVEN_SEG1[i], OUTPUT); pinMode (SEVEN_SEG2[i], OUTPUT); digitalWrite (SEVEN_SEG1[i],HIGH); digitalWrite (SEVEN_SEG2[i],HIGH); } } void loop(){ delay(1000); if(count1>9){ count2++; count1 = 0; } if(count2>9)count2=0; if (0 <= count1 && count1 <10){ byte value_1 = DIGIT_SEG[count1]; for (int i=0; i<7; i++){ digitalWrite (SEVEN_SEG1[i],(value_1 & 1)); value_1 >>=1; } count1++; } if (0 <= count2 && count2 <10){ byte value_2 = DIGIT_SEG[count2]; for (int i=0; i<7; i++){ digitalWrite (SEVEN_SEG2[i],(value_2 & 1)); value_2 >>=1; } } } |
- มีวงจรการต่อดังนี้
No comments:
Post a Comment