控制任務
對2驅動輪1從動輪的小車基本行走控制方法進行設計
實物圖與電路設計
圖1 雙輪驅動小車1

圖2 雙輪驅動小車2

圖3 雙輪驅動小車3
圖4 雙輪驅動小車控制系統接線圖
實際接線:
Arduino的引腳6,8,7分別接L298N驅動板的ENA,IN1,IN2,控制左電機,Arduino的引腳3,2,4分別接L298N驅動板的ENB,IN3,IN4,控制右電機,
程序設計
1 //控制板引腳定義 2 int motor_L_ENA = 6; //左電機控制端連接於Arduino板的6,8,7引腳 3 int motor_L_IN1 = 8; 4 int motor_L_IN2 = 7; 5 int motor_R_ENB = 2; //右電機控制端連接於Arduino板的2,3,4引腳 6 int motor_R_IN3 = 3; 7 int motor_R_IN4 = 4; 8 int low_speed = 100; //左轉右轉時的高速低速設定,可調整 9 int high_speed = 200; 10 11 12 13 //子函數定義 14 void go_forward_high_speed() //小車前進 全速 15 { 16 digitalWrite(motor_L_ENA, 1); //左電機正轉 17 digitalWrite(motor_L_IN1, 0); 18 digitalWrite(motor_L_IN2, 1); 19 20 digitalWrite(motor_R_ENB, 1); //右電機正轉 21 digitalWrite(motor_R_IN3, 0); 22 digitalWrite(motor_R_IN4, 1); 23 } 24 25 void go_backward_high_speed() //小車后退 全速 26 { 27 digitalWrite(motor_L_ENA, 1); //左電機反轉 28 digitalWrite(motor_L_IN1, 1); 29 digitalWrite(motor_L_IN2, 0); 30 31 digitalWrite(motor_R_ENB, 1); //右電機反轉 32 digitalWrite(motor_R_IN3, 1); 33 digitalWrite(motor_R_IN4, 0); 34 } 35 36 void stop_with_brake() //小車制動 37 { 38 digitalWrite(motor_L_ENA, 1); //左電機制動 39 digitalWrite(motor_L_IN1, 1); 40 digitalWrite(motor_L_IN2, 1) ; 41 42 digitalWrite(motor_R_ENB, 1); //右電機制動 43 digitalWrite(motor_R_IN3, 1); 44 digitalWrite(motor_R_IN4, 1) ; 45 } 46 47 void stop_free() //小車自由停止 48 { 49 digitalWrite(motor_L_ENA, 0); //左電機自由停止 50 digitalWrite(motor_L_IN1, 0); 51 digitalWrite(motor_L_IN2, 0) ; 52 53 digitalWrite(motor_R_ENB, 0); //右電機自由停止 54 digitalWrite(motor_R_IN3, 0); 55 digitalWrite(motor_R_IN4, 0) ; 56 } 57 58 void go_forward_speed_up() //小車前進 加速 59 { 60 digitalWrite(motor_L_IN1, 0); //左輪加速 61 digitalWrite(motor_L_IN2, 1); 62 for (int a = 100; a <= 255; a++) 63 { 64 analogWrite(motor_L_ENA, a); 65 delay(200); 66 } 67 68 digitalWrite(motor_R_IN3, 0); //右輪加速 69 digitalWrite(motor_R_IN4, 1); 70 for (int a = 100; a <= 255; a++) 71 { 72 analogWrite(motor_R_ENB, a); 73 delay(200); 74 } 75 } 76 77 void go_forward_speed_down() //小車前進 減速 78 { 79 digitalWrite(motor_L_IN1, 0); //左輪減速 80 digitalWrite(motor_L_IN2, 1); 81 for (int a = 255; a <= 100; a--) 82 { 83 analogWrite(motor_L_ENA, a); 84 delay(200); 85 } 86 87 digitalWrite(motor_R_IN3, 0); //右輪減速 88 digitalWrite(motor_R_IN4, 1); 89 for (int a = 255; a <= 100; a--) 90 { 91 analogWrite(motor_R_ENB, a); 92 delay(200); 93 } 94 } 95 96 void go_forward_left() //小車左轉 97 { 98 digitalWrite(motor_L_IN1, 0); 99 digitalWrite(motor_L_IN2, 1); 100 analogWrite(motor_L_ENA, low_speed); //左輪低速 101 102 digitalWrite(motor_R_IN3, 0); 103 digitalWrite(motor_R_IN4, 1); 104 analogWrite(motor_R_ENB, high_speed); //右輪高速 105 } 106 107 void go_forward_right() //小車右轉 108 { 109 digitalWrite(motor_L_IN1, 0); 110 digitalWrite(motor_L_IN2, 1); 111 analogWrite(motor_L_ENA, high_speed); //左輪高速 112 113 digitalWrite(motor_R_IN3, 0); 114 digitalWrite(motor_R_IN4, 1); 115 analogWrite(motor_R_ENB, low_speed); //右輪低速 116 } 117 118 119 void setup() 120 { 121 pinMode(motor_L_ENA, OUTPUT); //左電機使能和PWM調速口 122 pinMode(motor_L_IN1, OUTPUT); //左電機控制口1 123 pinMode(motor_L_IN2, OUTPUT); //左電機控制口2 124 125 pinMode(motor_R_ENB, OUTPUT); //右電機使能和PWM調速口 126 pinMode(motor_R_IN3, OUTPUT); //右電機控制口3 127 pinMode(motor_R_IN4, OUTPUT); //左電機控制口4 128 } 129 130 void loop() 131 { 132 stop_with_brake(); //制動2秒 133 delay(2000); 134 135 go_forward_speed_up(); //前進 加速 50秒 136 delay(50000); 137 go_forward_high_speed(); //前進 全速10秒 138 delay(10000); 139 go_forward_speed_down(); //前進 減速50秒 140 delay(50000); 141 stop_free(); //自由停車5秒 142 delay(5000); 143 144 go_forward_left(); //小車左轉10秒,時間可調整 145 delay(10000); 146 go_forward_right(); //小車右轉10秒,時間可調整 147 delay(10000); 148 stop_free(); //自由停車5秒 149 delay(5000); 150 }
運行效果
包括下列動作:小車制動,加速前進,全速前進,減速前進,自由停車,小車左轉,小車右轉,自由停車,循環
進一步練習
設計程序控制小車走圓形曲線或者走口字
