วันศุกร์ที่ 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
  6. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ +5V และ Gndจากบอร์ด Arduino ไปยังเบรดบอร์ด เพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) และไม่ต้องใช้แหล่งจ่ายควบคุมแรงดันจากภายนอก ให้ระวังการต่อสลับขั้วสายไฟ และระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
  7. แก้ไขโค้ดสำหรับ Arduino ให้สามารถแสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการเปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที
  8. แก้ไขวงจร โดยต่อวงจรตามผังวงจรในรูปที่ 3.2.3 ให้สังเกตว่า มีการต่อวงจรปุ่มกดแบบ Pull-upเพื่อใช้เป็นอินพุต-ดิจิทัลให้บอร์ด Arduino และมีการต่อวงจรทรานซิสเตอร์แบบ NPN เพื่อใช้ควบคุมการไหลของกระแสจากขา CC ของ 7-Segment Display ผ่านตัวทรานซิสเตอร์ NPN จากขา Collector (C) ไปยังขา Emitter (E) และ GND ของวงจรตามลำดับ
  9. แก้ไขโค้ดสำหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ำ โดยเว้นระยะเวลาในการเปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลก็ต่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กดจะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)
รูปที่ 3.2.1 : ผังวงจรสำหรับเชื่อมต่อบอร์ด Arduino
(ตัวอย่างนี้ใช้ 7-Segment Display แบบ Common-Cathode)

รูปที่ 3.2.3 : ผังวงจรสำหรับเชื่อมต่อบอร์ด Arduino
(ควบคุมการทำงาน 7-Segment Dispay ได้ด้วยทรานซิสเตอร์ NPN)


โค้ดตัวอย่างสำหรับ Arduino

// 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.7

const byte SEVEN_SEG[7] = {3, 4, 5, 6, 7, 8, 9};
byte number[10][7] = {{1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 0},
  {1, 1, 0, 1, 1, 0, 1}, {1, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1},
  {1, 0, 1, 1, 0, 1, 1}, {1, 0, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0},
  {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 0, 1, 1}};

void setup() {
  for (int i = 0; i < 7; i++) {
  pinMode (SEVEN_SEG[i], OUTPUT);

  digitalWrite (SEVEN_SEG[i], number[1][i]);

  }
}

void loop() {
  for (int x = 0; x < 10; x++) {
    for (int y = 0; y < 7; y++) {
      pinMode (SEVEN_SEG[y], OUTPUT);

      digitalWrite (SEVEN_SEG[y], number[x][y]);
      //delay(100);
    }
    delay(1000);
  }
}


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

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

byte number[10][7] = {{1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 0},
  {1, 1, 0, 1, 1, 0, 1}, {1, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1},
  {1, 0, 1, 1, 0, 1, 1}, {1, 0, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0},
  {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 0, 1, 1}
};

void setup() {
}
void loop() {
  for (int x = 0; x < 10; x++) {
    for (int y = 0; y < 7; y++) {
      if (digitalRead(SW) == LOW) {
        pinMode (s, OUTPUT);
        digitalWrite (s, HIGH);
      } else {
        pinMode (s, OUTPUT);
        digitalWrite (s, LOW);
        x=0;
        y=0;
      }
      pinMode (s, OUTPUT);
      pinMode (SEVEN_SEG[y], OUTPUT);
      digitalWrite (SEVEN_SEG[y], number[x][y]);
    }  delay(1000);
  }
}

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

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