You are on page 1of 34

การพัฒนาหุ่นยนต์เพื5อ

การศึกษา

การใช้งานเซนเซอร์ (Sensor)

ดร.วิวฒั น์ ทวีทรัพย์
การใช้งานเซนเซอร์ (Sensor)

• Outline
• ความรู้เบือ้ งต้นเกี่ยวกับเซนเซอร์
• โมดูลเซนเซอร์ตัวต้านทานเปลี่ยนค่าตามสภาพแวดล้อม
– แสง >> LDR
– อุณหภูม+ิ ความชื้น อากาศ >> DHT
– ความชื้น ดิน >> Soil moisture
– ระยะห่าง >> Ultrasonic
– ความเคลื่อนไหว >> PIR
ความรู้เบื้องต้นเกี่ยวกับเซนเซอร์
• เซนเซอร์ ทำหน้าที่เปรียบเสมือนประสาทรับสัมผัสแบ่งตามกลุ่ม
ของเอาต์พุต 4 แบบดังนี้
1. เซนเซอร์ประเภทแอนาล็อก จะให้เอาต์พุตออกมาเป็นแรงดัน
(Voltage) จะเปลี่ยนแปลงตามสภาพแวดล้อมที่ตรวจจับ เช่น LDR
, PIR, MQ2, Ultrasonic เป็นต้น
ความรู้เบื้องต้นเกี่ยวกับเซนเซอร์
2. เซนเซอร์เอาต์พุตแบบดิจิทัลไบนารีแ่ บบใช้หน้าสัมผัสเป็นกลไก
ในการตรวจจับ ในลักษณะวงจร Close คือ เมื่อหน้าสัมผัส
แตะกัน และ Open คือ หน้าสัมผัสไม่แตะกัน ดังนั้น การต่อวงจรเข้ากับ
ขาอินพุตดิจิทัล จะต้องต่อแบบใช้ Pull up Resistor หรือใช้คำสั่ง
INPUT_PULLUP (รายละเอียดในบทที่ 2) เช่น สวิตช์กด สวิตช์แม่เหล็ก
ลูกลอยวัดระดับของเหลว หรือเซนเซอร์อื่น ๆ ที่ใช้หน้าสัมผัสเป็นกลไก
ความรู้เบื้องต้นเกี่ยวกับเซนเซอร์
3. เซนเซอร์เอาต์พุตแบบดิจิตอลไบนารีด่ ้วยโมดูลอิเล็กทรอนิกส์
จำให้ค่า 0 หรือ 1 เท่านั้น เช่น เซนเซอร์อินฟราเรดตรวจการเข้าใกล้
วัตถุ เซนเซอร์วัดความชื้นในดิน เซนเซอร์วัดการสั่น เป็นต้น
เซนเซอร์ประเภทนี้ ไม่จำเป็นต้องใช้ Pull up resistor เนื่องจากมี
ส่วนควบคุมที่เป็นอิเล็กทรอนิกส์แล้ว
ความรู้เบื้องต้นเกี่ยวกับเซนเซอร์
3. เซนเซอร์ดิจิทัลที่มีค่าเอาต์พุตมากกว่าไบนารี่
เซนเซอร์ประเภทนี้จะให้ค่าเอาต์พุตที่เป็นชุดค่าดิจิตอล สามารถนำ
ชุดข้อมูลที่ได้มา ไปประมวลผลได้ เช่น เซนเซอร์วัดอุณหภูมิ DHT
โมดูลเซนเซอร์ตัวต้านทานเปลี่ยนค่าตาม
สภาพแวดล้อม
• การทำงานของเซนเซอร์ประเภทนี้ส่วนมากจะถูกผลิตมาพร้อมกับ
วงจรแบ่งแรงดันและเปรียบเทียบแรงดันไฟฟ้ามาด้วย เพื่อสะดวกใน
การใช้งาน

วงจรแบ่ง
แรงดัน เซนเซอร์
โมดูลเซนเซอร์ตัวต้านทานเปลี่ยนค่าตาม
สภาพแวดล้อม
• ตัวโมดูล (วงจรแบ่งแรงดัน) มี 2 แบบคือ
– โมดูลแบบเอาต์พุตดิจิทัล ประกอบด้วยวงจรแบ่งแรงดัน มีขาต่อ
3 ขา คือ ไฟเลี้ยง (VCC) กราวด์ (GND) และ เอาต์พุต D0
(Digital Out) ให้ค่าเอาต์พุตเป็นดิจิทัล เป็นค่า HI และ LOW
หรือ 1 และ 0 มีตัวต้านทานปรับค่าได้เพื่อปรับค่าความไว
(Sensitivity)
ค่าแรงดันระหว่างขาที่เปลี่ยนไป
เนื่องมาจากความชื้นในดิน
กล่าวคือ สถานะการนำไฟฟ้าเปลี่ยนไป
เมื่อมีความชื้น
VCC
GND
D0
โมดูลเซนเซอร์ตัวต้านทานเปลี่ยนค่าตาม
สภาพแวดล้อม
– โมดูลแบบเอาต์พุตดิจิทัล + แอนาล็อก จะคล้ายกับแบบแรกมีขา
เสียบที่เซนเซอร์ 2 ขาเช่นกัน แต่อีกฝั่งจะมีขาต่อ 4 ขา คือ VCC,
GND, D0 เหมือนกัน แต่เพิ่ม เอาต์พุตแอนาล็อก A0 (Analog
output) กล่าวคือสามารถให้สัญญาณเอาต์พุตได้ทั้ง ดิจิทัล และ
แอนาล็อก นั่นเอง
2 ขานี้รับค่าความ
ต้านทานที่เปลี่ยนไปในดิน
เนื่องมาจากความชื้น

VCC
GND
A0
D0
DHT11 : วัดค่าความชื้นและอุณหภูมิใน
อากาศ
เซนเซอร์ในตระกูลในขณะนี้มี 2 รุ่น ได้แก่ DHT11 และDHT22 ทั้ง
สองรุ่นเป็นเซนเซอร์แบบดิจิทัล ที่วัดได้ทั้ง อุณหภูมิ และความชึ้นใน
อากาศ แตกต่างกันที่ความแม่ยำ คือ
• DHT11 มีความแม่นยำของการวัดอุณหภูมิ + - 2 ℃
• DHT22 มีความแม่นยำของการวัดอุณหภูมิ + - 0.5 ℃
• ต้องการแหล่งจ่ายไฟ 3 – 5 Volt เหมือนกัน
DHT11 : วัดค่าความชื้นและอุณหภูมิใน
อากาศ
การติดตั้ง Library ของ DHT11
1. เมนู Sketch >> Include Library >> Manage Libraries
2. ค้นหาคำว่า dht และติดตั้งดังภาพ
DHT11 : วัดค่าความชื้นและอุณหภูมิใน
อากาศ
การติดตั้ง Library ของ Adafruit Sensor
1. ดาวน์โหลดจาก https://github.com/adafruit/Adafruit_Sensor
2. หลังจากเข้าเว็บไซต์แล้วเลือกดาวน์โหลดดังภาพ
DHT11 : วัดค่าความชื้นและอุณหภูมิใน
อากาศ
การติดตั้ง Library ของ Adafruit Sensor
3. หลังจากดาวน์โหลดไฟล์แล้วติดตั้งใน Arduino IDE โดยไปที่ เมนู
Sketch >> Include Library >> Add .ZIP Library เลือกไฟล์
และติดตั้งดังภาพ
Workshop 10 DHT11 : วัดค่าความชื้น
และอุณหภูมิในอากาศ

VCC >> 3v3


GND >> GND
Data Pin >> D1
Workshop 10 DHT11
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN D1 // กําหนด pin D1 ให้เชื5อมต่อกับเซนเซอร์
#define DHTTYPE DHT11 // กําหนดชนิดเซนเซอร์ DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(115200); //กําหนดการเชื5อมต่อแบบซีเรี ยล
Serial.println("DHTxx test!");

dht.begin();
}
Workshop 10 DHT11
void loop() {

delay(2000); // หน่วงเวลา 2 วินาทีให้เซนเซอร์ทาํ งาน


float h = dht.readHumidity(); //อ่านค่าความชืFน
float t = dht.readTemperature(); //อ่านอุณหภูมิเซลเซียส
float f = dht.readTemperature(true); //อ่านอุณหภูมฟาเรนไฮน์
// เช็คถ้าอ่านค่าไม่สาํ เร็ จให้เริ5 มอ่านใหม่
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t\n");
}
วัดความชื้นในดิน : Soil Moisture Sensor
หลักการทำงานของเซนเซอร์ชนิดนี้ คือ การวัดค่าความต้านทานของ
ตัวนำ 2 แท่ง
ดินมีความชื้น “สูง”(เปียก) >>> ความต้านทานระหว่างตัวนำ “ต่ำ”
ดินมีความชื้น “ต่ำ”(แห้ง) >>> ความต้านทานระหว่างตัวนำ “สูง”
วัดความชื้นในดิน : Soil Moisture Sensor
การต่อพินสำหรับเซนเซอร์วัดความชื้นในดินสามารถใช้งานได้ทั้ง
สัญญาณแอนาล็อก (Analog Signal) ผ่านพิน A0 และ สัญญาณ
ดิจิทัล (Digital Signal) ผ่านพิน D0 ดังภาพ
Workshop 11 วัดความชื้นในดิน

A0
GND

Vcc
Workshop 11 วัดความชื้นในดิน
const int lightPin = D1;//พินD0เป็ นเอาต์พตุ
const int inputPin = A0;//พินA0เป็ นอินพุต
int inputValue;

void setup() {
Serial.begin(115200);//เริ5 มซีเรี ยล
pinMode (lightPin, OUTPUT);//กําหนดเอาต์พตุ
}

void loop() {
inputValue = analogRead(inputPin);//อ่านค่าจากเซนเซอร์
Serial.println(inputValue);//แสดงผลค่าที5อ่าน
//เปรี ยบเทียบค่าเพื5อสัง5 พินเอาต์พตุ
if(inputValue > 800 ){
digitalWrite(lightPin, LOW);
}
else{digitalWrite(lightPin, HIGH);}
delay(200);
}
การวัดระยะด้วยเซ็นเซอร์ Ultrasonic
เซ็นเซอร์ Ultrasonic มีหลักการทำงาน คือ ส่งคลื่นความถี่สูง
(Ultrasonic) ที่หูมนุษย์ไม่สามารถได้ยิน กระทบกับวัตถุแล้วสะท้อน
กลับมายังเซ็นเซอร์เพื่อคำนวณระยะห่างจากเวลาในการเดินทางของ
คลื่นเสียงไป - กลับ
การวัดระยะด้วยเซ็นเซอร์ Ultrasonic
เซ็นเซอร์ Ultrasonic ที่จะใช้ในการทดลองคือรุ่น HC-SR04 วัด
ระยะได้ระหว่าง 4 – 400 cm
ประกอบด้วยขา 4 ขา คือ
• Vcc คือ ขาขั้วไฟเลี้ยง 3-5 volt
• Gnd คือ ขาขั้วลบ
• Trig คือ ขาส่งสัญญาณ
• Echo คือ ขารับสัญญาณสะท้อนกลับ
การวัดระยะด้วยเซ็นเซอร์ Ultrasonic
การติดตั้งไลบรารีส่ ำหรับ HC-SR04
1. เมนู Sketch >> Include Library >> Manage Libraries…
2. ค้นหา hcsr04 แล้วติดตั้งดังภาพ (เลือกของ Martin Sosic)
Workshop 12 การวัดระยะด้วยเซ็นเซอร์
Ultrasonic
Workshop 12 การวัดระยะด้วยเซ็นเซอร์
Ultrasonic
#include <HCSR04.h> //เรี ยกไลบรารี5

int triggerPin = D5; //กําหนด D5 เป็ น Trigger


int echoPin = D6; //กําหนด D6 เป็ น Echo
UltraSonicDistanceSensor
distanceSensor(triggerPin, echoPin);

void setup () {
Serial.begin(115200);//เป็ ดการเชื5อมต่อ serial
}

void loop () {
double distance =
distanceSensor.measureDistanceCm(); //อ่านค่า
Serial.println(distance); //แสดงผล serial
delay(500); //หน่วงเวลา 0.5 วินาที
}
Workshop 12 การวัดระยะด้วยเซ็นเซอร์
Ultrasonic
การแสดงผลออกทางหน้าจอ LCD 16x2 โดยติดตั้งไลบรารี่ (หากยัง
ไม่ได้ติดตั้ง)ต่อวงจรเพิ่มดังภาพ

Gnd = Gnd
Vcc = Vcc
SCL = D1
SDA = D2
Workshop 12 การวัดระยะด้วยเซ็นเซอร์
Ultrasonic
เพิ่มโค้ดแต่ละส่วนดังนี้

ส่วนบนสุด
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

ส่วน loop( ) หลังจากอ่านค่าจากเซนเซอร์แล้ว


Wire.begin(D2, D1); // กําหนดขา SDA = D2 และ SCL = D1
lcd.init();
lcd.backlight(); // เปิ ดไฟ backlight
lcd.setCursor(0, 0); // ไปที5ตวั อักษรที5 0 บรรทัดที5 0
lcd.print("Distance =");
lcd.print(distance);//แสดงผลจากตัวแปร distance
เซนเซอร์ตรวจจับความเคลื่อนไหว (PIR)
ระบบเซนเซอร์ประกอบด้วย
1. หัวเซนเซอร์ Pyroelectric หรือเรียกว่า Passive Infra-red
(PIR)
2. เลนส์ (Fresnel Len) ทำด้วยพลาสติกสีขาวครึ่งวงกลมทำ
หน้าที่โฟกัสสัญญาณไปยังหัวเซนเซอร์
3. วงจรขยายสัญญาณ
เซนเซอร์ตรวจจับความเคลื่อนไหว (PIR)
การปรับตั้งค่าการทำงาน
1. Sensitivity : เป็นการปรับตั้งค่ารัศมีการตรวจจับ
– หมุนตามเข็มนาฬิกา (หมุนขวา) รัศมีตรวจจับไกลสุด 7 เมตร
– หมุนทวนเข็มนาฬิกา (หมุนซ้าย) รัศมีตรวจจับใกล้สุด 3 เมตร
เซนเซอร์ตรวจจับความเคลื่อนไหว (PIR)
2. Time Delay : การตั้งหน่วงเวลาเอาต์พุต คือ เมื่อมีการตรวจจับ
ความเคลื่อนไหว ที่ขา output จะมีสถานะ. High เราสามารถดึง
เวลาให้สถานะ High นี้ ไว้นานเท่าใด ซึ่งสามารถหน่วงได้นานสุด
5 วินาทีโดยการหมุนตามเขมนาฬิกา
เซนเซอร์ตรวจจับความเคลื่อนไหว (PIR)
3. Jumper Set : เป็นการเลือกโหมดการทำงาน มี 2 โหมดดังนี้
– Repeat Trigger เมื่อตรวจจับความเคลื่อนไหวจะยังคงสถานะ
เอาต์พุตเป็น High ไว้ตลอด
– Sigle Trigger เมื่อตรวจจับความเคลื่อนไหวจะมีสถานะเป็น
High แล้วเปลี่ยนเป็น Low ตามการหน่วงเวลา Time Delay
ถึงแม้จะยังมีการเคลื่อนไหวอยู่ก็ตาม
Workshop 13 PIR Sensor

D7
D5
Workshop 13 PIR Sensor
const int ledPin = D5; void loop() {
const int pirPin = D7; //อ่านค่าจากเซนเซอร์
int pirState; pirState = digitalRead(pirPin);
void setup() { //แสดงผลทางSerial
pinMode(ledPin,OUTPUT); Serial.print("PIR State :");
pinMode(builinLed,OUTPUT); Serial.println(pirPin);
pinMode(pirPin,INPUT); //เช็คเงื5อนไข
Serial.begin(9600); if(pirState == HIGH){
} digitalWrite(ledPin,HIGH);
delay(200);
digitalWrite(ledPin,LOW);
Serial.println("Motion
Detected!!");
}
else{
digitalWrite(ledPin,LOW);
}
}
ติดตามดาวน์โหลดอัพเดทสไลด์ได้ที่

https://sites.google.com/view/wiwat-olr

You might also like