12.
โมดูลควบคุมด้วยเสียง Speech Recognition Module 13.
CP2102 USB 2.0 to UART TTL 5PIN Connector Module 14.
สายไฟแดงดำ ขนาด 22AWG เริ่มด้วย ต่อสายไฟสำหรับมอเตอร์ ทั้ง 4 ตัว ที่ 4WD smart car chassis ให้มา โดยให้ ขั้วลบ สายไฟสีดำ อยู่ด้านบน เหมือนกันทั้ง 4 ตัว
ประกอบเข้ากับ โครง ชิ้นที่ 1 ของ 4WD smart car chassis ดังรูป
ประกอบ น็อต 6 จุด สำหรับ วาง โครง ชิ้นที่ 2
ประกอบ บอร์ด Motor Drive Module L298N ลงที่ โครง ชิ้นที่ 1
เชื่อมสายไฟ ของ มอเตอร์ ด้านบน สายสีดำ ขั้ว - ของมอเตอร์ ตัวที่1 เข้า กับมอเตอร์ ตัวที่2 และ สายสีแดง ขั้ว+ ของมอเตอร์ ตัวที่1 เข้า กับมอเตอร์ ตัวที่2 และ เช่นกันทำที่ มอเตอร์ คู่ด้านล่างด้วย เพื่อให้เหมือนมีมอเตอร์ จาก 4 ตัว เหลือ 2 ตัว
จากนั้น ประกอบสายไฟ ของมอเตอร์ ทั้ง 2 ตัว เข้ากับ บอร์ด L298N ดังรูป
ประกอบ โครงชิ้นที่ 2 เข้าที่ ด้านบนของ โครงชิ้นที่ 1 และ ประกอบ บอร์ด Arduino UNO R3 ลงที่โครงชิ้นที่ 2 ซึ่งอยู่ชั้นบน
ประกอบ บอร์ด Arduino Sensor Shield V5.0 ลงที่ บอร์ด Arduino UNO R3
ประกอบ รางถ่านแบบ 18650 และ เชื่อมต่อ วงจรตามรูป
หมายเหตุ : ถ้ามี Jumper อยู่ที่ขา ENA และ ENB ของ บอร์ด L298N ให้ถอดออก
การเชื่อมต่อระหว่าง บอร์ด Arduino Sensor Shield V5.0 กับ บอร์ด L298N
*** VCC ของ Arduino Sensor Shield V5.0 คือ V ***
หลังจากนั้นให้ทดสอบเบื้องต้น ว่าการหมุนของล้อถูกต้องหรือไม่ โดย
เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3
// Motor A pins (enableA = enable motor, pinA1 = forward, pinA2 = backward) int enableA = 3; int pinA1 = 6; int pinA2 = 7;
//Motor B pins (enabledB = enable motor, pinB2 = forward, pinB2 = backward) int enableB = 5; int pinB1 = 8; int pinB2 = 9;
//This lets you run the loop a single time for testing boolean run = true;
void setup() { pinMode(enableA, OUTPUT); pinMode(pinA1, OUTPUT); pinMode(pinA2, OUTPUT);
pinMode(enableB, OUTPUT); pinMode(pinB1, OUTPUT); pinMode(pinB2, OUTPUT); } void loop() { if (run) { delay(2000); enableMotors(); //Go forward forward(600); //Go backward backward(600); //Turn left turnLeft(600); coast(200); //Turn right turnRight(600); coast(200); //This stops the loop run = false; } }
//Define high-level H-bridge commands
void enableMotors() { motorAOn(); motorBOn(); }
void disableMotors() { motorAOff(); motorBOff(); }
void forward(int time) { motorAForward(); motorBForward(); delay(time); }
void backward(int time) { motorABackward(); motorBBackward(); delay(time); }
void turnLeft(int time) { motorABackward(); motorBForward(); delay(time); }
void turnRight(int time) { motorAForward(); motorBBackward(); delay(time); }
void coast(int time) { motorACoast(); motorBCoast(); delay(time); }
void brake(int time) { motorABrake(); motorBBrake(); delay(time); } //Define low-level H-bridge commands
//enable motors void motorAOn() { digitalWrite(enableA, HIGH); }
void motorBOn() { digitalWrite(enableB, HIGH); }
//disable motors void motorAOff() { digitalWrite(enableB, LOW); }
void motorBOff() { digitalWrite(enableA, LOW); }
//motor A controls void motorAForward() { digitalWrite(pinA1, HIGH); digitalWrite(pinA2, LOW); }
void motorABackward() { digitalWrite(pinA1, LOW); digitalWrite(pinA2, HIGH); }
//motor B controls void motorBForward() { digitalWrite(pinB1, HIGH); digitalWrite(pinB2, LOW); }
void motorBBackward() { digitalWrite(pinB1, LOW); digitalWrite(pinB2, HIGH); }
//coasting and braking void motorACoast() { digitalWrite(pinA1, LOW); digitalWrite(pinA2, LOW); }
void motorABrake() { digitalWrite(pinA1, HIGH); digitalWrite(pinA2, HIGH); }
void motorBCoast() { digitalWrite(pinB1, LOW); digitalWrite(pinB2, LOW); }
void motorBBrake() { digitalWrite(pinB1, HIGH); digitalWrite(pinB2, HIGH); }
ถอดสาย USB ระหว่าง Arduino กับ คอมพิวเตอร์ออก และ หาอุปกรณ์ที่สามารถยกตัวรถ 4WD smart car chassis ขึ้นแล้ว ล้อไม่แตะพื้น เพือทดสอบการหมุนของล้อว่าถูกต้องหรือไม่
ใส่ แบตเตอรี่ลิเธียม 18650 จำนวน 2 ก้อน ไปที่ รางถ่าน และ ตรวจสอบขั้วของแบตเตอรี่ ใส่ถุกต้องหรือไม่
โปรแกรมนี้จะทำงานเพียง 1 ครั้ง ถ้าต้องการทดลองใหม่ให้ถอด แบตเตอรี่ออก (หรือ ปิดเปิด สวิทช์ไฟใหม่) แล้วใส่เข้าไปใหม่ เมื่อล้อหมุน ตรวจสอบการหมุน ขอล้อต่างๆถูกต้องหรือไม่ ถ้าต่อวงจรถูกต้อง ล้อ ทั้งสองข้างจะหมุนไปข้างหน้า 1ครั้ง กลับหลัง 1 ครั้ง และ เดินหน้าอีกหนึ่งครั้งแล้วจึงหยุด ถ้าไม่ถูกต้องให้แก้ไข เช่นการต่อขั้วของมอเตอร์ผิด เป็นต้น
ถ้าทุกอย่างถูกต้อง ทดลอง ยกลงวางที่พื้นแล้วทดสอบ อีกครั้ง ถอด แบตเตอรี่ออก (หรือ ปิดเปิด สวิทช์ไฟใหม่) แล้วใส่เข้าไปใหม่ ถ้าทุกอย่างถูกต้อง รถจะเคลื่อนที่ไปข้างหน้า-ถอยหลัง แล้ว เลี้ยวซ้าย แล้ว เลี้ยวขวา กลับสู่ตำแหน่งเดิม เตรียมความพร้อม โมดูลควบคุมด้วยเสียง Speech Recognition Module
ตามขั้นตอน ลิงค์ด้านล่าง
การใช้งาน โมดูลควบคุมด้วยเสียง Speech Recognition Module https://robotsiam.blogspot.com/2017/10/speech-recognition-module.html การเชื่อมต่อระหว่าง บอร์ด Speech Recognition Module กับ Arduino Sensor Shield
Speech <-> Shield
GND <-> G VCC <-> V TXD <-> 0 (RX) RXD <-> 1 (TX)
การอัปโหลดซอร์สโค้ด หุ่นยนต์ควบคุมด้วยเสียงพูด Arduino
อย่าลืมถอดสาย TX และ RX ออกจาก Speech Module เมื่อต้องการจะอัพโหลดซอร์สโค้ด หลังจากอัปโหลดโค้ดแล้วให้เชื่อมต่อ TX และ RX เข้ากับบอร์ดดังเดิม /* by : RobotSiam.com */
// Motor A int enableA = 3; int pinA1 = 6; int pinA2 = 7;
//Motor B int enableB = 5; int pinB1 = 8; int pinB2 = 9;
byte com = 0;
void setup() {
pinMode(enableA, OUTPUT); pinMode(pinA1, OUTPUT); pinMode(pinA2, OUTPUT);
pinMode(enableB, OUTPUT); pinMode(pinB1, OUTPUT); pinMode(pinB2, OUTPUT);
Serial.begin(9600);
Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
} void loop() {
//Run the motors at slightly less than full power
enableMotors(); analogWrite(enableA, 225); // ปรับความเร็วหุ่นยนต์ analogWrite(enableB, 225); // ปรับความเร็วหุ่นยนต์
while (Serial.available()) {
com = Serial.read();
switch (com) {
case 0x11: //forward command
forward(600); coast(10); break;
case 0x12: // backward command
backward(600); coast(10); break;
case 0x13: //turnLeft command
turnLeft(1000); coast(10); break;
case 0x14: // turnRight command
turnRight(1000); coast(10); break;
case 0x15: //stop command
coast(2000);
break;
} }
}
//Define high-level H-bridge commands
void enableMotors() { motorAOn(); motorBOn(); }
void disableMotors() { motorAOff(); motorBOff(); }
void forward(int time) { motorAForward(); motorBForward(); delay(time); }
void backward(int time) { motorABackward(); motorBBackward(); delay(time); }
void turnLeft(int time) { motorABackward(); motorBForward(); delay(time); }
void turnRight(int time) { motorAForward(); motorBBackward(); delay(time); }
void coast(int time) { motorACoast(); motorBCoast(); delay(time); }
void brake(int time) { motorABrake(); motorBBrake(); delay(time); } //Define low-level H-bridge commands
//enable motors void motorAOn() { digitalWrite(enableA, HIGH); }
void motorBOn() { digitalWrite(enableB, HIGH); }
//disable motors void motorAOff() { digitalWrite(enableB, LOW); }
void motorBOff() { digitalWrite(enableA, LOW); }
//motor A controls void motorAForward() { digitalWrite(pinA1, HIGH); digitalWrite(pinA2, LOW); }
void motorABackward() { digitalWrite(pinA1, LOW); digitalWrite(pinA2, HIGH); }
//motor B controls void motorBForward() { digitalWrite(pinB1, HIGH); digitalWrite(pinB2, LOW); }
void motorBBackward() { digitalWrite(pinB1, LOW); digitalWrite(pinB2, HIGH); }
//coasting and braking void motorACoast() { digitalWrite(pinA1, LOW); digitalWrite(pinA2, LOW); }
void motorABrake() { digitalWrite(pinA1, HIGH); digitalWrite(pinA2, HIGH); }
void motorBCoast() { digitalWrite(pinB1, LOW); digitalWrite(pinB2, LOW); }
void motorBBrake() { digitalWrite(pinB1, HIGH); digitalWrite(pinB2, HIGH); } วีดีโอผลลัพธ์การทำงานของ โปรเจค หุ่นยนต์ควบคุมด้วยเสียงพูด Arduino
.