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

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

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

 ฝึกต่อวงจรโดยใช้อุปกรณ์ 7-Segment Display บนเบรดบอร์ด และใช้งานร่วมกับบอร์ด Arduino

 เขียนโปรแกรม 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
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 ของวงจรตามลำดับ
8. แก้ไขโค้ดสำหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการ
เปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลก็ต่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กด
จะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)


รูปที่ 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 diaplay 
const byte SEVEN_SEG[7] = {3,4,5,6,7,8,10};
byte num[] = {
  B0111111,
  B0001100,
  B1011011,
  B1001111,
  B1100110,
  B1101101,
  B1111101,
  B0000111,
  B1111111,
  B1101111};
int a=0;
void setup() {
  for(int i=0;i<7;i++){
    pinMode(SEVEN_SEG[i],OUTPUT);
    digitalWrite(SEVEN_SEG[i],HIGH);
  }
}


void loop() {
}

    if(a>9){a=0;}
      byte b=num[a];
       for(int i=0;i<7;i++){
        digitalWrite(SEVEN_SEG[i],b & 1);
        b>>=1;
      }
    b++;
    delay(1000);

}



โค้ด 7 segment display & ทรานซิสเตอร์


const byte PB = 2;
const byte SEVEN_SEG[7] = {3,4,5,6,7,8,10};

byte num[] = {
  B0111111,
  B0001100,
  B1011011,
  B1001111,
  B1100110,
  B1101101,
  B1111101,
  B0000111,
  B1111111,
  B1101111};
void setup() {
  for(int i=0;i<7;i++){
    pinMode(SEVEN_SEG[i],OUTPUT);
    digitalWrite(SEVEN_SEG[i],HIGH);
  }

int a=0;
void loop() {
  int SW = digitalRead(PB);
  delay(100);
  if(SW==LOW){
    if(a>9){a=0;}
      byte b=num[a];
      for(int i=0;i<7;i++){
      digitalWrite(SEVEN_SEG[i],b & 1);
      b>>=1;
    }
    a++;
    delay(1000);
  }
  else{
   a=0;
   byte b=num[a];
   for(int k=0;k<7;k++){
      digitalWrite(SEVEN_SEG[k],LOW);
      b>>=1;
    }
  }
}




คำถามท้ายการทดลอง
1. วงจรทรานซิสเตอร์แบบ NPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทำงาน
ทรานซิสเตอร์ ที่มีขา Base, Collector และ Emitter กระแสขนาดเล็ก ที่ ขา base (ที่ไหลระหว่าง base กับ emitter) สามารถควบคุม หรือ สวิตช์ กระแสที่มีขนาดใหญ่มากที่ไหลระหว่าง collector กับ emitter 
ประจุไฟฟ้าจะไหลระหว่าง emitter กับ collector ขึ้นอยู่กับ กระแสใน base. เนื่องจากการเชื่อมต่อระหว่าง base และ emitter ภายใน ทำตัวเหมือนไดโอด, แรงดันไฟฟ้าจะตกคร่อมระหว่าง base และ emitter เมื่อมีกระแส base ไหลผ่าน ปริมาณของแรงดันนี้จะขึ้นอยู่กับวัสดุที่ใช้ทำทรานซิสเตอร์นั้น


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

โค้ด
const byte SEVEN_SEG_1[7] = {0,1,2,3,4,5,6};
const byte SEVEN_SEG_2[7] = {7,8,9,10,11,12,13};
byte num[] = {
  B0111111,
  B0001100,
  B1011011,
  B1001111,
  B1100110,
  B1101101,
  B1111101,
  B0000111,
  B1111111,
  B1101111};
int a=0;
void setup() {
  for(int i=0;i<7;i++){
    pinMode(SEVEN_SEG_1[i],OUTPUT);
    digitalWrite(SEVEN_SEG_1[i],HIGH);
    digitalWrite(SEVEN_SEG_2[i],HIGH);
  }
}

void loop() {
    if(a>9){a=0;}
      byte t=num[a];
       for(int i=0;i<7;i++){
        digitalWrite(SEVEN_SEG_1[i],t & 1);
        digitalWrite(SEVEN_SEG_2[i],t & 1);
        t>>=1;
      }
    a++;
    delay(1000);
}




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

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