วันพฤหัสบดีที่ 2 ตุลาคม พ.ศ. 2557

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

การวัดแรงดันอินพุต - แอนะล็อก

และการแสดงค่าโดยใช้ 7 - Segment

วัตถุประสงค์ในการทดลอง

1.    ฝึกการต่อวงจรบนเบรดบอร์ด อย่างถูกต้อง
2.   ฝึกการเขียนโปรแกรมคำสั่ง Ardunio เพื่อวัดแรงดันอินพุตแอนะล็อก
3.   สามารถนำค่าอินพุตที่อ่านได้จากบอร์ด Ardunio มาแสดงผลบน 7-segment-Display  ได้


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

           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เท่านั้น


ผังวงจรที่ออกแบบ  4.6.1



 ภาพการต่อวงจรตามรูปที่ 4.6.1 


ภาพการต่อวงจรจริงบนเบรดบอร์ด


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

Ardunio code :
const byte SEVEN_SEG1[7] = {8,7,6,5,4,9,10};

const byte VREF_PIN = A1;
const byte npn1 = 2;
const byte npn2 = 3;

byte num[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 < 7; i++) {
    pinMode( SEVEN_SEG1[i], OUTPUT );
    digitalWrite( SEVEN_SEG1[i], HIGH );
  }
  pinMode( npn1, OUTPUT );
  digitalWrite( npn1, HIGH );
  pinMode( npn2, OUTPUT );
  digitalWrite( npn2, HIGH );
  analogReference( DEFAULT );
  Serial.begin( 9600 );
}

void loop() {
  //read analog values
  long int value = analogRead( VREF_PIN );
  long int v = value*50/1023;

  Serial.print( "Read"  );
  Serial.print( v/10);
  Serial.print( ".");
  Serial.println( v % 10);

  digitalWrite( npn1, HIGH );
  digitalWrite(npn2,LOW) ;
  long int number1 = v/10;
  byte t = num[number1];
  for (int i = 0; i<8; i++) {
    digitalWrite(SEVEN_SEG1[i], 1 & t);
    t>>= 1;
  }
  delay(10);
  digitalWrite( npn1, LOW );
  digitalWrite( npn2, HIGH );
  long int number2 = v % 10;
  byte q = num[number2];
  for (int j = 0; j<8; j++) {
    digitalWrite(SEVEN_SEG1[j], q & 1);
    q>>= 1;
  }
  delay(10);

}


บันทึกผลการทดลอง




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

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