วันพุธที่ 28 มีนาคม พ.ศ. 2561

ใบงานที่ 6 การควบคุม Servo Motor (SG90) ด้วย Arduino UNO R3



          


นางสาวพรรณพิลาศ ศรีสมศักดิ์ 6031280015 1สทค1

 นางสาวรัตนาพร    กลิ่นผล 6031280040     1สทค2


Servo Motor (SG90)  

ผลการค้นหารูปภาพสำหรับ SG90 Servo Motor
 Servo เป็นคำศัพท์ที่ใช้กันทั่วไปในระบบควบคุมอัตโนมัติ มาจากภาษาละตินคำว่า Sevus หมายถึง “ทาส” (Slave) ในเชิงความหมายของ Servo Motor ก็คือ Motor ที่เราสามารถสั่งงานหรือตั้งค่า แล้วตัว Motor จะหมุนไปยังตำแหน่งองศาที่เราสั่งได้เองอย่างถูกต้อง โดยใช้การควบคุมแบบป้อนกลับ (Feedback Control) ในบทความนี้จะกล่าวถึง RC Servo Motor ซึ่งนิยมนำมาใช้ในเครื่องเล่นที่บังคับด้วยคลื่นวิทยุ (RC = Radio - Controlled) เช่น เรือบังคับวิทยุ รถบังคับวิทยุ เฮลิคอปเตอร์บังคับวิทยุ เป็นต้น

Servo คืออุปกรณ์มอเตอร์ ที่สามารถควบคุมการหมุนที่แม่นยำ เซอร์โว SG90 มีขนาดเล็กแรงบิด 1.2-1.4 kg/cm

KG/cm สีน้ำตาลเป็นสายกราวด์ สีแดงเป็นไฟเข้า 4.8-7.2V สีส้มเป็นสัญญาณอินพุต  หมุน 0-180องศา

ถ้าทำให้หมุ่น 360 ต่อเนื่่อง องศาให้ใช้ 2.2K ohm

  • ขนาด 21.5mmx11.8mmx22.7mm

  • น้ำหนัก 9 กรัม

  • ความเร็วเมื่อไม่มีโหลด 0.12 วินาที/ุ60องศา (4.8V)

  • แรงบิด 1.2-1.4 kg/cm (4.8V)

  • ทำงานที่อุณหภูมิ -30-60 องศาเซลเซียส

  • เวลาหยุดก่อนรับคำสั่งใหม่ 7 มิลลิวินาที

  • ทำงานที่ไฟ 4.8V - 6V

นิยมใช้ร่วมกับ

  • Mounting Bracket for Servo SG90
  • Switching Power supply แหล่งจ่ายไฟ 5V 5.5A
  • Switching Power supply แหล่งจ่ายไฟ 5V 10A
  • Switching Power supply แหล่งจ่ายไฟ 5V 20A

อุปกรณ์ที่ใช้

  1. โฟโต้บอร์ด 1 บอร์ด
  2. Servo Motor (SG90)  1 ตัว
  3. บอร์ด Arduino  1 บอร์ด
  4. สายไฟ ผู้ - ผู้  3 เส้น
  5. สายอัปโหลด

รูปวงจร


ดาวน์โหลดรูปวงจร ที่นี่

คำอธิบายวงจร 

วงจรนี้เป็นวงจรการควบคุม servo motor โดยในวงจรนี้เราใช้ servo monitor (SG90) โดยที่ กำหนดให้ servo หมุนจาก 0 องศา - 180 องศา และ หมุนจาก 45 องศา - 135 องศา และ จาก90องศา - 180 องศา ตามการทำงานจะทำงานแบบวนลูป


Code

โปรแกรมให้ servo motor ทำงานแบบวนลูป หมุน จาก 0 องศา - 180 องศา


#include <Servo.h>
Servo servo;
int angle = 10;

void setup() {
  servo.attach(8);
  servo.write(angle);
}
void loop() 
 // scan from 0 to 180 degrees
  for(angle = 0; angle < 180; angle++)  
  {                                  
    servo.write(angle);               
    delay(15);                   
  } 
  // now scan back from 180 to 0 degrees
  for(angle = 180; angle > 0; angle--)    
  {                                
    servo.write(angle);           
    delay(15);       
  } 

ดาวน์โหลดโค้ด Arduino ที่นี่

วิดีโอประกอบ




โปรแกรมให้ servo motor ทำงานแบบวนลูป หมุน จาก 45 องศา - 135 องศา


#include <Servo.h>

Servo servo;

int angle = 10;



void setup() {

  servo.attach(8);

  servo.write(angle);

}

void loop() 


 // scan from 0 to 180 degrees

  for(angle = 45; angle < 135; angle++)  

  {                                  

    servo.write(angle);               
    delay(15);                   
  } 
  // now scan back from 180 to 0 degrees
  for(angle = 135; angle > 45; angle--)    
  {                                
    servo.write(angle);           
    delay(15);       
  } 
}

ดาวน์โหลดโค้ด Arduino ที่นี่

วิดีโอประกอบ




โปรแกรมให้ servo motor ทำงานแบบวนลูป หมุน จาก 90 องศา - 180 องศา


#include <Servo.h>

Servo servo;

int angle = 10;



void setup() {

  servo.attach(8);

  servo.write(angle);

}

void loop() 


 // scan from 0 to 180 degrees

  for(angle = 90; angle < 180; angle++)  

  {                                  

    servo.write(angle);               
    delay(15);                   
  } 
  // now scan back from 180 to 0 degrees
  for(angle = 180; angle > 90; angle--)    
  {                                
    servo.write(angle);           
    delay(15);       
  } 

วิดีโอประกอบ





วันอังคารที่ 27 มีนาคม พ.ศ. 2561

ใบงานที่ 5 HC-SR04 with Buzzer


นางสาวพรรณพิลาศ ศรีสมศักดิ์ 6031280015 1สทค1
 นางสาวรัตนาพร    กลิ่นผล 6031280040     1สทค2


HC-SR04

หลักการทำงาน
การต่อใช้งานโมดูล
  1. ขา VCC สำหรับต่อแรงดันไฟเลี้ยงไม่เกิน 5V
  2. ขา Trig เป็นขาอินพุตรับสัญญาณพัลส์ความกว้าง 10 ไมโครวินาทีเพื่อกระตุ้นการสร้างคลื่นอัลตราโซนิกความถี่ 40KHz ออกสู่อากาศจากตัวส่ง
  3. ขา Echo เป็นขาเอาต์พุตสำหรับส่งสัญญาณพัลส์ออกจากโมดูลไปยังไมโครคอนโทรลเลอร์ เพื่อตรวจจับความกว้างของสัญญาณพัลส์และคำนวณเป็นระยะทาง
  4. ขา GND สำหรับต่อจุดกราวด์ร่วมแรงดันและสัญญาณ

  HC-SR04 เป็นเซนเซอร์โมดูลสำหรับตรวจจับวัตถุและวัดระยะทางแบบไม่สัมผัส [1-2] โดยใช้คลื่นอัลตราโซนิก ซึ่งเป็นคลื่นเสียงความถี่สูงเกินกว่าการได้ยินของมนุษย์ วัดระยะได้ตั้งแต่ 2 – 400 เซนติเมตร หรือ 1 – 156 นิ้ว สามารถต่อใช้งานกับไมโครคอนโทรลเลอร์ได้ง่าย ใช้พลังงานต่ำ เหมาะกับการนำไปประยุกต์ใช้งานด้านระบบควบคุมอัตโนมัติ หรืองานด้านหุ่นยนต์ หลักการทำงาน จะเหมือนกันกับการตรวจจับวัตถุด้วยเสียงของค้างคาว ตามรูปที่ 1 โดยจะประกอบไปด้วยตัว รับ-ส่ง อัลตราโซนิก ตัวส่งจะส่งคลื่นความถี่ 40 kHz ออกไปในอากาศด้วยความเร็วประมาณ 346 เมตรต่อวินาที และตัวรับจะคอยรับสัญญาณที่สะท้อนกลับจากวัตถุ เมื่อทราบความเร็วในการเคลื่อนที่ของคลื่น, เวลาที่ใช้ในการเดินทางไป-กลับ (t) ก็จะสามารถคำนวณหาระยะห่างของวัตถุ (S) ได้จาก
 S = 346 × 0.5t                                    (1)
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
เพื่อให้การคำนวณหาระยะเป็นไปด้วยความง่าย โมดูลเซนเซอร์นี้จึงได้ประมวลผลให้เรียบร้อยแล้ว และส่งผลลัพธ์ของการคำนวณเป็นสัญญาณพัลส์ที่มีความกว้างสัมพันธ์กับระยะทางที่วัดได้

โมดูลนี้มีจุดต่อใช้งานทั้งหมด 4 จุด การใช้งานบอร์ด STM32F4DISCOVERY การทดลองในเบื้องต้นสามารถต่อวงจรอย่างง่ายได้โดยใช้โปรโตบอร์ดและสายไฟต่อวงจรตามรูปที่ 2 ทั้งนี้ต้องตรวจสอบคุณสมบัติของพอร์ตของไมโครคอนโทรลเลอร์จากดาต้าชีท [3] ว่าสามารถทนระดับแรงดันลอจิก High (5V) ได้

รูปที่ 2 การต่อใช้งานโมดูลอัลตราโซนิก HC-SR04
          ตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 10 msec ป้อนเข้าที่ขา Trig หลังจากนั้นอีกประมาณ 1.4 msec จึงจะเริ่มมีสัญญาณพัลส์เกิดขึ้นที่ขา Echo มีความกว้างของสัญญาณตั้งแต่ 150 usec – 25 msec ซึ่งถ้าหากกว้างกว่านี้จะถือว่าตรวจไม่พบวัตถุ หลังจากนั้นควรหน่วงเวลาออกไปอีก 10 mS จึงจะส่งสัญญาณ Trig ออกไปอีกรอบ ตามรูปที่ 3
pic03_HC-SR04_timing
รูปที่ 3 สัญญาณที่ขา Trig และขา Echo ของโมดูลเซนเซอร์อัลตราโซนิก HC-SR04 การตรวจจับความกว้างของสัญญาณใช้โมดูล PWM Capture ซึ่งให้เอาต์พุตออกมาเป็นเวลาในหน่วยวินาที และใช้สมการ (2) หรือ (3) เพื่อคำนวณหาระยะทางระหว่างวัตถุที่ตรวจพบ
ระยะทาง (cm) = ความกว้างของสัญญาณ Echo * 106 /58                         (2)
ระยะทาง (inch) = ความกว้างของสัญญาณ Echo * 106 /148                      (3) 


Buzzer บลัซเซอร์

     Buzzer บลัซเซอร์  คือ ลำโพงแบบแม่เหล็กหรือ แบบเปียโซที่มีวงจรกำเนิดความถี่ (oscillator ) อยู่ภายในตัว ใช้ไฟเลี้ยง 3.3 - 5V สามารถสร้างเสียงเตือนหรือส่งสัญญาณที่เป็นรูปแบบต่างๆ เราอาจจะเคยได้ยินเสียงบลัซเซอร์อยู่บ่อยๆ เช่น เสียง ปี๊บที่อยู่ในคอมพิวเตอร์ก็ใช้บลัซเซอร์ในการส่งสัญญาณให้ทราบสถานะของคอมพิวเตอร์ให้ทราบว่ามีปัญหาอะไร
Buzzer บลัซเซอร์ คืออะไร

Buzzer บลัซเซอร์



อุปกรณ์ที่ใช้

  1. โฟโต้บอร์ด 1 บอร์ด
  2. HC-SR04 1 ตัว
  3. บอร์ด Arduino  1 บอร์ด
  4. ตัวต้านทาน 220𝛀 1 ตัว
  5. สายไฟ ผู้ - ผู้  8 เส้น
  6. สายอัปโหลด
  7. ไฟ LED 1 ดวง
  8.  Buzzer 1 ตัว

รูปวงจร

Code

const int trigPin = 9; const int echoPin = 10; const int buzzer = 11; const int led = 13; float duration , distance; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(buzzer, OUTPUT); pinMode(led, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance= (duration*0.034)/2; Serial.print("Distance:"); Serial.print(distance); Serial.println("Cm."); Serial.print("Distance:"); Serial.print(distance*0.39370); Serial.println("inch"); delay(100); if (distance <5 ){ digitalWrite(buzzer, HIGH); digitalWrite(led, HIGH); } if (distance <30 ){ digitalWrite(buzzer, LOW); digitalWrite(led, LOW); } if (distance <=30){ digitalWrite(buzzer, HIGH); delay(1000); digitalWrite(led, HIGH); delay(1000); digitalWrite(buzzer, LOW); delay(1000); digitalWrite(led, LOW); delay(1000); } if (distance <=21){ digitalWrite(buzzer, HIGH); delay(500); digitalWrite(led, HIGH); delay(500); digitalWrite(buzzer, LOW); delay(500); digitalWrite(led, LOW); delay(500); } if (distance <=10 ){ digitalWrite(buzzer, HIGH); delay(200); digitalWrite(led, HIGH); delay(200); digitalWrite(buzzer, LOW); delay(200); digitalWrite(led, LOW); delay(200); } }


คำอธิบายวงจร


- ระยะวัตถุ ตั้งแต่ 21-30 ซม. Buzzer ส่งเสียงเตือนเป็นจังหวะ ติด 1 วินาที - ดับ 1 วินาที - ระยะวัตถุ ตั้งแต่ 11-20 ซม. Buzzer ส่งเสียงเตือนเป็นจังหวะ ติด 0.5 วินาที - ดับ 0.5 วินาที - ระยะวัตถุ ตั้งแต่ 6-10 ซม. Buzzer ส่งเสียงเตือนเป็นจังหวะ ติด 0.2 วินาที - ดับ 0.2 วินาที - ระยะวัตถุ ตั้งแต่ 5 ซม. ลงมา Buzzer ส่งเสียงเตือนติดยาวตลอด - ระยะวัตถุ ตั้งแต่ 31 ซม. Buzzer ไม่เสียงเตือน โดยที่ LED แสดงผลตามจังหวะเสียงของ Buzzer และ Serial Monitor จะแสดงค่าระยะทาง หน่วยเป็น Cm และ inch (นิ้ว)

วิดีโอประกอบ



วันจันทร์ที่ 26 มีนาคม พ.ศ. 2561

ใบงานที่ 4 การใช้งานเซนเซอร์วัดระยะทาง HC-SR04


นางสาวพรรณพิลาศ ศรีสมศักดิ์ 6031280015 1สทค1
 นางสาวรัตนาพร    กลิ่นผล 6031280040     1สทค2

HC-SR04

หลักการทำงาน
การต่อใช้งานโมดูล
  1. ขา VCC สำหรับต่อแรงดันไฟเลี้ยงไม่เกิน 5V
  2. ขา Trig เป็นขาอินพุตรับสัญญาณพัลส์ความกว้าง 10 ไมโครวินาทีเพื่อกระตุ้นการสร้างคลื่นอัลตราโซนิกความถี่ 40KHz ออกสู่อากาศจากตัวส่ง
  3. ขา Echo เป็นขาเอาต์พุตสำหรับส่งสัญญาณพัลส์ออกจากโมดูลไปยังไมโครคอนโทรลเลอร์ เพื่อตรวจจับความกว้างของสัญญาณพัลส์และคำนวณเป็นระยะทาง
  4. ขา GND สำหรับต่อจุดกราวด์ร่วมแรงดันและสัญญาณ


  HC-SR04 เป็นเซนเซอร์โมดูลสำหรับตรวจจับวัตถุและวัดระยะทางแบบไม่สัมผัส [1-2] โดยใช้คลื่นอัลตราโซนิก ซึ่งเป็นคลื่นเสียงความถี่สูงเกินกว่าการได้ยินของมนุษย์ วัดระยะได้ตั้งแต่ 2 – 400 เซนติเมตร หรือ 1 – 156 นิ้ว สามารถต่อใช้งานกับไมโครคอนโทรลเลอร์ได้ง่าย ใช้พลังงานต่ำ เหมาะกับการนำไปประยุกต์ใช้งานด้านระบบควบคุมอัตโนมัติ หรืองานด้านหุ่นยนต์ หลักการทำงาน จะเหมือนกันกับการตรวจจับวัตถุด้วยเสียงของค้างคาว ตามรูปที่ 1 โดยจะประกอบไปด้วยตัว รับ-ส่ง อัลตราโซนิก ตัวส่งจะส่งคลื่นความถี่ 40 kHz ออกไปในอากาศด้วยความเร็วประมาณ 346 เมตรต่อวินาที และตัวรับจะคอยรับสัญญาณที่สะท้อนกลับจากวัตถุ เมื่อทราบความเร็วในการเคลื่อนที่ของคลื่น, เวลาที่ใช้ในการเดินทางไป-กลับ (t) ก็จะสามารถคำนวณหาระยะห่างของวัตถุ (S) ได้จาก
 S = 346 × 0.5t                                    (1)
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
เพื่อให้การคำนวณหาระยะเป็นไปด้วยความง่าย โมดูลเซนเซอร์นี้จึงได้ประมวลผลให้เรียบร้อยแล้ว และส่งผลลัพธ์ของการคำนวณเป็นสัญญาณพัลส์ที่มีความกว้างสัมพันธ์กับระยะทางที่วัดได้

โมดูลนี้มีจุดต่อใช้งานทั้งหมด 4 จุด การใช้งานบอร์ด STM32F4DISCOVERY การทดลองในเบื้องต้นสามารถต่อวงจรอย่างง่ายได้โดยใช้โปรโตบอร์ดและสายไฟต่อวงจรตามรูปที่ 2 ทั้งนี้ต้องตรวจสอบคุณสมบัติของพอร์ตของไมโครคอนโทรลเลอร์จากดาต้าชีท [3] ว่าสามารถทนระดับแรงดันลอจิก High (5V) ได้

รูปที่ 2 การต่อใช้งานโมดูลอัลตราโซนิก HC-SR04
          ตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 10 msec ป้อนเข้าที่ขา Trig หลังจากนั้นอีกประมาณ 1.4 msec จึงจะเริ่มมีสัญญาณพัลส์เกิดขึ้นที่ขา Echo มีความกว้างของสัญญาณตั้งแต่ 150 usec – 25 msec ซึ่งถ้าหากกว้างกว่านี้จะถือว่าตรวจไม่พบวัตถุ หลังจากนั้นควรหน่วงเวลาออกไปอีก 10 mS จึงจะส่งสัญญาณ Trig ออกไปอีกรอบ ตามรูปที่ 3
pic03_HC-SR04_timing
รูปที่ 3 สัญญาณที่ขา Trig และขา Echo ของโมดูลเซนเซอร์อัลตราโซนิก HC-SR04
  การตรวจจับความกว้างของสัญญาณใช้โมดูล PWM Capture ซึ่งให้เอาต์พุตออกมาเป็นเวลาในหน่วยวินาที และใช้สมการ (2) หรือ (3) เพื่อคำนวณหาระยะทางระหว่างวัตถุที่ตรวจพบ
ระยะทาง (cm) = ความกว้างของสัญญาณ Echo * 106 /58                         (2)
ระยะทาง (inch) = ความกว้างของสัญญาณ Echo * 106 /148                      (3)

อุปกรณ์ที่ใช้

  1. โฟโต้บอร์ด 1 บอร์ด
  2. HC-SR04 1 ตัว
  3. บอร์ด Arduino  1 บอร์ด
  4. ตัวต้านทาน 220𝛀 6 ตัว
  5. สายไฟ ผู้ - ผู้  11 เส้น
  6. สายอัปโหลด
  7. ไฟ LED 4 ดวง

รูปวงจร

Code

const int trigPin = 9; const int echoPin = 10; float duration , distance; int LEDG1=2; int LEDG2=3; int LEDY1=4; int LEDY2=5; int LEDR1=6; int LEDR2=7; void setup() { pinMode(LEDG1,OUTPUT); pinMode(LEDG2,OUTPUT); pinMode(LEDY1,OUTPUT); pinMode(LEDY2,OUTPUT); pinMode(LEDR1,OUTPUT); pinMode(LEDR2,OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration*.0343)/2; Serial.print("Distance: "); Serial.println(distance); delay(100); if (distance <= 6){ digitalWrite(LEDG1, HIGH); digitalWrite(LEDG2, HIGH); digitalWrite(LEDY1, HIGH); digitalWrite(LEDY2, HIGH); digitalWrite(LEDR1, HIGH); digitalWrite(LEDR2, HIGH); digitalWrite(LEDR1, HIGH); delay(300); digitalWrite(LEDG1, LOW); digitalWrite(LEDG2, LOW); digitalWrite(LEDY1, LOW); digitalWrite(LEDY2, LOW); digitalWrite(LEDR1, LOW); digitalWrite(LEDR2, LOW); digitalWrite(LEDR1, LOW); } if (distance <=10){ digitalWrite(LEDR2, HIGH); digitalWrite(LEDR1, HIGH); } if (distance <=20){ digitalWrite(LEDY1, HIGH); digitalWrite(LEDY2, HIGH); } if (distance <=30){ digitalWrite(LEDG1, HIGH); digitalWrite(LEDG2, HIGH); } if (distance <=30){ digitalWrite(LEDG1, HIGH); digitalWrite(LEDG2, HIGH); } if (distance <=20){ digitalWrite(LEDY1, HIGH); digitalWrite(LEDY2, HIGH); } if (distance <=10){ digitalWrite(LEDR2, HIGH); digitalWrite(LEDR1, HIGH); } if (distance <= 6){ digitalWrite(LEDG1, HIGH); digitalWrite(LEDG2, HIGH); digitalWrite(LEDY1, HIGH); digitalWrite(LEDY2, HIGH); digitalWrite(LEDR1, HIGH); digitalWrite(LEDR2, HIGH); digitalWrite(LEDR1, HIGH); delay(300); digitalWrite(LEDG1, LOW); digitalWrite(LEDG2, LOW); digitalWrite(LEDY1, LOW); digitalWrite(LEDY2, LOW); digitalWrite(LEDR1, LOW); digitalWrite(LEDR2, LOW); digitalWrite(LEDR1, LOW); } }

ดาวน์โหลดโค้ด Arduino ที่นี่

คำอธิบาย

วงจรนี้เป็นวงจรวัดระยะทาง ทำงานโดยที่ ระทางตั้งแต่ 21-30 ซม. LED สีเขียวติด2ดวง
ระทางตั้งแต่ 11-20 ซม. LED สีเหลืองติด2ดวงและสีเขียวก็ยังคงติดอยู่
ระทางน้อยกว่า 6 ให้ LED กระพริบทั้ง6ดวง และถ้านอกเหนือจากนี้LEDจะดับทั้งหมด
ระทางตั้งแต่ 6-10 ซม. LED สีแดงติด2ดวง สีเหลืองและสีเขียวยังคงติดอยู่
และแสดงระยะทางบน serial monitor (บน serial monitor แสดงระยะทางเป็น เซนติเมตร)


วิดีโอประกอบ




วันอาทิตย์ที่ 25 มีนาคม พ.ศ. 2561

ใบงานที่ 3 การแสดงค่าความเข้มของแสงด้วย 7_Segment


          


นางสาวพรรณพิลาศ ศรีสมศักดิ์ 6031280015 1สทค1
 นางสาวรัตนาพร    กลิ่นผล 6031280040     1สทค2



 LDR : (Light Dependent Resistor)         
       

แอลดีอาร์ (LDR : Light Dependent Resistor)  คือ ความต้านทานชนิดที่ไวต่อแสง กล่าวคือ ตัวความต้านทานนี้สามารถเปลี่ยนสภาพทางความนำไฟฟ้า ได้เมื่อมีแสงมาตกกระทบ บางครั้งเรียกว่าโฟโตรีซีสเตอร์ ( Photo  Resistor)   หรือ โฟโตคอนดัคเตอร์   (Photo Conductor)   เป็นตัวต้านทานที่ทำมาจากสารกึ่งตัวนำ  

(Semiconductor)   ประเภทแคดเมี่ยมซัลไฟด์ ( Cds : Cadmium Sulfide)   หรือแคดเมี่ยมซิลินายส์ ( CdSe : Cadmium Selenide)   ซึ่งทั้งสองตัวนี้ก็เป็นสารประเภทกึ่งตัวนำ เอามาฉาบลงบนแผ่นเซรามิกที่ใช้เป็นฐานรองแล้วต่อขาจากสารที่ฉาบ ไว้ออกมา



รูปที่ 1 โครงสร้าง LDR

รูปร่างของ LDR ในรูปที่ 1 ส่วนที่ขดเป็นแนวเล็กๆสี ดำทำหน้าที่เป็นตัวต้านทานไวแสง และ แนวสีดำ นั้นจะแบ่งพื้นที่ของตัวมันออกเป็น 2 ข้าง สีทองนั้น เป็นตัวนำไฟฟ้าที่ทำหน้าที่สัมผัส กับตัวต้านทานไวแสง เป็นที่สำหรับต่อขาออกมาภายนอก หรือ เรียกว่าอิเล็กโทรด ที่เหลือก็จะเป็นฐานเซรามิก และ อุปกรณ์ สำหรับห่อหุ้มมัน ซึ่งมีได้หลายแบบ


สมบัติทางแสง 

การทำงานของ LDR เพราะว่าเป็นสารกึ่งตัวนำ เวลามีแสงตกกระทบลงไปก็จะถ่ายทอดพลังงาน ให้กับสาร ที่ฉาบอยู่ ทำให้เกิดโฮลกับอิเล็กตรอนวิ่งกันพล่าน. การที่มีโฮล กับอิเล็กตรอนอิสระนี้มากก็เท่ากับ ความต้านทานลดลงนั่นเอง ยิ่ง ความเข้มของแสงที่ตกกระทบมากเท่าไร ความต้านทานก็ยิ่งลดลงมากเท่านั้น


รูปที่ 2 ตัวอย่างกราฟแสดงความไวต่อแสงความถี่ต่าง ๆ ของ LDR ทั้ง 2 แบบ เมื่อเทียบกับความไวของตาคน
ในส่วนที่ว่าแสงตกกระทบนั้น มิใช่ว่าจะเป็นแสงอะไรก็ได้ เฉพาะแสงในช่วงความยาวคลื่นประมาณ 4,000 อังสตรอม ( 1 อังสตรอม เท่ากับ 10 - 10 เมตร ) ถึงแระมาณ 10,000 อังสตรอมเท่านั้นที่จะใช้ได้ ( สายตาคนจะเห็นได้ ในช่วงประมาณ 4,000 อังสตรอม ถึง 7,000 อังสตรอม ) ซึ่งคิดแล้วก็เป็นช่วงคลื่นเพียงแคบ ๆ
เมื่อเทียบกับการทำงาน ของอุปกรณ์ไวแสง ประเภทอื่น ๆ แต่ถึงอย่างไรแสงในช่วงคลื่นนี้ ก็มีอยู่ในแสงอาทิตย์ แสงจากหลอดไฟแบบไส้ และ แสงจากหลอดฟลูออเรสเซนต์ ด้วย หรือ ถ้าจะคิดถึงความยาวคลื่น ที่ LDR จะตอบสนองไวที่สุดแล้ว ก็มีอยู่หลาย ความยาวคลื่น โดยทั่วไป LDR ที่ทำจากแคดเมียมซัลไฟด์ จะไวต่อแสงที่มีความยาวคลื่นในช่วง 5,000 กว่า อังสตรอม. ซึ่งเราจะเห็นเป็นสีเขียว ไปจนถึงสีเหลือง สำหรับ บางตัวแล้ว ความ ยาวคลื่นที่ไวที่สุดของมันใกล้เคียงกับความยาวคลื่นที่ไวที่สุดของตาคนมาก ( ตาคนไวต่อความ ยาวคลื่น ประมาณ 5,550 อังสตรอม ) จึงมักจะใช้ทำเป็นเครื่องวัดแสง ในกล้องถ่ายรูป ถ้า LDR ทำจาก แคดเมียมซีลิไนด์ก็จะไวต่อ ความ ยาวคลื่นในช่วง 7,000 กว่า อังสตรอม ซึ่งไปอยู่ใน ช่วงอินฟราเรดแล้ว
ผลตอบสนองทางไฟฟ้า
อัตราส่วนระหว่างความต้านทานของ LDR ในขณะที่ไม่มีแสง กับขณะที่มีแสง อาจจะเป็นได้ตั้งแต่ 100 เท่า 1,000 เท่า หรือ 10,000 เท่า แล้วแต่รุ่น แต่โดยทั่วไปแล้วค่าความต้านทานในขณะที่ไม่มีแสงจะอยู่ในช่วง ประมาณ 0.5 MW ขึ้นไป ในที่มืดสนิทอาจขึ้นไปได้มากกว่า 2 MW และ ในขณะที่มีแสงจะเป็นประมาณ 10 - 20kW ลง ไป อาจจะเหลือเพียงไม่กี่โอห์ม หรือ ไม่ถึงโอห์มก็ได้. ทนแรงดันสูงสุดได้ไม่ต่ำกว่า 100 V และ กำลังสูญเสีย อย่างต่ำประมาณ 50 mW

รูปที่ 3 ผลของการเปลี่ยนความเข้มแสงในทันทีทันใดกับ LDR
นอกเหนือจากลักษณะสมบัติต่างๆ เหล่านี้แล้วยังมีอีกอย่างหนึ่งที่สำคัญ คือ ปรากฏการณ์ที่เกิดขึ้นจากความ เข้มแสดง เปลี่ยนแปลงอย่างฉับพลัน ซึ่งจะดูตัวอย่างได้ในรูปที่ 3 ถ้า LDR ได้รับแสงที่มีความเข้มสูงดังเส้น ( ก ) ความต้านทานจะมีค่า ต่ำ และ ในทันทีที่ความเข้มของแสงถูกลดลงหลือเพียงระดับอ้างอิง ความต้านทานก็จะค่อยๆ เพิ่มขึ้นไปจนถึงค่าความต้านทาน ที่มันควรจะเป็นในระดับอ้างอิง. แต่แทนที่มันจะไปหยุดอยู่ระดับอ้างอิง มันกลับ เพิ่มเลยขึ้นไปอีกแล้วจึงจะลดลงมาอยู่ในระดับ อ้างอิง เหมือนกับว่า เบรกมันไม่ค่อยดี และ ในทำนองเดียวกันถ้า เก็บมันไว้ในที่ความเข้มแสงน้อยๆ แล้วเปลี่ยนความเข้มเป็นระดับ อ้างอิงทันที ดังในรูป (ข ) ความต้านทานก็จะลด เลยต่ำลงมาจากระดับอ้างอิงแล้วจึงขึ้นไปใหม่ ยิ่งความเข้มของแสงเท่ากัน LDR แบบแคดเมียมซีนิไนด์ จะใช้เวลา ในการเข้าสู่สภาวะที่มันควรจะเป็นน้อยกว่า แบบ แคดเมียมซัลไฟต์ แต่ก็จะวิ่งเลยไปไกลกว่าด้วย และ อีกอย่างหนึ่ง ความเร็วในการเปลี่ยนระดับความต้านทานจากค่าหนึ่งไปอีกค่า



หนึ่งช้ามาก. ซึ่งจะอยู่ในช่วงของมิลลิวินาทีหรือ บาง ทีก็เป็นวินาที เลย จึงทำให้ LDR ใช้ได้ กับงานความถี่ต่ำๆ เท่านั้น

ทำเป็นเครื่องวัดแสง 

ในรูปที่ 4 เป็นวงจรเครื่องวัดแสงแบบง่ายจริงๆ LDR ที่ใช้ก็ควรจะมีอัตราส่วนของค่าความต้านทาน ระหว่างไม่มีแสง กับมีแสงมากๆ หน่อย เวลาใช้ต้องระวังอย่าให้เข็มมิเตอร์ตีเกินสเกล ของแพงมาเสียง่ายๆ อย่าง นี้มันน่าเจ็บใจตัวเอง


รูปที่ 4 เครื่องวัดแสงแบบง่ายที่สุด
อีกวงจรหนึ่งในรูปที่ 5 เป็นวงจรที่ดัดแปลงให้ดีขึ้นแล้วโดยเอาออปแอมป์เบอร์ 741 เข้ามาช่วยทำให้ไวขึ้น มาก จะเอา ดิจิตอลมัลติมิเตอร์มาต่อแทนแบบเข็มก็ได้ แต่ต้องระวังแสงจาก LED จะไปกวนการทำงานของ LDR

รูปที่ 5 วงจรเครื่องวัดแสงที่ปรับปรุงขึ้นแล้ว

สวิตซ์ทำงานด้วยแสง 

การใช้ LDR ทำงานในวงจรปิดเปิดสวิตซ์ เราก็ จะใช้เพียง 2 อย่างเท่านั้น คือ มีแสง หรือ ไม่มีแสง. โดย ทั่วไปเราจะ ใช้วิธีเอามาอนุกรมกับตัวต้านทานตัวหนึ่ง แล้วต่อเป็นวงจรแบ่งแรงดันออกมาตามรูปที่ 6 อย่างในรูป ( ก ) จะทำงานดังนี้ คือ ถ้ามีแสงสว่าง LDR จะมีความต้านทานต่ำ ทำให้แรงดันส่วนใหญ่มาตกคร่อม R 1



เสียหมด แรงดันเอาต์พุต จึงสูงเกือบเท่า แรงดันไฟเลี้ยง และ ถ้าไม่มี แสง LDR จะมีความต้านทานสูง แรงดันส่วนใหญ่จะ ไปตกที่ LDR แรงดันเอาต์พุต จึงเกือบเป็น 0 โวลต์


รูปที่ 6 หลักการใช้ LDR ในวงจรปิดเปิดสวิตซ์
ในรูปที่ 6 ( ข ) วงจรจะทำงาน ในทางตรงข้าม เพียงแต่สลับที่ระหว่าง LDR กับ R 1 เวลามีแสงสว่าง เอาต์พุตก็จะเกือบ เป็น 0 โวลต์ เวลาไม่มีแสงสว่างเอาต์พุตก็เกือบเท่าแรงดันไฟเลี้ยงจะเห็นได้ว่ากลับกับกรณีแรก



รูปที่ 7 ตัวอย่างวงจรควบคุมสวิตซ์โดยรีเลย์จะทำงานเมื่อไม่มีแสงสว่าง
ทั้ง 2 กรณี จะมีวงจรที่ต่อออกไปสำหรับจับสัญญาณว่ามีแสงสว่างหรือไม่. แล้วนำไปควบคุมสวิตช์ อีกทีให้ ทำงานใน กรณีที่ต้องการ. ในรูปที่ 7 เป็นตัวอย่างวงจรซึ่งรีเลย์จะทำงานเมื่อไม่มีแสงสว่าง ซึ่งถ้าเราไม่ต้องการแบบนี้ และ อยากให้รีเลย์ ทำงาน เมื่อมีแสงสว่างก็เพียงแต่สลับที่ระหว่าง LDR กับความต้านทานปรับค่าได้ 100 kW เท่านั้น

รูปที่ 8 วงจรเตือนภัยเป็นเสียงเมื่อมีแสงสว่างกระทบ LDR

ในรูปที่ 8 ก็เป็น ตัวอย่างวงจรอีกอันหนึ่งทำงานเมื่อมีแสงสว่าง ตัวอย่างอื่นๆ ก็ได้แก่ วงจรจับควันไฟ , วงจรกะพริบ เพื่อความปลอดภัยเมื่อมีรถยนต์แล่นผ่านมา. ซึ่งโดยหลักการแล้วไม่ยาก คงจะนำไปดัดแปลงใช้กันได้



ใช้ LDR ตลอดช่วง


รูปที่ 9 ตัวอย่างวงจรเปลี่ยนสัญญาณแสงเป็นสัญญาณเสียง
นอกจากวงจรเครื่องวัดแสง ซึ่งเป็นที่รู้จักกันดีในการประยุกต์ LDR ให้ใช้งานแบบทุกช่วงการเปลี่ยนแปลงแล้ว ยังมีคน ดัดแปลงไปใช้ในวงจรอื่นๆ อีก เช่น วงจรแปลงสัญญาณอะนาลอก เป็นสัญญาณดิจิตอล เพื่อเชื่อมต่อส่วนที่เป็น วงจรอะนาล็อก ให้ส่งสัญญาณผ่านเข้าไปทำงานในวงจรดิจิตอลได้ ดังเช่น รูปที่ 9 เป็นวงจรแปลงระดับความเข้มแสง ซึ่งเป็นสัญญาณ อะนาล็อกให้ออกมาเป็นจำนวนลูกคลื่นสี่เหลี่ยม ยิ่งความเข้มแสงมากเท่าไหร่ จำนวนลูกคลื่น สี่เหลี่ยมก็จะยิ่งออกมามากเท่านั้น วงจรนี้ ใช้ไอซี 555 ความถี่ของคลื่นที่ออกมาจะได้ประมาณ 22kHz ถ้าเอาไป รับแสงใกล้ๆ หลอดไฟขนาด 60 วัตต์ แต่จะ เหลือเพียงประมาณ 1Hz ในที่มืด ถ้าเอาลำโพงอนุกรมกับตัวต้านทาน 220W ไปต่อเข้ากับขา 3 และ ไฟบวกก็จะได้ยินเสียง สูงๆ



ต่ำๆ ตามความเข้มของแสง ลองดูก็ได้คงจะสนุกไม่เลว และ ตัวอย่างอีกอันหนึ่งจะเห็นได้ในรูปที่ 10 เป็นวงจรเปิด - หรี่ - ปิดไฟ ซึ่งจะควบคุมให้หลอดไฟสว่างขึ้นในขณะ ที่แสงสว่างของสภาพแวดล้อมลดลงเป็นตัวอย่างที่ดีเหมือนกัน


รูปที่ 10 วงจรเปิด-หรี่-ปิดไฟ

Cr. http://www.mwit.ac.th/~ponchai/CAI_electronics/image/LDR.HTM



 การแสดงค่าความเข้มของแสงด้วย LED

อุปกรณ์ที่ใช้

  1. โฟโต้บอร์ด 1 บอร์ด
  2. LDR 1 ตัว
  3. บอร์ด Arduino  1 บอร์ด
  4. ตัวต้านทาน 10 k
  5. ตัวต้านทาน 220𝛀 4 ตัว
  6. สายไฟ ผู้ - ผู้  8 เส้น
  7. สายอัปโหลด
  8. ไฟ LED 4 ดวง


รูปวงจร


Code

int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; void setup() { // initialize serial communication: Serial.begin(9600); pinMode (LED1,OUTPUT); pinMode (LED2,OUTPUT); pinMode (LED3,OUTPUT); pinMode (LED4,OUTPUT); } void loop() { // read the sensor: int sensorReading = analogRead(A0); // map the sensor range to a range of four options: int range = map(sensorReading, sensorMin, sensorMax, 0, 3); // do something different depending on the range value: switch (range) { case 0: // your hand is on the sensor Serial.println("dark"); digitalWrite (LED1,HIGH); digitalWrite (LED2,LOW); digitalWrite (LED3,LOW); digitalWrite (LED4,LOW); break; case 1: // your hand is close to the sensor Serial.println("medium"); digitalWrite (LED2,HIGH); digitalWrite (LED3,LOW); digitalWrite (LED1,LOW); digitalWrite (LED4,LOW); break; case 2: // your hand is a few inches from the sensor Serial.println("dim"); digitalWrite (LED3,HIGH); digitalWrite (LED1,LOW); digitalWrite (LED2,LOW); digitalWrite (LED4,LOW); break; case 3: // your hand is nowhere near the sensor Serial.println("bright"); digitalWrite (LED4,HIGH); digitalWrite (LED2,LOW); digitalWrite (LED3,LOW); digitalWrite (LED1,LOW); break; } delay(1); // delay in between reads for stability }


ดาวน์โหลดโค้ด Arduino ที่นี่

คำอธิบายวงจร 

วงจรนี้เป็นวงจรการแสดงค่าความเข้มของแสงด้วย LED โดยที่ถ้าแสงเป็น dark  ไฟดวงที่1ติด ถ้าเป็น medium ไฟดวงที่ 2 จะติดดวงที่1 ดับ ถ้าเป็น dim ไฟดวงที่ 3 ติด ดวงที่ 1และ2 ดับ ถ้าเป็น bright ไฟดวงที่ 4จะติด ดวงที่ 1, 2, 3 ดับ


วิดีโอประกอบ




 การแสดงค่าความเข้มของแสงด้วย 7_Segment

อุปกรณ์ที่ใช้

  1. โฟโต้บอร์ด 1 บอร์ด
  2. LDR 1 ตัว
  3. บอร์ด Arduino  1 บอร์ด
  4. ตัวต้านทาน 10 k
  5. ตัวต้านทาน 220𝛀 1 ตัว
  6. สายไฟ ผู้ - ผู้  11 เส้น
  7. สายอัปโหลด


รูปวงจร


Code

const int sensorMin = 0; const int sensorMax = 600; int LED2=2; int LED3=3; int LED4=4; int LED5=5; int LED6=6; int LED7=7; int LED8=8; int LED9=9; void setup() { Serial.begin(9600); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(LED9,OUTPUT); } void loop() { int sensorReading = analogRead(A0); int range = map(sensorReading, sensorMin, sensorMax, 0, 3); switch (range) { case 0: Serial.println("dark"); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, LOW); digitalWrite(LED9, HIGH); break; case 1: // your hand is close to the sensor Serial.println("dim"); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, HIGH); digitalWrite(LED8, HIGH); digitalWrite(LED9, HIGH); break; case 2: // your hand is a few inches from the sensor Serial.println("medium"); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, HIGH); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, HIGH); digitalWrite(LED9, LOW); break; case 3: // your hand is nowhere near the sensor Serial.println("bright"); digitalWrite(LED2, HIGH); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, HIGH); digitalWrite(LED9, LOW); break; } delay(1); // delay in between reads for stability }


คำอธิบายวงจร 

วงจรนี้เป็นวงจรการแสดงค่าความเข้มของแสงด้วย 7 segment เป็นตัวเลข 0-3 โดยที่ถ้าแสงเป็น dark  จะเป็นเลข 0 ถ้าเป็น medium จะเป็นเลข 1 ถ้าเป็น dim จะเป็นเลข 2 ถ้าเป็น bright จะเป็นเลข 3

วิดีโอประกอบ