🧩 1. ความหมายของ Sensors และ Actuators

หมวดคำอธิบายตัวอย่างจริง
Sensor (เซนเซอร์)อุปกรณ์ที่ตรวจจับสิ่งต่าง ๆ ในสิ่งแวดล้อม และแปลงเป็นสัญญาณไฟฟ้าLDR (แสง), DHT11 (อุณหภูมิ/ความชื้น), Ultrasonic (ระยะทาง), MQ2 (แก๊ส)
Actuator (อุปกรณ์ขับเคลื่อน)อุปกรณ์ที่ตอบสนองต่อสัญญาณจากไมโครคอนโทรลเลอร์LED, Relay, Servo, Motor, Buzzer

🔸 Sensor = รับข้อมูลจากโลกจริง
🔸 Actuator = ตอบสนองกลับไปสู่โลกจริง


⚙️ 2. การจำแนกเซนเซอร์ตามลักษณะสัญญาณ

ประเภทลักษณะสัญญาณตัวอย่างวิธีอ่านค่า
Digital Sensorส่งข้อมูลแบบ 0 หรือ 1IR Sensor, Magnetic SwitchdigitalRead()
Analog Sensorส่งค่าต่อเนื่อง 0–3.3VLDR, Potentiometer, LM35analogRead()
Communication Sensorใช้โปรโตคอล (I²C, SPI, UART)DHT12, BME280, MPU6050ไลบรารี / Protocol Bus

🔹 3. การเชื่อมต่อเซนเซอร์แบบ Digital Input

📘 ตัวอย่าง: IR Obstacle Sensor (ตัวตรวจจับสิ่งกีดขวาง)

C++
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)

C++
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

📘 ตัวอย่าง:

C++
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

C++
#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)

C++
#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

📘 ตัวอย่าง:

C++
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)

C++
#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 / BuzzerDigital OutputdigitalWrite()
Relay ModuleDigital OutputdigitalWrite()
Servo MotorPWM (เฉพาะมุม)ไลบรารี Servo.h
DC MotorPWM / DirectionledcWrite()
Stepper MotorStep/Dirไลบรารี AccelStepper

🔹 11. ตัวอย่าง: ควบคุม Servo Motor (มุม 0–180°)

📘 ใช้ไลบรารี Servo.h

C++
#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()

C++
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

C++
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)

C++
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) แสดงผลแบบเรียลไทม์

📘 ตัวอย่าง:

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