Tải bản đầy đủ (.pdf) (9 trang)

Bài tập Kết nối thành phần và mô phỏng arduino

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (664.45 KB, 9 trang )

Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

1. 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:

Hiệu
chỉnh
ngõ ra
CB siêu
âm

Cảm biến siêu âm
Nguồn ngoài
M3 của Board


Motor

M3
A

B

Khối Motor Shield
1
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

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
2
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

2.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:
Bắt đầu

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ơ

a. Khai báo, cài đặt chức năng:
Gợi ý chương trình:
Khai báo, cài
#include <AFMotor.h>
đặt chức năng
int b1 = 13;//nút nhấn A
int b2 = 2;//nút nhấn B
int l1 = 11;//đèn nhấn 1 start
Khai báo chân các mạch:
int l2 = 3;//đèn nhấn 2 stop
- Khai báo thư viên điều khiển
int trig = 10;//chân phát cảm biến siêu âm
Motor: AF Motor
int echo = 9;//chân thu cảm biến siêu âm
- Nút nhấn
- Bóng đèn
AF_DCMotor motor1(3, MOTOR12_1KHZ);
- Cảm biến siêu âm
AF_DCMotor motor2(4, MOTOR12_1KHZ);
- Các biến tạm
boolean t1,t2;//biến tạm cho trạng thái hai nút nhấn
- Gán chức năng các châ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
Kết thúc
{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
3
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

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);
Xử lý nút nhấn
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)
{
Nút A được nhấn?
dem1=1;//biến tạm giữ trạng thái nút nhấn
digitalWrite(l1,HIGH);//đèn A sáng
Đúng
digitalWrite(l2,LOW);//đèn B tắt
Đèn L1(start) sáng
}
Đèn L2(stop) tắt
}
Dem1=1
t2=digitalRead(b2);// tương tự đoạn chương trình trên.
if (t2==1)
{ delayMicroseconds(20);
Nút B được nhấn?
t2=digitalRead(b2);
if (t2==1)
Đúng
{
Đèn L1(start) tắt
dem1=0;
Đèn L2(stop) sáng
Dem1=0
digitalWrite(l2,HIGH);
digitalWrite(l1,LOW);

}
Kết thúc
}
4
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng
c. Xử lý cảm biến siêu âm:

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);

Tính khoản cách
đo được từ
cảm biến siêu âm

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)


Khoản cách > 25 cm

{
dem2=1;

Sai
Đúng
Dem2=0

Dem2=1

}
else
{
dem2=0;

Kết thúc

}
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:
Xử lý và điều
khiển động cơ

if ((dem1==1)&&(dem2==1)) { chaythuan(); }
if ((dem1==1)&&(dem2==0)) { chaynghich(); }


Có nút nhấn
K. cách >25
Không có nút
Đạt 2 y. cầu
nhấn
Quay thuận
Ngưng

K. cách
<25cm
Quay nghịch

if (dem1==0) { ngung(); }

Kết thúc

5
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

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
6
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng


boolean 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);
7
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

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);
8
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016


Project Based Learning

Bài tập: Kết nối thành phần và mô phỏng

motor2.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.
9
Dr. Mai Thang Long – Introduction to Electronics Engineer – ĐHĐT12B – 11/2016



×