วันพฤหัสบดีที่ 29 มีนาคม พ.ศ. 2561

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

นางสาวจริญญา แสงวงศ์ 1 สทค 2 รหัส 6031280026
นางสาวจิรนันท์ จานศิลา 1 สทค 2 รหัส 6031280028


 การควบคุม Servo Motor (SG90) 

ด้วย Arduino UNO R3

SG90 Servo Motor มาตรฐาน

Servo เป็นคำศัพท์ที่ใช้กันทั่วไปในระบบควบคุมอัตโนมัติ มาจากภาษาละตินคำว่า Sevus หมายถึง “ทาส” (Slave) ในเชิงความหมายของ Servo Motor ก็คือ Motor ที่เราสามารถสั่งงานหรือตั้งค่า แล้วตัว Motor จะหมุนไปยังตำแหน่งองศาที่เราสั่งได้เองอย่างถูกต้อง โดยใช้การควบคุมแบบป้อนกลับ (Feedback Control) 
Servo คืออุปกรณ์มอเตอร์ ที่สามารถควบคุมการหมุนที่แม่นยำ เซอร์โว SG90 มีขนาดเล็กแรงบิด 1.2-1.4 kg/cm KG/cm สีน้ำตาลเป็นสายกราวด์ สีแดงเป็นไฟเข้า 4.8-7.2 V สีส้มเป็นสัญญาณอินพุต  หมุน 0-180องศา ถ้าทำให้หมุน 360 ต่อเนื่อง องศาให้ใช้ 2.2 K ohm Tower Pro SG90 Mini Micro Servo
Servo motor รุ่นนี้เหมาะสำหรับการใช้งานกับ RC คอปเตอร์ หรือ งานที่ต้องการมอเตอร์น้ำหนักเบา (เฟืองเป็นพลาสติด) ให้ทอร์กที่ 1.8 kg-cm  ที่แรงดัน 4.8 V
 Feedback Control คือ ระบบควบคุมที่มีการวัดค่าเอาต์พุตของระบบนำมาเปรียบเทียบกับค่าอินพุตเพื่อควบคุมและปรับแต่งให้ค่าเอาต์พุตของระบบให้มีค่า เท่ากับ หรือ ใกล้เคียงกับค่าอินพุต 

ผลการค้นหารูปภาพสำหรับ Tower Pro SG90
  • ขนาด 21.5 mm x 11.8 mm x 22.7 mm
  • น้ำหนัก 9 กรัม
  • ความเร็วเมื่อไม่มีโหลด 0.12 วินาที/60องศา (4.8 V)
  • แรงบิด 1.2-1.4 kg/cm (4.8 V)
  • ทำงานที่อุณหภูมิ -30-60 องศาเซลเซียส
  • เวลาหยุดก่อนรับคำสั่งใหม่ 7 มิลลิวินาที
  • ทำงานที่ไฟ 4.8 V - 6 V

ส่วนประกอบภายนอก RC Servo Motor


- Case ตัวถัง หรือ กรอบของตัว Servo Motor
- Mounting Tab ส่วนจับยึดตัว Servo กับชิ้นงาน

- Output Shaft เพลาส่งกำลัง

- Servo Horns ส่วนเชื่อมต่อกับ Output shaft เพื่อสร้างกลไกล

- Cable สายเชื่อมต่อเพื่อ จ่ายไฟฟ้า และ ควบคุม Servo Motor จะประกอบด้วยสายไฟ 3 เส้น และ ใน RC Servo Motor จะมีสีของสายแตกต่างกันไปดังนี้ 

         o สายสีแดง คือ ไฟเลี้ยง (4.8-6V)

         o สายสีดำ หรือ น้ำตาล คือ กราวด์

         o สายสีเหลือง (ส้ม ขาว หรือฟ้า) คือ สายส่งสัญญาณพัลซ์ควบคุม (3-5V) 
- Connector จุดเชื่อมต่อสายไฟ 

ส่วนประกอบภายใน RC Servo Motor


  1.  Motor เป็นส่วนของตัวมอเตอร์
  2.  Gear Train หรือ Gearbox เป็นชุดเกียร์ทดแรง
  3. Position Sensor เป็นเซ็นเซอร์ตรวจจับตำแหน่งเพื่อหาค่าองศาในการหมุน
  4. Electronic Control System เป็นส่วนที่ควบคุมและประมวลผล 


Servo Motor Block Diagram










หลักการทำงานของ  Servo Motor 

             เมื่อจ่ายสัญญาณพัลซ์เข้ามายัง  Servo Motor ส่วนวงจรควบคุม (Electronic Control System) ภายใน Servo จะทำการอ่านและประมวลผลค่าความกว้างของสัญญาณพัลซ์ที่ส่งเข้ามาเพื่อแปลค่าเป็นตำแหน่งองศาที่ต้องการให้ Motor หมุนเคลื่อนที่ไปยังตำแหน่งนั้น แล้วส่งคำสั่งไปทำการควบคุมให้ Motor หมุนไปยังตำแหน่งที่ต้องการ โดยมี Position Sensor เป็นตัวเซ็นเซอร์คอยวัดค่ามุมที่ Motor กำลังหมุน เป็น Feedback กลับมาให้วงจรควบคุมเปรียบเทียบกับค่าอินพุตเพื่อควบคุมให้ได้ตำแหน่งที่ต้องการอย่างถูกต้องแม่นยำ




นิยมใช้ร่วมกับ
  • Mounting Bracket for Servo SG90
  • Switching Power supply แหล่งจ่ายไฟ 5 V 5.5 A
  • Switching Power supply แหล่งจ่ายไฟ 5 V 10 A
  • Switching Power supply แหล่งจ่ายไฟ 5 V 20 A
              




ตัวอย่างการใช้งาน
  • Servo -> Arduino
  • สายสีน้ำตาล ->  GND
  • สายสีแดง ->5V
  • สายสีส้ม -> Pin 8


อ้างอิงข้อมูลจาก : http://www.myarduino.net/product/29/sg90-servo-motor-มาตรฐาน
https://www.arduitronics.com/product/283/tower-pro-sg90-mini-micro-servo
http://www.thaieasyelec.com/article-wiki/review-product-article/บทความตัวอย่างการควบคุม-rc-servo-motor-ด้วย-arduino.html



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

1.บอร์ด Arduino                      1 ตัว
2.สาย USB                              1 เส้น
3.Servo Motor (SG90)            1 ตัว
4.สายไฟผู้-ผู้                            3 เส้น
5.โปรแกรม Arduino
6.PC / NoteBook





รูปการต่อวงจร (Fritzing)


... ในการต่อครั้งนี้จะใช้การต่อเหมือนกันทั้ง 3 วงจร  แต่จะแตกต่างกันที่ Code ...




























คลิก Download เพื่อดาวน์โหลดรูปไปแก้เพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Fritzing อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadProgramFritzing 


Code และคำอธิบายการทำงานของวงจรในโปรแกรม Arduino

เขียนโปรแกรมให้ servo motor ทำงานแบบวนลูป 3 วงจร ดังนี้

          - แบบที่ 1 ให้ Servo Motor (SG90) หมุน จากซ้ายไปขวา โดยเริ่มจาก 0 องศา - 180 องศา และจากขวามาซ้ายโดยเริ่มจาก 180 องศา มาหา 0 องศา (Code6.1) 

Code แบบที่ 1

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


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








           - แบบที่ 2 ให้ Servo Motor (SG90) หมุน จากซ้ายไปขวา โดยเริ่มจาก 45 องศา - 135 องศา และจากขวามาซ้ายโดยเริ่มจาก 135 องศา มาหา 45 องศา  (Code6.2)

Code แบบที่ 2

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


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





         - แบบที่ 3 ให้ Servo Motor (SG90) หมุน จากซ้ายไปขวา โดยเริ่มจาก 90 องศา - 180 องศา และจากขวามาซ้ายโดยเริ่มจาก 180 องศา มาหา 90 องศา  (Code6.3)

Code แบบที่ 3 

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


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






คลิก DownloadCode6.1  DownloadCode6.2  DownloadCode6.3 เพื่อนำไปแก้ไขเพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Arduino อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadArduino 






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

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

นางสาวจริญญา แสงวงศ์ 1 สทค 2 รหัส 026
นางสาวจิรนันท์ จานศิลา 1 สทค 2 รหัส 028

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

HC-SR04

หลักการทำงาน

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


รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง

เพื่อให้การคำนวณหาระยะเป็นไปด้วยความง่าย โมดูลเซนเซอร์นี้จึงได้ประมวลผลให้เรียบร้อยแล้ว และส่งผลลัพธ์ของการคำนวณเป็นสัญญาณพัลส์ที่มีความกว้างสัมพันธ์กับระยะทางที่วัดได้



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

pic02_HC-SR04

รูปที่ 2 การต่อใช้งานโมดูลอัลตราโซนิก HC-SR04

ในการสื่อสารข้อมูลกับโมดูล HC-SR04 ใช้ขาสัญญาณ ขา คือ Trigger และ Echo โดยขา Trigger มีไว้สำหรับสั่งงานให้โมดูล HC-SR04 ส่งคลื่นอัลตร้าโซนิกออกไปข้างหน้า เมื่อคลื่นอัลตร้าโซนิกสะท้อนกลับมาจากวัตถุเป้าหมาย จะส่งสัญญาณพัลส์ออกมาทางขา Echo โดยสัญญาณนี้จะมีความกว้างที่สัมพันธ์กับระยะทางที่วัดได้ ดังนั้น ไมโครคอนโทรลเลอร์จะต้องส่งสัญญาณพัลส์ที่มีความกว้างพัลส์อย่างน้อย 10 ไมโครวินาทีไปยังขา Trigger ของโมดูล HC-SR04 แล้วรอรับสัญญาณพัลส์ที่ส่งกลับมาทางขา Echo เพื่อวัดความกว้างของสัญญาณพัลส์
 ตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 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                
ระยะทาง (inch) = ความกว้างของสัญญาณ Echo * 106 /148     


BUZZER

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

เราอาจจะเคยได้ยินเสียงบลัซเซอร์อยู่บ่อย ๆ เช่น เสียง ปี๊บที่อยู่ในคอมพิวเตอร์ก็ใช้บลัซเซอร์ในการส่งสัญญาณให้ทราบสถานะของคอมพิวเตอร์ให้ทราบว่ามีปัญหาอะไร และอาจนำไปใช้ในระบบแจ้งเตือนของระบบความปลอดภัยในอุปกรณ์หรือเครื่องจักรที่มีการทำงานอยู่ บัซเซอร์ หลายแบบและหลายระดับเพื่อความเหมาะสมของงานต่าง ๆ ที่มีใช้อยู่หลากหลาย มีให้เลือกใช้ได้หลายหลายยี่ห้อ อาทิเช่น Werma, ICC, Moflash, Omron, Schneider Electric, TDK...


รูปภาพที่เกี่ยวข้อง


              

อ้างอิงข้อมูลจากhttp://aimagin.com/blog/อัลตราโซนิก-hc-sr04/?lang=th
http://www.thaimicrotron.com/CCS-628/Referrence/Speaker.htm
http://www.mindphp.com/คู่มือ/73-คืออะไร/3714-buzzer-บลัซเซอร์-คืออะไร.html




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

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

1.บอร์ด Arduino                      1 ตัว
2.สาย USB                              1 เส้น
3.โฟโต้บอร์ด                          อัน
4.ไฟ LED                               1 ดวง
5.ตัวต้านทาน 220 Ω           1 ตัว
6. HC-SR04                            1 ตัว
7.BUZZER                             1 ตัว
8.สายไฟผู้-ผู้                           8 เส้น
9.โปรแกรม Arduino
10.PC / NoteBook





รูปวงจร (Fritzing)





คลิก Download เพื่อดาวน์โหลดรูปไปแก้เพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Fritzing อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadProgramFritzing 



Code : โปรแกรม Arduino

ให้เขียนโปรแกรมให้ทำงานดังต่อไปนี้
- ถ้า ระยะวัตถุ ตั้งแต่ 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 (นิ้ว)




/*
 * HC-SR04 example sketch
 *
 * https://create.arduino.cc/projecthub/Isaac100/getting-started-with-the-hc-sr04-ultrasonic-sensor-036380
 *
 * by Isaac100
 */

const int trigPin = 9;
const int echoPin = 10;
int buzzer = 11;
int LED1 = 13;
float duration, distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(LED1, OUTPUT);
  pinMode(buzzer, 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*.0343)/2;
  Serial.print("ระยะวัตถุ: ");
  Serial.print(distance);
  Serial.println ("ซม.");
  Serial.print("ระยะวัตถุ: ");
  Serial.print(distance* 0.39370);
  Serial.println ("นิ้ว.");
  delay(20);


  if(distance <= 30 && distance >= 21) // ระยะวัตถุตั้งแต่ 21-30 ซม.
  {
    digitalWrite (buzzer,HIGH);
    digitalWrite (LED1,HIGH);
    delay (1000);
    digitalWrite (buzzer,LOW);
    digitalWrite (LED1,LOW);
    delay (1000);
  }
  else if (distance <= 21 && distance >= 11) // ระยะวัตถุตั้งแต่ 11-20 ซม.
  {
    digitalWrite (buzzer,HIGH);
    digitalWrite (LED1,HIGH);
    delay (500);
    digitalWrite (buzzer,LOW);
    digitalWrite (LED1,LOW);
    delay (500);
  }

  else if (distance <= 11 && distance >= 6) // ระยะวัตถุตั้งแต่ 6-10 ซม.
  {
    digitalWrite (buzzer,HIGH);
    digitalWrite (LED1,HIGH);
    delay (200);
    digitalWrite (buzzer,LOW);
    digitalWrite (LED1,LOW);
    delay (200);
  }

  else if (distance < 6 ) // ระยะวัตถุน้อยกว่า 5 ซม.
  {
    digitalWrite (buzzer,HIGH);
    digitalWrite (LED1,HIGH);
  }

  else if (distance > 31) // ระยะวัตถุตั้งแต่ 31 ซม. ขึ้นไป
  {
    digitalWrite (buzzer,LOW);
    digitalWrite (LED1,LOW);
  }


}






คลิก DownloadCode เพื่อนำไปแก้ไขเพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Arduino อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadArduino 



VDO :






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

นางสาวจริญญา แสงวงศ์ 1 สทค 2 รหัส 026
นางสาวจิรนันท์ จานศิลา 1 สทค 2 รหัส 028

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


หลักการทำงาน

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


รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง

เพื่อให้การคำนวณหาระยะเป็นไปด้วยความง่าย โมดูลเซนเซอร์นี้จึงได้ประมวลผลให้เรียบร้อยแล้ว และส่งผลลัพธ์ของการคำนวณเป็นสัญญาณพัลส์ที่มีความกว้างสัมพันธ์กับระยะทางที่วัดได้



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

pic02_HC-SR04

รูปที่ 2 การต่อใช้งานโมดูลอัลตราโซนิก HC-SR04

ในการสื่อสารข้อมูลกับโมดูล HC-SR04 ใช้ขาสัญญาณ 2 ขา คือ Trigger และ Echo โดยขา Trigger มีไว้สำหรับสั่งงานให้โมดูล HC-SR04 ส่งคลื่นอัลตร้าโซนิกออกไปข้างหน้า เมื่อคลื่นอัลตร้าโซนิกสะท้อนกลับมาจากวัตถุเป้าหมาย จะส่งสัญญาณพัลส์ออกมาทางขา Echo โดยสัญญาณนี้จะมีความกว้างที่สัมพันธ์กับระยะทางที่วัดได้ ดังนั้น ไมโครคอนโทรลเลอร์จะต้องส่งสัญญาณพัลส์ที่มีความกว้างพัลส์อย่างน้อย 10 ไมโครวินาทีไปยังขา Trigger ของโมดูล HC-SR04 แล้วรอรับสัญญาณพัลส์ที่ส่งกลับมาทางขา Echo เพื่อวัดความกว้างของสัญญาณพัลส์
 ตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 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                
ระยะทาง (inch) = ความกว้างของสัญญาณ Echo * 106 /148                        


อ้างอิงข้อมูลจาก : http://aimagin.com/blog/อัลตราโซนิก-hc-sr04/?lang=th




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

ร่วมกับบอร์ด Arduino

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

1.บอร์ด Arduino                      1 ตัว
2.สาย USB                              1 เส้น
3.โฟโต้บอร์ด                          อัน
4.ไฟ LED                               6 ดวง
5.ตัวต้านทาน 220 Ω           6 ตัว
6. HC-SR04                            1 ตัว
7.สายไฟผู้-ผู้                           11 เส้น
8.โปรแกรม Arduino
9.PC / NoteBook





รูปวงจร (Fritzing)





คลิก Download เพื่อดาวน์โหลดรูปไปแก้เพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Fritzing อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadProgramFritzing 



Code : โปรแกรม Arduino


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


/*
 * HC-SR04 example sketch
 *
 * https://create.arduino.cc/projecthub/Isaac100/getting-started-with-the-hc-sr04-ultrasonic-sensor-036380
 *
 * by Isaac100
 */

const int trigPin = 9;
const int echoPin = 10;
int LED1=3;
int LED2=4;
int LED3=5;
int LED4=6;
int LED5=7;
int LED6=8;

float duration, distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode (LED1,OUTPUT);
  pinMode (LED2,OUTPUT);
  pinMode (LED3,OUTPUT);
  pinMode (LED4,OUTPUT);
  pinMode (LED5,OUTPUT);
  pinMode (LED6,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*.0343)/2;
  Serial.print("Distance: ");
  Serial.println(distance);
  delay(100);
  if(distance <= 30)
  {
    digitalWrite (LED1,HIGH);
    digitalWrite (LED2,HIGH);
  }
  if(distance > 30)
  {
    digitalWrite (LED1,LOW);
    digitalWrite (LED2,LOW);
  }
   if(distance <= 20)
  {
    digitalWrite (LED3,HIGH);
    digitalWrite (LED4,HIGH);
  }
     if(distance > 20)
  {
    digitalWrite (LED3,LOW);
    digitalWrite (LED4,LOW);
  }
   if(distance <= 10)
  {
    digitalWrite (LED5,HIGH);
    digitalWrite (LED6,HIGH);
  }
     if(distance > 10)
  {
    digitalWrite (LED5,LOW);
    digitalWrite (LED6,LOW);
  }
  if(distance <= 6)
  {
    digitalWrite (LED1,HIGH);
    digitalWrite (LED2,HIGH);
    digitalWrite (LED3,HIGH);
    digitalWrite (LED4,HIGH);
    digitalWrite (LED5,HIGH);
    digitalWrite (LED6,HIGH);
    delay(300);
    digitalWrite (LED1,LOW);
    digitalWrite (LED2,LOW);
    digitalWrite (LED3,LOW);
    digitalWrite (LED4,LOW);
    digitalWrite (LED5,LOW);
    digitalWrite (LED6,LOW);
    delay(300);
  }
  delay(300);
}



คลิก DownloadCode เพื่อนำไปแก้ไขเพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Arduino อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadArduino


  

VDO :








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

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

นางสาวจริญญา แสงวงศ์ 1 สทค 2 รหัส 026
นางสาวจิรนันท์ จานศิลา 1 สทค 2 รหัส 028

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

 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 วงจรเปิด-หรี่-ปิดไฟ



อ้างอิงข้อมูลจาก : http://www.mwit.ac.th/~ponchai/CAI_electronics/image/LDR.HTM






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

1.บอร์ด Arduino                      1 ตัว
2.สาย USB                              1 เส้น
3.โฟโต้บอร์ด                          อัน
4.ไฟ LED                               4 ดวง
5.ตัวต้านทาน 220 Ω           5 ตัว
6.ตัวต้านทาน 10 KΩ        1 ตัว
7. 7 Segment                          1 ตัว
8. LDR                                   1 ตัว
9.สายไฟผู้-ผู้                           12 เส้น
10.โปรแกรม Arduino
11.PC / NoteBook






รูปวงจร (Fritzing)


 การแสดงค่าความเข้มของแสงด้วย LED (รูปที่3.1)




การแสดงค่าความเข้มของแสงด้วย 7 Segment (รูปที่3.2)





คลิก Download3.1 ,  Download3.2 เพื่อดาวน์โหลดรูปไปแก้เพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Fritzing อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadProgramFritzing 


Code : โปรแกรม Arduino

หลักการทำงาน มีดังนี้
- เมื่อเปิด Serial monitor ขึ้นมา
             ทำให้ LDR มึดสนิท ใน Serial monitor จะขึ้นคำว่า dark และ LED1 จะติด LED2 ,3 และ 4 จะดับ
             ทำให้ LDR สลัว ใน Serial monitor จะขึ้นคำว่า dim และ LED2 จะติด LED1 ,3 และ 4 จะดับ
             ทำให้ LDR แสงปกติ ใน Serial monitor จะขึ้นคำว่า medium และ LED3 จะติด LED1 ,2 และ 4 จะดับ
             ทำให้ LDR แสงสว่างมาก ใน Serial monitor จะขึ้นคำว่า bright และ LED4 จะติด LED1 ,2 และ 3 จะดับ


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

/*
  Switch statement

  Demonstrates the use of a switch statement. The switch statement allows you
  to choose from among a set of discrete values of a variable. It's like a
  series of if statements.

  To see this sketch in action, put the board and sensor in a well-lit room,
  open the Serial Monitor, and move your hand gradually down over the sensor.

  The circuit:
  - photoresistor from analog in 0 to +5V
  - 10K resistor from analog in 0 to ground

  created 1 Jul 2009
  modified 9 Apr 2012
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/SwitchCase
*/

// these constants won't change. They are the lowest and highest readings you
// get from your sensor:
const int sensorMin = 0;      // sensor minimum, discovered through experiment
const int sensorMax = 600;    // sensor maximum, discovered through experiment


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("dim");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, HIGH);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
      break;
    case 2:    // your hand is a few inches from the sensor
      Serial.println("medium");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, HIGH);
        digitalWrite(LED4, LOW);
      break;
    case 3:    // your hand is nowhere near the sensor
      Serial.println("bright");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, HIGH);
      break;
  }
  delay(1);        // delay in between reads for stability
}





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



หลักการทำงาน มีดังนี้
- เมื่อเปิด Serial monitor ขึ้นมา
             ทำให้ LDR มึดสนิท ใน Serial monitor จะขึ้นคำว่า dark และเลข 1 จะขึ้นที่ 7 Segment
             ทำให้ LDR สลัว ใน Serial monitor จะขึ้นคำว่า dim และเลข 2 จะขึ้นที่ 7 Segment
             ทำให้ LDR แสงปกติ ใน Serial monitor จะขึ้นคำว่า medium และเลข 3 จะขึ้นที่ 7 Segment
             ทำให้ LDR แสงสว่างมาก ใน Serial monitor จะขึ้นคำว่า bright และเลข 4 จะขึ้นที่ 7 Segment


/*
  Switch statement

  Demonstrates the use of a switch statement. The switch statement allows you
  to choose from among a set of discrete values of a variable. It's like a
  series of if statements.

  To see this sketch in action, put the board and sensor in a well-lit room,
  open the Serial Monitor, and move your hand gradually down over the sensor.

  The circuit:
  - photoresistor from analog in 0 to +5V
  - 10K resistor from analog in 0 to ground

  created 1 Jul 2009
  modified 9 Apr 2012
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/SwitchCase
*/

// these constants won't change. They are the lowest and highest readings you
// get from your sensor:
const int sensorMin = 0;      // sensor minimum, discovered through experiment
const int sensorMax = 600;    // sensor maximum, discovered through experiment

int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
int LED6 = 7;
int LED7 = 8;
int LED8 = 9;
int LED9 = 10;



void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  pinMode (LED1,OUTPUT);
  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() {
  // 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 1:    // your hand is on the sensor
      Serial.println("dark");
        digitalWrite(2, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(9, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, LOW);
        digitalWrite(10,HIGH);
      break;
     
    case 2:    // your hand is close to the sensor
      Serial.println("dim");
        digitalWrite(2, LOW);
        digitalWrite(7, LOW);
        digitalWrite(6, LOW);
        digitalWrite(9, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, HIGH);
        digitalWrite(10,LOW);
       
      break;
    case 3:    // your hand is a few inches from the sensor
      Serial.println("medium");
        digitalWrite(2, HIGH);
        digitalWrite(7, LOW);
        digitalWrite(6, LOW);
        digitalWrite(9, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
        digitalWrite(10,LOW);
      
      break;
    case 4:    // your hand is nowhere near the sensor
      Serial.println("bright");
        digitalWrite(2, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(9, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, LOW);
        digitalWrite(10,LOW);
       
      break;
  }
  delay(1);        // delay in between reads for stability
}


คลิก DownloadCode3.1 DownloadCode3.2 เพื่อนำไปแก้ไขเพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Arduino อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadArduino 


VDO :


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





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



ใบงานที่ 8 Ultrasonic Object Radar System

นางสาวจริญญา แสงวงศ์ 1 สทค 2 รหัส 6031280026 นางสาวจิรนันท์ จานศิลา 1 สทค 2 รหัส 6031280028    Ultrasonic Object Radar System ...