🧩 1. ความหมายของ Sensors และ Actuators
| หมวด | คำอธิบาย | ตัวอย่างจริง |
|---|---|---|
| Sensor (เซนเซอร์) | อุปกรณ์ที่ตรวจจับสิ่งต่าง ๆ ในสิ่งแวดล้อม และแปลงเป็นสัญญาณไฟฟ้า | LDR (แสง), DHT11 (อุณหภูมิ/ความชื้น), Ultrasonic (ระยะทาง), MQ2 (แก๊ส) |
| Actuator (อุปกรณ์ขับเคลื่อน) | อุปกรณ์ที่ตอบสนองต่อสัญญาณจากไมโครคอนโทรลเลอร์ | LED, Relay, Servo, Motor, Buzzer |
🔸 Sensor = รับข้อมูลจากโลกจริง
🔸 Actuator = ตอบสนองกลับไปสู่โลกจริง
⚙️ 2. การจำแนกเซนเซอร์ตามลักษณะสัญญาณ
| ประเภท | ลักษณะสัญญาณ | ตัวอย่าง | วิธีอ่านค่า |
|---|---|---|---|
| Digital Sensor | ส่งข้อมูลแบบ 0 หรือ 1 | IR Sensor, Magnetic Switch | digitalRead() |
| Analog Sensor | ส่งค่าต่อเนื่อง 0–3.3V | LDR, Potentiometer, LM35 | analogRead() |
| Communication Sensor | ใช้โปรโตคอล (I²C, SPI, UART) | DHT12, BME280, MPU6050 | ไลบรารี / Protocol Bus |
🔹 3. การเชื่อมต่อเซนเซอร์แบบ Digital Input
📘 ตัวอย่าง: IR Obstacle Sensor (ตัวตรวจจับสิ่งกีดขวาง)
const int sensorPin = 4;
const int led = 2;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
int state = digitalRead(sensorPin);
if (state == LOW) digitalWrite(led, HIGH); // ตรวจเจอสิ่งกีดขวาง
else digitalWrite(led, LOW);
}
สัญญาณ LOW = ตรวจพบวัตถุ (เนื่องจากเซนเซอร์ active-low)
🔹 4. การอ่านค่า Analog Sensor
📘 ตัวอย่าง: LDR (Light Sensor)
const int ldr = 34; // ADC pin
void setup() {
Serial.begin(115200);
}
void loop() {
int value = analogRead(ldr);
float volt = value * 3.3 / 4095.0;
Serial.printf("LDR = %d (%.2f V)\n", value, volt);
delay(500);
}
ค่าจะเปลี่ยนไปตามความสว่างของแสง
🔹 5. เซนเซอร์อุณหภูมิ LM35
📘 ตัวอย่าง:
const int tempPin = 34;
void setup() {
Serial.begin(115200);
}
void loop() {
int adc = analogRead(tempPin);
float volt = adc * 3.3 / 4095.0;
float tempC = volt * 100; // 10 mV/°C
Serial.printf("Temp = %.2f°C\n", tempC);
delay(1000);
}
🔹 6. เซนเซอร์อุณหภูมิ/ความชื้น DHT11 / DHT22 (Digital)
📘 ใช้ไลบรารี DHT.h
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.printf("Temp: %.1f°C Humidity: %.1f%%\n", t, h);
delay(2000);
}
🔹 7. เซนเซอร์วัดระยะทาง Ultrasonic HC-SR04
📘 ใช้คลื่นเสียงสะท้อน (Echo)
#define TRIG 5
#define ECHO 18
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
float distance = duration * 0.034 / 2;
Serial.printf("Distance: %.2f cm\n", distance);
delay(500);
}
pulseIn()วัดเวลาที่คลื่นเสียงเดินทางไป–กลับ แล้วคำนวณเป็นระยะทาง (cm)
🔹 8. เซนเซอร์แก๊ส MQ Series
MQ2, MQ135, MQ7 ส่งค่า Analog ออกมา
อ่านด้วย analogRead() และใช้สมการจาก datasheet แปลงเป็น ppm
📘 ตัวอย่าง:
int gasPin = 35;
void setup() {
Serial.begin(115200);
}
void loop() {
int val = analogRead(gasPin);
Serial.printf("Gas Sensor = %d\n", val);
delay(1000);
}
🔹 9. เซนเซอร์วัดความเอียง / การเคลื่อนไหว (MPU6050)
📘 ใช้ I²C เชื่อมต่อ (SDA/SCL)
#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
void setup() {
Serial.begin(115200);
Wire.begin();
mpu.initialize();
Serial.println("MPU6050 Ready");
}
void loop() {
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
Serial.printf("X:%d Y:%d Z:%d\n", ax, ay, az);
delay(500);
}
⚙️ 10. การเชื่อมต่อ Actuator (อุปกรณ์ขับเคลื่อน)
| อุปกรณ์ | ประเภท | วิธีควบคุม |
|---|---|---|
| LED / Buzzer | Digital Output | digitalWrite() |
| Relay Module | Digital Output | digitalWrite() |
| Servo Motor | PWM (เฉพาะมุม) | ไลบรารี Servo.h |
| DC Motor | PWM / Direction | ledcWrite() |
| Stepper Motor | Step/Dir | ไลบรารี AccelStepper |
🔹 11. ตัวอย่าง: ควบคุม Servo Motor (มุม 0–180°)
📘 ใช้ไลบรารี Servo.h
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(13);
}
void loop() {
for (int pos = 0; pos <= 180; pos++) {
myservo.write(pos);
delay(15);
}
for (int pos = 180; pos >= 0; pos--) {
myservo.write(pos);
delay(15);
}
}
หมุน Servo ไปกลับระหว่าง 0°–180°
🔹 12. ตัวอย่าง: ควบคุมมอเตอร์ DC ด้วย PWM (ESP32)
📘 ใช้ ledcWrite()
const int motorPin = 14;
void setup() {
ledcSetup(0, 20000, 8); // 20kHz, 8-bit
ledcAttachPin(motorPin, 0);
}
void loop() {
for (int spd = 0; spd <= 255; spd++) {
ledcWrite(0, spd);
delay(10);
}
for (int spd = 255; spd >= 0; spd--) {
ledcWrite(0, spd);
delay(10);
}
}
มอเตอร์จะหมุนเร็วขึ้น–ช้าลงแบบราบรื่น
🔹 13. ตัวอย่าง: เปิด-ปิด Relay จากค่า Sensor
const int relay = 25;
const int sensor = 34;
void setup() {
pinMode(relay, OUTPUT);
Serial.begin(115200);
}
void loop() {
int val = analogRead(sensor);
if (val > 2000) digitalWrite(relay, HIGH); // เปิดรีเลย์
else digitalWrite(relay, LOW); // ปิดรีเลย์
delay(500);
}
ใช้ในระบบ Smart Home เช่น เปิดพัดลมอัตโนมัติเมื่อร้อน
🔹 14. การรวมระบบ Sensor + Actuator
📘 ตัวอย่าง: ระบบเปิดไฟอัตโนมัติ (LDR + LED)
const int ldr = 34;
const int led = 2;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(115200);
}
void loop() {
int val = analogRead(ldr);
if (val < 1000) digitalWrite(led, HIGH); // มืด → เปิดไฟ
else digitalWrite(led, LOW); // สว่าง → ปิดไฟ
delay(500);
}
🔹 15. การดีบักและแสดงผลด้วย Serial / OLED
ครูสามารถให้ผู้เรียนใช้:
Serial.println()→ แสดงค่าที่อ่านจาก Sensor- หรือจอ OLED (I²C) แสดงผลแบบเรียลไทม์
📘 ตัวอย่าง:
display.clearDisplay();
display.setCursor(0,0);
display.printf("Temp: %.1f°C\nHum: %.1f%%", t, h);
display.display();
📚 16. แบบฝึกหัด
1️⃣ อ่านค่า LDR แล้วเปิดไฟ LED อัตโนมัติเมื่อมืด
2️⃣ อ่านค่าอุณหภูมิจาก DHT11 แล้วแสดงบน OLED
3️⃣ ใช้ Ultrasonic วัดระยะ → ถ้าน้อยกว่า 10 ซม. ให้เปิด Buzzer
4️⃣ ควบคุม Servo ตามค่า Potentiometer (หมุนตามมือจริง)
5️⃣ รวมระบบ Smart Fan: ถ้าอุณหภูมิ > 30°C → เปิดมอเตอร์พัดลม (PWM 70%)
🧾 17. สรุปแนวคิดสำคัญ
| หัวข้อ | อธิบาย |
|---|---|
| Sensor | อุปกรณ์รับรู้สิ่งแวดล้อม |
| Actuator | อุปกรณ์ตอบสนอง/ขับเคลื่อน |
| Digital Input | ใช้ digitalRead() (0/1) |
| Analog Input | ใช้ analogRead() (0–4095) |
| Output | ใช้ digitalWrite() หรือ PWM |
| PWM | ปรับระดับการขับเคลื่อน (แสง, ความเร็ว, เสียง) |
| Integration | การเชื่อมต่อ Sensor → Logic → Actuator |
| Serial/OLED | ใช้ดูค่าจาก Sensor แบบเรียลไทม์ |
| Smart Control | สร้างระบบอัตโนมัติพื้นฐาน |
🔧 แผนภาพแนวคิด “Sensor → Controller → Actuator”
[Sensor]
↓ (Input)
┌────────────┐
│ ESP32 / │
│ Arduino │
│ (Controller) │
└────────────┘
↑ (Output)
[Actuator]
เช่น
LDR → Arduino → LED
DHT22 → ESP32 → พัดลม
Ultrasonic → ESP32 → Servo
