เนื่องจากชิว TKL NanoLearning มีชุดขับมอเตอร์ TB6612FNG
ใช้สายในการเชื่อมต่อ 6 เส้น เชื่อมกับบอร์ด Nano เพื่อขับ มอเตอร์ 2 ตัวโดยใช้ Pin ดังนี้
PWML ต่อกับ Pin 5 กำหนดความเร็วในรูปแบบ PWM
IN1L ต่อกับ Pin 9 กำหนดทิศทางของมอเตอร์
IN2L ต่อกับ Pin 4 กำหนดทิศทางของมอเตอร์
PWMR ต่อกับ Pin 6 กำหนดความเร็วในรูปแบบ PWM
IN1R ต่อกับ Pin 7 กำหนดทิศทางของมอเตอร์
IN2R ต่อกับ Pin8 กำหนดทิศทางของมอเตอร์
Pin PWM สามารถส่งค่าออกได้ ตั้งแต่ 0 - 255
บอร์ด TKL NanoLearning
มอเตอร์ หรือ เซตหุ่นยนต์เพื่อการศึกษา
ตรวจสอบการเชื่อมต่อมอเตอร์ให้ถูกต้อง โดยมีวิธีเช็คดังนี้
1. เสียบสายไปที่ช่องต่อมอเตอร์ ให้ มอเตอร์ซ้ายอยู่ที่ Motor1 มอเตอร์ขวาอยู่ที่ Motor2
2. ตรวจสอบทิศทางเบื้องต้นโดยการหมุนล้อไปข้างหน้า ถ้าไฟสถานะมอเตอร์ขึ้นเป็นสีเขียวแสดงว่าถูกต้อง หากขึ้นสีแดงให้สลับขั้วมอเตอร์แล้วทดสอบอีกครั้ง
////////////ตั้งค่าพอร์ตมอเตอร์////////////////////
#define PWMR 6
#define DR1 8 /// กำหนดสัญญาณดิจิตอลขวาที่ 1 พอร์ต 7
#define DR2 7 /// กำหนดสัญญาณดิจิตอลขวาที่ 2 พอร์ต 8
/////////////////////////////////
#define PWML 5
#define DL1 9 // กำหนดสัญญาณดิจิตอลซ้ายที่ 1 พอร์ต 9
#define DL2 4 // กำหนดสัญญาณดิจิตอลซ้ายที่ 2 พอร์ต 4
/////////////////กำหนดค่ากลางเซนเซอร์//////////////
#define buttonPin 2
void setup() {
pinMode(buttonPin,INPUT);
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
}
void loop(){
int sw = digitalRead(buttonPin); //กำหนดตัวแปร sw ให้มีค่าเท่ากับ ค่าที่อ่านได้จาก digital Pin 2 หรือ ปุ่ม OK บนบอร์ด
if (sw==1){
Motor(100,100);delay(500); //มอเตอร์ ซ้ายและขวาหมุนไปข้างหน้า ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,-100);delay(500); //มอเตอร์ ซ้ายเดินหน้า มอเตอร์ขวา ถอยหลัง ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,100);delay(500); //มอเตอร์ ซ้ายและขวาหมุนไปข้างหน้า ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,-100);delay(500); //มอเตอร์ ซ้ายเดินหน้า มอเตอร์ขวา ถอยหลัง ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,100);delay(500); //มอเตอร์ ซ้ายและขวาหมุนไปข้างหน้า ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,-100);delay(500); //มอเตอร์ ซ้ายเดินหน้า มอเตอร์ขวา ถอยหลัง ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,100);delay(500); //มอเตอร์ ซ้ายและขวาหมุนไปข้างหน้า ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(100,-100);delay(500); //มอเตอร์ ซ้ายเดินหน้า มอเตอร์ขวา ถอยหลัง ความเร็ว 100 หน่วงเวลา 500 มิลลิวินาที
Motor(0,0);} // มอเตอร์ซ้ายและขวาหยุด
}
void Motor(int sl,int sr){ //สร้างฟังก์ชั่นเพื่อใช้งานมอเตอร์ โดยรับพารามิเตอร์2 ชุด คือความเร็วมอเตอร์ซ้ายและขวา
if(sl>0){
digitalWrite(DL1,LOW);
digitalWrite(DL2,HIGH);
analogWrite(PWML,sl);
}else if(sl<0){
digitalWrite(DL1,HIGH);
digitalWrite(DL2,LOW);
analogWrite(PWML,-sl);
}else{
digitalWrite(DL1,HIGH);
digitalWrite(DL2,HIGH);
}
if(sr>0){
digitalWrite(DR1,HIGH);
digitalWrite(DR2,LOW);
analogWrite(PWMR,sr);
}else if(sr<0){
digitalWrite(DR1,LOW);
digitalWrite(DR2,HIGH);
analogWrite(PWMR,-sr);
}else{
digitalWrite(DR1,HIGH);
digitalWrite(DR2,HIGH);
}
}
ให้ผู้เรียนเขียนโปรแกรมให้หุ่นยนต์เดินเป็นสีเหลี่ยมโดยใช้คำสั่ง Motor และ delay
หุ่นยนต์แต่ละตัวประกอบขึ้นจากมือ อาจมีความผิดพลาดของโครงสร้างทำให้มีปัญหาในการเดินไม่ตรง
ดังนั้นก่อนที่ผู้เรียนจะเขียนโปรแกรมควรทำการจูนหุ่นหยนต์เสียก่อน ด้วยการใช้ เพิ่มกำลังไฟให้มอเตอร์ที่วิ่งช้ากว่า เพื่อให้หุ่นยนต์เดินได้ตรงที่สุด