วันอาทิตย์ที่ 19 ตุลาคม พ.ศ. 2557

การทดลองที่ 5.3 การต่อวงจรสวิตซ์ควบคุมด้วยแสง

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

  •   ฝึกต่อวงจรโดยใช้อุปกรณ์สวิตช์ควบคุมด้วยแสง(Opto-Interrupter) เช่น เบอร์ H21A1
  •   ประยุกต์ใช้งานอุปกรณ์ชนิดนี้ร่วมกับบอร์ด Arduino

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

  •   แผงต่อวงจร(เบรดบอร์ด) 1 อัน
  •   อุปกรณ์สวิตช์ควบคุมด้วยแสงH21A1 หรือTCST2202 1 ตัว
  •   ไดโอดเปล่งแสงสีแดงหรือสีเขียว 1 ตัว
  •   ตัวต้านทาน 220Ω 1 ตัว
  •   ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
  •   ตัวต้านทาน 10kΩ 1 ตัว
  •   บัซเซอร์แบบเปียโซ(Piezo Buzzer) 1 ตัว
  •   สายไฟสําหรับต่อวงจร 1 ชุด
  •   มัลติมิเตอร์ 1 เครื่อง

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

  1. ต่อวงจรบนเบรดบอร์ดตามรูปที่ 5.3.1 โดยใช้แรงดันไฟเลี้ยง +5V และ GND จากบอร์ด Arduino
    รูปที่ 5.3.1 : ผังวงจรสำหรับต่อวงจรทดลอง
    รูปจากการต่อวงจร
  2. เขียนโค้ด Arduino เพื่อรับค่าอินพุตแบบดิจิทัลที่ขา D3 (จากสัญญาณ Vout ของวงจรบนเบรด
    บอร์ด) แล้วสร้างสัญญาณเอาต์พุตที่ขา D5 เพื่อแสดงค่าของอินพุตที่รับโดยใช้ LED เป็นตัวแสดง
    สถานะทางลอจิก(ถ้าไม่มีวัตถุมาปิดกั้นช่องรับแสง LED จะต้องไม่ติด)

    Code ในการทดลอง
    const byte Vin_pin = 3;
    const byte Vout_pin = 5;
    long time = millis();
    long Start = 0;
    void setup() {
    pinMode(Vin_pin,INPUT);
    pinMode(Vout_pin,OUTPUT);
    Serial.begin(9600);
    }

    void loop() {
    int A = digitalRead(Vin_pin);
    if(A==1 && Start ==0) {Start = time;}
    if(A!=1 && Start !=0) {Serial.println(time-Start); Start = 0;}
    }
  3. ใช้กระดาษสีดําปิดกั้น (หรือวัตถุอื่น เช่น ไม้บรรทัดเหล็ก) บริเวณช่องรับแสงของอุปกรณ์สวิตช์
    ควบคุมด้วยแสง สังเกตความแตกต่างระหว่างกรณีที่มีวัตถุปิดกั้นและไม่มี (เช่น ใช้มัลติมิเตอร์วัด
    แรงดัน Vout)
  4. ทดลองต่อบัซเซอร์แบบเปียโซ (สร้างเสียงเตือน) แทนวงจร LED ในวงจรบนเบรดบอร์ด (โดยนําไปต่ออนุกรมกับตัวต้านทานขนาด 330Ω และให้สังเกตว่า บัซเซอร์แบบเปียโซมีขาบวกและขาลบ)
  5. แก้ไขโค้ด Arduino เพื่อนับเวลาตั้งแต่เริ่มนํากระดาษไปปิดกั้นจนถึงเมื่อนํากระดาษออกในแต่ละครั้ง
    โดยวัดช่วงเวลาเป็นหน่วยมิลลิวินาที (msec) และให้แสดงผลออกทางพอร์ตอนุกรมผ่านทาง Serial
    Monitor ของ Arduino IDE (ให้ศึกษาการใช้คําสั่ง millis() สําหรับการเขียนโค้ด Arduino)

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

  1. จากการทดลองพบว่า จะวัดแรงดัน Vout ได้เท่ากับ…0.107...โวลต์ เมื่อไม่มีวัตถุไปปิดกั้นช่องรับแสงของอุปกรณ์ H21A1 และจะวัด Vout ได้เท่ากับ…4.617…โวลต์ เมื่อมีวัตถุไปปิดกั้นช่องรับแสงของอุปกรณ์ดังกล่าว
  2. ถ้านํากระดาษสีขาวและกระดาษสีดํา ไปปิดกั้นช่องรับแสง ในแต่ละกรณี จะให้ ผลการทํางานของ
    วงจรที่แตกต่างกันหรือไม่ จงอธิบาย
    • ไม่แตกต่างกัน เนื่องจากไม่ว่าจะนำกระดาษสีขาวหรือกระดาษสีดำมาปิดช่องรับแสงของอุปกรณ์สวิตช์ควบคุมด้วยแสง Piezo Buzzer ก็จะทำงาน ดังนั้นไม่ว่ากระดาษสีขาวหรือกระดาษสีดำก็ไม่มีความแตกต่างกัน

วันอาทิตย์ที่ 5 ตุลาคม พ.ศ. 2557

การทดลองที่ 5.1 การต่อวงจรไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์

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


  • ฝึกต่อวงจรโดยใช้ไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์เพื่อใช้เป็นตัวส่งแสงและตัวรับแสงตามลําดับ
  • หาความสัมพันธ์ระหว่างปริมาณแสงสะท้อนกลับ และระดับของแรงดันเอาต์พุตจากวงจร

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

  • แผงต่อวงจร (เบรดบอร์ด) 1 อัน
  • ไดโอดเปล่งแสงอินฟราเรด 1 ตัว
  • โฟโต้ทรานซิสเตอร์ 1 ตัว
  • ตัวต้านทาน 220Ω 1 ตัว
  • ตัวต้านทาน 10kΩ 1 ตัว
  • ตัวเก็บประจุแบบ Electrolytic 1uF (มีขั้ว) 1 ตัว
  • สายไฟสําหรับต่อวงจร 1 ชุด
  • มัลติมิเตอร์ 1 เครื่อง
  • แหล่งจ่ายแรงดันควบคุม 1 เครื่อง
  • ออสซิลโลสโคปแบบดิจิทัล 1 เครื่อง

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

  1. ต่อวงจรบนเบรดบอร์ดตามผังวงจรในรูปที่ 5.1.1 (ให้ไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์อยู่ห่างกันประมาณ 1 cm) แล้วป้อนแรงดันไฟเลี้ยง VCC=+5V และ Gnd จากแหล่งจ่ายแรงดันควบคุมไปยังวงจรบนเบรดบอร์ด
    รูปการต่อวงจร
  2. วัดแรงดันตกคร่อมที่ขาทั้งสองของไดโอดเปล่งแสงอินฟราเรดและวัดปริมาณกระแสที่ไหล (mA) แล้วจดบันทึกค่าที่ได้ (สําหรับรายงานการทดลอง)
    ค่าที่ได้จากการวัดแรงดันตกคร่อม = 3.902V
    ค่าที่ได้จากการวัดปริมาณกระแสที่ไหล = 17mA

  3. ใช้ออสซิลโลสโคปวัดแรงดัน Vout แล้วบันทึกภาพของรูปคลื่นสัญญาณที่ปรากฏ
  4. ทดลองต่อและไม่ต่อตัวเก็บประจุสังเกตความแตกต่างของรูปคลื่นสัญญาณ Vout ในแต่ละกรณี
    ต่อตัวเก็บประจุ
    ไม่ต่อตัวเก็บประจุ
  5. นําแผ่นกระดาษสีขาวมาอยู่เหนือไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์ที่ระยะห่าง 0.5 cm, 1 cm, 5 cm, และ 10 cm ตามลําดับ ใช้มัลติมิเตอร์วัดแรงดัน Vout สําหรับระยะห่างดังกล่าวแล้วจดบันทึกค่าที่ได้ในแต่ละกรณี
    0.5 cm
    1 cm
    5 cm
    10 cm
  6. นําแผ่นกระดาษสีดํามาอยู่เหนือไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์ที่ระยะห่าง 0.5 cm, 1 cm, 5 cm, และ 10 cm ตามลําดับ ใช้มัลติมิเตอร์วัดแรงดัน Vout สําหรับระยะห่างดังกล่าวแล้วจดบันทึกค่าที่ได้ในแต่ละกรณี
    0.5 cm
    1 cm
    5 cm
    10 cm
  7. ต่อวงจรตามผังวงจรในรูปที่ 5.1.2 แล้วเปรียบเทียบความแตกต่างกับวงจรในรูปที่ 5.1.1 (เช่น ดูการเปลี่ยนแปลงของแรงดัน Vout)
    รูปการต่อวงจร
    7.4 ใช้ออสซิลโลสโคปวัดแรงดัน Vout แล้วบันทึกภาพของรูปคลื่นสัญญาณที่ปรากฏ
    ต่อตัวเก็บประจุ
    ไม่ต่อตัวเก็บประจุ
    7.5 นําแผ่นกระดาษสีขาวมาอยู่เหนือไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์ที่ระยะห่าง 0.5 cm, 1 cm, 5 cm, และ 10 cm ตามลําดับ ใช้มัลติมิเตอร์วัดแรงดัน Vout สําหรับระยะห่างดังกล่าวแล้วจดบันทึกค่าที่ได้ในแต่ละกรณี
    0.5 cm
    1 cm
    5 cm
    10 cm
    7.6 นําแผ่นกระดาษสีดํามาอยู่เหนือไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์ที่ระยะห่าง 0.5 cm, 1 cm, 5 cm, และ 10 cm ตามลําดับ ใช้มัลติมิเตอร์วัดแรงดัน Vout สําหรับระยะห่างดังกล่าวแล้วจดบันทึกค่าที่ได้ในแต่ละกรณี
    0.5 cm
    1 cm
    5 cm
    10 cm

ผลการทดลอง

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

  1. จากการทดลองพบว่าจะมีกระแสไหลผ่านไดโอดเปล่งแสงอินฟราเรด 17 mA และวัดแรงดันตกคร่อมได้เท่ากับ 3.9 โวลต์
  2. เมื่อทดลองโดยใช้กระดาษสีขาวสําหรับวงจรแบบที่ 1 จะได้แรงดัน Vout อยู่ในช่วง 5.060V - 5.075V (ค่าต่ําสุด-สูงสุด ) และจะได้แรงดัน Vout อยู่ในช่วง 1.454V - 4.885V (ค่าต่ําสุด-สูงสุด) สําหรับวงจรแบบที่ 2
  3. เมื่อทดลองโดยใช้กระดาษสีดําสําหรับวงจรแบบที่ 1 จะได้แรงดัน Vout อยู่ในช่วง 5.078V - 5.080V (ค่าต่ําสุด-สูงสุด) และจะได้แรงดัน Vout อยู่ในช่วง 0.356V - 0.453V (ค่าต่ําสุด-สูงสุด) สําหรับวงจรแบบที่ 2
  4. ที่ระยะห่างเท่ากัน การทดลองด้วยวัตถุสีขาวและวัตถุสีดําจะให้ผลแตกต่างกันหรือไม่ เมื่อวัดแรงดัน Vout ของวงจร จงอธิบาย
    • แตกต่างกัน เพราะกระดาษสีขาวมีคุณสมบัติสะท้อนแสงได้ดีกว่ากระดาษสีดำ ดังนั้นโฟโต้ทรานซิสเตอร์จะรับแสงจากกระดาษสีขาวได้ดีกว่า และเนื่องจากโฟโต้ทรานซิสเตอร์จะยอมให้กระแสไหลผ่านขาหนึ่งไปยังอีกขาหนึ่งได้ก็ต่อเมื่อมีปริมาณแสงที่มากเพียงพอ
  5. การต่อตัวเก็บประจุคร่อมที่ Vout กับ Gnd มีผลต่อรูปคลื่นสัญญาณเอาต์พุตหรือไม่ จงอธิบาย
    • ไม่มีผล เนื่องจากจะต่อตัวเก็บประจุ หรือไม่ต่อตัวเก็บประจุ รูปกราฟก็ยังคงไม่เปลี่ยนแปลง ดังนั้นการต่อตัวเก็บประจุคร่อมที่ Vout กับ Gnd จึงไม่มีผลต่อรูปคลื่นสัญญาณเอาต์พุต
  6. ในการทดลองแสงสว่างจากหลอดไฟในอาคารมีผลต่อสัญญาณ Vout หรือไม่ จงอธิบาย
    • ไม่มีผล เพราะโฟโต้ทรานซิสเตอร์จะทำงานด้วยแสงในช่วงอินฟราเรดเท่านั้น เพื่อหลีกเลี่ยงการรบกวนจากแสงที่มองเห็นได้ด้วยตาเปล่า (Visible Light)

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

การทดลองที่ 4.6 การวัดแรงดันอินพุต-แอนะล็อกและการแสดงค่าโดยใช้ 7-Segment

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


  • ฝึกต่อวงจรและเขียนโปรแกรมสําหรับบอร์ด Arduino เพื่อวัดแรงดันอินพุต-แอนะล็อกและแสดงค่าที่ได้ผ่านทาง 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เท่านั้น [ทุกกลุ่มจะต้องวาดวงจรสําหรับการทดลองมาให้แล้วเสร็จ (ให้เตรียมตัวมาก่อนเข้าเรียนวิชาปฏิบัติ) ]
  2. เขียนโค้ดสําหรับ Arduino เพื่ออ่านค่าจากแรงดันอินพุต-แอนะล็อก แลวนำไปแสดงผลโดยใช้ 7-Segment Display ตามที่กล่าวไป (และให้แสดงค่าที่อ่านได้ออกทาง Serial Monitor ด้วย) และในการเขียนโค้ด ห้ามใช้ตัวแปรหรือตัวเลขแบบ float 
  3. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบน เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจริงพร้อมคาอธิบายโค้ด/การทํางานของโปรแกรมและตัวอย่างผลที่แสดงบน Serial Monitor (Screen Capture)

รูปจากการต่อวงจร




ผลจากการทดลอง





โค้ดในการทดลอง


const byte SEG[7] = {4, 5, 6, 7, 8 , 9, 10};
int analogpin = 0;
const byte TC[2] = {2, 3};
byte NUM[10] = {B1111110, B0110000, B1101101, B1111001, B0110011,
                              B1011011, B1011111, B1110000, B1111111, B1111011};

void setup() {
  analogReference(DEFAULT);
  Serial.begin(9600);
  for(int i = 0; i < 7; i++){
    pinMode(SEG[i], OUTPUT);
  }
  for(int i = 0; i < 2; i++){
    pinMode(SEG[i], OUTPUT);
  }
}

void loop() {
  int value = analogRead(analogpin);
  value = map(value, 0, 1023, 0, 5000);
  int G = value / 1000; //I
  int W = (value % 10);
  int Y = (value % 1000 / 100); //F
  if (W > 5) {
    Y = Y + 1;
  }
  delay(10);
  digitalWrite(TC[0], 1);
  digitalWrite(TC[1], 0);
  display_seg(G);
  delay(10);
  digitalWrite(TC[0], 0);
  digitalWrite(TC[1], 1);
  display_seg(Y);
}

void display_seg(int num){
  byte N = NUM[num];
  for(int i = 6; i >= 0; i--){
    digitalWrite(SEG[i], N&1);
    N >>= 1;
  }
}

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

การทดลองที่ 4.3 การต่อวงจรตัวต้านทานไวแสงและตรวจวัดการเปลี่ยนแปลงของปริมาณแสง

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


  • ฝึกต่อวงจรโดยตัวต้านทานไวแสง (LDR) ร่วมกับไอซีเปรียบเทียบแรงดัน เบอร์ LM393N

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

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

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

  1. ใช้มัลติมิเตอร์วัดค่าความต้านทานของตัวต้านทานไวแสง (LDR) ในสภาวะแสงที่แตกต่างกันในสามระดับ (ปริมาณแสงน้อย ปานกลาง และมาก) แล้วจดบันทึกค่าที่วัดได้ สังเกตการเปลี่ยนแปลงของค่าความต้านทานเมื่อปริมาณแสงเปลี่ยน
          -     
    ได้ค่าความต้านทาน 40kΩ, 2kΩ และ 400Ω ตามลำดับ
  2. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.1 แล้ววัดแรงดัน Vx ในสภาวะแสงที่แตกต่างกัน (ปริมาณแสงน้อย ปานกลาง มาก) แล้วจดบันทึกค่าที่วัดได้ สังเกตการเปลี่ยนแปลงของระดับแรงดันเมื่อปริมาณแสงเปลี่ยน
    รูปที่ 4.3.1 : ผังวงจรสำหรับต่อตัวต้านทานปรับค่าได้
         -     ได้ค่าแรงดัน Vx 1.3V, 4.2V และ 5V ตามลำดับ
  3. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.2 (แบบที่ 1) โดยใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd
    จากแหล่งจ่ายแรงดันควบคุม ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ และวัดแรงดัน Vref ที่ได้สังเกตสถานะติด/ดับของ LED
    รูปที่ 4.3.2 : ผังวงจรสำหรับต่อวงจรไอซีเปรียบเทียบแรงดัน (แบบที่ 1)
  4. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.3 (แบบที่ 2) โดยใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd
    จากแหล่งจ่ายแรงดันควบคุม ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ และวัดแรงดัน Vref ที่ได้สังเกตสถานะติด/ดับของ LED
    รูปที่ 4.3.3 : ผังวงจรสำหรับต่อวงจรไอซีเปรียบเทียบแรงดัน (แบบที่ 2)

  5. ต่อวงจรบนเบรดบอร์ด ตามรูปที่ 4.3.4 (แบบที่ 3) โดยใช้แรงดันไฟเลี้ยง +5V +9V และ Gnd
    จากแหล่งจ่ายแรงดันควบคุม ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ เพื่อให้ LED “สว่าง”
    เมื่อปริมาณแสงน้อย และให้ LED “ไม่ติด” เมื่อปริมาณแสงมาก
    รูปที่ 4.3.4 : ผังวงจรสำหรับต่อวงจรไอซีเปรียบเทียบแรงดัน (แบบที่ 3)

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

  1. ค่าความต้านทานของ LDR จะเปลี่ยนแปลงอย่างไร เมื่อปริมาณแสงเปลี่ยน และค่าความต้านทานของ LDR ที่ได้จากการทดลอง จะอยู่ในช่วงใด
    • ค่าความต้านทานของ LDR จะแปรผันแบบผกผันกับปริมาณแสง คือ ปริมาณแสงน้อย ค่าความต้านทานมาก, ปริมาณแสงมาก ค่าความต้านทานน้อย
    • ค่าความต้านทานของ LDR ที่ได้จากการทดลอง จะอยู่ในช่วง 40kΩ-400Ω
  2. สำหรับวงจรแบบที่ 1 และ 2 แรงดัน Vx จะเปลี่ยนแปลงอย่างไร เมื่อปริมาณแสงเปลี่ยน(เปลี่ยนจากปริมาณแสงน้อยเป็นปริมาณแสงมาก)
    • แรงดัน Vx จะแปรผันตรงกับ ปริมาณแสง คือ ปริมาณแสงน้อย Vx น้อย, ปริมาณแสงมาก Vx มาก
  3. สำหรับวงจรแบบที่ 3 การปรับค่าแรงดัน Vref โดยใช้ตัวต้านทานปรับค่าได้ในวงจร มีผลอย่างไรต่อการติดหรือดับของ LED
    • ถ้าค่า Vref < Vx จะทำให้ LED ดับ
    • ถ้าค่า Vref > Vx จะทำให้ LED ติด

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

การทดลองที่ 4.2 การต่อวงจรสําหรับเปรียบเทียบช่วงแรงดัน

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

  1. ฝึกต่อวงจรโดยใช้ตัวต้านทานปรับค่าได้และไอซี LM393N
  2. ต่อวงจรโดยใช้ไอซี LM393N ที่มีตัวเปรียบเทียบแรงดันสองตัวเพื่อเปรียบเทียบแรงดันอินพุตกับแรงดันอ้างอิงโดยแบ่งเป็นสองระดับ

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

  1. แผงต่อวงจร (เบรดบอร์ด)                          1 อัน
  2. ไอซีเปรียบเทียบแรงดัน เบอร์ LM393N      1 ตัว
  3. ตัวต้านทานปรับค่าได้แบบ 3 ขาขนาด 10kΩ หรือ 20kΩ 1 ตัว
  4. ตัวต้านทาน 10kΩ                                        4 ตัว
  5. ตัวต้านทาน 330Ω หรือ 470Ω                    1 ตัว
  6. ไดโอดเปล่งแสง (LED) ขนาด 5 มม.         1 ตัว
  7. สายไฟสําหรับต่อวงจร                                1 ชุด
  8. มัลติมิเตอร์                                                 1 เครื่อง
  9. แหล่งจ่ายแรงดันควบคุม                             1 เครื่อง
  10. เครื่องกําเนิดสัญญาณแบบดิจิทัล               1 เครื่อง
  11. ออสซิลโลสโคปแบบดิจิทัล                       1 เครื่อง

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

  1. ต่อวงจรบนเบรดบอร์ด โดยใช้ไอซี LM393N ตามผังวงจรในรูปที่ 4.2.1 และป้อนแรงดันไฟเลี้ยง VCC= +5V และ Gnd จากแหล่งจ่ายควบคุมแรงดัน

  2. ใช้มัลติมิเตอร์วัดแรงดัน V1 และ V2 เทียบกับ Gnd ของวงจร ตามลําดับ แล้วจดบันทึกค่าที่ได้
    - แรงดัน V1 และ V2 มีค่าประมาณ 3.355 V และ 1.675 V ตามลำดับ
  3. สร้างสัญญาณแบบสามเหลี่ยม (Triangular Wave) ให้อยู่ในช่วงแรงดัน 0V ถึง5V โดยใช้เครื่องกําเนิดสัญญาณ(Function Generator)  โดยกําหนดให้ Vpp = 5V ( Peak-to-Peak Voltage) และแรงดัน    Offset = 2.5V และความถี่ f = 1kHz เพื่อใช้เป็นสัญญาณอินพุต Vin สําหรับวงจร
  4. ใช้ออสซิลโลสโคปวัดสัญญาณ โดยใช้ช่อง A สําหรับวัดสัญญาณที่มาจากเครื่องกําเนิดสัญญาณ (Vin) และช่อง B สําหรับวัดสัญญาณเอาต์พุตที่ขาหมายเลข 1 (V3) ของตัวเปรียบเทียบแรงดัน(บันทึกภาพที่ได้จากออสซิลโลสโคป เพื่อใช้ประกอบการเขียนรายงานการทดลอง)

    (ภาพจากการต่อวงจร)


    (ภาพที่ได้จากออสซิลโลสโคป)
  5. ใช้ออสซิลโลสโคปวัดสัญญาณ โดยใช้ช่อง A สําหรับวัดสัญญาณที่มาจากเครื่องกําเนิดสัญญาณ (Vin) และช่อง B สําหรับวัดสัญญาณเอาต์พุตที่ขาหมายเลข7 (V4) ของตัวเปรียบเทียบแรงดัน                           (บันทึกภาพที่ได้จากออสซิลโลสโคป เพื่อใช้ประกอบการเขียนรายงานการทดลอง)
    (ภาพที่ได้จากออสซิลโลสโคป)
  6. ต่อวงจรบนเบรดบอร์ด ตามผังวงจรในรูปที่ 4.2.2 โดยตัวต้านทานปรับค่าได้ขนาด 10kΩ หรือ 20kΩ

    (ภาพจากการต่อวงจร)
  7. ใช้มัลติมิเตอร์วัดแรงดัน Vin ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ แล้วสังเกตสถานะของการติด/ดับของ LED1 ให้จดบันทึกค่าแรงดัน Vin ที่ทําให้ LED1 เกิดการเปลี่ยนสถานะติด/ดับ
  8. เขียนรายงานการทดลองซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบนเบรดบอร์ด  รูปคลื่นสัญญาณที่วัดได้จากออสซิลโลสโคปตามโจทย์การทดลอง และตอบคําถามท้ายการทดลอง

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

  1. แรงดัน V1และ V2 มีค่าประมาณ …3.355... โวลต์และ …1.675... โวลต์ตามลําดับ
  2. แรงดัน Vin จะต้องมีค่าอยู่ในช่วง …3... ถึง …5… โวลต์และ ...0… ถึง ...3... โวลต์จึงจะทําให้แรงดัน V3 ที่ขาหมายเลข 1 ของ LM393N (วงจรในรูปที่ 4.2.1) ได้ลอจิก LOW และ HIGH ตามลําดับ
  3. แรงดัน Vin จะต้องมีค่าอยู่ในช่วง ...0... ถึง …1.9… โวลต์และ ...2… ถึง ...5... โวลต์จึงจะทําให้แรงดัน V4 ที่ขาหมายเลข 7 ของ LM393N (วงจรในรูปที่ 4.2.1) ได้ลอจิก LOW และ HIGH ตามลําดับ
  4. แรงดัน Vin ที่ได้จากการหมุนปรับค่าของตัวต้านทานปรับค่าได้จะต้องมีค่าอยู่ในช่วงใดจึงจะทําให้ LED1สว่าง
    1. ช่วง 0V - 1.5V จะทำให้ LED1 สว่าง
    2. ช่วง 1.5V - 3.25V จะทำให้ LED1 ดับ
    3. ช่วง 3.25V - 5V จะทำให้ LED1 สว่าง

วันศุกร์ที่ 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);
  }
}

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

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

  • ฝึกต่อวงจรปุ่มกดและไดโอดเปล่งแสง (LED) และเชื่อมต่อกับบอร์ด Arduino
  • ฝึกการเขียนโปรแกรม C/C++ เพื่อให้บอร์ด Arduino ทำงานตามที่โจทย์กำหนด

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

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

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

  1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง VCC และ GND
  2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จำนวนสองชุด (PB1 และ PB2) บนเบรดบอร์ดแล้วนำไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสำหรับต่อวงจร
  3. ต่อวงจรโดยใช้ไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานแบบอนุกรม 330Ω หรือ 470Ω จำนวน 4 ชุด (LED1, LED2, LED3, LED4) บนเบรดบอร์ด แล้วนำไปต่อกับขา D4, D5, D6, D7, D8 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสำหรับต่อวงจร
  4. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทำขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
  5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับขั้วสายไฟ และ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
  6. แก้ไขโค้ดให้แสดงพฤติกรรมการทำงานตามข้อกำหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทำงาน โดยใช้ฮาร์ดแวร์จริง
    1. เมื่อเริ่มต้นทำงาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว (LED2, LED3, LED4) อยู่ในสถานะ “ดับ”
    2. ถ้ากดปุ่ม PB1 แล้วปล่อยในแต่ละครั้ง จะทำให้ตำแหน่งของ LED ที่ “ติด” เลื่อนไปทางขวาทีละหนึ่งตำแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางซ้ายสุด (LED1 -> LED2 -> LED3 -> LED4 -> …)
    3. ถ้ากดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทำให้ตำแหน่งของ LED ที่ “ติด” เลื่อนไปทางซ้ายทีละหนึ่งตำแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางขวาสุด (LED1 -> LED4 -> LED3 -> LED2 -> …)
  7. แก้ไขโค้ดให้แสดงพฤติกรรมการทำงานตามข้อกำหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทำงาน
    1. ใช้ LED ทั้ง 4 ตัว แสดงเลขในฐานสอง จำนวน 4 หลัก (4-bit binary number) ซึ่งรับสัญญาณเอาต์พุตมาจากบอร์ด Arduino และกำหนดให้บิตที่มีค่า 0 หมายถึง LED “ดับ” และ บิตที่มีค่าเป็น 1 หมายถึง LED “ติด”และเมื่อเริ่มต้นทำงาน ให้แสดงค่าเป็น 0
    2. เมื่อกดปุ่ม PB1 แล้วปล่อยแต่ละครั้ง จะทำให้ค่าเพิ่มขึ้นทีละหนึ่ง จาก 0000, 0001, 0010, …,1111 ตามลำดับ แล้ววนกลับไปเริ่มต้นที่ 0000 ใหม่ได้
    3. แต่ถ้ากดปุ่ม PB2 จะทำให้ได้ค่าเป็น 0000 ทันที (หมายถึง การรีเซตค่าเป็นศูนย์)
รูปที่ 3.1.1 : ผังวงจรสำหรับเชื่อมต่อบอน์ด Arduino

โค๊ดตัวอย่าง

const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4,5,6,7};
void setup() {
  pinMode( PB_1, INPUT );
  pinMode( PB_2, INPUT );
     for (int i=0; i < 4; i++) {
        pinMode( LEDS[i], OUTPUT );
        digitalWrite( LEDS[i], (i==0) ? HIGH : LOW );
      }
}
void loop() {
  // Write your code below
}

ผลการทดลอง 3.1.6

const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};

void setup() {
  pinMode(PB_1, INPUT );
  pinMode( PB_2, INPUT);
  for (int i = 0; i < 4; i++) {
    pinMode( LEDS[i], OUTPUT);
    digitalWrite( LEDS[i], (i == 0) ? HIGH : LOW );
  }
}

int i = 0;

void loop() {
  if (digitalRead(PB_1) == LOW) {
    while (digitalRead(PB_1) == LOW) {
      delay(20);
    }
    i++;
    if (i == 4) {
      i = 0;
    }
  }
  if (digitalRead(PB_2) == LOW) {
    while (digitalRead(PB_2) == LOW) {
      delay(20);
    }
    i--;
    if (i == -1) {
      i = 3;
    }
  }
  digitalWrite(LEDS[i], HIGH);
  for (int k = 0; k < 4; k++) {
    if (i != k)    digitalWrite( LEDS[i], LOW);
  }
}

รูปการต่อวงจรจากการทดลองจริง


ผลการทดลอง 3.1.7

const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
byte n[] = {B0000, B0001, B0010, B0011, B0100, B0111, B1000, B1001,
            B1010, B1011, B1100, B1101, B1110, B1111
           };
int j = 0, m = 0;
void setup() {
  pinMode(PB_1, INPUT );
  pinMode( PB_2, INPUT);
  for (int i = 0; i < 4; i++) {
    pinMode( LEDS[i], OUTPUT);
    digitalWrite( LEDS[i], (i == 0) ? HIGH : LOW );
  }
}

void loop() {
  int SW_1 = digitalRead(PB_1);
  int SW_2 = digitalRead(PB_2);
  delay(100);
  if (SW_1 == LOW) {
    byte t = n[j];
    for (int i = 0; i < 4; i++) {
      digitalWrite(LEDS[i], t & 1);
      t >>= 1;
    }
    j++;
    delay(100);
  }
  if (SW_2 == LOW) {
    for (int l = 0; l < 4; l++) {
      digitalWrite(LEDS[l], n[0] & 1);
    }
  }
}