Friday, October 17, 2014

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

การต่อวงจรสวิตช์ควบคุมด้วยแสง

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

ขั้นตอนการทดลอง
  1. ต่อวงจรบนเบรดบอร์ดตามรูปที่5.3.1 โดยใช้แรงดันไฟเลี้ยง +5V และ GND จากบอร์ด Arduino 
  2. เขียนโค้ด Arduino เพื่อรับค่าอินพุตแบบดิจิทัลที่ขา D3 (จากสัญญาณ Vout ของวงจรบนเบรดบอร์ด) แล้วสร้างสัญญาณเอาต์พุตที่ขา D5 เพื่อแสดงค่าของอินพุตที่รับโดยใช้LED เป็นตัวแสดงสถานะทางลอจิก (ถ้าไม่มีวัตถุมาปิดกั้นช่องรับแสง LED จะต้องไม่ติด) 
  3. ใช้กระดาษสีดําปิดกั้น (หรือวัตถุอื่น เช่น ไม้บรรทัดเหล็ก) บริเวณช่องรับแสงของอุปกรณ์สวิตช์ควบคุมด้วยแสง สังเกตความแตกต่างระหว่างกรณีที่มีวัตถุปิดกั้นและไม่มี(เช่น ใช้มัลติมิเตอร์วัดแรงดัน Vout) 
  4.  ทดลองต่อบัซเซอร์แบบเปียโซ (สร้างเสียงเตือน) แทนวงจร LED ในวงจรบนเบรดบอร์ด (โดยนําไปต่ออนุกรมกับตัวต้านทานขนาด 330Ω และใหส้ังเกตว่า บัซเซอร์แบบเปียโซมีขาบวกและขาลบ) 
  5. แก้ไขโค้ด Arduino เพื่อนับเวลาตั้งแต่เริ่มนํากระดาษไปปิดกั้นจนถึงเมื่อนํากระดาษออกในแต่ละครั้งโดยวัดช่วงเวลาเป็นหน่วยมิลลิวินาที (msec) และให้แสดงผลออกทางพอร์ตอนุกรมผ่านทาง Serial Monitor ของ Arduino IDE (ให้ศึกษาการใช้คําสั่ง millis() สําหรับการเขียนโค้ด Arduino) 
  6. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบนเบรดบอร์ด และตอบคําถามท้ายการทดลอง

รูปที่ 5.3.1: ผังวงจรสําหรับต่อวงจรทดลอง 

ผลการทดลอง

ได้ทำการออกแบบวงจรดังนี้






โดยเขียนโค้ดได้ดังนี้

const byte IN = 3;
const byte LED = 5;

unsigned long buff=0;
byte state=0;
byte read_flag=0;
unsigned long keep;

void setup() {
   pinMode(IN,INPUT);
   pinMode(LED,OUTPUT);
   Serial.begin(9600);
   digitalWrite(LED,LOW);
}

void loop() {
 
    state=digitalRead(IN);
   
    while(digitalRead(IN)){
      if(!read_flag)buff = millis();                            
      read_flag=1;
      keep = millis() - buff;
      Serial.print("Time = ");
      Serial.print(keep);
      Serial.println("ms");
      digitalWrite(LED,state);
   }
     digitalWrite(LED,state);                                                                    
     read_flag=0;
}



No comments:

Post a Comment