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

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

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

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

- ฝึกต่อวงจรโดยใช้อุปกรณ์ 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? ที่ต่ออนุกรมอยู่)
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.1: ผังวงจรสําหรับเชื่อมต่อบอร์ด Arduino  (ตัวอย่างนี้ใช้ 7-Segment Display แบบ Common-Cathode)



รูปที่ 3.2.2: อุปกรณ์ 7-Segment Display แบบหนึ่งหลัก (ซ้าย) และแบบสองหลัก (ขวา)

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








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

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

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






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

โค้ดที่ใช้ในการเขียน

const byte SEVEN_SEG_I[7] = {1, 2, 3, 4, 5, 6, 7};
const byte SEVEN_SEG_II[7] = {8, 9, 10, 11, 12, 13, 14};
byte nCount = 0;
const byte DIGIT_7SEG[] = {
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111100, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode( SEVEN_SEG_I[i], OUTPUT );
    digitalWrite( SEVEN_SEG_I[i], HIGH );
  }
  for (int i = 0; i < 7; i++) {
    pinMode( SEVEN_SEG_II[i], OUTPUT );
    digitalWrite( SEVEN_SEG_II[i], HIGH );
  }
}

void loop() {
  delay(1000);
  displayNumber(0, nCount%10); 
  displayNumber(1, (nCount-(nCount%10))/10); 
  nCount = (nCount+1) % 100; 
}

void displayNumber(int num, byte value ) {
  if ( 0 <= value && value < 10 ) {
    byte value = DIGIT_7SEG[ value];
    if (num == 0) {
      for (int i = 0; i <  8; i++) {
        digitalWrite( SEVEN_SEG_I[i], (value & 1) );
        value >>= 1;
      }
    } else {
      for (int i = 0; i <  8; i++) {
        digitalWrite( SEVEN_SEG_II[i], (value & 1) );
        value >>= 1;
      }
    }
  }

}












การทดลองที่ 3.1 การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสําหรับ Arduino



การทดลองที่ 3.1 การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสําหรับ Arduino


วัตถุประสงค์
1. ฝึกต่อวงจรปุ่มกดและไดโอดเปล่งแสง (LED) และเชื่อมต่อกับขาอินพุต/เอาต์พุต-ดิจิทัลของบอร์ด Arduino
2. ฝึกเขียนโปรแกรมภาษา C/C++ เพื่อกําหนดพฤติกรรมการทํางานของบอร์ด Arduino ตามโจทย์ที่กำหนดให้

รายการอุปกรณ์
1.แผงต่อวงจร (เบรดบอร์ด)                         1 อัน
2. บอร์ด Arduino (ใช้แรงดันลอจิก +5V)    1 บอร์ด
3. ปุ่มกดแบบสี่ขา                                        2 ตัว
4. ไดโอดเปล่งแสงขนาด 5 มม.                   4 ตัว
5. ตัวต้านทาน 10kΩ                                  2 ตัว
6. ตัวต้านทาน 330Ω หรือ 470Ω               4 ตัว
7. สายไฟสําหรับต่อวงจร                             1 ชุด 


ขั้นตอนการทดลอง
1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง VCC และ GND  

2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จํานวนสองชุด (PB1 และ PB2) บนเบรดบอร์ด แล้วนําไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร  (ดูตามผังวงจรในรูปที่ 3.1.1) 

รูป 3.1.1
3. ต่อวงจรโดยใช้ไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานแบบอนุกรม 330Ω หรือ 470Ω จํานวน  4 ชุด (LED1, LED2, LED3, LED4) บนเบรดบอร์ด แล้วนําไปต่อกับขา D4, D5, D6, D7, D8 ของ บอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร (ดูตามผังวงจรในรูปที่ 3.1.1) 


4. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino 


5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับขั้วสายไฟ และ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น 

6. แก้ไขโค้ดใหแ้สดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องใน การทํางาน โดยใช้ฮาร์ดแวรจ์ริง 
  • 6.1 เมื่อเริ่มต้นทํางาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว (LED2, LED3, LED4) อยู่ในสถานะ “ดับ”   
  • 6.2 ถ้ากดปุ่ม PB1 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติดเลื่อนไปทางขวาทีละ หนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางซ้ายสุด 
( LED1 -> LED2 -> LED3 -> LED4 -> … ) 
  • 6.3 ถ้ากดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติด” เลื่อนไปทางซ้ายทีละ หนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางขวาสุด
 ( LED1 -> LED4 -> LED3 -> LED2 -> … ) 








7. แก้ไขโค้ดใหแ้สดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องใน การทํางาน 

  • 7.1 ใช้ LED ทั้ง 4 ตัว แสดงเลขในฐานสอง จํานวน 4 หลัก (4-bit binary number) ซึ่งรับสัญญาณ เอาต์พุตมาจากบอร์ด Arduino และกําหนดให้บิตที่มีค่า 0 หมายถึง LED “ดับ” และ บิตที่มีค่า เป็น 1 หมายถึง LED “ติด”และเมื่อเริ่มต้นทํางาน ให้แสดงค่าเป็น 0  
  • 7.2 เมื่อกดปุ่ม PB1 แล้วปล่อยแต่ละครั้ง จะทําให้ค่าเพิ่มขึ้นทีละหนึ่ง จาก 0000, 0001, 0010, …, 1111 ตามลําดับ แล้ววนกลับไปเริ่มต้นที่ 0000 ใหม่ได้ 
  • 7.3 แต่ถ้ากดปุ่ม PB2 จะทําให้ได้ค่าเป็น 0000 ทันที (หมายถงึ การรีเซตค่าเป็นศูนย์) 


























วันพุธที่ 27 สิงหาคม พ.ศ. 2557

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

การสร้างลอจิกเกตพื้นฐานโดยใช้ไอซี 74HCT00


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

- เพื่อฝึกการต่อวงจรโดยใช้ไอซีลอจิก 74HCT00 บนเบรดบอร์ด
- เพื่อสร้างลอจิกเกตพื้นฐาน เช่น OR AND และ NOR หรือตามฟังก์ชั่นบูลีนที่กำหนดให้         โดยใช้ลอจิเกต  NAND ที่มีอยู่บนไอซี 74HCT00
- เพื่อต่อวงจรปุ่มกดเพื่อใช้เป็นอินพุต และต่อวงจรไดโอดเปล่งแสงพร้อมตัวต้านทานเพื่อใช้เป็นเอาต์พุตสำหรับลอจิเกต

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

  1. แผงสำหรับต่อวงจร(เบรดบอร์ด)                        1   ชุด
  2. ไอซี 74HCT00                                                   1   ตัว
  3. ปุ่มกดชนิด 4 ขา                                                 2   ตัว
  4. ไอโอดเปล่งแสงขนาด 5 มม.                             1   ตัว
  5. ตัวต้านทาน 10k โอห์ม                                       1   ตัว
  6. ตัวต้านทาน 330 โอห์ม                                       1   ตัว
  7. สายไฟสำหรับต่อวงจร                                       1   ชุด
  8. แหล่งจ่ายควบคุมแรงดัน                                    1   เครื่อง

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

  1.    ออกแบบและวาดผังวงจร สำหรับสร้างลอจิเกตที่มีอินพุตสองขาและเอาต์พุตหนึ่งขา โดยใช้ไอซี 74HCT00 เพียงตัวเดียวเท่านั้น โดยแบ่งเป็น 3 กรณี ได้แก่ AND OR และ NOR พร้อมวงจรปุ่มกดที่มีตัวต้านทาน 10k โอห์มแบบ PULL-UP จำนวน 2 ชุด (SW1 และ SW2 ) สำหรับขาอินพุตทั้ง 2 ลอจิเกต และวงจรไอโอดเปล่งแสง (LED1) พร้อมตัวตานทาน 330 โอห์ม เพื่อใช้แสดงสถานะเอาต์พุต
  2.    ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต AND และมีวงจรปุ่มกด SW1 และ SW2 เพื่อใช้เป็นอินพุต และวงจรไอโอดเปล่งแสง LED1
  3. สร้างอินพุตทั้งสองขาของลอจิเกต ให้ครบ 4 กรณี แล้วสังเกตผลและบันทึกลงในตาราง 2.1.1
  4. จากนั้นให้ทำเช่นเดียวกันในข้อ 2-3 แต่เปลี่ยนจากสร้างลอจิกเกต AND เป็น OR และ NOR ตามลำดับ และบันทึกผลในตารางที่ 2.1.2และ2.1.3 ตามลำดับ.

 ผลการทดลอง

วงจรลอจิกเกต AND
ออกแบบวงจรด้วยโปรแกรม Fritzing



วงจร Logic Gate AND Schematic View
10658287_768636929865874_374582011_o

Untitled

25850

วงจรที่ต่อบน Breadboard
25851
ไม่กดทั้ง 2 Switch
25852
กด Switch 1
25853
กด Switch 2
25854
กด 2 Switch
ตารางผลการทดลองสำหรับวงจรลอจิกเกต AND
 ตารางที่ 2.2.1

ปุ่มกด SW1
      ปุ่มกด SW2
สถานะของไดโอดเปล่งแสง (ติด/ดับ)
ไม่กด (High)ไม่กด (High)ติด
กด (Low)ไม่กด (High)ดับ
ไม่กด (High)กด (Low)ดับ
กด (Low)กด (Low)ดับ


————————————————————————————
วงจรลอจิกเกต OR
ออกแบบวงจรด้วยโปรแกรม Fritzing
วงจร Logic Gate OR Schematic View

OR

Untitled
26196
ไม่กดทั้ง 2 Switch
26197
 กด Switch 1
26198
กด Switch 2
26199
กด 2 Switch
ตารางผลการทดลองสำหรับวงจรลอจิกเกต OR
 ตารางที่ 2.2.2

ปุ่มกด SW1
      ปุ่มกด SW2
สถานะของไดโอดเปล่งแสง (ติด/ดับ)
กด (Low)กด (Low)ดับ
กด (Low)ไม่กด (High)ติด
ไม่กด (High)กด (Low)ติด
กด (Low)กด (Low)ติด

————————————————————————————
วงจรลอจิกเกต NOR
ออกแบบวงจรด้วยโปรแกรม Fritzing
Untitled
Untitled
วงจร Logic Gate NOR Schematic View
 26203
ไม่กดทั้ง 2 Switch
26201
 กด Switch 1
26202
กด Switch 2
26200
กด 2 Switch

ตารางผลการทดลองสำหรับวงจรลอจิกเกต NOR
 ตารางที่ 2.2.3

ปุ่มกด SW1
      ปุ่มกด SW2
สถานะของไดโอดเปล่งแสง (ติด/ดับ)
กด (Low)กด (Low)ติด
กด (Low)ไม่กด (High)ดับ
ไม่กด (High)กด (Low)ดับ
ไม่กด (High)ไม่กด (High)ดับ





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

1. จากผลการทดลองต่อวงจรสําหรับสร้างลอจิกเกต AND OR และ NOR ตามลําดับ เป็นไปตามตาราง ค่าความจริงสําหรับลอจิกเกตดังกลา่วหรือไม่ จงอธิบาย
Ans:เป็นไปตามตารางค่าความจริงทุกวงจรสำหรับการสร้างวงจรลอจิกเกต
2. เมื่อต่อวงจรปุ่มกดที่มีตัวต้านทาน 10kΩ แบบ Pull-Down (แทน Pull-Up) เพื่อสร้างสัญญาณอินพตุ ให้ลอจิกเกต จะให้ผลแตกต่างจากที่ได้ทดลองไปหรือไม่ จงอธิบาย
Ans:แตกต่างกัน Pull up ถ้ากดจะเป็น 0 ไม่กดเป็น 1 แต่ถ้าเป็น Pull Down ถ้ากดจะเป็น 1 แต่ถ้าไม่กดจะเป็น 0
3. ถ้าจะสร้างวงจรตรรกะตามฟังก์ชั่นบูลีน ∙∙  โดยใช้ไอซี 74HCT00 เท่านั้น จะต้องออกแบบอย่างไร (ให้วาดรูปผังวงจร)
Ans:
output_bb
output_schem