การบังคับทิศทางด้วยสมาร์ทโฟน: หุ่นยนต์ควบคุมด้วย Android
หุ่นยนต์ตามเส้นเป็นหุ่นยนต์อัตโนมัติโดยสมบูรณ์ รถหุ่นยนต์ควบคุมด้วย Android อาศัยอินพุตจากผู้ใช้โดยสมบูรณ์ โปรเจกต์นี้จะสอนโปรโตคอลการรวมระบบที่สำคัญของการแยกวิเคราะห์สตรีมคำสั่งตัวอักษร Bluetooth ขนาด 1 ไบต์จำนวนมาก ('F', 'B', 'L', 'R') และส่งข้อมูลนั้นเข้าสู่อาร์เรย์มอเตอร์แบบ dual-bridge ได้ทันที เพื่อบังคับแชสซีที่กำลังเคลื่อนที่ผ่านสิ่งกีดขวาง

โปรโตคอลสตรีมตัวอักษร (HC-05)
เมื่อคุณลากปุ่มควบคุมทิศทาง (joystick thumb-pad) ไปข้างหน้าบนหน้าจอ Android ที่คุณสร้างขึ้นเอง มันไม่ได้ส่งแค่สัญญาณเดียว แต่มันส่งสตรีมคำสั่งที่ปะปนกันไปยัง HC-05 Bluetooth transceiver ของ Arduino
- กับดัก: หาก
loop()ของ Arduino หยุดทำงานแม้เพียง 50ms ขณะวิเคราะห์โค้ด บัฟเฟอร์ Bluetooth จะล้น และรถจะพุ่งชนกำแพง! - คุณต้องใช้การฟัง Serial แบบไม่บล็อก (non-blocking Serial listening):
if(Serial.available() > 0){
char command = Serial.read();
if (command == 'F') { DriveForward(); }
else if (command == 'L') { SpinLeft(); }
else if (command == 'S') { HaltMotors(); }
}
เมทริกซ์การบังคับเลี้ยวแบบ Differential ด้วย L298N
หุ่นยนต์ตัวนี้ไม่มีพวงมาลัย มันเลี้ยวเหมือนรถถัง (Differential Logic)
- L298N Dual-Bridge Driver ทำงานกับมอเตอร์ซ้ายทั้งสองตัวและมอเตอร์ขวาทั้งสองตัว
- ฟังก์ชัน
SpinLeft()ไม่ได้ทำให้ล้อซ้ายช้าลง นั่นคือการเลี้ยวที่ไม่มีประสิทธิภาพ - ในการหมุนตัวซ้ายอย่างรุนแรงและแม่นยำ:
analogWrite(ENA, 255); analogWrite(ENB, 255); // Full power via PWM
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); // Left Rack REVERSE!
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); // Right Rack FORWARD!
- รถจะหยุดขับเคลื่อนทันทีและหมุนตัวอย่างรุนแรงเป็นวงกลมอย่างสมบูรณ์ในตำแหน่งเดิม!
ส่วนประกอบหลักในการสร้าง Rover
- Arduino Uno/Mega + Sensor Shield สำหรับการขยายพินสำหรับ Servo/Bluetooth ได้อย่างง่ายดาย
- HC-05 หรือ HC-06 Bluetooth Slave Module
- L298N Motor Driver Interface Board
- ชุด 4WD Acrylic หรือ Aluminum Robot Chassis ขนาดใหญ่ พร้อม TT yellow DC Motors แบบมีเกียร์สี่ตัว
- แหล่งจ่ายไฟแยกกันสองชุด: แบตเตอรี่ 9V สำหรับ IC logic ที่ละเอียดอ่อนของ Arduino และ LiPo 2-cell (7.4V) ขนาดใหญ่ที่เชื่อมต่อโดยเฉพาะกับ L298N motor driver! (การรวมแหล่งจ่ายไฟเข้ากับแบตเตอรี่ก้อนเดียวมักทำให้ Arduino รีเซ็ตเนื่องจาก motor voltage spikes!)