รถบังคับขับเคลื่อน 2 ล้อควบคุมด้วยโทรศัพท์มือถือ Android

อภิรักษ์ นามแถ่ง, aphirak112@gmail.com:นักเขียน

โครงงานนี้เป็นการสร้างแอพพลิเคชันบนมือถือมาควบคุมมอเตอร์ 2 ตัวที่อยู่บนรถบังคับขนาดเล็ก สั่งงานแบบไร้สายผ่าน Bluetooth

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

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

โครงงานนี้นอกจากจะสามารถควบคุมทิศทางเดินหน้า, ถอยหลัง, เลี้ยวซ้ายและขวาแล้ว เพื่อให้การบังคับคล้ายกับรถยนต์มากที่สุด ผู้เขียนจึงได้ใส่ LED 2 ดวงเพื่อจำลองให้เหมือนกับไฟหน้า และต่อบัสเซอร์ให้เปล่งเสียงเหมือนการกดแตร พร้อมทั้งส่วนการปรับความเร็วมอเตอร์เหมือนกับการปรับคันเร่งรอบความเร็วนั่นเอง

รูปที่ 1 วงจรของ L298 Motor Drive Module

L298 Motor Drive Module

L298 Motor Drive Module ไดร์สำหรับขับมอเตอร์ 2 ตัวแยกได้อย่างอิสระสามารถหมุนไป/หมุนกลับ (แบบ H-Bridge) และควบคุมความเร็วรอบได้ สามารถจ่ายกระแสเอาต์พุตสูงสุดไม่เกิน 2 แอมป์/ข้าง สามารถรับแรงดันอินพุตสูงสุดถึง 35 โวลต์

รูปที่ 2 รูปแบบของ PWM

รูปที่ 3 รูปบอร์ด L298 Motor Drive Module

วิธีการทำงาน

โมดูลนี้จะมีหัวใจหลัก คือ L298N H-Bridge การควบคุมมอเตอร์จะอาศัยหลักการ H-Bridge ซึ่งโมดูลนี้ใช้ในการควบคุมความเร็วและทิศทางของมอเตอร์ นอกจากจะควบคุมการทำงานกับมอเตอร์แล้วยังสามารถนำไปประยุกต์ใช้กับอุปกรณ์อื่นได้อีกด้วย เช่น นำไปควบคุมการหรี่ไฟในบ้าน (ต้องต่ออุปกรณ์อื่นร่วมด้วย) หรือสามารถนำไปหรี่ไฟกระแสตรง (DC) ได้โดยตรง (แต่แรงดันต้องอยู่ในย่านที่กำหนด คือ ไม่เกินแหล่งจ่ายที่รับได้ซึ่งก็คือ 35 โวลต์)

H-Bridge เป็นวงจรที่สามารถใช้ควบคุมกระแสได้ทั้งขั้วบวกและลบด้วยการควบคุม pulse width modulation (PWM) เป็นการควบคุมแบบ digital ที่มีการนำมาใช้กันมาก โดยส่วนมากเพื่อเป็นการประหยัดพลังงาน เพราะการใช้ PWM ทำให้เกิดการสูญเสียพลังงานน้อยมาก เมื่อความสูญเสียน้อยก็เป็นการประหยัดพลังงานไปในตัว

การควบคุมโมดูลทั้งความเร็วรอบและทิศทางการหมุน ถูกควบคุมโดยใช้ PWM โดยมีขาอินพุต ENA และ ENB เป็นตัวกำหนดการใช้งานเอาต์พุต A และ B ในส่วนของทิศทางการหมุนจะถูกควบคุมโดยการให้สัญญาณลอจิก High และ Low ที่ขาอินพุต EN1-EN2 สำหรับมอเตอร์ A หรือ EN3-EN4 สำหรับมอเตอร์ B

คุณสมบัติ

  • Dual H bridge Drive (สามารถขับเคลื่อนมอเตอร์ DC ได้ 2 ตัว)
  • ใช้ไอซี L298N
  • ระดับแรงดันลอจิก 5V
  • ช่วงแรงดันไฟฟ้าที่สามารถรับได้ 5V-35V
  • กระแสลอจิกไดร์ 0mA-36mA
  • กระแสไฟฟ้าสูงสุดสำหรับขับมอเตอร์ 2A (ต่อข้าง)
  • น้ำหนัก 30 กรัม
  • ขนาด: 43x43x27 มม.

รูปที่ 4 รูปโมดูล Bluetooth HC-05

Bluetooth HC05

HC-05 เป็นโมดูล Bluetooth ที่นำมาเป็นเครื่องมือที่ช่วยให้สามารถเชื่อมต่อกับอุปกรณ์ต่างๆ ทำให้สามารถสื่อสารกับไมโครคอนโทรลเลอร์ (Arduino, AVR และ PIC เป็นต้น) ได้ผ่าน Serial port โมดูล Bluetooth รุ่น HC-05 สามารถตั้งให้ใช้งานเป็นได้ทั้งโหมด Master (ให้อุปกรณ์อื่นมาเชื่อมต่อ) และโหมด Slave (เชื่อมต่อกับอุปกรณ์อื่น) การตั้งค่าต่างๆ เช่น ชื่ออุปกรณ์ รหัสผ่าน ทำได้ผ่าน AT Command ซึ่งจะต้องมีการต่อขาพิเศษเพื่อให้โมดูลเข้าโหมดการตั้งค่า หรือกดปุ่มบนโมดูลค้างไว้

รายละเอียดทั่วไปของ HC05

  • ความตอบสนองสัญญาณ -80dBm
  • กำลังส่งคลื่นวิทยุเพิ่มได้ +4dBm
  • แรงดัน 1.8-3.6V
  • PIO Control
  • UART Interface พร้อมกับสามารถปรับแต่ง baud rate ได้
  • มีเสาอากาศในตัว
  • รองรับ Baud rate: 9600, 19200, 38400, 57600, 230400 และ 460800

รูปที่ 5 วงจรสมบูรณ์

หลักการทำงาน

รูปที่ 5 เป็นวงจรสมบูรณ์ของโครงงานนี้จะเห็นว่าอุปกรณ์มีอยู่เพียงไม่กี่ชิ้นหลักๆ ได้แก่ บอร์ดไดร์ฟมอเตอร์ L298 Motor Drive Module, โมดูล Bluetooth HC-05, LED, บัสเซอร์ และหัวใจหลักของโครงงาน คือ บอร์ด Arduino Nano

Arduino Nano จะเป็นตัวควบคุมการทำงานของวงจรทั้งหมด แบ่งออกเป็นเอาต์พุตและอินพุต ในส่วนของอินพุตจะเป็นการรับคำสั่งจากโมดูล HC-05 ซึ่งจะถูกส่งมาจากแอพพลิเคชัน Android แต่ละคำสั่งจะถูกส่งมาเป็นตัวอักษร โดย 1 ตัวอักษรต่อ 1 คำสั่ง (จะกล่าวในภายหลัง) หลังจากได้รับคำสั่งมาแล้ว Arduino Nano จะประมวลผลและทำงานตามคำสั่งที่ได้รับมา ตัวอย่างเช่น หากส่งให้เดินหน้า เอาต์พุต IN1 กับ IN3 จะส่งค่า PWM ออกไป ส่วน IN2 และ IN4 จะมีสถานะลอจิก Low ทำให้มอเตอร์ทำงานได้หมุนไปข้างหน้า และในทางตรงกันข้ามการถอยหลังเอาต์พุต IN12กับ IN4 จะส่งค่า PWM ออกไป ส่วน IN1 และ IN3 จะมีสถานะลอจิก Low ทำให้มอเตอร์ทำงานได้หมุนกลับไปอีกทาง

ในการเลี้ยวซ้ายหรือเลี้ยวขวาจะใช้หลักการให้มอเตอร์ทั้งสองตัวหมุนไปทางตรงกันข้ามกัน ยกตัวอย่างเช่น การเลี้ยวซ้ายเอาต์พุต IN1 กับ IN4 จะส่งค่า PWM ออกไป ส่วน IN2 และ IN3 จะมีสถานะลอจิก Low ทำให้มอเตอร์ซ้ายและขวาหมุนสวนทางกัน ทำให้รถหมุนไปทางซ้ายได้ ในทางตรงกันข้าม การเลี้ยวขวาเอาต์พุต IN2 กับ IN3 จะส่งค่า PWM ออกไป ส่วน IN1 และ IN4 จะมีสถานะลอจิก Low ทำให้รถหมุนไปทางขวาได้

อีก 4 สภาวะ คือ การเดินหน้าแล้วเลี้ยวซ้าย, การเดินหน้าเลี้ยวขวา, การถอยหลังเลี้ยวซ้ายและการถอยหลังเลี้ยวขวา จะกำหนดให้มอเตอร์ 1 ตัวทำงานและมอเตอร์อีกตัวหยุดทำงาน การเลี้ยวจะคล้ายๆ กับการเลี้ยวซ้ายและเลี้ยวขวาดังที่กล่าวไว้ข้างต้น แต่ลักษณะการเลี้ยวจะมีการเดินหน้าหรือถอยหลังไปด้วย ทำให้ตัวรถมรการเคลื่อนที่จากจุดเดิม แต่ถ้าเป็นการเลี้ยวอย่างที่กล่าวข้างต้นจะเลี้ยวเพียงอย่างเดียวไม่มีการเคลื่อนที่ ตำแหน่งของรถจะยังอยู่ที่เดิม แต่ตัวรถจะเปลี่ยนไปตามทิศทางการเลี้ยว

อีก 2 ส่วนสุดท้าย คือ LED ใช้แทนไฟหน้าและบัสเซอร์ใช้แทนแตร การกระตุ้นให้ LED ทำงานจะให้ลอจิกที่ขา D12 จำทำให้ LED1 และ LED2 ติดสว่างพร้อมกันเนื่องจากต่อขนานกัน ในส่วนของบัสเซอร์จะใช้ขา D11 ส่งลอจิก High ไปยังทรานซิสเตอร์ (Q1) เพื่อขยายกระแสก่อน เนื่องจากกระแสจากพอร์ท Nano อาจจะไม่เพียงพอ

 

 

 

รูปที่ 8 การเตรียมคอนเน็กเตอร์ที่ใช้เชื่อมต่อกับโมดูลขับมอเตอร์

รูปที่ 9 แผ่นวงจรพิมพ์ที่ประกอบเสร็จและโมดูลอื่นๆ

การประกอบ

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

รูปที่ 8 เป็นการเตรียมคอนเน็กเตอร์ 4 ขาสำหรับเชื่อมต่อกับขา IN1-IN4 ของโมดูล L298 Motor Drive และอีก 2 ขาจะเป็นแหล่งจ่ายไฟ ส่วนนี้ให้นำขาอุปกรณ์ที่ไม่ได้ใช้แล้วมาใช้งาน เมื่อลงอุปกรณ์จนครบหมดแล้วให้ตรวจสอบแรงดันในวงจรทั้งหมดเสียก่อน โดยอ้างอิงกับรูปที่ 5 ซึ่งแหล่งจ่ายไฟสามารถใช้ได้ตามความเหมาะสม ซึ่งจะอ้างอิงกับแรงดันของมอเตอร์ที่ใช้งาน แต่ต้องไม่ควรเกิน 12V เพราะอาจจะทำให้เรกูเลเตอร์ บนบอร์ด Nano เสียหายได้ ซึ่งโดยส่วนมากแล้วแรงดันมอเตอร์ของรถบังคับจะไม่เกิน 12V

รูปที่ 10 หน้าเว็บสำหรับดาวน์โหดลโปรแกรม Arduino IDE

รูปที่ 11 การกำหนดขา

รูปที่ 12 ขาที่มีคุณสมบัติเป็น PWM

ซอฟต์แวร์ฝั่ง Arduino

เมื่อมั่นใจว่าทดสอบแรงดันถูกต้องหมดทุกจุดแล้วให้ใส่โมดูลทุกตัวลงตำแหน่งบนแผ่นวงจรพิมพ์ดังในรูปที่ 9 จากนั้นให้ไปโหลดโปรแกรมของโครงงานได้ที่เว็บไซต์ http://electronics.se-ed.com/download สำหรับท่านที่ยังไม่มีโปรแกรม Arduino IDE บนคอมพิวเตอร์ให้เข้าไปดาวน์โหลดได้ที่เว็บไซต์ http://www.arduino.cc/en/Main/Software ดังแสดงในรูปที่ 10 และดาวน์โหลดซอร์สโค้ดสำหรับโครงงานนี้ที่เว็บไซต์ http://electronics.se-ed.com จากนั้นใช้โปรแกรม Arduino IDE เปิดไฟล์ “RC_Bluetooth.ino” ที่ดาวน์โหลดมาแล้วก่อนหน้านี้

เพื่อความเข้าใจการทำงานของโปรแกรมผู้เขียนจะขออธิบายส่วนสำคัญๆ เริ่มจากรูปที่ 11 เป็นการกำหนดขาสำหรับเชื่อมต่อกับอุปกรณ์ภายนอก ได้แก่ โมดูล L298 Motor Drive, LED และบัสเซอร์ ในส่วนของการเชื่อมต่อกับโมดูล HC-05 จะใช้พอร์ต UART (TxD และ RxD) ดังนั้นการกำหนดค่าจึงจะอยู่ในลูป setup (ดังรูปที่ 11) ซึ่งจะกำหนดให้มีอัตรา Baud rate ที่ 9600 ซึ่งเป็นค่า Default ของโมดูล HC-05

จากที่กล่าวไว้ข้างต้นเกี่ยวกับการขับมอเตอร์จะสัญญาณ PWM ซึ่งขาเอาต์พุตของ Arduino Nano นั้นจะไม่สามารถขับเอาต์พุตแบบ PWM ได้หมดทุกขา ซึ่งจะมีเพียงไม่กี่ขาเท่านั้นที่มีคุณสมบัติดังกล่าว ได้แก่ขา D3, D5, D6, D9, D10 และ D11 (ดังรูปที่ 12) ในโครงงานของเราจะใช้ขา

  • D10 เชื่อมต่อกับ IN1
  • D9 เชื่อมต่อกับ IN2
  • D6 เชื่อมต่อกับ IN3
  • D5 เชื่อมต่อกับ IN4

คำสั่งที่ส่งมาจากแอพพลิเคชัน Android จะเป็นตัวอักษร 1 ตัว ต่อการสั่งงาน 1 ครั้ง (ดังรูปที่ 13) ได้แก่

  • F สั่งให้รถเคลื่อนไปด้านหน้า
  • B สั่งให้รถเคลื่อนไปด้านหลัง
  • L สั่งให้รถเลี้ยวซ้าย
  • R สั่งให้รถเลี้ยวขวา
  • G สั่งให้รถเคลื่อนไปด้านหน้าและเลี้ยวซ้าย
  • I สั่งให้รถเคลื่อนไปด้านหน้าและเลี้ยวขวา
  • H สั่งให้รถเคลื่อนไปด้านหลังและเลี้ยวซ้าย
  • J สั่งให้รถเคลื่อนไปด้านหลังและเลี้ยวขวา
  • V (ตัวพิมพ์ใหญ่) สั่งเปิดแตร
  • v (ตัวพิมพ์เล็ก) สั่งปิดแตร
  • W (ตัวพิมพ์ใหญ่) สั่งเปิดไฟหน้า
  • w (ตัวพิมพ์เล็ก) สั่งปิดไฟหน้า
  • X (ตัวพิมพ์ใหญ่) สั่งเปิดไฟฉุกเฉิน
  • x (ตัวพิมพ์เล็ก) สั่งปิดไฟฉุกเฉิน
  • 0-9 กำหนดปริมาณความเร็ว

นี่เป็นกุญแจที่จะทำให้ท่านสามารถควบคุมรถไปในทิศทางที่ต้องการได้ หากท่านมีไอเดียในการส่งคำสั่งนอกเหนือจากใช้โมดูล HC-05 ก็สามารถทำได้ เพียงแต่อ้างอิงตัวอักษรให้ตรงตามที่กำหนดเท่านั้น

รูปที่ 14 แอพพลิเคชัน Arduino Bluetooth RC Car ใน Play Store

รูปที่ 15 หน้าต่าง Login เพื่อใช้งาน App Inventor 2

รูปที่ 16 หน้าเว็บการสร้าง Project ใหม่บน App Inventor 2

ซอฟต์แวร์ฝั่งแอพพลิเคชัน Android

โครงงานนี้จะอาศัยแอพพลิเคชัน Android สำหรับควบคุมการเคลื่อนไหวของรถ ดังนั้นเราจึงจำเป็นต้องสร้างแอพพลิเคชันขึ้นมาใช้งาน แต่ถ้าหากท่านไม่ต้องการเสียเวลาในการสร้างเองก็สามารถดาวน์โหลดแอพพลิเคชันที่มีให้ดาวน์โหลดอยู่ใน Play Store โดยใช้คำค้นว่า “Arduino Bluetooth RC Car”ให้มองหาหน้าตาแอพพลิเคชันดังรูปที่ 14 ก็สามารถนำมาใช้กับโครงงานเราได้เลย

ทั้งนี้หากท่านต้องการสร้างแอพพลิเคชันเองก็สามารถทำได้ ซึ่งผู้เขียนได้สร้างตัวอย่างแอพพลิเคชันไว้ให้ 2 แบบ คือ แบบที่ใช้ปุ่มกดเพื่อบังคับทิศทางและแบบที่ใช้เซนเซอร์ความเอียง (Accelerometer Sensor) ในโทรศัพท์มือถือแทนการกดปุ่มเพื่อบังคับทิศทางของรถ หรือถ้าไม่ต้องการแก้ไขก็สามารถเอาไฟล์ apk ของแอพพลิเคชันที่ดาวน์โหลดมาก่อนหน้านี้ติดตั้งกับโทรศัพท์ของท่านได้เลย แต่ถ้าหากต้องการเปลี่ยนหน้าตาหรือการทำงานของแอพพลิเคชันก็สามารถทำได้ เนื่องจากผู้เขียนให้ไฟล์โปรเจค (ไฟล์ .aia) ของแอพพลิเคชันไปด้วย

การแก้ไขแอพพลิเคชันที่ว่านี้จะต้องเปิดด้วย App Inventor 2 ซึ่งเป็นเว็บแอพพลิเคชันที่สร้างโดย Google ร่วมมือกับสถาบัน MIT แต่ภายหลัง Google ถอนตัว แล้วให้สถาบัน MIT เป็นผู้พัฒนาต่อเอง โดยเน้นไปในทางด้านการศึกษา ให้ผู้ที่ไม่มีความรู้ทางด้านภาษา Java สามารถเขียนแอพพลิเคชัน Android ได้ โดยการเขียนจะอยู่ในรูปแบบ Block ทำให้เข้าใจได้ง่าย

รูปที่ 17 หน้าตาแอพพลิเคชัน BlueBotRC.aia

รูปที่ 18 หน้าตาแอพพลิเคชัน BlueBotRC หลังติดตั้งบนมือถือ

รูปที่ 19 หน้าตาแอพพลิเคชัน RemoteWithAcc.aia

รูปที่ 20 หน้าตาแอพพลิเคชัน RemoteWithAcc หลังติดตั้งบนมือถือ

การใช้งานให้เข้าไปที่เว็บไซต์ http://ai2.appinventor.mit.edu/ จะขึ้นหน้าต่างการ Login ขึ้นมา หากท่านมี Account ของ Gmail อยู่แล้วสามารถทำการ Login ได้เลย (ดังรูปที่ 15) ให้กดยอมรับข้อตกลงต่างๆ ให้เรียบร้อย เสร็จแล้วจะเข้ามาที่หน้าต่างหลัก ให้ท่านนำเข้าไฟล์โปรเจคของผู้เขียนเข้ามาโดยเข้าไปที่ “Projects -> Import project (.aia) from my computer…” ดังรูปที่ 16 จากนั้นก็ให้เลือกไฟล์ .aia ที่ผู้เขียนเตรียมไว้ให้

จากรูปที่ 17 และ 19 เป็นหน้าตาแอพพลิเคชันที่ผู้เขียนได้ออกแบบไว้ให้ ไฟล์โปรเจคที่ชื่อ BlueBotRC.aia จะเป็นการควบคุมรถบังคับด้วยวิธีการกดปุ่ม แต่ในส่วนของไฟล์ชื่อ RemoteWithAcc.aia จะเป็นการดึงค่าจากเซนเซอร์ความเอียงบนโทรศัพท์มือถือมาใช้งาน ผู้อ่านชอบแบบไหนเลือกใช้งานได้เลย หรือต้องการปรับเปลี่ยนหน้าตาก็สามารถทำได้ไม่ผิดกติกาแต่อย่างใด

นอกจากท่านจะสามารถออกแบบหน้าตาแอพพลิเคชันเองได้แล้วยังสามารถเพิ่มปุ่ม รวมถึงเพิ่มฟังก์ชันการทำงานของรถได้ โดยการเพิ่มฟังก์ชันในส่วนของโปรแกรม Arduino Nano ให้มีคุณสมบัติเพิ่มจากที่กล่าวไว้ในบทความนี้ก็ย่อมทำได้