วัตถุประสงค์ของการทดลอง
1.เพื่อศึกษาวิธีการใช้งาน 7-Segment Display และเข้าใจวิธีการนำมาใชัร่วมกับบอร์ด Arduino2.สามารถต่อวงจร และเขียนโค้ดเพื่อให้แสดงตัวเลข โดยใช้ 7-Segment Display
อุปกรณ์ที่ใช้ในการทดลอง
1.แผงต่อวงจร (เบรดบอร์ด) 1 อัน2.บอร์ด Arduino (ใช้แรงดัน +5V) 1บอร์ด
3.อุปกรณ์ 7-Segment Display 1 ตัว
4.ปุ่มกดแบบสี่ขา 1 ตัว
5.ตัวต้านทาน 330Ω หรือ 470Ω 7 ตัว
6.ตัวต้านทาน 1kΩ 1 ตัว
7.ตัวต้านทาน 10kΩ 1 ตัว
8.ทรานซิสเตอร์ NPN เบอร์ PN2222A 1 ตัว
9.สายไฟสําหรับต่อวงจร 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.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
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 ของวงจรตามลำดับ
ผังวงจร 3.2.2 |
8. แก้ไขโค้ดสำหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการ
เปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลก็ต่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กด
จะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)
ผลการทดลอง
ข้อที่ 6 วีดีโอการทดลอง
code
const byte SEVEN_SEG[7] = {3,4,5,6,7,8,9}; // a,b,c,d,e,f,g byte digits[] = { B0111111,//0 B0000110,//1 B1011011,//2 B1001111,//3 B1100110,//4 B1101101,//5 B1111101,//6 B0000111,//7 B1111111,//8 B1101111};//9 //g,f,e,d,c,b,a byte index1 = 0; void setup() { for(int i=0;i<7;i++) { pinMode(SEVEN_SEG[i],OUTPUT); } } void Show_Num(byte indext) { if ( indext >=0&& indext < 10 ) { byte b= digits[indext]; for(int i=0;i<7;i++) { digitalWrite(SEVEN_SEG[i],(b&1)); b >>= 1; } } } void loop() { Show_Num(index1); index1=(index1+1)%10;//1,2,3,4,เศษจาก mod 10 delay(1000);//รอ1 นาทีแล้วค่อยส่งค่า indexl ที่ได้ ออกไปที่ function sh_num } |
ผังการต่อวงจรจากโปรแกรม Fritzing
ผังวงจร ที่ 3.2.1 |
จำลองการต่อวงจร แบบ BreadBoard จากโปรแกรม Fritzing |
ข้อที่ 8 วีดีโอการทดลอง
code
const byte PB_1=2; const byte NPN=10; const byte SEVEN_SEG[7] = {3,4,5,6,7,8,9}; // a,b,c,d,e,f,g byte digits[] = { B0111111,//0 B0000110,//1 B1011011,//2 B1001111,//3 B1100110,//4 B1101101,//5 B1111101,//6 B0000111,//7 B1111111,//8 B1101111};//9 byte index1 = 0; void setup() { for(int i=0;i<7;i++) { pinMode(SEVEN_SEG[i],OUTPUT); } } void Show_Num(byte indext) { if ( 0 <= indext && indext < 10 ) { byte b= digits[indext]; for(int i=0;i<7;i++) { digitalWrite(SEVEN_SEG[i],(b&1)); b >>= 1; } } } void loop() { if(digitalRead(PB_1)==LOW) { digitalWrite(NPN,HIGH); Show_Num(index1); index1=(index1+1)%10; delay(1000);//รอ1 นาที } if(digitalRead(PB_1)==HIGH) { digitalWrite(NPN,LOW); for(int i=0;i<7;i++) { digitalWrite(SEVEN_SEG[i],LOW); } } } |
ผังการต่อวงจรจากโปรแกรม Fritzing
ผังวงจร ที่ 3.2.2 |
จำลองการต่อวงจร แบบ BreadBoard จากโปรแกรม Fritzing |
คำถามท้ายการทดลอง
1. วงจรทรานซิสเตอร์แบบ NPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทำงานตอบ ใช้เพื่อให้มันทำหน้าที่คล้ายกับสวิตซ์ของวงจร โดยเราจะใช้ arduino ควบคุมเพื่อให้มันทำงานคือ เมื่อเรากำหนดให้ มันมีสถานะเป็น HIGH จะเกิดการจ่ายแรงดันจาก D10 ของบอร์ด arduino ผ่านตัวต้าน 1k โอห์ม ทำให้มีกระแสป้อนให้กับ ขา Base ของ ทรานซิสเตอร์ ทำให้กระแสไหลผ่านขา Collertor และ Emitter คือ จะเหมือนการเปิด สวิตซ์ ให้กระแสไหลเข้าไปในวงจร ถ้าเรากำหนดสถานะให้ D10 เป็น LOW ก็จะไม่มีแรงดัน ไม่มีกระแส ก็เหมือนกับปิดสวิตซ์
2. ถ้าจะใช้ 7-Segment Display สองหลักพร้อมกัน เช่น เพื่อแสดงผลเป็นตัวเลข “00” ถึง “99”
โดยเพิ่มขึ้นทีละหนึ่ง ทุกๆ 1 วินาที (1000 มิลลิวินาที) แล้ววนกลับไปที่ “00” ใหม่ได้ จะต้อง
ออกแบบวงจร และเขียนโค้ด Arduino ควบคุมอย่างไร
ตอบ
code
const byte SEVEN_SEG[7] = {3,4,5,6,7,8,9};
// a,b,c,d,e,f,g
byte digits[] = { B0111111,//0
B0000110,//1
B1011011,//2
B1001111,//3
B1100110,//4
B1101101,//5
B1111101,//6
B0000111,//7
B1111111,//8
B1101111};//9
byte index1 = 0;
byte count =0;
void setup()
{
for(int i=0;i<7;i++)
{
pinMode(SEVEN_SEG[i],OUTPUT);
}
}
void Show_Num(byte indext,byte count)
{
if ( 0 <= indext && indext < 10 ) {
byte b= digits[indext];
for(int i=0;i<7;i++)
{
digitalWrite(SEVEN_SEG[i],(b&1));
b >>= 1;
}
}
if(count >=0 && count < 10)
{
byte d= digits[count];
for(int i=0;i<7;i++)
{
digitalWrite(SEVEN_SEG[i],(d&1));
d >>= 1;
}
}
}
void loop()
{
Show_Num(index1,count);
index1=(index1+1)%10;
if(index1==9)count=(count+1)%10;
delay(1000);//รอ1 นาที
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น