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

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

ผู้จัดทำ
นางสาวณัฐธิชา ชนเก่าน้อย 001
นางสาวกุลจิรา        ทองคง 003

  Servo เป็นคำศัพท์ที่ใช้กันทั่วไปในระบบควบคุมอัตโนมัติ มาจากภาษาละตินคำว่า Sevus หมายถึง “ทาส” (Slave) ในเชิงความหมายของ Servo Motor ก็คือ Motor ที่เราสามารถสั่งงานหรือตั้งค่า แล้วตัว Motor จะหมุนไปยังตำแหน่งองศาที่เราสั่งได้เองอย่างถูกต้อง โดยใช้การควบคุมแบบป้อนกลับ (Feedback Control) ในบทความนี้จะกล่าวถึง RC Servo Motor ซึ่งนิยมนำมาใช้ในเครื่องเล่นที่บังคับด้วยคลื่นวิทยุ (RC = Radio - Controlled) เช่น เรือบังคับวิทยุ รถบังคับวิทยุ เฮลิคอปเตอร์บังคับวิทยุ เป็นต้น
          Feedback Control คือ ระบบควบคุมที่มีการวัดค่าเอาต์พุตของระบบนำมาเปรียบเทียบกับค่าอินพุตเพื่อควบคุมและปรับแต่งให้ค่าเอาต์พุตของระบบให้มีค่า เท่ากับ หรือ ใกล้เคียงกับค่าอินพุต 
ส่วนประกอบภายนอก RC Servo Motor
02
- 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
03Ref: www.pololu.com
1. Motor เป็นส่วนของตัวมอเตอร์
2. Gear Train หรือ Gearbox เป็นชุดเกียร์ทดแรง
3. Position Sensor เป็นเซ็นเซอร์ตรวจจับตำแหน่งเพื่อหาค่าองศาในการหมุน
4. Electronic Control System เป็นส่วนที่ควบคุมและประมวลผล 
Servo Motor Block Diagram
04
หลักการทำงานของ RC Servo Motor 
             เมื่อจ่ายสัญญาณพัลซ์เข้ามายัง RC Servo Motor ส่วนวงจรควบคุม (Electronic Control System) ภายใน Servo จะทำการอ่านและประมวลผลค่าความกว้างของสัญญาณพัลซ์ที่ส่งเข้ามาเพื่อแปลค่าเป็นตำแหน่งองศาที่ต้องการให้ Motor หมุนเคลื่อนที่ไปยังตำแหน่งนั้น แล้วส่งคำสั่งไปทำการควบคุมให้ Motor หมุนไปยังตำแหน่งที่ต้องการ โดยมี Position Sensor เป็นตัวเซ็นเซอร์คอยวัดค่ามุมที่ Motor กำลังหมุน เป็น Feedback กลับมาให้วงจรควบคุมเปรียบเทียบกับค่าอินพุตเพื่อควบคุมให้ได้ตำแหน่งที่ต้องการอย่างถูกต้องแม่นยำ
สัญญาณ RC ในรูปแบบ PWM
            ตัว RC Servo Motor ออกแบบมาใช้สำหรับรับคำสั่งจาก Remote Control ที่ใช้ควบคุมของเล่นด้วยสัญญาณวิทยุต่างๆ เช่น เครื่องบินบังคับ รถบังบังคับ เรือบังคับ เป็นต้น ซึ่ง Remote จำพวกนี้ที่ภาครับจะแปลงความถี่วิทยุออกมาในรูปแบบสัญญาณ PWM (Pulse Width Modulation)
05           มุมหรือองศาจะขึ้นอยู่กับความกว้างของสัญญาณพัลซ์ ซึ่งโดยส่วนมากความกว้างของพัลซ์ที่ใช้ใน RC Servo Motor จะอยู่ในช่วง 1-2 ms หรือ 0.5-2.5 ms 
           ยกตัวอย่างเช่นหากกำหนดความกว้างของสัญญาณพัลซ์ไว้ที่ 1 ms ตัว Servo Motor จะหมุนไปทางด้ายซ้ายจนสุด ในทางกลับกันหากกำหนดความกว้างของสัญญาณพัลซ์ไว้ที่ 2 ms ตัว Servo Motor จะหมุนไปยังตำแหน่งขวาสุด แต่หากกำหนดความกว้างของสัญญาณพัลซ์ไว้ที่ 1.5 ms ตัว Servo Motor ก็จะหมุนมาอยู่ที่ตำแหน่งตรงกลางพอดี
06
           ดังนั้นสามารถกำหนดองศาการหมุนของ RC Servo Motor ได้โดยการเทียบค่า เช่น RC Servo Motor สามารถหมุนได้ 180 องศา โดยที่ 0 องศาใช้ความกว้างพัลซ์เท่ากับ 1000 us ที่ 180 องศาความกว้างพัลซ์เท่ากับ 2000 us เพราะฉะนั้นค่าที่เปลี่ยนไป 1 องศาจะใช้ความกว้างพัลซ์ต่างกัน (2000-1000)/180 เท่ากับ 5.55 us
           จากการหาค่าความกว้างพัลซ์ที่มุม 1 องศาข้างต้น หากต้องกำหนดให้ RC Servo Motor หมุนไปที่มุม 45 องศาจะหาค่าพัลซ์ที่ต้องการได้จาก 5.55 x 45 เท่ากับ 249.75 us แต่ที่มุม 0 องศาเราเริ่มที่ความกว้างพัลซ์ 1ms หรือ 1000 us เพราะฉะนั้นความกว้างพัลซ์ที่ใช้กำหนดให้ RC Servo Motor หมุนไปที่ 45 องศา คือ 1000 + 249.75 เท่ากับประมาณ 1250 us
07
วิธีควบคุม RC Servo Motor ด้วย Arduino
            Arduino มีไลบรารี่สำหรับสั่งงาน RC Servo Motor มาให้ใช้งานอยู่แล้วเป็นฟังก์ชั่นสำเร็จรูปและใช้งานได้ง่ายในหน้าเว็บไซต์ http://arduino.cc/en/reference/servo ได้ให้ข้อมูลไว้ว่า Servo Library ของ Arduino สามารถสั่งงาน RC Servo Motor ได้ทั้งแบบหมุนไป-กลับได้ 0-180 องศา (ที่กล่าวถึงตามตัวอย่างข้างต้น) และแบบต่อเนื่องที่หมุนครบรอบได้เรียกว่าเป็น Continuous Rotation Servo (ซึ่งในช่วงท้ายบทความจะกล่าวถึงเพิ่มเติม) โดยสามารถรองรับการเชื่อมต่อ RC Servo Motor ได้ถึง 12 ตัวกับบอร์ด Arduino UNO และรองรับสูงสุดถึง 48 ตัวหากใช้บอร์ด Arduino Mega 
ฟังก์ชั่นภายใน Servo Library
- attach()
- write()
- writeMicroseconds()
- read()
- attached()
- detach()
attach()
Description
          คือฟังก์ชั่นที่ใช้ในการกำหนดขาสัญญาณที่ Servo Motor ต่อกับ Arduino และกำหนดความกว้างของพัลซ์ที่ 0 องศาและ 180 องศา 
Syntax
          Servo.attach(pin)
          Servo.attach(pin,min,max)
Parameters
          Pin: คือ ขาสัญญาณของ Arduino ที่ใช้เชื่อมต่อกับ Servo Motor
          Min: คือ ความกว้างของพัลซ์ที่ 0 องศาของ Servo ตัวที่ใช้ในหน่วยไมโครวินาที (us) โดยปกติแล้วหากไม่มีการตั้งค่าโปรแกรมจะกำหนดค่าไว้ที่ 544 us
          Max: คือ ความกว้างของพัลซ์ที่ 180 องศาของ Servo ตัวที่ใช้ในหน่วยไมโครวินาที (us) โดยปกติแล้วหากไม่มีการตั้งค่าโปรแกรมจะกำหนดค่าไว้ที่ 2400 us
Write()
Description
          คือฟังก์ชั่นที่ใช้ควบคุมตำแหน่งที่ต้องการให้ Servo Motor หมุนไปยังองศาที่กำหนดสามารถกำหนดเป็นค่าองศาได้เลย คือ 0-180 องศา แต่ใน Servo Motor ที่เป็น Full Rotation คำสั่ง write จะเป็นการกำหนดความเร็วในการหมุน โดย 
          ค่าเท่ากับ 90 คือคำสั่งให้ Servo Motor หยุดหมุน
          ค่าเท่ากับ 0 คือการหมุนด้วยความเร็วสูงสุดในทิศทางหนึ่ง
          ค่าเท่ากับ 180 คือการหมุนด้วยความเร็วสูงสุดในทิศทางตรงกันข้าม
Syntax
          servo.write(angle)
Parameters
          Angle: คือมุมที่ต้องการให้ RC Servo Motor แบบ 0-180 องศาหมุนไป แต่หากเป็น RC Servo Motor แบบ Full Rotation ค่า Angle คือ การกำหนดความเร็วและทิศทางในการหมุน
writeMicroseconds()
Description
          คือฟังก์ชั่นที่ใช้ควบคุมตำแหน่งที่ให้ Servo Motor หมุนไปยังตำแหน่งองศาที่กำหนดโดยกำหนดเป็นค่าความกว้างของพัลซ์ในหน่วย us ซึ่งปกติแล้ว RC Servo Motor จะใช้ความกว้างของพัลซ์อยู่ที่ 1000-2000 us ตามที่ได้กล่าวไปข้างต้นแล้ว แต่ RC Servo Motor บางรุ่นหรือบางยี่ห้อไม่ได้ใช้ ช่วงความกว้างของพัลซ์ตามที่ได้กล่าวเอาไว้นี้ อาจจะใช้ช่วง 700-2300 แทนก็สามารถใช้ฟังก์ชั่น writeMicroseconds นี้เพื่อกำหนดความกว้างพัลซ์ได้เอง
          การใช้ฟังก์ชั่น writeMicroseconds สามารถกำหนดค่าได้อิสระ ตรงนี้ ”ต้องระวังในการใช้งาน” หากสั่งงาน RC Servo Motor (แบบ 0 - 180 องศา) จนหมุนไปเกินจุดสิ้นสุดคือเกินทั้งฝั่ง 0 หรือ 180 องศา จะทำให้เกิดเสียงครางดังจากการหมุนไปต่อไม่ได้และมอเตอร์จะกินกระแสสูงขึ้นด้วยในเวลาเดียวกันนั้น ซึ่งอาจทำให้ RC Servo Motor เกิดความเสียหายได้
อุปกรณ์ที่ใช้
1. บอร์ด Arduino      1 บอร์ด
2. สาย  USB            1 สาย
3. สายไฟผู้-ผู้           3 สาย
4. Motor SG90         1 ตัว
รูปวงจร


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

คำอธิบายหลักการทำงาน
เมื่ออัพโหลดโปรแกรมให้ Servo Motor (SG90) ด้วย Arduino UNO R3 หมุนจากซ้ายไปขวาและขวามาซ้าย
- Servo หมุน จาก 0 องศา - 180 องศา - Servo หมุน จาก 45 องศา - 135 องศา - Servo หมุน จาก 90 องศา - 180 องศา

วิดีโอ 0 องศา - 180 องศา

วิดีโอ 45 องศา - 135 องศา


วิดีโอ 90 องศา - 180 องศา






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

ใบงานที่ 5 เรื่องHC-SR04 with Buzzer

ผู้จัดทำ
1.นางสาวณัฐธิชา ชนเก่าน้อย 011
2. นางสาวกุลจิรา      ทองคง 003


อุปกรณ์
1.บอร์ด Arduinno
2.LED 1 ดวง
3.สายไฟผู้-ผู้ 8 สาย
4.USB
5.HC-SR04
6.Buzzer
7.ตัวต้านทาน 1 ตัว

CODE
const int trigPin = 9; const int echoPin = 10; int buzzer = 5; int LED1 = 2; float duration, distance; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(LED1, 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(500); if (distance < 30 && distance >= 21) { digitalWrite(buzzer,HIGH); digitalWrite(LED1,HIGH); delay(1000); digitalWrite(buzzer,LOW); digitalWrite(LED1,LOW); delay(1000); } else if(distance <=21 && distance >= 11) { digitalWrite(buzzer,HIGH); digitalWrite(LED1,HIGH); delay(500); digitalWrite(buzzer,LOW); digitalWrite(LED1,LOW); delay(500); } else if(distance <=11 && distance >= 6) { digitalWrite(buzzer,HIGH); digitalWrite(LED1,HIGH); delay(200); digitalWrite(buzzer,LOW); digitalWrite(LED1,LOW); delay(200); } else if(distance <=5) { digitalWrite(buzzer,HIGH); digitalWrite(LED1,HIGH); } }

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




วีดีโอ

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

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


ผู้จัดทำ
1.นางสาวณัฐธิชา ชนเก่าน้อย 011
2. นางสาวกุลจิรา      ทองคง 003

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

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

การต่อใช้งานโมดูล

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


          ตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 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)

ทดสอบการทำงานของเซนเซอร์เบื้องต้น

การทดลองนี้เป็นการทดสอบการทำงานในเบื้องต้นของเซนเซอร์ โดยอ่านข้อมูลจากเซนเซอร์แล้วส่งไปแสดงผลบนพีซี  ให้ต่อเซนเซอร์โมดูลเข้ากับบอร์ดทดลอง aMG Lab Kit-F4 ตามรูปที่ 4 จากนั้นให้โปรแกรมตามรูปที่ 5 อาศัยข้อมูลคุณลักษณะของเซนเซอร์จากรูปที่ 3 โปรแกรมนี้ได้สร้างสัญญาณ Trig ความกว้าง 1 mS ความถี่ 27 Hz ออกทางขา PB7 ของไมโครคอนโทรลเลอร์ บล็อก PWM Capture ใช้สำหรับตรวจวัดความกว้างสัญญาณ Echo ที่เข้ามาทางขา PB6 และส่งข้อมูลซึ่งประกอบไปด้วย ความกว้างของสัญญาณ Echo, เปอร์เซ็นต์ดิวตี้ไซเคิลของสัญญาณ Echo, และความถี่ของสัญญาณ Trig ไปแสดงที่พีซีด้วยบล็อก USART  

pic5_ultrasonic_targetpic05_HC-SR04&Waijungpic05_HC-SR04&Waijungpic05_HC-SR04&Waijung

ให้โปรแกรมรับค่าที่ส่งมาจากไมโครฯ ตามรูปที่ 6 สัญญาณความกว้างพัลส์จะถูกแปลงให้อยู่ในหน่วยmsec และหารด้วย 58 เพื่อแสดงค่าระยะทางที่ตรวจจับวัตถุได้ในหน่วยเซนติเมตร

 สรุป

บทความนี้เป็นการนำเสนอตัวอย่างการใช้บล็อก PWM Capture เพื่อวัดความกว้างของสัญญาณพัลส์ โดยใช้ตัวอย่างเซนเซอร์วัดระยะทางแบบไม่สัมผัสด้วยคลื่นอัลตราโซนิก เป็นกรณีศึกษาเพื่อให้ผู้ที่สนใจ หรือผู้ที่ทำโครงงานเกี่ยวกับไมโครคอนโทรลเลอร์จะได้นำเอาไปเป็นตัวอย่างเพื่อประยุกต์ใช้งานได้ ข้อแนะนำในการใช้งานเพื่อการวัดที่แม่นยำของเซนเซอร์นี้คือ มุมในการวัดควรอยู่ในช่วงไม่เกิน 15 องศา และพื้นผิวที่วัดควรจะเรียบมีพื้นที่ไม่น้อยกว่า 0.5 ตารางเมตร
อุปกรณ์
1. บอร์ด Arduino บอร์ด
2. สายไฟ ผู้-ผู้ 11 เส้น
3. LED 6 ดวง
4. สายUSB
5. ตัวต้านทาน 6 ตัว
6. HC-SR04 1 ตัว

code
#define trigPin 7
#define echoPin 6
#define led 13
#define led2 12
#define led3 11
#define led4 10
#define led5 9
#define led6 8
void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}
void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance <= 30) {
    digitalWrite(led, HIGH);
    }
  else {
    digitalWrite(led,LOW);
  }
  if (distance < 25) {
      digitalWrite(led2, HIGH);
      }
  else {
      digitalWrite(led2, LOW);
  }
  if (distance < 20) {
      digitalWrite(led3, HIGH);
      
  else {
    digitalWrite(led3, LOW);
  }
  if (distance < 15) {
    digitalWrite(led4, HIGH);
}
  else {
    digitalWrite(led4,LOW);
  }
  if (distance < 10) {
    digitalWrite(led5, HIGH);
}
  else {
    digitalWrite(led5,LOW);
  }
  if (distance < 5)
  {
    digitalWrite(led, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
     delay(200);
    digitalWrite(led, LOW);
    digitalWrite(led2,  LOW);
    digitalWrite(led3,  LOW);
    digitalWrite(led4,  LOW);
    digitalWrite(led5,  LOW);
    digitalWrite(led6,  LOW);
    delay(200);   
  }

คำอธิบาย

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

รูปวงจร



วิดีโอ





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

ผู้จัดทำ 1.นางสาวณัฐธิชา ชนเก่าน้อย 011 2. นางสาวกุลจิรา       ทองคง 003 อุปกรณ์ที่ใช้  1. บอร์ด Arduino 1 บอร์ด 2. Servo motor...