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

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

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

อุปกรณ์ที่ใช้ในการทดลอง

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

3. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้อง
ครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการตอวงจรบน  เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจริงพร้อมคำอธิบายโค้ด/การทํางานของโปรแกรม และตัวอย่างผลที่แสดงบน Serial Monitor (Screen Capture)

ผลการทดลอง

Code
byte NPN_13 = 10;//from NPN
byte NPN_14 = 11;//from NPN
byte dot = 9;//form seventSegment
byte Trimpot = A0; //from Tempot
byte sevenSegmentPins[] = {2,3,4,5,6,7,8};
byte sevenSegment[10][7] =
{
  //a b c d e f g
  { 1,1,1,1,1,1,0 },  // = 0
  { 0,1,1,0,0,0,0 },  // = 1
  { 1,1,0,1,1,0,1 },  // = 2
  { 1,1,1,1,0,0,1 },  // = 3
  { 0,1,1,0,0,1,1 },  // = 4
  { 1,0,1,1,0,1,1 },  // = 5
  { 1,0,1,1,1,1,1 },  // = 6
  { 1,1,1,0,0,0,0 },  // = 7
  { 1,1,1,1,1,1,1 },  // = 8
  { 1,1,1,1,0,1,1 }   // = 9
};
void setup()
{
   pinMode(Trimpot,INPUT); //pin A0
   pinMode(dot, OUTPUT); //pin 9
   pinMode(NPN_13, OUTPUT); //pin 10
   pinMode(NPN_14, OUTPUT); //pin 11
   digitalWrite(NPN_13, HIGH);//กำหนดสถานะ HIGH ให้กับ digital pin NPN
   digitalWrite(NPN_14, HIGH); );//กำหนดสถานะ HIGH ให้กับ digital pin NPN
   analogReference(DEFAULT);//เลือกแรงดันอ้างอิงสำหรับป้อนขาอินพุต
   Serial.begin(9600);  // open serial port
   for(int i=0; i<7; i++)
   {
     pinMode(sevenSegmentPins[i], OUTPUT);//กำหนดพฤติกรรมของขาที่ระบุ ในที่นี่กำหนดให้ pin ที่ต่อกับ sevenSegment เป็น OUTPUT
   }
}
//function to write number to 7 segment
void segmentWrite(byte digit){
  for (byte i=0; i<7; i++)  {

    digitalWrite(sevenSegmentPins[i], sevenSegment[digit][i]);
}

void loop(){
  long int value = analogRead(Trimpot); //ใช้อ่านค่าจากพินแอนาล็อคที่ระบุ (อ่านจากTrimpot)
  digitalWrite(dot, HIGH);//กำหนดให้พินที่ต่อกับจุด dot บน sevenSegment มีสถานะเป็น HIGH(ติด)
  long int value2 = (value*50)/1024; //แปลงระดับแรงดันที่ขาแอนะล็อก-อินพุต(จากTrimpot) ให้เป็นข้อมูลแบบดิจิทัล

  digitalWrite(NPN_13, HIGH); );//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น HIGH เหมือนกับการเปิดสวิตซ์  เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักแรก
  digitalWrite(NPN_14, LOW);//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น LOW เหมือนกับการปิดสวิตซ์  เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักที่สอง

  long int count0 = value2/10;//นำเลขที่แปลงได้ที่เป็นจำนวนเต็มมาทำการหาร 10 เพื่อให้แสดงเป็นเลขหลักแรก
  segmentWrite(count0);//ส่งค่า count0 ที่ได้ไปยัง function segmentWrite
  delay(10);

  digitalWrite(NPN_13, LOW);//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น LOW เหมือนกับการปิดสวิตซ์  เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักแรก
  digitalWrite(NPN_14, HIGH);//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น LOW เหมือนกับการเปิดสวิตซ์  เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักที่สอง
  long int count1 = value2%10;//นำเลขที่แปลงได้ที่เป็นจำนวนเต็มมาทำการหารเอาเศษด้วย 10 เพื่อให้แสดงเป็นเลขหลักที่สอง

  segmentWrite(count1);
  delay(10);

  // send message to serial port
  Serial.print(count0);//ค่า
  Serial.print(".");//พิมพ์ข้อมูลไปยังพอร์ต (จุดทศนิยม)
  Serial.print(count1);
  Serial.println();//เว้นบรรทัด
}



ตัวอย่างผลที่แสดงบน Serial Monitor (Screen Capture)








ภาพและวิดีโอประกอบการทดลอง



ผังวงจรที่วาดโดยโปรแกรม Fritzing
Breadboard view
Schematic view


ไม่มีความคิดเห็น:

แสดงความคิดเห็น