bài tập cơ bản arduino chi tiết nhất về xe đua tự động dò đường, tự học lắp ráp xe đua dò đường, bài tập arduino cơ bản, sơ đồ nguyên lý lắp xe đua dò đường, lắp xe đua cho người mới học cơ bản, bài tập cơ bản về xe đua
Trang 11 Giới thiệu tổng quan:
Tính năng yêu cầu:
- Nhấn nút A cho phép toàn bộ mạch hoạt động
- Nhấn nút B ngưng toàn bộ hoạt động của mạch
- Khi tín hiệu của cảm biến siêu âm trả về đạt yêu cầu cho trước (lớn hơn 7 cm: khoản cách mong muốn) thì hai động cơ sẽ quay Nếu tín hiệu trả về từ cảm biến siêu âm (nhỏ hơn 7 cm) hai động cơ sẽ quay theo chiều ngược lại
Các thành phần cần có:
- Board Arduino UNO
- Board Motor Shield cho Arduino
- Hai nút nhấn
- Hai đèn led
- Một cảm biến siêu âm
2 Mô phỏng:
2.1 Giải thích sơ đồ mô phỏng (cho trước): thực tế sơ đồ mô phỏng được xây dựng gần giống với thực tế khi ta cắm hai board Arduino và Motor shield lại với nhau, cùng với việc gắn thêm nút nhấn, led và cảm biến siêu âm:
Nguồn ngoài M3 của Board
Motor
M3
Khối Motor Shield
Cảm biến siêu âm Hiệu
chỉnh
ngõ ra
CB siêu
âm
Trang 22
a Khi gắn hai board Arduino UNO và Motor Shield lại với nhau:
Đối với các bạn sinh viên ở trình độ này, không yêu cầu phải HIỂU rõ việc kết nối như thế nào Khi tiến hành cắm hai board này lại với nhau, ta chỉ cần chú ý đến các yếu tố sau:
- Từ board Arduino ta sẽ lập trình điều khiển động cơ thông qua board Motor shield nhờ các thư viện có sẵn (hỗ trợ board Motor: AFMotor)
- Ta sẽ sử dụng các chân M3, M4 (2 cặp chân trên board Motor Shield) để nối tới hai động cơ (bánh xe)
- Các chân còn trống và kết nối phục vụ cho mô phỏng trên board Arduino:
- Chân 13: kết nối với nút nhấn A
- Chân 11: kết nối với đèn L1: báo hiệu tín hiệu cho phép hoạt động
- Chân 10: kết nối với chân trig của cảm biến siêu âm (phát)
- Chân 9: chân echo của cảm biến siêu âm (thu)
- Chân 3: kết nối với đèn L2: báo hiệu tín hiệu ngưng hoạt động
- Chân 2: kết nối với nút nhấn B
- Chân 1, 0: nối với thiết bị mô phỏng giao tiếp nối tiếp (COM): dùng để quan sát tín hiệu thu về từ cảm biến siêu âm
b Cảm biến siêu âm (mô phỏng)
- Chân 5V: nối chung với nguồn 5V của Board Arduino
- Chân GND: nối chung mass của mạch mô phỏng
- Chân Trig: phát tín hiệu, nối với chân 10 của board Arduino
- Chân Echo: thu tín hiệu, nối với chân 9 của board Arduino
c Nguồn (mô phỏng):
Ta sẽ sử dụng nguồn pin để cung cấp cho đồng thời hai board Trong sơ đồ mô phỏng, các bạn sẽ thấy có nguồn ngoài cung cấp cho Board Motor Tuy nhiên thực tế thì sẽ khác đôi chút, phần này sẽ được giới thiệu lúc lắp ráp mô hình thực
d Biến trở nối với cảm biến siêu âm (RV1): trong mô phỏng ta sẽ chỉnh biến trở này để thay đổi giá trị ngõ ra của cảm biến siêu âm
Trang 32.2 Giải thuật chương trình:
Với yêu cầu được đặt ra, giải thuật gợi ý như sau:
Khai báo, cài đặt chức năng
Xử lý nút nhấn
Xử lý cảm biến siêu âm
Xử lý, điều khiển động cơ Bắt đầu
a Khai báo, cài đặt chức năng:
Gợi ý chương trình:
#include <AFMotor.h>
int b1 = 13;//nút nhấn A int b2 = 2;//nút nhấn B int l1 = 11;//đèn nhấn 1 start int l2 = 3;//đèn nhấn 2 stop int trig = 10;//chân phát cảm biến siêu âm int echo = 9;//chân thu cảm biến siêu âm AF_DCMotor motor1(3, MOTOR12_1KHZ);
AF_DCMotor motor2(4, MOTOR12_1KHZ);
boolean t1,t2;//biến tạm cho trạng thái hai nút nhấn int dem1, dem2; biến tạm giữ trạng thái cho nút nhấn float tgian,khoancach;//thời gian và khoản cách cảm biến siêu âm void setup() //cài đặt
{Serial.begin(9600); // khai báo giao tiếp COM, dùng để quan sát và hiệu chỉnh độ chính xác của cảm biến siêu âm
Khai báo, cài
đặt chức năng
Khai báo chân các mạch:
- Khai báo thư viên điều khiển
Motor: AF Motor
- Nút nhấn
- Bóng đèn
- Cảm biến siêu âm
- Các biến tạm
- Gán chức năng các chân
Kết thúc
Trang 44
pinMode(b1,INPUT);
pinMode(b2,INPUT);
pinMode(l1,OUTPUT);
pinMode(l2,OUTPUT);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
//giá trị ban đầu của các biến tạm
dem1=0;
dem2=0;
tgian=0;
khoancach=0;
}
b Xử lý nút nhấn
Gợi ý chương trình:
t1=digitalRead(b1);//trạng thái nút nhấn A
if (t1==1) { delayMicroseconds(20);
t1=digitalRead(b1); // chờ một khoản 20us, và đọc lại trạng thái nút A, để chống rung phím nhấn
if (t1==1) {
dem1=1;//biến tạm giữ trạng thái nút nhấn digitalWrite(l1,HIGH);//đèn A sáng digitalWrite(l2,LOW);//đèn B tắt }
} t2=digitalRead(b2);// tương tự đoạn chương trình trên
if (t2==1) { delayMicroseconds(20);
t2=digitalRead(b2);
if (t2==1) {
dem1=0;
digitalWrite(l2,HIGH);
digitalWrite(l1,LOW);
} }
Nút A được nhấn?
Xử lý nút nhấn
Đúng Đèn L1(start) sáng Đèn L2(stop) tắt Dem1=1
Kết thúc
Nút B được nhấn?
Đúng Đèn L1(start) tắt Đèn L2(stop) sáng Dem1=0
Trang 5c Xử lý cảm biến siêu âm:
Gợi ý chương trình:
digitalWrite(trig, LOW); //
delayMicroseconds(2); //tắt chân phát digitalWrite(trig, HIGH);
delayMicroseconds(10); // xuất tín hiệu 10us digitalWrite(trig, LOW); //tắt để nhận
tgian = pulseIn(echo, HIGH); // tgian nhận tín hiệu khoancach = 0.017 * tgian; //
if (khoancach>25) {
dem2=1;
} else { dem2=0;
} Serial.println(khoancach); //xuất tín hiệu khoản cách
ra cổng COM để quan sát
d Xử lý và điều khiển động cơ:
Gợi ý chương trình:
if ((dem1==1)&&(dem2==1)) { chaythuan(); }
if ((dem1==1)&&(dem2==0)) { chaynghich(); }
if (dem1==0) { ngung(); }
Xử lý cảm biến siêu âm
Tính khoản cách
đo được từ cảm biến siêu âm
Kết thúc
Khoản cách > 25 cm
Đúng Dem2=1
Sai
Dem2=0
Xử lý và điều khiển động cơ
Kết thúc
Có nút nhấn
K cách >25 Đạt 2 y cầu Không có nút
Quay thuận Quay nghịch Ngưng
Trang 66
e Lưu ý về chương trình điều khiển động cơ:
Cách viết bên dưới yêu cầu thư viện AFMotor đã có và phải khai báo tên(chỉ số động cơ) trước //động cơ chạy thuận
motor1.setSpeed(250);// cài tốc độ cho động cơ 1, 255 là tối đa
motor2.setSpeed(250);// cài tốc độ cho động cơ 2, 255 là tối đa
motor1.run(FORWARD);// lệnh cho động cơ chạy thuận
motor2.run(FORWARD);
}
//động cơ chạy nghịch
motor1.setSpeed(250);// cài tốc độ cho động cơ 1, 255 là tối đa
motor2.setSpeed(250);// cài tốc độ cho động cơ 2, 255 là tối đa
motor1.run(BACKWARD);// lệnh cho động cơ chạy nghịch
motor2.run(BACKWARD);
}
// động cơ ngưng
motor1.run(RELEASE);// lệnh cho động cơ chạy nghịch
motor2.run(RELEASE);
f Chương trình tổng quan (gợi ý)
#include <AFMotor.h>
int b1 = 13;//nút nhấn 1:chạy/ngưng động cơ 1
int b2 = 2;//nút nhấn 2:chạy/ngưng động cơ 2
int l1 = 11;//đèn nhấn 1: chạy/ngưng đc 1
int l2 = 3;//đèn nhấn 2:chạy ngưng đc 2
int trig = 10;
int echo = 9;
AF_DCMotor motor1(3, MOTOR12_1KHZ);
AF_DCMotor motor2(4, MOTOR12_1KHZ);
////bientam
Trang 7boolean t1,t2;
int dem1, dem2;
float tgian,khoancach;
void setup()
{Serial.begin(9600); // set up Serial library at 9600 bps
//Serial.println("Project test!");
pinMode(b1,INPUT);
pinMode(b2,INPUT);
pinMode(l1,OUTPUT);
pinMode(l2,OUTPUT);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
dem1=0;
dem2=0;
tgian=0;
khoancach=0;
}
void loop()
{
nutnhan();
sieuam();
if ((dem1==1)&&(dem2==1))
{
chaythuan();
}
if ((dem1==1)&&(dem2==0))
{
chaynghich();
}
if (dem1==0)
{
ngung();
}
}
void nutnhan()
{
t1=digitalRead(b1);
Trang 88
if (t1==1)
{ delayMicroseconds(20);
t1=digitalRead(b1);
if (t1==1)
{
dem1=1;
digitalWrite(l1,HIGH);
digitalWrite(l2,LOW);
}
}
t2=digitalRead(b2);
if (t2==1)
{ delayMicroseconds(20);
t2=digitalRead(b2);
if (t2==1)
{
dem1=0;
digitalWrite(l2,HIGH);
digitalWrite(l1,LOW);
}
}
}
void chaythuan()
{
motor1.setSpeed(250);
motor2.setSpeed(250);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void chaynghich()
{
motor1.setSpeed(250);
motor2.setSpeed(250);
Trang 9motor2.run(BACKWARD);
motor1.run(BACKWARD);
}
void ngung()
{
motor1.setSpeed(0);
motor2.setSpeed(0);
motor1.run(RELEASE);
motor2.run(RELEASE);
}
void sieuam()
{
digitalWrite(trig, LOW);
delayMicroseconds(2); //tắt chân phát
digitalWrite(trig, HIGH);
delayMicroseconds(10); // xuất tín hiệu 10us
digitalWrite(trig, LOW); //tắt để nhận
tgian = pulseIn(echo, HIGH); // tgian nhận tín hiệu
khoancach = 0.017 * tgian; //
if (khoancach>25)
{
dem2=1;
}
else
{
dem2=0;
}
Serial.println(khoancach);
}
2.3 Chạy mô phỏng và nhận xét
3 Ráp và thử nghiệm với mô hình thực tế: sẽ trình bày trên lớp học