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;
}



Friday, October 3, 2014

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

การตรวจจับวัตถุในระยะใกล้ด้วยแสงอินฟราเรด

วัตถุประสงค์
  • เพื่อฝึกใช้งานบอร์ด Arduino ร่วมกับอุปกรณ์ที่ทำงานเกี่ยวข้องกับแสง 
รายการอุปกรณ์
  • แผงต่อวงจร (เบรดบอร์ด) 1 อัน
  • ไดโอดเปล่งแสงอินฟราเรด 1 ตัว
  • ไดโอดเปล่งแสงสีแดงหรือสีเขียว 1 ตัว
  • โฟโต้ทรานซิสเตอร์ 1 ตัว
  • ตัวต้านทาน 220Ω 1 ตัว
  • ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
  • ตัวต้านทาน 10kΩ 1 ตัว
  • ตัวเก็บประจุแบบ Electrolytic 1uF หรือ 10uF (มีขั้ว) 1 ตัว
  • สายไฟสําหรับต่อวงจร 1 ชุด
  • มัลติมิเตอร์ 1 เครื่อง
ขั้นตอนการทดลอง
  1. ออกแบบวงจร (วาดผังวงจร) โดยใช้ไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์ 1 ชุด พร้อมตัวต้านทานตามที่กําหนดให้แล้วนําสัญญาณเอาต์พุตของวงจรส่วนนี้ไปต่อเข้าที่ขาอินพุต A1 ของบอร์ด Arduino และให้มีวงจรไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานจํากัดกระแส 330Ω หรือ 470Ω ที่ต่อกับขาเอาต์พุต D5 ของบอร์ด Arduino เพื่อใช้เป็นเอาต์พุตในการแสดงผล
  2. ต่อวงจรตามผังวงจรที่ได้วาดไว้บนเบรดบอร์ด ให้ใชแรงดันไฟเลี้ยง VCC=+5V และ Gnd จากบอร์ด Arduino เท่านั้น
  3. เขียนโค้ดสําหรับ Arduino ให้แสดงพฤติกรรมดังนี้เมื่อมีวัตถุเข้าใกล้ (อยู่เหนือ) ตัวส่งและตัวรับแสงอินฟราเรดของวงจร (เช่น ที่ระยะห่างประมาณ 10 cm หรือน้อยกว่า) จะทําให้LED เริ่มกระพริบด้วยความถี่ต่ํา (อย่างช้าๆ) แต่ถ้าวัตถุเข้าใกล้มากขึ้น LED จะกระพริบด้วยความถี่สูงขึ้น แต่ถ้าไม่มีวัตถุอยู่ในระยะใกล้LED จะต้องไม่ติด (ไม่กระพริบ) ให้ทดลองกับวัตถุต่างสีกัน เช่น สีขาวและสีดํา 
  4. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการตอวงจรบนเบรดบอร์ด และตอบคําถามท้ายการทดลอง
ผลการทดลอง

ได้ทำการออกแบบวงจรดังนี้
ผังวงจร (โดยโปรแกรม Cadsoft Eagle )
รูปจำลองวงจรที่ต่อบนเบรดบอร์ด (โดยโปรแกรม Fritzing)
รูปวงจรที่ต่อจริงบนเบรดบอร์ด
ได้ทำการเขียนโค๊ดดังนี้

const byte IN = A1;                        //กำหนดชื่อของขา IO                                          
const byte LED = 5;

void setup() {
  pinMode(IN,INPUT);                  //กำหนดให้ขา IN เป็น Input
  pinMode(LED,OUTPUT);          //กำหนดให้ขา LED เป็น Output
  Serial.begin(9600);                      //ตั้ง Baud Rate ของ Serial Monitor เท่ากับ 9600
  digitalWrite(LED,LOW);            //กำหนดสถานะเริ่มต้นของ LED เป็น LOW
}

void loop() {
  int Light = analogRead(IN);        //ประกาศตัวแปรชื่อ Light เก็บค่าอนาล็อกจากขา IN
  Serial.println(Light);                    //แสดงค่า Light ที่เก็บได้บน Serial port
  if(Light < 610){                           //เช็คถ้าเก็บค่าได้น้อยกว่า 610 (ค่าที่วัดได้จาระยะห่าง 10 Cm)
    digitalWrite(LED,HIGH);         //สั่ง  LED เปิด - ปิด โดยมี Delay ระหว่างการเปิด-ปิดคือ ค่าที่อ่าน
    delay(Light*0.75);                    //ได้จาก Light คูณด้วย 0.75 (เพื่อเพิ่มความถี่ในการกระพริบ)
    digitalWrite(LED,LOW);
    delay(Light*0.75);
  }else{
    digitalWrite(LED,LOW);         // ถ้าค่าที่อ่านได้จาก Light มากกว่า 610 LED จะไม่ทำงาน
  }
}




รูปประกอบการทดลอง 


ภาพเมื่อนำกระดาษสีขาวมาทดสอบ 

ภาพเมื่อนำกระดาษสีดำมาทดสอบ 

ภาพเมื่อนำกระดาษสีเขียวมาทดสอบ 



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

1. ในการทดลอง ถ้าใช้วัตถุต่างสีกัน จะมีผลต่อการทํางานของวงจรที่แตกต่างกันหรือไม่จงอธิบาย

  • แตกต่างกัน เพราะค่า Analog ที่อ่านได้มาจากการแบ่งแรงดันที่โฟโต้ทรานซิสเตอร์ที่ทำงานด้วยการรับแสงสะท้อนจากกระดาษสีต่างๆ ที่ส่งมาจากไดโอดเปล่งแสงอินฟาเรด เนื่องจากกระดาษแต่ละสีสะท้อนแสงได้ไม่เท่ากัน จึงทำให้ค่าที่อ่านได้ในระยะเท่ากัน มีค่าแตกต่างกันจากกการทดลอง เมื่อใช้กระดาษสีดำ จะพบว่า LED ไม่กระพริบเลยก็เนื่องมาจากว่าสีดำสะท้อนแสงได้น้อยมากนั่นเอง