สร้างหุ่นยนต์หาแสงด้วย ESP32: หัวหมุนตามแสงด้วย LDR 2 ตา

หุ่นยนต์ 2 ล้อที่หันหน้าหาแสงด้วย LDR สองตาบนหัว servo แล้ววิ่งเข้าหาแสงพร้อมหลบสิ่งกีดขวาง มีวงจร ESP32 ตารางขา รายการชิ้นส่วน และโปรแกรมที่ลองในตัวจำลองได้

อัปเดต 2026-10-31

หุ่นตัวนี้หันหน้าตามแสงได้เหมือนหุ่นตั้งโต๊ะ แล้ววิ่งเข้าหาแหล่งแสงโดยอ้อมสิ่งกีดขวางที่ขวางทาง เป็นโปรเจกต์ที่ได้ฝึกครบทั้งการอ่านเซนเซอร์ analog, ขับ servo, ขับมอเตอร์ และเขียนลำดับการตัดสินใจ ทุกอย่างในบทความนี้ลองในตัวจำลองได้ก่อนซื้อของจริง

เปิดหุ่นหาแสงในตัวจำลอง →

หุ่นยนต์หาแสงในตัวจำลอง กำลังรันโปรแกรมตัวอย่างในหน้า Code

หุ่นตัวนี้ทำงานอย่างไร

  1. หัวหาทิศของแสง บนหัวมี LDR สองตัวหันเฉียงซ้ายและขวา ±20° servo SG90 หมุนหัวไปทางตาที่สว่างกว่า จนสองตาอ่านค่าใกล้กัน ตอนนั้นหัวชี้ไปที่แสงพอดี
  2. ตัวรถหมุนตามหัว มุมของหัวเทียบกับตัวรถคือทิศของแสง ตัวรถจึงหมุนตามมุมนั้นแล้ววิ่งไปข้างหน้าทีละช่วงสั้นๆ
  3. หลบสิ่งกีดขวาง sonar ด้านหน้าบอกระยะของที่อยู่ตรงหน้า IR ที่หันเฉียง ±35° บอกว่าฝั่งไหนโล่งกว่า IR ข้างตัว ±90° จับของที่กำลังจะเฉี่ยวด้านข้าง และ bumper หน้า-หลังเป็นด่านสุดท้ายเมื่อชนจริง
  4. หยุดเมื่อถึง เมื่อค่าแสงขึ้นถึงราว 78 % หุ่นหยุดและแสดงหน้ายิ้ม
ทำไมเป้าคือ 78 % ไม่ใช่ 100 %
ตาที่หันเฉียง ±20° รับแสงได้น้อยกว่า sensor ที่หันตรงราว 9 % ตอนอยู่ใกล้ไฟจึงอ่านได้ประมาณ 80 % เท่านั้น ในห้องจริงค่าที่อ่านได้ขึ้นกับแสงรอบข้างด้วย ให้วัดค่าตอนหุ่นอยู่หน้าไฟก่อน แล้วตั้งเป้าต่ำกว่านั้นเล็กน้อย

ชิ้นส่วน

ชิ้นส่วนสำหรับ ESP32 DevKit V1
ชิ้นส่วนจำนวนราคาประมาณ
ESP32 DevKit V1 (30 ขา)1฿130–฿250
TB6612FNG motor driver1฿50–฿120
Ultrasonic HC-SR041฿30–฿60
โมดูลวัดแสง LDR (มีขา AO)2฿15–฿40
Micro switch แบบมีก้าน (bumper)2฿5–฿20
Sharp GP2Y0A21 IR 10–80 cm
ซื้อพร้อมสาย JST 3 ขา
4฿150–฿300
Servo SG901฿40–฿80
IPS TFT ST7789 1.3" 240×2401฿120–฿250
ชุดแชสซี 2WD
มีมอเตอร์ TT 2 ตัว ล้อ 2 ล้อ และล้อ caster
1฿150–฿300
ถ่าน Li-ion 186502฿60–฿150
รางถ่าน 18650 แบบ 2 ก้อน (2S)1฿20–฿60
Buck converter 7.4 V → 5 V 3 A1฿30–฿90
สวิตช์เปิด-ปิด1฿5–฿20
สายจัมเปอร์ ผู้-ผู้ / ผู้-เมีย ชุด 40 เส้น1฿30–฿60
ตัวต้านทาน 1 kΩ + 2 kΩ (แบ่งแรงดัน 5 V → 3.3 V)1฿2–฿10
แนะนำเพิ่ม
ที่ชาร์จถ่าน 186501฿100–฿250
รวมโดยประมาณ฿1,367–฿2,920

ราคาประมาณการ ณ 2026-10-31 ยังไม่ได้ตรวจกับร้าน

เลือก ESP32 เพราะมีขา analog พอสำหรับ LDR 2 ตัวกับ IR 4 ตัว และมี PWM สำหรับมอเตอร์กับ servo จอ ST7789 ใช้แสดงใบหน้าของหุ่น ถ้าอยากประหยัดใช้ OLED SSD1306 แทนได้ (เปลี่ยนในหน้า Robot Body ของตัวจำลอง)

วงจรและการต่อขา

แผนผังวงจรหุ่นยนต์หาแสงบน ESP32 DevKit V1 ในหน้า Wiring ของตัวจำลอง
การต่อขาบน ESP32 DevKit V1 (จัดขาอัตโนมัติจากตัวจำลอง)
TB6612FNG
Motors
VM → แบต 7.4 V
VCC → 3V3
GND → GND
PWMA → GPIO25
AIN1 → GPIO13
AIN2 → GPIO4
PWMB → GPIO26
BIN1 → GPIO19
BIN2 → GPIO21
STBY → 3V3 (ต่อค้างไว้)
HC-SR04
Front sonar
VCC → 5V
TRIG → GPIO22
ECHO → GPIO14
GND → GND
LDR
Left eye LDR
VCC → 3V3
GND → GND
AO → GPIO32
LDR
Right eye LDR
VCC → 3V3
GND → GND
AO → GPIO33
Microswitch
Front bumper
COM → GND
NO → GPIO16
GP2Y0A21
IR front-left
VCC → 5V
GND → GND
VO → GPIO34
GP2Y0A21
IR front-right
VCC → 5V
GND → GND
VO → GPIO35
GP2Y0A21
IR left side
VCC → 5V
GND → GND
VO → GPIO36
GP2Y0A21
IR right side
VCC → 5V
GND → GND
VO → GPIO39
Microswitch
Rear bumper
COM → GND
NO → GPIO17
SG90
Head servo
GND → GND
VCC → 5V
PWM → GPIO27
ST7789
Face Display
GND → GND
VCC → 3V3
SCL → GPIO18
SDA → GPIO23
RES → GPIO5
DC → GPIO15
BLK → 3V3 (ต่อค้างไว้)

ไฟเลี้ยงมาจากถ่าน 18650 สองก้อน (7.4 V) ต่อเข้า VM ของ TB6612FNG ตรงๆ เพื่อขับมอเตอร์ และผ่าน buck converter ลงเป็น 5 V เลี้ยงบอร์ดกับเซนเซอร์ กระแสของมอเตอร์จึงไม่ผ่าน regulator

สิ่งที่ตัวตรวจวงจรเตือน

โปรแกรม

โปรแกรมในตัวจำลองเขียนด้วย JavaScript ผ่าน library rover ด้านล่างเป็นแกนของโปรแกรมแบบย่อ ตัวเต็มอยู่ในหน้า Code (เปิดจากปุ่มด้านบนแล้วกด Run) ซึ่งเลือกฝั่งที่จะอ้อมด้วย IR และใช้ฝั่งเดิมต่อหลายครั้ง ไม่ให้หุ่นสลับซ้ายขวาวนอยู่ที่เดิม

await rover.module('head', true);
await rover.trackLight(true);     // หัวเริ่มหันหาแสงเอง
await wait(2.5);

while (rover.light() < 78) {
  const bearing = rover.headAngle();          // มุมหัว = ทิศของแสง
  if (Math.abs(bearing) > 5) await rover.turn(bearing);

  if ((rover.distance() ?? 999) < 30) {       // มีของขวางหน้า
    await rover.backward(0.4);
    await rover.turn(70);
    await rover.forward(1);
    continue;
  }
  await rover.forward(0.5);
}
rover.face('happy', 'เจอแสงแล้ว!');

จากซิมไปของจริง

  1. เปิดหน้า Wiring ของตัวจำลอง กด ⬇ เฟิร์มแวร์ .ino จะได้สเก็ตช์ Arduino ที่ใช้ขาตามตารางด้านบน มีทั้งการขับล้อ อ่านเซนเซอร์ หัวหันหาแสง และโหมด AUTO ที่หาแสงพร้อมหลบสิ่งกีดขวาง (สั่ง AUTO 1 ทาง Serial Monitor ที่ 115200)
  2. ประกอบและทดสอบทีละส่วน: ล้อก่อน (F 1, L 1) แล้วอ่านเซนเซอร์ด้วย READ แล้วค่อยลองหัว (TRACK 1)
  3. ถ้าหัวหมุนหนีแสงแทนที่จะหันหา ให้กลับค่า HEAD_DIR ถ้าค่าแสงกลับทาง (มืดแล้วค่าสูง) ให้ตั้ง LIGHT_DARK_IS_HIGH ทั้งสองค่าอยู่ในส่วน Settings ต้นไฟล์
เฟิร์มแวร์ที่ส่งออกเป็นจุดเริ่มต้นที่ใช้ขาตรงกับวงจร ยังต้องทดสอบกับบอร์ดจริงทีละส่วน ค่าที่ใช้ได้ในซิม เช่นเวลาเลี้ยวหรือกำลังมอเตอร์ ต้องปรับใหม่กับหุ่นจริงเสมอ

ผลทดสอบในตัวจำลอง

ลองย้ายไฟไปไว้หลังสิ่งกีดขวางในตัวจำลอง แล้วดูว่าหุ่นอ้อมไปได้หรือไม่ เป็นวิธีที่ดีในการหาจุดอ่อนของโปรแกรมก่อนสร้างจริง

ลองโปรแกรมนี้ในตัวจำลอง →

ฝังตัวจำลองนี้ในเว็บหรือบล็อกของคุณ

คัดลอกโค้ดนี้ไปวางใน HTML ของหน้าเว็บ ผู้อ่านจะเห็นสนามจำลองพร้อมปุ่มรันโปรแกรมตัวอย่าง

<iframe src="https://ai-rover.app/app/?preset=light-seeker&embed=1" title="หุ่นยนต์หาแสง – AI Rover Studio" width="720" height="520" style="max-width:100%;border:0;border-radius:12px" loading="lazy"></iframe>