หน้าแรก ดูโปรเจกต์ทั้งหมด
Hard

โปรเจกต์ Gesture controlled car ที่ง่ายที่สุด!

การสร้าง Gesture controlled car ไม่เคยง่ายขนาดนี้มาก่อน!

โปรเจกต์ Gesture controlled car ที่ง่ายที่สุด!

รายการอุปกรณ์และเครื่องมือ

2x nRF24L01 tranceiver
🛒 สั่งซื้อ
1x 9V Battery Connector Snap
🛒 สั่งซื้อ
1x Wire cutters/stripper
-
1x DOIT ESP32 DevKit v1
🛒 สั่งซื้อ
1x Motor driver L298N
🛒 สั่งซื้อ
1x Jumper wires (generic)
🛒 สั่งซื้อ
1x 9v Battery
-

รายละเอียดและวิธีทำ

นวัตกรรม

ผมอยากจะสร้างรถที่ควบคุมด้วยท่าทางมาตลอดเลยครับ

ผมลองค้นหาบทเรียนมาหลายที่ แต่ส่วนใหญ่ทำออกมาดูซับซ้อนเกินไป

ผมก็เลยออกแบบโปรเจกต์นี้ขึ้นมาเองครับ

และรู้ไหมว่าอะไรที่เจ๋งกว่านั้น? โปรเจกต์นี้เป็นแบบสากลหรือ universal (เดี๋ยวจะอธิบายเพิ่มภายหลังครับ)

บทเรียน

มาเริ่มกันเลยครับ

ส่วนของตัวรับสัญญาณ (ตัวรถ)

ก่อนอื่นเลย คุณต้องมีโครงรถ (chassis) ซึ่งสามารถสั่งซื้อออนไลน์ได้ไม่ยากครับ หรือถ้าคุณเป็นมือใหม่ จะใช้กระดาษลูกฟูก/ผ้าใบ/อะคริลิก แล้วใช้ปืนกาวติดเอาก็ได้เหมือนกันครับ😅

ในโปรเจกต์นี้ ผมใช้ Board สองตัว ตัวหนึ่งสำหรับเป็นตัวรับสัญญาณ (receiver) และอีกตัวเป็นตัวส่งสัญญาณ (transmitter)

ใช้ nRF2401 transceiver module 2 ตัว สำหรับติดตั้งที่ Board ตัวส่งหนึ่งตัว และที่ Board ตัวรับอีกหนึ่งตัว

ผมใช้ Module nRF2401 รุ่นมาตรฐาน ซึ่งมีระยะการใช้งานที่ค่อนข้างดีเลยครับ

ขั้นตอนแรก ให้ประกอบ motors เข้ากับสายไฟก่อน ถ้าคุณกำลังอ่านบทเรียนนี้อยู่ ผมคาดว่าคุณคงไม่ต้องพึ่งบทเรียนในส่วนนี้แล้วล่ะครับ😅

ถ้าคุณใช้ 4 motors ให้ต่อสายขั้วลบและขั้วบวกของ motors ทั้งสองข้างเข้าด้วยกัน เพื่อที่คุณจะได้เชื่อมต่อทั้งคู่ผ่านสายไฟแค่ 2 เส้น เหมือนกับว่าเป็น motor ตัวเดียว

(หมายเหตุ: l298n รองรับ motor แค่ 2 ตัว ดังนั้นสิ่งนี้จึงจำเป็นครับ แต่ถ้าคุณใช้ l293d คุณสามารถไปดูบทเรียนวิธีควบคุมผ่าน l293d แทนได้)

จากนั้นเชื่อมต่อ motor ทั้ง 2 คู่ตามที่แสดงใน schematic ด้านล่างครับ

L298N module (เครดิต- components101)

สำหรับ arduino uno และ l298n,

digital pin 2 > IN1

digital pin 3 > IN2

digital pin 4 > IN3

digital pin 5 > IN4

และส่วนการเชื่อมต่อไฟเลี้ยง (power connection) นั้นสำคัญมากครับ

ผมพบว่าการต่อ Arduino เข้ากับช่อง 5v และ gnd ของ l298n นั้นจ่ายไฟได้ไม่ดีเท่าที่ควร ทั้งที่ Datasheets ระบุแรงดันใช้งานไว้ที่ 6v ถึง 12v แล้วทำไมถึงเป็นแบบนั้นล่ะ?

ดังนั้น ในช่องที่เขียนว่า 12v ให้คุณต่อขั้วบวกของแบตเตอรี่เข้าที่นั่น และในช่องเดียวกันนั้นให้ต่อสายไฟอีกเส้นหนึ่งไปที่ pin VIN ของ Arduino ด้วยครับ

จากนั้นต่อขั้วลบของแบตเตอรี่เข้ากับ gnd และต่อสายไฟอีกเส้นจากช่องเดียวกันนั้นไปที่ pin GND ช่องไหนก็ได้บน arduino

คราวนี้ เรามาเชื่อมต่อ Module nRF2401 เข้ากับ UNO กันครับ

pinout:

nRF2401 (เครดิต- eTechnophiles)

หมายเหตุ: คุณไม่จำเป็นต้องต่อ IRQ เข้ากับอะไรเลยครับ

คำเตือน: ให้จ่ายไฟผ่านช่อง 3V3 เท่านั้น ห้ามใช้ช่อง 5V บน Board ARDUINO เด็ดขาด ไม่อย่างนั้น MODULE อาจจะเสียจนใช้งานไม่ได้

การเชื่อมต่อ:

arduino nRF2401

GND > GND

3V3 > VCC

digital 8> CSN

digital 7> CE

digital 11> MOSI (spi interface)

digital 12> MISO (spi interface)

digital 13> SCK (spi interface)

pins ของ SPI interface จะเป็น pins มาตรฐานครับ ส่วน pins CSN และ CE สามารถใช้ digital pins ไหนก็ได้ แต่คุณต้องไปเปลี่ยนค่าใน code ให้ตรงกันด้วย

ส่วนของตัวส่งสัญญาณ:

ในส่วนนี้ผมใช้ ESP32 ( DOIT ESP32 Devkit v1)

จะมี Module สองตัวที่ ESP จะต้องเชื่อมต่อด้วย ตัวแรกคือ nRF2401 (ซึ่งจะทำหน้าที่ส่งข้อมูลไปยังคู่ของมันที่ตัวรับสัญญาณ)

เชื่อมต่อ nRF2401 ดังนี้-

esp32 nRF2401

GND > GND

3V3 > VCC

d15 > CSN

d2 > CE

d23 > MOSI (spi interface)

d19 > MISO (spi interface)

d18 > SCK (spi interface)

ตอนนี้ได้เวลาอธิบายแล้วว่าทำไมมันถึงเป็น "สากล"

คุณคงสังเกตเห็นว่า transceiver modules จะเชื่อมต่อกับ SPI interfaces ที่สอดคล้องกันของ Board เสมอ เช่น บน esp pin MOSI คือ d23 เป็นต้น

หลายบทเรียนมักจะใช้ rf modules แบบเบ็ดเสร็จ แต่ในโปรเจกต์นี้ ถ้าคุณมี micro controller boards อะไรก็ได้สองตัวที่รองรับ I2C และ SPI interface (ซึ่งบอร์ดส่วนใหญ่ในปัจจุบันก็มีมาให้หมดแล้ว) คุณก็สามารถจ่ายไฟให้ module และเชื่อมต่อ interface ที่เกี่ยวข้องได้ทันที (nrf และ mpu6050)

มาต่อกันเลยครับ

mpu6050 pinout (เครดิต- The engineering project)

เชื่อมต่อ mpu 6050 เข้ากับ esp ดังนี้

esp mpu6050

d21 > SDA

d22 > SCL

และต่อ gnd กับ 3v3 คงไม่ต้องให้ผมบอกวิธีต่อไฟซ้ำแล้วซ้ำอีกใช่ไหมครับ?

(pins ที่เหลืออีก 4 pins ไม่จำเป็นต้องใช้ในโปรเจกต์นี้ครับ ถ้าคุณเห็นว่ามีช่อง 3v3 แค่ช่องเดียว แต่อยากเชื่อมต่อทั้งคู่ ก็แค่รวมสาย 3v3 ของ nRF และ mpu6050 เข้าด้วยกัน แล้วลากสายเดียวจากจุดที่ต่อกันนั้นไปที่ช่อง 3v3 ครับ)

ผมจะขอละส่วนของการออกแบบถุงมือและการติดตั้งอุปกรณ์ลงไปให้คุณตัดสินใจเองนะครับ เพราะคุณอาจจะอยากออกแบบตามความสะดวกของตัวเอง

ผมรู้ว่าการใช้ esp อาจจะดูเกินความจำเป็นไปหน่อย แต่ผมไม่มี Board อื่นที่มีขนาดพอเหมาะพอดีน่ะครับ และอย่างที่บอกไป คุณสามารถใช้ Board อะไรก็ได้มาต่อแทน

ในการเขียนโปรแกรมลง ESP32 คุณต้องติดตั้ง board manager เพิ่มเติมด้วย เพราะคุณไม่สามารถเขียนโปรแกรมลง esp ใน IDE ที่เพิ่งติดตั้งใหม่ได้ทันที ดูบทเรียนได้ที่ลิงก์นี้ครับ

https://www.electronicshub.org/esp32-arduino-ide/#:~:text=Selecting%20ESP32%20Development%20Board,-Now%2C%20in%20order&text=To%20do%20this%2C%20once%20again,I%20selected%20ESP32%20Dev%20Module.

เครดิต- Electronics HUB

วิธีใช้งานโปรเจกต์-

หลังจากเปิดสวิตช์ทั้งที่ตัวรถและรีโมทแล้ว nRF ทั้งสองฝั่งจะเชื่อมต่อกัน ให้รอประมาณ 20 วินาทีเพื่อให้ accelerometer ของ mpu6050 ทำการปรับค่า (calibrate) เพราะ mpu คือ module ที่จะคอยตรวจจับการเคลื่อนไหวของมือคุณครับ

เมื่อ calibrate เสร็จแล้ว การเอียง Module mpu6050 ไปข้างหน้าจะทำให้รถวิ่งไปข้างหน้า

การเอียงเข้าหาตัว หรือเอียงไปข้างหลัง จะทำให้รถวิ่งถอยหลัง

และการเอียงไปทางซ้ายหรือขวาก็จะทำงานในลักษณะเดียวกันครับ

การแก้ไขปัญหา-

- ตรวจสอบว่าคุณต่อสาย nRF modules ทั้งสองฝั่งถูกต้องหรือไม่

- โปรดใช้แบตเตอรี่ Li ion แบบชาร์จได้ถ้าเป็นไปได้ เพราะผมเคยเจอปัญหาตอนใช้แบตเตอรี่แบบอัลคาไลน์ครับ

- รอ 20 วินาทีเพื่อให้ mpu ทำการ calibrate

- หากการรับส่งสัญญาณทำงานได้ แต่ทิศทางผิดเพี้ยน เช่น เอียงไปข้างหน้าแต่รถถอยหลัง ให้สลับ pins ของ l298n ที่ต่อกับ arduino ดังนี้-

pins 2,3 -> 3,2

pins 4,5 -> 5,4

คุณจะสังเกตได้ว่าผมแค่สลับขั้วของมันครับ ในทำนองเดียวกัน ถ้ารถเลี้ยวซ้ายแทนที่จะเลี้ยวขวา หรือกลับกัน ให้สลับ-

pins 2,3 -> 4,5

pins 4,5 -> 2,3

- ตรวจสอบแหล่งจ่ายไฟด้วยครับ

- ต่อ MODULE NRF เข้ากับช่อง 3V3 เท่านั้น!!!

- อย่าอยู่ห่างจนเกินไป หรือตรวจสอบว่ามีสิ่งกีดขวางหรือคลื่นรบกวนในการส่งสัญญาณวิทยุหรือไม่

ผมคิดว่าเท่านี้น่าจะเพียงพอแล้วครับ

Code และ schematics-

นี่คือ Schematics และ code ครับ:

ผมจะเพิ่มวิดีโอให้เร็วๆ นี้ครับ

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: easiest-gesture-controlled-car-ae5296
2450 บาท
PromptPay QR Code