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