วันพุธที่ 3 กันยายน พ.ศ. 2557

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

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

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

รายการอุปกรณ์
1. แผงต่อวงจร (เบรดบอร์ด)                   1 อัน
2. บอร์ด Arduino (ใช้แรงดัน +5V)         1 บอร์ด
3. อุปกรณ์ 7-Segment Display             1 ตัว  (สามารถศึกษา Data Sheet ได้ที่นี่)
4. ปุ่มกดแบบสี่ขา                                    1 ตัว
5. ตัวต้านทาน 330Ω หรือ 470Ω             7 ตัว
6. ตัวต้านทาน 1kΩ                                1 ตัว
7. ตัวต้านทาน 10kΩ                              1 ตัว
8. ทรานซิสเตอร์ NPN เบอร์ PN2222A  1 ตัว (สามารถศึกษา Data Sheet ได้ที่นี่)
9. สายไฟสําหรับต่อวงจร                         1 ชุด

ขั้นตอนการทดลอง
1. ศึกษาการใช้งาน และตําแหนง่ของขาต่างๆ ของอุปกรณ์ 7-Segment Display (ใช้แบบ Common- Cathode) จากเอกสาร (ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกําหนดสถานะ LOW หรือ HIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง 0 ถึง 9
(สามารถศึกษา Data Sheet ได้ที่นี่)

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 ค้างไว้ แต่ถ้าไม่กด จะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)

ผลการทดลอง
ผังวงจรสำหรับเชื่อมต่อ Arduino
ภาพอ้างอิงจากการทดลองที่ 3.2 การใช้อุปกรณ์ 7-Segment Display เพื่อแสดงตัวเลข BCD 
โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.

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


ผลจากโค้ดตัวอย่าง

แบบที่ 1 7 Segment แสดงตัวเลข 0-9 วนไปเรื่อยๆ
โค้ดสำหรับ Arduino Sketch


วิดีโอผลการทดลอง


แบบที่ 2 7 Segment แสดงตัวเลขวน 0-9 เฉพาะเมื่อกดสวิตซ์
ผังวงจรสำหรับเชื่อมต่อ Arduino เพิ่มวงจรปุ่มกดแบบ Pull Up และทรานซิสเตอร์แบบ NPN
ภาพอ้างอิงจากการทดลองที่ 3.2 การใช้อุปกรณ์ 7-Segment Display เพื่อแสดงตัวเลข BCD 
โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.

ต่อวงจรตามผังวงจร

โค้ดสำหรับ Arduino Sketch


วิดีโอผลการทดลอง

คำถามท้ายการทดลอง
1. วงจรทรานซิสเตอร์แบบ NPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทํางาน
ทรานซิสเตอร์ในวงจรนี้มีไว้สำหรับควบคุมการติด/ดับของ 7Segment โดยเมื่อกดปุ่มจะให้แรงดันไหลไปที่ขา B ของทรานซิสเตอร์ด้วย จะทำให้กระแสไหลจาก Common Cathode ของ 7 Segment ไปที่ขา C และไปขา E ของทรานซิสเตอร์เพื่อลง GND 7 Segment จึงสามารถติดได้ แต่เมื่อไม่กดปุ่มจะไม่ให้แรงดันไหลไปที่ขา B ของทรานซิสเตอร์ ทำให้กระแสไม่ไหลจากขา Common Cathode ของ 7 Segment ลง GND ได้ 7 Segment จึงไม่ติด

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

ออกแบบวงจร Arduino Breadboard View 

โค้ดสำหรับ Arduino Sketch


อ้างอิง: เอกสารการทดลองที่ 3.2 การใช้อุปกรณ์ 7-Segment Display เพื่อแสดงตัวเลข BCD 
โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.

การทดลองที่ 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. ต่อวงจรโดยใช้ไดโอดเปล่งแสง (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 ทันที (หมายถงึ การรีเซตค่าเป็นศูนย์) 
ผลการทดลอง
ผังวงจรสำหรับเชื่อมต่อ Arduino
ภาพอ้างอิงจากการทดลองที่ 3.1 การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสําหรับ Arduino
โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.
    ต่อวงจรตามผังวงจร
    โค้ดตัวอย่างสำหรับ Arduino Sketch


    ผลจากโค้ดตัวอย่าง

    แบบที่ 1 ถ้ากด PB1 LED จะติดไล่จาก LED1->LED2->LED3->LED4->....
                  ถ้ากด PB2 LED จะติดไล่จาก LED1->LED4->LED3->LED2->....
    โค้ดสำหรับ Arduino Sketch


    วิดีโอผลการทดลอง

    แบบที่ 2 ถ้ากด PB1 LED จะติดเรียงกันเป็นเลขฐานสอง
                  ถ้ากด PB2 เป็นการรีเซต
    โค้ดสำหรับ Arduino Sketch


    วิดีโอผลการทดลอง

    อ้างอิง: เอกสารการทดลองที่ 3.1 การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสําหรับ Arduino
    โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.

    วันอังคารที่ 26 สิงหาคม พ.ศ. 2557

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

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

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

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

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

    2. ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต AND และมีวงจรปุ่มกด SW1 และ SW2 เพื่อใช้เป็นอินพุต และวงจรไดโอดเปล่งแสง LED1 เพื่อใช้แสดงสถานะสําหรับเอาต์พุต

    3. สร้างอินพุตทั้งสองขาของลอจิกเกต ให้ครบ 4 กรณี แล้วสงัเกตผลที่ได้ บันทึกผลลงในตารางที่ 2.1.1

    4. ยกเลิกการต่อวงจรบนเบรดบอร์ด

    5. ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต OR และมีวงจรปุ่มกด SW1 และ SW2 เพื่อใช้เป็นอินพุต และวงจรไดโอดเปล่งแสง LED1 เพื่อใช้แสดงสถานะสําหรับเอาต์พุต

    6. สร้างอินพุตทั้งสองขาของลอจิกเกต ให้ครบ 4 กรณี แล้วสงัเกตผลที่ได้ บันทึกผลลงในตารางที่ 2.1.2

    7. ยกเลิกการต่อวงจรบนเบรดบอร์ด

    8. ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต NOR และมีวงจรปุ่มกด SW1 และ SW2 เพื่อใช้เป็นอินพุต และวงจรไดโอดเปล่งแสง LED1 เพื่อใช้แสดงสถานะสําหรับเอาต์พุต

    9. สร้างอินพุตทั้งสองขาของลอจิกเกต ให้ครบ 4 กรณี แล้วสังเกตผลที่ได้ บันทึกผลลงในตารางที่ 2.1.3

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

    วงจรลอจิกเกต AND Schematic View

    วงจรลอจิกเกต AND Breadboard View

    วงจรที่ต่อบนเบรดบอร์ด

    ตารางผลการทดลองสำหรับวงจรลอจิกเกต AND

    ปุ่มกด SW1

    ปุ่มกด SW2

    สถานะของไดโอดเปล่งแสง (ติด/ดับ)

    ไม่กด (1) ไม่กด (1) ติด
    กด (0) ไม่กด (1) ดับ
    ไม่กด (1) กด (0) ดับ
    กด (0) กด (0) ดับ


    ไม่กดทั้ง 2 สวิตซ์

    กดสวิตซ์ SW1

    กดสวิตซ์ SW2

    กดทั้งสวิตซ์ SW1 และ SW2

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

    วงจรลอจิกเกต AND Schematic View

    วงจรลอจิกเกต AND Breadboard View

    วงจรที่ต่อบนเบรดบอร์ด


    ตารางผลการทดลองสำหรับวงจรลอจิกเกต OR

    ปุ่มกด SW1

    ปุ่มกด SW2

    สถานะของไดโอดเปล่งแสง (ติด/ดับ)

    ไม่กด (1) ไม่กด (1) ติด
    กด (0) ไม่กด (1) ติด
    ไม่กด (1) กด (0) ติด
    กด (0) กด (0) ดับ


    ไม่กดทั้ง 2 สวิตซ์

    กดสวิตซ์ SW1

    กดสวิตซ์ SW2

    กดทั้งสวิตซ์ SW1 และ SW2

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

    วงจรลอจิกเกต AND Schematic View

    วงจรลอจิกเกต AND Breadboard View

    วงจรที่ต่อบนเบรดบอร์ด


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

    ปุ่มกด SW1

    ปุ่มกด SW2

    สถานะของไดโอดเปล่งแสง (ติด/ดับ)

    ไม่กด (1) ไม่กด (1) ดับ
    กด (0) ไม่กด (1) ดับ
    ไม่กด (1) กด (0) ดับ
    กด (0) กด (0) ติด


    ไม่กดทั้ง 2 สวิตซ์


    กดสวิตซ์ SW1


    กดสวิตซ์ SW2


    กดทั้งสวิตซ์ SW1 และ SW2

    คำถามท้ายการทดลอง
    1. จากผลการทดลองต่อวงจรสําหรับสร้างลอจกิเกต AND OR และ NOR ตามลําดับ เป็นไปตามตาราง ค่าความจริงสําหรับลอจิกเกตดังกล่าวหรือไม่ จงอธิบาย
    เป็นไปตามตารางค่าความจริงของลอจิกเกตดังกล่าว เพราะ เมื่อกำหนดให้สวิตซ์ที่ไม่ได้กดมีค่าความจริงเป็น 1 สวิตซ์ที่กดมีค่าความจริงเป็น 0 และให้สถานะไฟติดมีค่าความจริงคือ 1 ไฟดับคือ 0 แล้ว ค่าความจริงในตารางผลการทดลองวงจรลอจิกเกตทั้ง 3 ชนิด จะมีค่าตรงกับคุณสมบัติของลอจิกเกตแต่ละชนิด ดังนี้

    ลอจิกเกต AND

    SW1

    SW2

    AND

    1 1 1
    1 0 0
    0 1 0
    0 0 0

    ลอจิกเกต OR

    SW1

    SW2

    OR

    1 1 1
    1 0 1
    0 1 1
    0 0 0

    ลอจิกเกต NOR

    SW1

    SW2

    NOR

    1 1 0
    1 0 0
    0 1 0
    0 0 1


    2. เมื่อต่อวงจรปุ่มกดที่มีตัวต้านทาน 10kΩ แบบ Pull-Down (แทน Pull-Up) เพื่อสร้างสัญญาณอินพุต ให้ลอจิกเกต จะให้ผลแตกต่างจากที่ได้ทดลองไปหรือไม่ จงอธิบาย
    การต่อวงจรปุ่มกดแบบ Pull-Down จะให้ผลการทดลองแตกต่างกับการต่อแบบ Pull-Up เนื่องจากในวงจร Pull-Up นั้นเมื่อยังไม่ได้กดสวิตซ์ก็ยังมีกระแสไหลอยู่ในวงจร เมื่อวัดแรงดันที่ขา Output เทียบกับ GND จะได้แรงดันเป็นค่า High ซึ่งมีค่าลอจิกเป็น "1" แต่เมื่อกดสวิตซ์จะทำให้กระแสไหลลง GND ทำให้ค่าแรงดันที่วัดเป็นค่า Low ซึ่งมีค่าลอจิกเป็น "0"
    ในทางกลับกัน วงจรแบบ Pull-Down เมื่อยังไม่กดสวิตซ์จะยังไม่มีกระแสไหลในวงจร ค่าแรงดันระหว่างขา Output เทียบกับ GND จึงเป็นค่า Low ซึ่งมีลอจิกเป็น "0" และเมื่อกดสวิตซ์กระแสจะไหลเข้าวงจรทำให้มีแรงดันที่ขา Output ซึ่งมีลอจิก "1"
    สรุปแล้ว สถานะในการกดสวิตซ์เพื่อสร้างสัญญาณอินพุตในวงจร Pull-Up และ Pull-Down จะมีสถานะตรงกันข้ามคือ Pull-Up กดคือ"0" ไม่กดคือ"1" Pull-Down กดคือ"1" ไม่กดคือ"0" ซึ่งเอาต์พุตที่ได้จากลอจิกเกตก็จะขึ้นอยู่กับสัญญาณอินพุต เช่น ลอจิกเกต AND หากกดทั้ง 2 สวิตซ์ ถ้าเป็นวงจร Pull-Up จะเป็น 1 AND 1 ซึ่งได้ 0 ส่วนวงจร Pull-Down จะเป็น 0 AND 0 ซึ่งได้ 1 
    รูปภาพจากอินเตอร์เน็ต : http://www.devreyapimi.com/wp-content/uploads/2011/10/pull-up-pull-down.jpg


    3. ถ้าจะสร้างวงจรตรรกะตามฟังก์ชนับูลีน O = AC' + BC  โดยใช้ไอซี 74HCT00 เท่านั้น จะต้องออกแบบอย่างไร (ให้วาดรูปผังวงจร)

    วงจรลอจิกตามฟังก์ชันบูลีนดังกล่าว Schematic View

    วงจรลอจิกตามฟังก์ชันบูลีนดังกล่าว AND Breadboard View

    อ้างอิง: เอกสารการทดลองที่ 2.2 การส้รางลอจิเกตพื้นฐานโดยใช้ไอซี 74HCT00
    โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.

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

    วิธีการใช้งานบอร์ด Arduino

    เมื่อต่อสาย USB จากบอร์ด Arduino แล้วให้ทำการ Update Driver โดยทำได้ดังนี้
    1. Click ขวาที่ My Computer เลือก Manage

    2. จะปรากฎหน้า Computer Management เลือก Device Manage ทางแท็บด้านซ้าย

    3. ไปที่ Other devices คลิ๊กขวาที่ FT323R USB UART เลือก Update Driver Software...

    4. หากมีโปรแกรม Arduino Sketch บนเครื่องอยู่แล้วให้เลือก Browse my computer for driver software

    5. กด Browse... แล้วเลือก C:\ -> Program Files -> Arduino -> driver จากนั้น Click OK

    6. Click Next จากนั้นรอจนกว่าจะเสร็จ

    7. ชื่อจะเปลี่ยนเป็น USB Serial Port ให้ทำการ Click ขวาเลือก Update Driver Software... และทำซ้ำอีกครั้ง

    8. ทำซ้ำจนกระทั่งขึ้นว่า Windows has successfully updated your driver software จะขึ้น Port ใหม่ใน Ports (Com & LPT)

    9. เข้าโปรแกรม Arduino Sketch ไปที่ Tools เลือก Board แล้วเลือกชนิดบอร์ดที่ใช้ ในที่นี้เป็นบอร์ด Arduino Mini

    10. จากนั้นไปที่ Tools เลือก Processor แล้วเลือกชนิดไมโครคอนโทรเลอร์ของบอร์ด Arduino ในที่นี้เป็น ATmega168

    11. ไปที่ Tools เลือก Port แล้วเลือก Port ให้ตรงกับ Port ที่ขึ้นใหม่เมื่อเราติดตั้ง driver เสร็จ ในที่นี้เป็น COM3

    12. เสร็จสิ้นกระบวนการตั้งค่าโปรแกรม Arduino Sketch สามารถใช้งานได้

    การทดลองที่ 1.3 การตรวจวัดสัญญาณดิจิทัล-เอาต์พุตจากบอร์ด Arduino

    การทดลองที่ 1.3 การตรวจวัดสัญญาณดิจิทัล-เอาต์พุตจากบอร์ด Arduino

    จุดประสงค์
    1. ศึกษาการใช้งานออสซิลโลสโคป เครื่องกำเนิดสัญญาณและบอร์ด Arduino
    2. ศึกษารูปแบบลักษณะของสัญญาณดิจิทัล
    3. วิเคราะห์การทำงานของบอร์ด Arduino โดยใช้โค้ดตัวอย่าง
    4. วิเคราะห์การทำงานของคำสั่ง AnalogWrite() และคำสั่งจาก Servo Library

    วัสดุ-อุปกรณ์
    1. บอร์ด Arduino (พร้อมสายUSB)                      1 อัน
    บอร์ด Arduino ที่ใช้เป็นบอร์ด DuinoLite ของห้องแล็ป ESL. 
    มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าพระนครเหนือ

    2. สายไฟสําหรับต่อวงจร          1 ชุด
    3. ออสซิลโลสโคปแบบดิจิทัล(พร้อมสายprobe)  1 เครื่อง

    4. เครื่องกําเนิดสัญญาณ           1 เครื่อง


    ขั้นตอนการทดลอง
    1.Compile และ Uploadโค้ดตัวอย่างที่ 1.3.1ไปยังบอร์ด Arduino จากนั้นใช้ออสซิลโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ (ให้ระบุ ความถี่ และ Duty Cycle ของสัญญาณที่วัดได้จริง)
    Compile และ Uploadโค้ดไปยังบอร์ด Arduino
    สามารถดูวิธีการเริ่มต้นใช้งานบอร์ด Arduino ได้ที่นี่

    วัดสัญญาณเอาต์พุตด้วยออสซิลโลสโคป

    ภาพที่ได้จะเป็นรูปคลื่นสี่เหลี่ยม และทำการบันทึกภาพ

    ภาพขั้นตอนที่ 1 โดยรวม

    2.ทำขั้นตอนที่ 1 ซ้ำ สัหรับโค้ตตัวอย่างที่ 1.3.2-1.3.4 ตามลำดับ

    3.ใช้เครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM (รูปคลื่นแบบ Pulse) ที่มีความถี่ 50Hz มีค่า Duty Cycle 7.5% และมีระดับแรงดันต่ำและสูงในช่วง 0V และ 5V และให้ใช้ออสซิลโลสโคปตรวจดูรูปคลื่นสัญญาณที่ได้และบันทึกภาพที่ปรากฏ (เปรียบเทียบผลกับการสร้างสัญญาณเอาต์พุตด้วยบอร์ด Arduino)
    ตั้งเครื่องกำเนิดสัญญาณให้มีรูปคลื่นแบบ Pulse, ความถี่ 50 Hz, 
    ระดับแรงดันต่ำ = 0V, ระดับแรงดันสูง = 5V และมี Duty Cycle 50%

    ใช้ออสซิลโลสโคปตรวจดูรูปคลื่นสัญญาณที่ได้และบันทึกภาพที่ปรากฏ

    ผลการทดลอง
    โค้ดที่ 1.3.1: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 1)
    const byte LED_PIN = 5; // ใช ้ขาหมายเลข D 5 เพ ื่ อสร้ างส ั ญญ าณด ิ จิ ทั ล
    void setup() {
         pinMode( LED_PIN, OUTPUT );  // ใช ้ขา D5 เป ็ นเอาต ์ พุ ต
    }
    void loop() {
       digitalWrite( LED_PIN, HIGH ); // ให ้เอาต ์ พุ ตท ี ่ ขา D5 เป ็ น High
       delay( 10 ); // รอเวลาประมาณ 10 ม ิ ลลิ วิ นาท ี
       digitalWrite( LED_PIN, LOW );  // ให ้เอาต ์ พุ ตท ี่ ขา D5 เป ็ น Low
       delay( 10 ); // รอเวลาประมาณ 10 ม ิ ลลิ วิ นาท ี
    } 
    ผลที่ได้จากโค้ดที่ 1.3.1
    ภาพจากออสซิลโลสโคปเมื่อวัดที่ขา D5 เทียบกับ GND ของบอร์ด Arduino ที่Uploadโค้ดที่1.3.1

    คาบ ( T ) = 4 ช่อง × 5 ms = 20 ms
    ความถี่ ( f ) = 1/20ms = 50 Hz
    Duty Cycle = [(2 ช่อง × 5 ms)/(4ช่อง × 5 ms)] × 100% = 50%

    โค้ดที่ 1.3.2: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 2)
    const byte LED_PIN = 5;
    void setup() {
       pinMode( LED_PIN, OUTPUT );
    }
    void loop() {
       digitalWrite( LED_PIN, HIGH );
       digitalWrite( LED_PIN, LOW );
    } 
    ผลที่ได้จากโค้ดที่ 1.3.2 
    ภาพจากออสซิลโลสโคปเมื่อวัดที่ขา D5 เทียบกับ GND ของบอร์ด Arduino ที่Uploadโค้ดที่1.3.2

    คาบ ( T ) = 5 ช่อง × 2 µs = 10 µs
    ความถี่ ( f ) = 1/10µs = 100 kHz
    Duty Cycle = [(2.4 ช่อง × 2 µs)/(5ช่อง × 2 µs)] × 100% = 48%

    โค้ดที่ 1.3.3: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 3)
    const byte LED_PIN = 5; / / Digit al Pin 5 ( D 5 )
    void setup() {
      pinMode( LED_PIN, OUTPUT );  // ให ้ขาดิ จ ิ ทั ล D5 เป ็ นเอาต ์ พุ ต
      analogWrite( LED_PIN, 191 );  // สร ้ างสั ญญาณ PWM ท ี่ ขา D5
    }
    void loop() {
      // empty ( ไม ่ มี ค ํ าสั่ งใดๆ ในฟ ั งก ์ ชั น loop)
    }
    ผลที่ได้จากโค้ดที่ 1.3.3 
    ภาพจากออสซิลโลสโคปเมื่อวัดที่ขา D5 เทียบกับ GND ของบอร์ด Arduino ที่Uploadโค้ดที่1.3.3

    คาบ T = 5 ช่อง × 200 µs = 1 ms
    ความถี่ ( f ) = 1/1ms = 1 kHz
    Duty Cycle = [(3.8 ช่อง × 200 µs)/(5ช่อง × 200 µs)] × 100% = 76%

    โค้ดที่ 1.3.4: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 4)
    #include <Servo.h>
    Servo servo;
    int minPulse = 600;   // minimum servo position, in us
    int maxPulse = 2400;  // maximum servo position, in us
    void setup() {
      servo.attach( 5, minPulse, maxPulse ); // use D5 for PWM output (servo)
      servo.write( 90 ); // set rotation angle (value between 0 to 180 degree)
    }
    void loop() {
      // empty
    }  
    ผลที่ได้จากโค้ดที่ 1.3.4  
    ภาพจากออสซิลโลสโคปเมื่อวัดที่ขา D5 เทียบกับ GND ของบอร์ด Arduino ที่Uploadโค้ดที่1.3.4

    คาบ ( T ) = 10 ช่อง × 2 ms = 20 ms
    ความถี่ ( f ) = 1/20ms = 50 Hz
    Duty Cycle = [(0.8 ช่อง × 2 ms)/(10ช่อง × 5 ms)] × 100% = 8%

    สัญญาณที่เกิดจากเครื่องกำเนิดสัญญาณ
    ภาพจากออสซิลโลสโคปเมื่อวัดสัญญาณจากเครื่องกำเนิดสัญญาณ

    คาบ ( T ) = 10 ช่อง × 2 ms = 20 ms
    ความถี่ ( f ) = 1/20ms = 50 Hz
    Duty Cycle = [(0.75 ช่อง × 2 ms)/(10ช่อง × 5 ms)] × 100% = 7.5%

    คำถามท้ายการทดลอง
    1. จงอธิบายความแตกต่างของสัญญาณเอาต์พุต (ขา D5) ของบอร์ด Arduino ที่ได้จากโค้ดตัวอย่างใน แต่ละกรณี (ให้เปรียบเทียบค่า Duty Cycle และความถี่ของสัญญาณเอาต์พุตที่ได้ในแต่ละกรณี)
    โค้ดที่ 1.3.1             ความถี่ 50 Hz              Duty Cycle = 50%
    โค้ดที่ 1.3.2             ความถี่ 100 kHz          Duty Cycle = 48%
    โค้ดที่ 1.3.3             ความถี่ 1 kHz              Duty Cycle = 76%
    โค้ดที่ 1.3.4             ความถี่ 50 Hz              Duty Cycle = 8%

    2.มีขาใดบ้างของบอร์ด Arduino ในการทดลอง นอกจากขา D5 ที่สามารถใช้สร้างสัญญาณ PWM ด้วย คําสั่ง analogWrite()
    สำหรับบอร์ด arduino ส่วนใหญ่ที่มีไมโครคอนโทรเลอร์เอบร์ ATmega168 หรือ ATmega328 เช่นเดียวกับ DuinoLite ของแล็ป ESL. สามารถใช้คำสั่งนี้ได้บนขา D3, D6, D9, D10, D11 และขาฝั่งแอนะล็อก

    3.ถ้าต้องการจะสร้างสัญญาณแบบ PWM ที่มีค่า Duty Cycle 20% และ 80% ที่ขา D5 และ D10 ตามลําดับ โดยใช้คําสั่ง analogWrite() จะต้องเขียนโค้ด Arduino อย่างไร (เขียนโค้ดสําหรับ Arduino Sketch ให้ครบถ้วน สาธิตและตรวจสอบความถูกต้องโดยใช้ออสซิลโลสโคปหรือเครอื่ง วิเคราะห์สัญญาณดิจิทัล)

    ภาพโค้ดที่ใช้สร้างสัญญาณแบบ PWM ที่มีค่า Duty Cycle 20% และ 80% ที่ขา D5 และ D10 
    ตามลําดับ สำหรับโปรแกรม Arduino Sketch

    ภาพ Upload โค้ดลงบนบอร์ด Arduino และใช้สายไฟต่อจากport D5, D10 และ GND 
    เพื่อต่อกับสายโพรบของออสซิลโลสโคป

    อ่านค่าจากออสซิลโลสโคปและบันทึกรูปสัญญาณ

    ภาพโดยรวม

    ภาพสัญญาณที่ออกจากขา D5 ของบอร์ด Arduino 

    ภาพสัญญาณที่ออกจากขา D10 ของบอร์ด Arduino 

    4.สัญญาณเอาต์พุตที่ได้จากการใช้คําสั่งของ Servo Library มีความถี่เท่าไหร
    50 Hz

    อ้างอิง: เอกสารการทดลองที่ 1.3 การตรวจวัดสัญญาณดิจิทัล-เอาต์พุตจากบอร์ด Arduino 
    โดย ดร.เรวัต ศิริโภคาภิรมย์ ห้องปฏิบัติการระบบสมองกลฝังตัว(ESL.) มจพ.