CHƯƠNG
TRÌNH CHO XE ĐIỀU KHIỂN BẰNG BLUETOOTH
Yêu cầu phần cứng
Một
module điều khiển động cơ l298N
Một module
thu phát Bluetooth HC_06
Một
mini testboard
Dây
điện đực cái
còi
pin 9v và hộp
Yêu cầu phần mềm
Arduino IDE classicbluetoothRCcontroller
https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller&hl=vi
Mở Arduino IDE classic và nhập đoạn mã sau
//code bluetooth RC controller
#define
dtruoc_P 14 //LED Trước phải pin A0 for Arduino Uno
#define
dtruoc_T 15 //LED Trước trái pin
A1 for Arduino Uno
#define
dsau_P 16 //LED Sau phải pin
A2 for Arduino Uno
#define
dsau_T 17 //LED Sau trái pin
A3 for Arduino Uno
#define
ken 18 //ken pin A4 for Arduino Uno
#define
ENA_m1 5 // Enable/speed motor Trước
phải
#define
ENB_m1 6 // Enable/speed motor Sau
phải
#define
ENA_m2 10 // Enable/speed motor Trước
trái
#define
ENB_m2 11 // Enable/speed motor Sau
trái
#define
IN_11 2 //
L298N #1 in 1 motor Trước phải
#define
IN_12 3 //
L298N #1 in 2 motor Trước phải
#define
IN_13 4 //
L298N #1 in 3 motor Sau phải
#define
IN_14 7 //
L298N #1 in 4 motor Sau phải
#define
IN_21 8 //
L298N #2 in 1 motor Trước trái
#define
IN_22 9 //
L298N #2 in 2 motor Trước trái
#define
IN_23 12 //
L298N #2 in 3 motor Sau trái
#define
IN_24 13 //
L298N #2 in 4 motor Sau trái
int command; //Int to store app command state.
int tocdo = 100; // 50 - 255.
int speed_Coeff = 4;
boolean lightFront = false;
boolean lightBack = false;
boolean horn = false;
void setup() {
pinMode(dtruoc_P,
OUTPUT);
pinMode(dtruoc_T,
OUTPUT);
pinMode(dsau_P,
OUTPUT);
pinMode(dsau_T,
OUTPUT);
//pinMode(ken,
OUTPUT);
pinMode(ENA_m1, OUTPUT);
pinMode(ENB_m1, OUTPUT);
pinMode(ENA_m2, OUTPUT);
pinMode(ENB_m2, OUTPUT);
pinMode(IN_11, OUTPUT);
pinMode(IN_12, OUTPUT);
pinMode(IN_13, OUTPUT);
pinMode(IN_14, OUTPUT);
pinMode(IN_21, OUTPUT);
pinMode(IN_22, OUTPUT);
pinMode(IN_23, OUTPUT);
pinMode(IN_24, OUTPUT);
Serial.begin(9600);
}
void goAhead(){ //chạy tới
digitalWrite(IN_11, HIGH);
digitalWrite(IN_12, LOW);
analogWrite(ENA_m1, tocdo);
digitalWrite(IN_13, LOW);
digitalWrite(IN_14, HIGH);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, LOW);
digitalWrite(IN_22, HIGH);
analogWrite(ENA_m2, tocdo);
digitalWrite(IN_23, HIGH);
digitalWrite(IN_24, LOW);
analogWrite(ENB_m2, tocdo);
}
void goBack(){ //chạy lùi
digitalWrite(IN_11, LOW);
digitalWrite(IN_12, HIGH);
analogWrite(ENA_m1, tocdo);
digitalWrite(IN_13, HIGH);
digitalWrite(IN_14, LOW);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, HIGH);
digitalWrite(IN_22, LOW);
analogWrite(ENA_m2, tocdo);
digitalWrite(IN_23, LOW);
digitalWrite(IN_24, HIGH);
analogWrite(ENB_m2, tocdo);
}
void veophai(){ //sang phải
digitalWrite(IN_11, LOW);
digitalWrite(IN_12, HIGH);
analogWrite(ENA_m1, tocdo);
digitalWrite(IN_13, HIGH);
digitalWrite(IN_14, LOW);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, LOW);
digitalWrite(IN_22, HIGH);
analogWrite(ENA_m2, tocdo);
digitalWrite(IN_23, HIGH);
digitalWrite(IN_24, LOW);
analogWrite(ENB_m2, tocdo);
}
void veotrai(){ //sang trái
digitalWrite(IN_11, HIGH);
digitalWrite(IN_12, LOW);
analogWrite(ENA_m1, tocdo);
digitalWrite(IN_13, LOW);
digitalWrite(IN_14, HIGH);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, HIGH);
digitalWrite(IN_22, LOW);
analogWrite(ENA_m2, tocdo);
digitalWrite(IN_23, LOW);
digitalWrite(IN_24, HIGH);
analogWrite(ENB_m2, tocdo);
}
void toiveophai(){ //chạy tới vẹo phải
digitalWrite(IN_11, HIGH);
digitalWrite(IN_12, LOW);
analogWrite(ENA_m1, tocdo/speed_Coeff);
digitalWrite(IN_13, LOW);
digitalWrite(IN_14, HIGH);
analogWrite(ENB_m1, tocdo/speed_Coeff);
digitalWrite(IN_21, LOW);
digitalWrite(IN_22, HIGH);
analogWrite(ENA_m2, tocdo);
digitalWrite(IN_23, HIGH);
digitalWrite(IN_24, LOW);
analogWrite(ENB_m2, tocdo);
}
void toiveotrai(){ //chạy tới vẹo trái
digitalWrite(IN_11, HIGH);
digitalWrite(IN_12, LOW);
analogWrite(ENA_m1, tocdo);
digitalWrite(IN_13, LOW);
digitalWrite(IN_14, HIGH);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, LOW);
digitalWrite(IN_22, HIGH);
analogWrite(ENA_m2, tocdo/speed_Coeff);
digitalWrite(IN_23, HIGH);
digitalWrite(IN_24, LOW);
analogWrite(ENB_m2,
tocdo/speed_Coeff);
}
void luisangphai(){
//chạy
lui sang phải
digitalWrite(IN_11, LOW);
digitalWrite(IN_12, HIGH);
analogWrite(ENA_m1,
tocdo/speed_Coeff);
digitalWrite(IN_13, HIGH);
digitalWrite(IN_14, LOW);
analogWrite(ENB_m1,
tocdo/speed_Coeff);
digitalWrite(IN_21, HIGH);
digitalWrite(IN_22, LOW);
analogWrite(ENA_m2,
tocdo);
digitalWrite(IN_23, LOW);
digitalWrite(IN_24, HIGH);
analogWrite(ENB_m2,
tocdo);
}
void luisangtrai(){ // chạy
lui sang trái
digitalWrite(IN_11, LOW);
digitalWrite(IN_12, HIGH);
analogWrite(ENA_m1,
tocdo);
digitalWrite(IN_13, HIGH);
digitalWrite(IN_14, LOW);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, HIGH);
digitalWrite(IN_22, LOW);
analogWrite(ENA_m2,
tocdo/speed_Coeff);
digitalWrite(IN_23, LOW);
digitalWrite(IN_24, HIGH);
analogWrite(ENB_m2, tocdo/speed_Coeff);
}
void dunglai(){ //dừng lại
digitalWrite(IN_11, LOW);
digitalWrite(IN_12, LOW);
analogWrite(ENA_m1, tocdo);
digitalWrite(IN_13, LOW);
digitalWrite(IN_14, LOW);
analogWrite(ENB_m1, tocdo);
digitalWrite(IN_21, LOW);
digitalWrite(IN_22, LOW);
analogWrite(ENA_m2, tocdo);
digitalWrite(IN_23, LOW);
digitalWrite(IN_24, LOW);
analogWrite(ENB_m2, tocdo);
}
void loop(){
if (Serial.available() > 0) {
command = Serial.read();
dunglai(); //Initialize with motors stopped.
if
(lightFront) {digitalWrite(dtruoc_P, HIGH); digitalWrite(dtruoc_T, HIGH);}
if
(!lightFront) {digitalWrite(dtruoc_P, LOW); digitalWrite(dtruoc_T, LOW);}
if
(lightBack) {digitalWrite(dsau_P, HIGH); digitalWrite(dsau_T, HIGH);}
if
(!lightBack) {digitalWrite(dsau_P, LOW); digitalWrite(dsau_T, LOW);}
//if
(horn) {digitalWrite(ken, HIGH);} cồi xe
//if
(!horn) {digitalWrite(ken, LOW);}
switch (command) {
case
'F':goAhead();break;
case
'B':goBack();break;
case 'L':veotrai();break;
case 'R':veophai();break;
case 'I':toiveophai();break;
case 'G':toiveotrai();break;
case 'J':luisangphai();break;
case 'H':luisangtrai();break;
case '0':tocdo =
100;break;// tốc độ tối thiểu 100 vòng trên phút
case '1':tocdo =
115;break;
case '2':tocdo =
130;break;
case '3':tocdo =
145;break;
case '4':tocdo =
160;break;
case '5':tocdo =
175;break;
case '6':tocdo =
190;break;
case '7':tocdo =
205;break;
case '8':tocdo =
220;break;
case '9':tocdo =
235;break;
case 'q':tocdo =
255;break; // tốc độ tối đa 255 vòng trên phút
case
'W':lightFront = true;break; // bật đèn trước
case
'w':lightFront = false;break; // tắt đèn
trước
case
'U':lightBack = true;break; // bật đèn
sau
case
'u':lightBack = false;break; // tắt đèn
sau
case 'V':horn =
true;break; // nhấn cồi
case 'v':horn =
false;break; // tắt cồi
}
}
}
--
video demo (no light)
--
video demo (no light)
No comments:
Post a Comment