กลับไปหน้ารวมไฟล์
arduino-based-wifi-mobile-robot-with-pan-tilt-camera-efbb25.md

โปรเจกต์นี้จะพาน้องๆ มาสร้างหุ่นยนต์เคลื่อนที่ 4 ล้อควบคุมผ่าน WiFi แบบง่ายๆ แต่เจ๋งเป้ง! โดยเราติดตั้งกล้อง WiFi บนหัวหมุนแบบ Pan & Tilt ที่ขับด้วยเซอร์โว ทำให้เราควบคุมหุ่นจากคอมพ์ผ่าน WiFi ได้แบบเรียลไทม์ แถมมีสตรีมวิดีโอสดจากกล้องบนตัวหุ่น เลยไม่ต้องมองเห็นตัวหุ่นด้วยตาเปล่าก็ขับได้สบายๆ

อัพเดทล่าสุด: เรามีเวอร์ชันอัพเกรดของเจ้ารถหุ่นตัวนี้ด้วยนะ ไปดูได้ที่ลิงก์นี้เลย (จัดไปวัยรุ่น!)

*คลิปหุ่นยนต์กำลังโชว์ของ*

โปรเจกต์นี้เราใช้เครื่องมือเขียนโปรแกรมแบบโมเดลที่ชื่อว่า CASP ในการทำซอฟต์แวร์ทั้งหมด แถมยังใช้บล็อก CASP แบบคัสตอม (ที่มีซอร์สโค้ดให้ดูด้วย) ในโมเดลหลักอีก บล็อกนี้จะสร้างสัญญาณควบคุมเมื่อเรากดปุ่มคีย์บอร์ดเพื่อบังคับหุ่นยนต์ น้องๆ สามารถเปิดดูการตั้งค่าและซอร์สโค้ดของบล็อกนี้ได้ แล้วจะได้รู้วิธีเอามันไปต่อกับบล็อกอื่นๆ ในโมเดล CASP

ขั้นตอนการทำ

ขั้นตอนที่ 1: ประกอบฮาร์ดแวร์ตามที่อธิบายในส่วน 'Hardware Development' ด้านล่างเลย

ขั้นตอนที่ 2: ติดตั้ง CASP เวอร์ชันล่าสุด (แนะนำเวอร์ชัน 0.9.5.1 ขึ้นไปสำหรับโปรเจกต์นี้) ห้ามช็อตนะตัวนี้!

ขั้นตอนที่ 3: ดาวน์โหลดโปรเจกต์ตัวอย่าง 'Basic Remote Controlled Mobile Robot with on-board camera' แล้วทำตามขั้นตอนในส่วน 'Software Development' ให้ครบ

ขั้นตอนที่ 4: อาจต้องมีการปรับแต่งบางอย่างตามที่บอกในส่วน 'Adjustments' เพื่อให้ซอฟต์แวร์ทำงานเข้ากับฮาร์ดแวร์ที่เราสร้างขึ้น

ขั้นตอนที่ 5: สุดท้าย วิธีการควบคุมหุ่นยนต์ด้วยคีย์บอร์ดและเมาส์จะอธิบายในส่วน Control Methodology น้องๆ สามารถเปลี่ยนโค้ดในบล็อกคัสตอม 'rc_control' ในโมเดลหลัก เพื่อปรับปุ่มควบคุมให้เป็นสไตล์ตัวเองได้เลย สู้งานนะน้อง!

การพัฒนาด้านฮาร์ดแวร์

มอเตอร์กระแสตรง (DC Motor) จำนวน 4 ตัว ถูกติดตั้งบนฐานโลหะที่เหมาะสม พร้อมกับล้อ ส่วนประกอบแพน & ทิลท์ (ซึ่งติดตั้งด้วยเซอร์โวมอเตอร์ขนาดเล็ก 2 ตัว) จะถูกติดตั้งในตำแหน่งที่เหมาะสมบนฐาน (แนะนำให้อยู่ทางด้านท้ายของหุ่นยนต์) แบตเตอรี่ 12V จะถูกติดตั้งไว้ใต้ฐาน ส่วนโมดูลอิเล็กทรอนิกส์ต่างๆ ก็จะถูกวางและเชื่อมต่อบนฐานตามแผนภาพการต่อที่แสดงไว้ในส่วน 'Schematics' ภาพด้านล่างนี้คือตัวอย่างการจัดวางทั่วไป

Mobile robot setup

ส่วนอิเล็กทรอนิกส์ประกอบด้วยบอร์ดไมโครคอนโทรลเลอร์ Arduino Nano RP2040 Connect ซึ่งทำหน้าที่เป็นสมองหลักของหุ่นยนต์ คอยสื่อสารกับพีซีโฮสต์ผ่าน WiFi บนบอร์ด ไมโครคอนโทรลเลอร์จะสร้างสัญญาณ PWM ที่จำเป็นเพื่อควบคุมล้อทั้งสี่ผ่านวงจรขับมอเตอร์ (Driver Circuit) ที่เหมาะสม และยังควบคุมเซอร์โวมอเตอร์ 2 ตัวสำหรับกล้องแพน & ทิลท์อีกด้วย

โมดูล ESP32 Camera จะถูกติดตั้งบนส่วนแพน & ทิลท์ เพื่อจับภาพวิดีโอสดและสตรีมไปยังพีซีโฮสต์

ไฟแฟลชบนโมดูล ESP32-CAM จะถูกควบคุมด้วยมือจากพีซีโฮสต์ ผ่าน Arduino Nano RP2040 ในสภาวะแสงน้อย

เราใช้แบตเตอรี่ 6V ถึง 12V เพื่อจ่ายไฟให้กับวงจรทั้งหมดบนหุ่นยนต์ และใช้ตัวแปลงแรงดัน DC Step Down จาก 6V/12V เป็น 5V เพื่อจ่ายไฟ 5V ที่จำเป็นให้กับไมโครคอนโทรลเลอร์, เซอร์โวมอเตอร์ และโมดูลกล้อง ESP32

รายละเอียดทางเทคนิคเพิ่มเติม (จัดเต็ม!)

รถบังคับบลูทูธทั่วไปมักถูกจำกัดด้วยระยะสายตาและขาดการเห็นภาพตอบกลับ แต่ Wi-Fi Mobile Camera Robot ตัวนี้คือการควบคุมระยะไกลแบบเต็มตัว! ด้วยการฝังโมดูลกล้อง IP ไว้ คุณสามารถนั่งอยู่อีกห้องนึงแล้วขับหุ่นยนต์ไปทั่วบ้าน โดยใช้เบราว์เซอร์ในแล็ปท็อปเป็นพวงมาลัยและจอมอนิเตอร์ไปในตัว

ESP32-CAM (หัวใจหลักของโครงการ) ดาราจอมแกร่งของระบบนี้คือโมดูล ESP32-CAM มันคือไมโครคอนโทรลเลอร์ WiFi ที่ทรงพลัง พร้อมเลนส์กล้อง OV2640 ในตัว

  1. เว็บเซิร์ฟเวอร์ตัวจิ๋ว: ESP32 จะโฮสต์เว็บไซต์เล็กๆ ไว้บนเครือข่ายท้องถิ่นของคุณ (เช่น 192.168.1.15)
  2. การสตรีมภาพ: เมื่อคุณเข้าถึง IP นั้นจากพีซี ESP32 จะเริ่มจับภาพ JPEG และส่งสตรีมภาพต่อเนื่องผ่าน WiFi สร้างเป็นฟีดวิดีโอสด
  3. การเชื่อมโยงการควบคุม: ในโปรเจกต์นี้ ตรรกะการควบคุมจะถูกจัดการโดย Arduino Nano RP2040 Connect และซอฟต์แวร์ CASP บนพีซีโฮสต์ ซึ่งรับคำสั่งและส่งต่อไปยังไดรเวอร์มอเตอร์และเซอร์โว

ขับเคลื่อนฐานล้อหนักๆ พินเอาต์พุตของไมโครคอนโทรลเลอร์นั้นอ่อนเกินไปจะขับฐานรถหนักๆ ได้โดยตรง

  • คุณต้องต่อคอนโทรลเลอร์เข้ากับไดรเวอร์มอเตอร์ที่เหมาะสม (เช่น TA6586 ที่ใช้ในนี้ หรือ L298N)
  • คุณใช้สัญญาณ PWM เพื่อปรับความเร็วของล้อ
  • ป้อมปืนแพน/ทิลท์: ตัวโมดูลกล้องจะถูกติดตั้งบนเซอร์โวมอเตอร์ขนาดเล็ก 2 ตัว การขยับเมาส์ในแผงจำลองบนพีซีโฮสต์ จะสั่งให้ไมโครคอนโทรลเลอร์หมุนเซอร์โว ทำให้กล้องสามารถ "มองไปรอบๆ" ได้อย่างอิสระจากตัวฐาน!

สิ่งที่ต้องมีสำหรับการประกอบระบบ

  • โมดูล ESP32-CAM พร้อมกล้อง OV2640
  • อินเทอร์เฟซไดรเวอร์มอเตอร์ (เช่น TA6586 หรือ L298N)
  • แชสซีรถ 4WD
  • ขายึดเซอร์โวมอเตอร์ขนาดเล็กแบบแพน/ทิลท์สำหรับกล้อง
  • แบตเตอรี่พาวเวอร์พักทรงพลัง (เพราะทั้งการสตรีม WiFi และการควบคุมมอเตอร์กินไฟไม่เบาเลยนะน้อง!)

การพัฒนาซอฟต์แวร์

A) การตั้งค่า ESP32 Camera

ก่อนจะเอา ESP32 Camera ไปใช้ในโปรเจค ต้องโปรแกรมให้มันมี IP address ที่ถูกต้องก่อนนะน้อง เรื่องนี้มีตัวอย่างให้ดูเยอะแยะในอินเทอร์เน็ต ลองเสิร์ชหาดูได้เลย งานนี้เราจะใช้ CASP มาช่วยพัฒนาโมเดลให้กับ Arduino micro-controller (เป้าหมาย) และ host PC เร็วขึ้น ซึ่งเราจะต้องสร้างโมเดลขึ้นมาสองตัวเพื่อให้บรรลุเป้าหมาย

B) โมเดลเป้าหมาย (Target Model) ที่รันบน Arduino Nano RP2040 Connect ประกอบด้วย

  1. Blink logic ที่ใช้บอกว่าระบบกำลังทำงานอยู่
  2. WiFi101 block ที่รับสัญญาณควบคุมจาก host PC
  3. PWM และ servo blocks ที่แมปกับขาของ micro-controller
  4. Time delay block เพื่อรีเซ็ตเอาต์พุตของ PWM blocks เวลาเกิดข้อผิดพลาดในการสื่อสารหรือตอน host ไม่ได้เชื่อมต่อ

Target model that runs on Arduino Nano RP2040 Connect

ขั้นตอนการโปรแกรมบอร์ดเป้าหมายให้ถูกต้อง มีดังนี้

  1. เชื่อมต่อบอร์ดเป้าหมายกับ host PC ด้วยสาย USB
  2. เช็คจากระบบปฏิบัติการของ host PC ว่า บอร์ดเชื่อมต่อกับพอร์ตซีเรียลหมายเลขอะไร
  3. เปิดโปรแกรม CASP แล้วโหลดโปรเจค 'rc_target'
  4. ในบล็อก WiFi101 ให้ตั้งค่าเป็นโหมด Station (สถานี) น้องอาจต้องกรอก SSID และรหัสผ่านของเครือข่ายที่อุปกรณ์จะเชื่อมต่อ ส่วนพารามิเตอร์ Local IP address ให้ตั้งตามที่ได้รับจาก DHCP client ของเครือข่ายนั้น
  5. ใน CASP ไปที่เมนู Home->Simulation->Setup Simulation Parameters ใต้แท็บ Target HW->General ให้ตั้งค่า 'Target Hardware Programmer Port' เป็นหมายเลขพอร์ตซีเรียลที่บอร์ดเชื่อมต่ออยู่
  6. บิลด์โมเดลและโปรแกรมลงบอร์ด โดยคลิกปุ่ม Run ได้เลยจ้า

C) โมเดลเนทีฟ (Native Model) ที่รันบน Host PC ประกอบด้วย

  1. Camera block ที่รับวิดีโอสดจาก ESP32 Camera โดยต้องกรอก IP address ของกล้องลงในพารามิเตอร์ของบล็อกนี้
  2. Image display block สำหรับแสดงวิดีโอสดจากกล้อง และยังถูกตั้งค่าให้ส่งสัญญาณคีย์บอร์ดและเมาส์ออกมาด้วย
  3. RC control block: เป็นบล็อกที่เราสร้างขึ้นเอง (custom block) รับสัญญาณคีย์บอร์ดและเมาส์จาก image display block แล้วสร้างสัญญาณควบคุมที่เหมาะสมสำหรับการเคลื่อนที่ของหุ่นยนต์และการเคลื่อนหัว (pan & tilt)
  4. GPIO blocks ที่แมปกับโมเดลเป้าหมายผ่านช่องทางการสื่อสาร WiFi

Native model that runs on host PC

ขั้นตอนการรันโมเดลเนทีฟบน host PC มีดังนี้

  1. ก่อนอื่น ต้องแน่ใจว่า host PC เชื่อมต่อกับเครือข่าย WiFi เดียวกันกับอุปกรณ์ (บอร์ด) นะ
  2. โหลดโปรเจค 'rc_native'
  3. คลิกที่เมนู Home->Simulation->Configure Simulation IO
  4. หน้าต่าง 'Configure Simulation Hardware' จะเปิดขึ้น ใต้ส่วน Native Nodes และ GPIO Device Nodes ให้เปลี่ยน IP addresses ที่ทำเครื่องหมายไว้ในรูปด้านล่าง (โดยดับเบิลคลิกที่รายการ) เป็น IP address ของเครื่อง host และของอุปกรณ์ (บอร์ด) ตามลำดับ

Configure Simulation Hardware window to change IP addresses of native node (host PC) and GPIO device (Arduino RP2040)

  1. คลิกปุ่ม 'Connect Device' แล้วติ๊กถูกที่ช่อง 'Online Data' ตอนนี้โปรแกรมควรจะสื่อสารกับบอร์ดเป้าหมายได้แล้ว โดยมีรอบเวลาประมาณ 30 มิลลิวินาที บอร์ดเป้าหมายตอนนี้จะปรากฏเป็น endpoint 'EP0' ให้กับโมเดลเนทีฟ โมเดลเนทีฟสามารถใช้ endpoint นี้เพื่อเชื่อมต่อกับ IOs ต่างๆ บนบอร์ดเป้าหมายได้
  2. คลิกปุ่ม 'Save' เพื่อบันทึกการตั้งค่าแล้วปิดหน้าต่าง
  3. รันโมเดลโดยคลิกปุ่ม Run หน้าต่าง Simulation panel ควรจะเปิดขึ้นและเริ่มสื่อสารกับบอร์ด
  4. ภาพหน้าจอของ Simulation panel ที่รันบน host PC และแสดงวิดีโอสดจากกล้อง มีดังรูปด้านล่าง

Simulation Panel Window with on-board camera live video

การปรับแต่ง

  1. การต่อสายมอเตอร์ล้ออาจต้องสลับขั้วเพื่อให้เคลื่อนที่ไปหน้า/ถอยหลังได้ตรงกับปุ่ม W กับ S ที่กด
  2. ตรรกะสำหรับสั่งให้มอเตอร์หมุนไปหน้า/ถอยหลังถูกออกแบบให้เข้ากับไอซีขับมอเตอร์ที่ใช้ในโปรเจกต์นี้ (TA6586) ถ้าน้องใช้ไอซีขับมอเตอร์ตัวอื่น ก็ต้องปรับโค้ดส่วนนี้ให้เหมาะสมด้วยนะจ๊ะ
  3. เซอร์โวมอเตอร์อาจต้องปรับตำแหน่งตั้งต้นให้หันไปทางด้านหน้าของหุ่นยนต์ ให้ตรงกับมุมเริ่มต้นที่ตั้งค่าไว้ในพารามิเตอร์ของบล็อก rc_control
  4. ความเร็วพื้นฐาน, ขีดจำกัดความเร็ว และพารามิเตอร์อื่นๆ ที่เกี่ยวกับการเดินทาง สามารถปรับแต่งได้จากพารามิเตอร์ของบล็อก rc_control

วิธีการควบคุม

  1. หน้าต่างแผงจำลองที่เห็นด้านบน จะรับค่าจากคีย์บอร์ดและเมาส์ได้เมื่อมันเป็นหน้าต่างที่กำลังใช้งานอยู่
  2. ผู้ใช้สามารถใช้ปุ่มคีย์บอร์ดดังนี้:
    • W = เดินหน้า
    • S = ถอยหลัง
    • A = หมุนซ้ายบนจุดศูนย์กลาง
    • D = หมุนขวาบนจุดศูนย์กลาง
  3. สามารถกดปุ่มผสมระหว่าง W/S กับ A/D เพื่อเลี้ยวซ้าย-ขวาในขณะที่เคลื่อนที่ไปหน้าหรือถอยหลังได้
  4. ปรับความเร็วได้โดยใช้ปุ่ม Page Up และ Page Down
  5. มุมของเซอร์โวแนวตั้งและแนวนอน (ตั้งแต่ -90 ถึง +90 องศา) สำหรับควบคุมทิศทางหัวหุ่นยนต์ สามารถควบคุมได้ด้วยการขยับเมาส์
  6. ปุ่ม 'G' ใช้เพื่อตั้งเซอร์โวทั้งคู่กลับไปที่มุมตั้งต้น
  7. ปุ่ม 'L' ใช้สำหรับเปิด/ปิดไฟแฟลช LED ของกล้อง ESP32

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Computer Aided Simulation Program (CASP)"
author: "aadhuniklabs"
category: "Motors & Robotics"
components:
  - "1x 9V to 12V battery"
  - "1x Robot Base Frame / Chassis"
  - "1x Jumper wires (generic)"
  - "1x ESP32 Camera Module"
  - "2x SG90 Micro-servo motor"
  - "1x 12V to 5V Step Down DC Converter"
  - "4x Geared DC Motor, 12 V"
  - "1x Arduino Nano RP2040 Connect"
  - "1x Pan-Tilt HAT"
description: "โรบอตตัวนี้ติดตั้งกล้อง Pan & Tilt บนตัว ควบคุมจาก PC ไกลๆ ได้สบายๆ ไม่ต้องวิ่งตามให้เหนื่อย งานง่ายแต่หล่อ ใช้ Arduino เป็นสมอง เชื่อมต่อ WiFi ได้แบบเทพๆ"
difficulty: "Advanced"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX1+aVIcrBWjdPxv+CSPw1u3nMmEwigPBktFt6jiqWfDfCa0QAvWnOApONHiSj1anvcD7ssIaKjCVUZOvnzhklHCA3O4e0Mct02ITF3O346H7ZoG+6uyQHlDa"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-based-wifi-mobile-robot-with-pan-tilt-camera-efbb25_cover.jpg"
lang: "en"
likes: 1
passwordHash: "70c8d8f36c454eef213686dc2a7756bdf1aa2f29eae574aecb5f556728f0c99b"
price: 2450
seoDescription: "Arduino based WiFi mobile robot with pan & tilt camera. Remotely control the robot via host PC without following it."
tags:
  - "wifi"
  - "casp"
  - "kids"
  - "robotics"
  - "remote control"
title: "โรบอตเคลื่อนที่สาย WiFi ควบคุมจากไกล + กล้อง Pan & Tilt หมุนได้ตึงๆ"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/VPdV9dCY82Q"
views: 6903