เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด NodeMCU V2
// Motor A pins int pinA2 = D1; int pinA1 = D2; //Motor B pins int pinB2 = D3; int pinB1 = D4; //This lets you run the loop a single time for testing boolean run = true; void setup() { pinMode(pinA1, OUTPUT); pinMode(pinA2, OUTPUT); pinMode(pinB1, OUTPUT); pinMode(pinB2, OUTPUT); } void loop() { if (run) { for (int i = 0; i <= 500; i++) { delay(10); } //Go forward forward(400); coast(200); //Go backward backward(400); coast(200); //Turn left turnLeft(400); coast(200); //Turn right turnRight(400); coast(200); //This stops the loop run = false; } } //Define high-level H-bridge commands 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 //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); }
เลือก Port ในตัวอย่างเป็น "COM12"
เลือก Board : NodeMCU 1.0 (ESP-12E Module)
Upload
ถ้ามีปัญหา Upload ไม่เข้า ขึ้น Error แสดงข้อความว่า ตามรูปภาพ
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
ให้กดปุ่ม RST 1 ครั้ง และ กดปุ่ม FLASH บนบอร์ด ของ NodeMCU ค้างไว้ ในขณะที่ทำการอัพโหลดโปรแกรม
รอจนกระทั่ง Done uploading. 100%
ใส่ แบตเตอรี่ ขนาด AA จำนวน 4 ก้อน ไปที่ รางถ่าน และ ตรวจสอบขั้วของแบตเตอรี่ ใส่ถุกต้องหรือไม่
ถ้าทุกอย่างถูกต้อง ทดลอง ยกลงวางที่พื้นแล้ว ทดสอบ ปิดเปิด สวิทช์ไฟ Power ถ้าทุกอย่างถูกต้อง ปรกติ รถจะเคลื่อนที่ไปข้างหน้า-ถอยหลัง แล้ว เลี้ยวซ้าย แล้ว เลี้ยวขวา (ให้ล้อลากสีขาวเป็นท้ายของหุ่นยนต์ , ถ้าต้องการทดสอบใหม่ ให้ ปิดเปิด สวิทช์ไฟใหม่)
ถ้าหุ่นยนต์ เคลื่อนที่ปรกติ แสดงว่า หุ่นยนต์ของเราพร้อมทำงานแล้ว
VIDEO
การทำงานของ หุ่นยนต์เดินตามเส้น ESP8266
หุ่นยนต์และมนุษย์มีหลักการทำงานที่เหมือนกัน คือ หน่วยรับข้อมูลเข้า (Input Unit) หน่วยประมวลผล (Process Unit) และหน่วยแสดงผล (Output Unit) ดังนั้นการที่หุ่นยนต์จะเคลื่อนที่ไปให้ตรงเป้าหมาย หุ่นยนต์จะต้องมีอุปกรณ์ที่จะตรวจสอบตำแหน่งและส่งข้อมูลที่ได้ไปยังหน่วยประมวลผล เพื่อให้มอเตอร์ทำการแสดงผลโดยการไปยังเป้าหมายต่อไป อุปกรณ์พื้นฐานที่ใช้ในการตรวจสอบตำแหน่งนั้น คือ โมดูลเซ็นเซอร์แสงสำหรับตรวจจับวัตถุกีดขวาง เซ็นเซอร์ตรวจสอบการสะท้อนแสงกลับมา ได้หรือไม่ แล้วส่งสัญญาณไปยัง ESP8266 แล้ว ESP8266 จึงไปสั่งให้มอเตอร์ทำงาน โดย Motor Driver Module HG7881 ให้เป็นไปตามการส่งค่ามาของเซ็นเซอร์
เซ็นเซอร์แบบนี้จะมีช่วงในการทำงาน หรือ ระยะในการตรวจจับจะได้ใกล้กว่าแบบ Opposed mode ซึ่งในสภาวะการทำงานปกติ พื้นเเป็นสีขาว ตัวรับ Receiver จะสามารถรับสัญญาณแสงจากตัวส่ง Emitter ได้ตลอดเวลา เนื่องจากลำแสง สะท้อนกลับมาได้ จะแสดงค่า เป็น 0
และ เมื่อพื้นเป็นสีดำ แสงสะท้อนกลับมาไม่ได้ จึงทำให้ตัวรับ Receiver ไม่สามารถรับลำแสงที่จะสะท้อนกลับมาได้ จะแสดงค่า เป็น 1
โปรเจค หุ่นยนต์เดินตามเส้น ESP8266 NodeMCU V2 นี้ เราจะใช้ 2 เซ็นเซอร์อินฟราเรด คือด้านซ้ายและด้านขวา โดย เมื่อเซ็นเซอร์ ทั้งด้านซ้ายและด้านขวา ตรวจสอบแล้วเป็นพื้นสีขาว ลำแสง สามารถสะท้อนกลับมาได้ทั้งคู่ ( 0 , 0 ) ให้หุ่นยนต์เคลื่อนที่ไปข้างหน้า
หากเซ็นเซอร์ซ้ายมาพบพื้นสีดำ และ เซ็นเซอร์ขวาพบพื้นสีขาว ( 1 , 0 ) ให้หุ่นยนต์เลี้ยวไปทางด้านซ้าย
หากเซ็นเซอร์ขวามาพบพื้นสีดำ และ เซ็นเซอร์ซ้ายพบพื้นสีขาว ( 0 , 1 ) ให้หุ่นยนต์เลี้ยวไปทางด้านขวา
หากเซ็นเซอร์ทั้งสองมาอยู่บนเส้นสีดำทั้งคู่ ( 1 , 1 ) ให้หุ่นยนต์หยุด
3. ประกอบ เซ็นเซอร์ ทั้ง 2 ตัว เข้ากับหุ่นยนต์
NodeMCU <-> เซ็นเซอร์ VIN <-> VCC (ซ้าย,ขวา)
G <-> GND (ซ้าย,ขวา)
D5 <-> OUT (ซ้าย)
D6 <-> OUT (ขวา)
ตัดแผ่นอะคริลิค ขนาด 3 x 10 เซ็นติเมตร
ประกอบ เซ็นเซอร์ซ้ายและขวา
ประกอบ เข้ากับหุ่นยนต์
เชื่อมต่อสาย เซ็นเซอร์ซ้ายและขวา
4. ทดสอบการทำงานของ เซ็นเซอร์ ทั้ง 2 ตัว
หลังจาก หุ่นยนต์เคลื่อนที่ หยุดแล้ว ตรวจสอบเซ็นเซอร์
โดยให้... เมื่ออยู่ที่พื้นสีขาว ให้ไฟ LED ติด 2 ดวง
และ เมื่อ เข้าไปในพื้นที่ สีดำ ให้ ไฟ LED ติด 1 ดวง
ถ้ายังไม่ได้ตามด้านบน ให้ใช้ ไขควง ปรับเซ็นเซอร์ ที่ สี่เหลี่ยมสีฟ้า-ขาว