วันจันทร์ที่ 29 กันยายน พ.ศ. 2557

การวัดแรงดันอินพุต-แอนะล็อกและการแสดงค่าโดยใช้ 7-Segment

การทดลองที่ 4.6 

การวัดแรงดันอินพุต-แอนะล็อกและการแสดงค่าโดยใช้ 7-Segment


วัตถุประสงค์

1. ฝึกต่อวงจรและเขียนโปรแกรมสําหรับบอร์ด Arduino เพื่อวัดแรงดันอินพุต-แอนะล็อกและแสดงค่าที่ ได้ผ่านทาง 7-Segment Display

รายการอุปกรณ์ 

  • แผงต่อวงจร (เบรดบอร์ด)                                                    1 อัน 
  • บอร์ด Arduino (ใช้แรงดัน +5V)                                          1 บอร์ด 
  • ตัวต้านทานปรับค่าได้แบบสามขา 10kΩ หรือ 20kΩ            1 ตัว 
  • 7-Segment Display แบบ 2 ตัวเลข (Common-Cathode)     1 ตัว 
  • ทรานซิสเตอร์ NPN (เช่น PN2222A)                                  2 ตัว 
  • ตัวต้านทาน 1kΩ                                                                  2 ตัว 
  • ตัวต้านทาน 330Ω หรือ 470Ω                                              8 ตัว 
  • สายไฟสําหรับต่อวงจร                                                         1 ชุด 
  • มัลติมิเตอร์                                                                           1 เครื่อง
ขั้นตอนการทดลอง

1. ออกแบบวงจร วาดผังวงจร และต่อวงจรบนเบรดบอร์ด ร่วมกับบอร์ด Arduino เพื่อวัดแรงดันที่ได้ จากวงจรแบ่งแรงดันที่ใช้ตัวต้านทานปรับค่าได้ (แรงดันอยู่ในช่วง 0V ถึง 5V) เช่น ป้อนเข้าที่ขา A0 ของบอร์ด Arduino แล้วนําค่าไปแสดงผลโดยใช้ 7-Segment Display จํานวน 2 หลัก และ ให้มีทศนิยมเพียงหนึ่งตําแหน่ง เช่น ถ้าวัดแรงดันได้ 2.365V จะแสดงผลเป็น “2.4” ถ้าวัดได้ 2.539V ให้แสดงผลเป็น “2.5” เป็นต้น และให้ใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จากบอร์ด Arduino
เท่านั้น [ทุกกลุ่มจะต้องวาดวงจรสําหรับการทดลองมาให้แล้วเสร็จ (ให้เตรียมตัวมาก่อนเข้าเรียน วิชาปฏิบัติ]

2. เขียนโค้ดสําหรับ Arduino เพื่ออ่านค่าจากแรงดันอินพุต-แอนะล็อก แล้วนําไปแสดงผลโดยใช้ 7-Segment Display ตามที่กล่าวไป (และให้แสดงค่าที่อ่านได้ออกทาง Serial Monitor ด้วย) และในการเขียนโค้ด ห้ามใช้ตัวแปรหรือตัวเลขแบบ float

ผลการทดลอง


ออกแบบผังวงจร Schematic โปรแกรม fritzing


ออกแบบผังวงจร breadboard โปรแกรม fritzing


รูปการต่อวงจรจริง

โค้ด Arduino 


const byte Trim = A0; const byte npn1 = 10; const byte npn2 = 11; const byte SEVEN_SEG[8] = {2,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 };
void setup(){ for (int i=0;i<8;i++) { pinMode(SEVEN_SEG[i] ,OUTPUT); digitalWrite(SEVEN_SEG[i],HIGH); } pinMode(npn1,OUTPUT); digitalWrite(npn1,HIGH); pinMode(npn2,OUTPUT); digitalWrite(npn2,HIGH); analogReference(DEFAULT); Serial.begin(9600); }
void loop(){ long int value = analogRead ( Trim ); long int vScale = value*50 / 1023; Serial.print(" READ "); Serial.print( vScale/10 ); Serial.print("."); Serial.println(vScale%10); digitalWrite(npn1,HIGH); digitalWrite(npn2,LOW); long int num = vScale/10; byte N = Digit[num]; for(int i=0;i<7;i++){ digitalWrite(SEVEN_SEG[i],1&N); N>>=1; } delay(10); digitalWrite(npn1,LOW); digitalWrite(npn2,HIGH); long int num2 = vScale%10; byte N2 = Digit[num2]; for(int j=0;j<7;j++){ digitalWrite(SEVEN_SEG[j],1&N2); N2>>=1; } delay(10); }


เมื่อวัดแรงดันได้ 5 V 7-Segment Display แสดงผลเป็น 5.0





เมื่อวัดแรงดันได้ 0 V 7-Segment Display แสดงผลเป็น 0.0





เมื่อวัดแรงดันได้ 2.823 V 7-Segment Display แสดงผลเป็น 2.8

เมื่อวัดแรงดันได้ 4.589 V 7-Segment Display แสดงผลเป็น 4.6
การแสดงผลบน Serial Monitor







อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์

วันศุกร์ที่ 19 กันยายน พ.ศ. 2557

การต่อวงจรตัวต้านทานไวแสงและตรวจวัดการเปลี่ยนแปลงของปริมาณแสง

การทดลองที่ 4.3 

การต่อวงจรตัวต้านทานไวแสงและตรวจวัดการเปลี่ยนแปลงของปริมาณแสง 


วัตถุประสงค์


1.ฝึกต่อวงจรโดยตัวต้านทานไวแสง (LDR) ร่วมกับไอซีเปรียบเทียบแรงดัน เบอร์ LM393N และใช้เป็น อุปกรณ์ตรวจจับการเปลี่ยนแปลงปริมาณแสง


รายการอุปกรณ์

  • แผงต่อวงจร (เบรดบอร์ด)                                                          1 อัน 
  • ไอซีเปรียบเทียบแรงดัน เบอร์ LM393N                                    1 ตัว
  • ตัวต้านทานปรับค่าได้แบบสามขา ขนาด 10kΩ หรือ 20kΩ       1 ตัว
  • ตัวต้านทานไวแสง                                                                     1 ตัว 
  • ตัวต้านทาน 330Ω หรือ 470Ω                                                    1 ตัว 
  • ตัวต้านทาน 4.7kΩ                                                                     1 ตัว 
  • ตัวต้านทาน 10kΩ                                                                      1 ตัว 
  • ทรานซิสเตอร์ NPN เบอร์ PN2222A                                          1 ตัว 
  • สายไฟสําหรับต่อวงจร                                                               1 ชุด 
  • มัลติมิเตอร์                                                                                 1 เครื่อง

ขั้นตอนการทดลอง

1. ใช้มัลติมิเตอร์วัดค่าความต้านทานของตัวต้านทานไวแสง (LDR) ในสภาวะแสงที่แตกต่างกันในสาม ระดับ (ปริมาณแสงน้อย ปานกลาง และมาก) แล้วจดบันทึกค่าที่วัดได้ สังเกตการเปลี่ยนแปลงของค่า ความต้านทานเมื่อปริมาณแสงเปลี่ยน


2. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.1 แล้ววัดแรงดัน Vx ในสภาวะแสงที่แตกต่างกัน (ปริมาณแสง น้อย ปานกลาง มาก) แล้วจดบันทึกค่าที่วัดได้ สังเกตการเปลี่ยนแปลงของระดับแรงดันเมื่อปริมาณ แสงเปลี่ยน

ผังวงจรที่ 4.3.1


3. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.2 (แบบที่ 1) โดยใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จาก แหล่งจ่ายแรงดันควบคุม ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ และวัดแรงดัน Vref ที่ได้ สังเกตสถานะติด/ดับของ LED  

ผังวงจรที่ 4.3.2(แบบที่ 1)


4. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.3 (แบบที่ 2) โดยใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จากแหล่งจ่ายแรงดันควบคุม ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ และวัดแรงดัน Vref ที่ได้ สังเกตสถานะติด/ดับของ LED  

ผังวงจรที่ 4.3.3 (แบบที่ 2)


5. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.4 (แบบที่ 3) โดยใช้แรงดันไฟเลี้ยง +5V +9V และ Gnd จากแหล่งจ่ายแรงดันควบคุม ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ เพื่อให้ LED “สว่าง”  เมื่อปริมาณแสงน้อย และให้ LED “ไม่ติด” เมื่อปริมาณแสงมาก  

ผังวงจรที่ 4.3.4 (แบบที่ 3)

ผลการทดลอง

ผลการทดลองข้อ 1

ปริมาณแสงที่ตัวต้านทานไวแสงได้รับ
ค่าความต้านทานทีวัดได้
น้อย
19.87 kΩ
ปานกลาง
2.68 kΩ
มาก
55 Ω

ผลการทดลองข้อ 2 

ปริมาณแสงที่ตัวต้านทานไวแสงได้รับ
ค่าแรงดันทีวัดได้
น้อย
1.988 V
ปานกลาง
4.00 V
มาก
4.92 V

ผลการทดลองข้อ 3


รูปการต่อวงจรจริง

การต่อวงจรด้วยโปรแกรม Fritzing



การหมุนปรับตัวต้านทาน
แรงดันที่วัดได้จาก Vref
สถานะของหลอด LED
ซ้ายสุด
5.062 V
หลอด LED ติด
กลาง
3.927 V
หลอด LED ติดเมื่อ ตัวต้านทานไวแสงรับแสงน้อย
ขวาสุด
0 V
หลอด LED ดับ


เมื่อ Vref = 5.062 V หลอด LED จะติด โดยตัวต้านทานความไวแสง ไม่มีผล

เมื่อค่า Vref  = 3.927 V หลอด LED จะติด
เมื่อตัวต้านทานความไวแสง ได้รับแสงน้อย

เมื่อ Vref = 0 V หลอด LED จะดับ โดยตัวต้านทานความไวแสง ไม่มีผล


ผลการทดลองข้อ 4

รูปการต่อวงจรจริง

การต่อวงจรด้วยโปรแกรม Fritzing


การหมุนปรับตัวต้านทาน
แรงดันที่วัดได้จาก Vref
สถานะของหลอด LED
ซ้ายสุด
5.081 V
หลอด LED ดับ
กลาง
1.235 – 3.548 V
หลอด LED ติดเมื่อ ตัวต้านทานไวแสงรับแสงน้อย
ขวาสุด
0 V
หลอด LED ติด


เมื่อ Vref = 5.083 V หลอด LED จะดับ โดยตัวต้านทานความไวแสง ไม่มีผล


เมื่อค่า Vref อยู่ระหว่างช่วง 1.235 – 3.548 V หลอด LED จะติด
เมื่อตัวต้านทานความไวแสง ได้รับแสงน้อย


เมื่อ Vref = 0 V หลอด LED จะติด โดยตัวต้านทานความไวแสง ไม่มีผล

ผลการทดลองข้อ 5

รูปการต่อวงจรจริง

การต่อวงจรด้วยโปรแกรม Fritzing


การหมุนปรับตัวต้านทาน
แรงดันที่วัดได้จาก Vref
สถานะของหลอด LED
ซ้ายสุด
5.083 V
หลอด LED ติด
กลาง
1.037 – 3.548 V
หลอด LED ติดเมื่อ ตัวต้านทานไวแสงรับแสงมาก
ขวาสุด
0 V
หลอด LED ดับ


เมื่อ Vref = 0 V หลอด LED จะดับ โดยตัวต้านทานความไวแสง ไม่มีผล


เมื่อค่า Vref อยู่ระหว่างช่วง 1.037 – 3.548 V หลอด LED จะดับ
เมื่อตัวต้านทานความไวแสง ได้รับแสงน้อย

เมื่อ Vref = 5.083 V หลอด LED จะติด โดยตัวต้านทานความไวแสง ไม่มีผล

คําถามท้ายการทดลอง


1. ค่าความต้านทานของ LDR จะเปลี่ยนแปลงอย่างไร เมื่อปริมาณแสงเปลี่ยน และค่าความ ต้านทานของ LDR ที่ได้จากการทดลอง จะอยู่ในช่วงใด 
ตอบ เมื่อปริมาณแสงเพิ่มมากขึ้น ค่าความต้านทานของ LDR จะลดน้อยลง โดยค่าความต้านทานของ LDR ที่ได้จากการทดลองอยู่ในช่วง 55 Ω  - 19.87 kΩ

2. สําหรับวงจรแบบที่ 1 และ 2 แรงดัน Vx จะเปลี่ยนแปลงอย่างไร เมื่อปริมาณแสงเปลี่ยน (เปลี่ยนจากปริมาณแสงน้อยเป็นปริมาณแสงมาก) 
ตอบ แรงดัน Vx เพิ่มขึ้น เมื่อปริมาณแสงมาขึ้น ค่าความต้านทานของ LDR จะลดลง

3. สําหรับวงจรแบบที่ 3 การปรับค่าแรงดัน Vref โดยใช้ตัวต้านทานปรับค่าได้ในวงจร มีผลอย่างไร ต่อการติดหรือดับของ LED
ตอบ เมื่อปรับค่าความต้านทานให้ลดน้อยลง LED จะติด เมื่อปรับค่าความต้านทานให้เพิ่มมากขึ้น LED จะดับ


อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์

วันพฤหัสบดีที่ 11 กันยายน พ.ศ. 2557

การต่อวงจรไอซีเปรียบเทียบแรงดัน

การทดลองที่ 4.1

การต่อวงจรไอซีเปรียบเทียบแรงดัน



วัตถุประสงค์

1. ฝึกต่อวงจรเพื่อสร้างแรงดันอ้างอิง โดยใช้ตัวต้านทานปรับค่าได้(Trimpot/Potentiometer)แบบ 3 ขา
2. ฝึกต่อวงจรโดยใช้ไอซีที่มีตัวเปรียบเทียบแรงดัน (Voltage Comparator) อยู่ภายใน เช่น เบอร์ LM393N (ตัวถังแบบ PDIP-8)


รายการอุปกรณ์

  • ไอซีเปรียบเทียบแรงดัน เบอร์ LM939N                                       1 ตัว
  • ตัวต้านทานปรับค่าได้แบบ 3 ขา ขนาด 10 kΩ หรือ 20 kΩ           1 ตัว
  • ตัวต้านทาน 4.7 kΩ หรือ 10 kΩ (สำหรับ Pull-Up)                       1 ตัว
  • ตัวต้านทาน 330Ω หรือ 470 Ω                                                      1 ตัว
  • ไดโอดเปล่งแสง (LED) ขนาด 5 มม.                                            1 ตัว
  • สายไฟสำหรับต่อวงจร                                                                  1 ชุด
  • แผงต่อวงจร (เบรดบอร์ด)                                                             1 อัน
  • มัลติมิเตอร์                                                                                    1 เครื่อง
  • แหล่งจ่ายควบคุมแรงดัน                                                               1 เครื่อง
  • เครื่องกำเนิดสัญญาณแบบดิจิทัล                                                  1 เครื่อง
  • ออสซิลโลสโคปแบบดิจิทัล                                                          1 เครื่อง


ขั้นตอนการทดลอง

1. ต่อวงจรโดยใช้ตัวต้านทานปรับค่าได้ ตามผังวงจรในรูปที่ 4.1.1 แล้วป้อนแรงดันไฟเลี้ยง VCC=+5V และ Gnd จากแหล่งจ่ายแรงดันควบคุม ไปยังวงจรบนเบรดบอร์ด

ผังวงจรที่ 4.1.1

2. ใช้มัลติมิเตอร์วัดแรงดันระหว่างจุด Vx กับ Gnd และทดลองหมุนปรับค่าที่ตัวต้านทาน สังเกตและจดบันทึกค่าแรงดันต่ําสุดและแรงดันสูงสุดที่วัดได้


3. ต่อวงจรบนเบรดบอร์ด โดยใช้ไอซี LM393N ตามผังวงจรในรูปที่ 4.1.2(เลือกใช้ตัวเปรียบเทียบแรงดันที่อยู่ภายในตัวใดตัวหนึ่งจากที่มีอยู่สองตัว)

ผังวงจรที่ 4.1.2


4. สร้างสัญญาณแบบสามเหลี่ยม(Triangular Wave) ให้อยู่ในช่วงแรงดัน0 V ถึง 5 V โดยใช้เครื่องกําเนิดสัญญาณ (Function Generator) โดยกําหนดให้Vpp = 5 V(Peak-to-Peak Voltage) และ แรงดัน Offset = 2.5 V และความถี่ f  = 1 kHz เพื่อใช้เป็นสัญญาณอินพุต Vin แล้วนําไปป้อนให้ขา V- ของตัวเปรียบเทียบแรงดันที่ได้เลือกใช้

5. ใช้ออสซิลโลสโคปวัดสัญญาณ โดยใช้ช่อง A สําหรับวัดสัญญาณที่มาจากเครื่องกําเนิดสัญญาณ (Vin) และช่อง B สําหรับวัดสัญญาณเอาต์พุต (Vout) ที่ขาของตัวเปรียบเทียบแรงดันที่ได้เลือกใช้


6. ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ วัดแรงดัน Vref และสังเกตการเปลี่ยนแปลงค่า Duty Cycle ของรูปคลื่นสัญญาณเอาต์พุต

7. สลับขาสัญญาณอินพุตที่ขา V+ และ V- (ตามผังวงจรในรูปที่ 4.1.3) แล้ วทําขั้นตอนที่6 ถึง7 ซ้ำ

ผังวงจรที่ 4.1.3


ผลการทดลอง

   ค่าแรงดันต่ำสุดคือ 0.001 V และ ค่าแรงดันสูงสุดคือ 5.018 V

การต่อวงจรจริง

การทดลองต่อผังวงจรที่ 4.1.2

เมื่อปรับค่าคาวมต้านทานของตัวต้านทานประค่าได้


เมื่อปรับค่าความต้านทานของตัวต้านทานปรับค่าได้จนความต้านทานเป็น 10kΩ 


เมื่อปรับค่าความต้านทานของตัวต้านทานปรับค่าได้จนความต้านทานเป็น 0 
การทดลองต่อผังวงจรที่ 4.1.3


เมื่อปรับค่าความต้านทานของตัวต้านทานปรับค่าได้จนความต้านทานเป็น 10kΩ 


เมื่อปรับค่าความต้านทานของตัวต้านทานปรับค่าได้จนความต้านทานเป็น 0 Ω 

คําถามท้ายการทดลอง


1. ระดับของแรงดันอ้างอิง(Vref) ที่ได้จากตัวต้านทานปรับค่าได้ เพื่อใช้ในการเปรียบเทียบแรงดัน มีความสัมพันธ์ อย่างไรกับระดับของแรงดันเอาต์พุต(Vout) ที่ได้จากตัวเปรียบเทียบแรงดัน และค่า Duty Cycle ของสัญญาณเอาต์พุตที่วัดได้ จงอธิบาย
ตอบ แรงดันอ้างอิง (Vref) ที่ได้ มาจากการเปรียบเทียบค่าระหว่าง Vin และ Vout เมื่อมีการปรับค่าความต้านทานของตัวต้านทานปรับค่าได้ ทำให้มีการเปลี่ยนแปลงค่าแรงดันที่วัดได้ และค่า Duty Cycle จะเปลี่ยนแปลงตาม โดย เมื่อ Vout = 5 V ค่า Duty Cycle จะประมาณ 79.2 %


2. ถ้าจะให้สัญญาณเอาต์พุต Voutมีค่า Duty Cycle ประมาณ 50% จะต้องหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ ให้มีแรงดัน Vref ประมาณเท่าใด
ตอบ   Vin = 5.018 V  ให้ค่า Duty Cycle ประมาณ 50% จะต้องหมุนปรับค่าตัวต้านทาน ให้มีแรงดัน ประมาณ 2.5 V


3. เมื่อหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ จากซ้ายสุดไปขวาสุด จะได้ค่า Vref อยู่ในช่วง….……….. ถึง.……….…….. โวลต์ และได้ค่า Duty Cycle ของสัญญาณเอาต์พุตอยู่ในช่วง……..…….. ถึง….…………. เปอร์เซ็นต์
ตอบ ค่า Vref อยู่ในช่วง 0.001 V ถึง 5.018 V และได้ค่า Duty Cycle ของสัญญาณเอาต์พุตอยู่ในช่วง
0 % ถึง 79.2 %


อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์

วันพฤหัสบดีที่ 4 กันยายน พ.ศ. 2557

การใช้อุปกรณ์7-Segment Display เพื่อแสดงตัวเลขBCD

การทดลองที่ 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;
   }
}

การทดลองที่ 3.2.2

รูปการต่อวงจรจริง





โค้ด Arduino การทดลองที่ 3.2.2

const byte SW1 = 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() { 
  for (int i = 0; i < 7; i++) { 
    pinMode( SEVEN_SEG[i], OUTPUT ); 
    digitalWrite( SEVEN_SEG[i], HIGH ); 
  } 
  pinMode( npn, OUTPUT ); 
}

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) { 
    byte value = Digit[num]; 
    for (int i = 0; i < 7; i++) { 
      digitalWrite( SEVEN_SEG[i], (1 & value) ); 
      value >>= 1; 
   } 
}

คําถามท้ายการทดลอง

1. วงจรทรานซิสเตอร์แบบNPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทํางาน

ตอบ ทรานซิสเตอร์ในวงจร มีไว้เพื่อควบคุมการติด-ดับ ของ 7Segment โดยเมื่อกดปุ่มค้างไว้ แรงดันจะไหลไปที่ขา B ของทรานซิสเตอร์  ทำให้กระแสไหลจาก 7Segment ไปที่ขา C และ E ของทรานซิสเตอร์ เพื่อลง GND ตัว 7Segment จึงติด

2. ถ้าจะใช้7-Segment Display สองหลักพร้อมกัน เช่น เพื่อแสดงผลเป็นตัวเลข“00” ถึง“99” โดยเพิ่มขึ้นทีละหนึ่ง ทุกๆ1 วินาที(1000 มิลลิวินาที ) แล้ ววนกลับไปที่“00” ใหม่ได้ จะต้องออกแบบวงจร และเขียนโค้ดArduino ควบคุมอย่างไร
ตอบ

ผังวงจร


โค้ด Arduino

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;

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;
}


อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์