You are on page 1of 24

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Đề tài:
Xe tự hành tránh vật cản
Ngành: Công nghệ kỹ thuật cơ điện tử

Lớp: K64M-CLC2

Mã lớp học phần: EMA3129 21


Giảng viên hướng dẫn: T.S Đỗ Trần Thắng
Phạm Mạnh Tuấn
Thành viên nhóm:
Nguyễn Viết Đông-19021016
Nguyễn Quang Đại-19021010
Nghiêm Quang Huy-19021063

Hà Nội – 2022
MỤC LỤC

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 2

1.1 Đặt vấn đề 2

1.2 Mục tiêu nghiên cứu 2

1.3 Phương pháp nghiên cứu 2

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 3

2.1. GIỚI THIỆU PHẦN CỨNG 3

2.1.1. Giới thiệu Raspberry Pi 3 3

2.1.2 Hệ điều hành và phần mềm 3

2.1.3 Mạch công suất cầu H (L298N) 5

2.1.4. Cảm biến siêu âm 7

2.1.5. Động cơ DC 10

CHƯƠNG 3: THIẾT KẾ PHẦN CỨNG 11

3.1 Thiết kế sơ đồ khối của hệ thống 11

3.2 Sơ đồ nguyên lý 11

CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM 12

CHƯƠNG 5: TỔNG KẾT 13

5.1. Những điều đã làm được 13

1
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Đặt vấn đề
Ngày nay, con người cùng với những ứng dụng của khoa học kỹ thuật tiên tiến của
thế giới, chúng ta đã và đang ngày một thay đổi, văn minh và hiện đại hơn. Sự phát triển
của kỹ thuật điện tử đã tạo ra hàng loạt những thiết bị với các đặc điểm nổi bật như sự
chính xác cao, tốc độ nhanh, gọn nhẹ…là những yếu tố rất cần thiết góp phần cho hoạt
động của con người đạt hiệu quả ngày càng cao hơn. Vi xử lý và điều khiển đang trở
thành một ngành khoa học đa nhiệm vụ. Nó đã đáp ứng được những đòi hỏi không ngừng
của các ngành, lĩnh vực khác nhau cho đến nhu cầu thiết yếu của con người trong cuộc
sống hàng ngày. Xuất phát từ những ứng dụng đó, chúng em đã thiết kế và thực hiện đề
tài: “Điều khiển xe mô hình cơ bản với Raspberry Pi 3 và Module L298N”.

1.2 Mục tiêu nghiên cứu


❖ Đề tài có những mục tiêu chính như sau:

– Điều khiển xe robot chạy tiến, lùi, trái và phải


– Sử dụng cảm biến siêu âm ở trước để tránh vật cản
– Viết chương trình điều khiển cho kit raspberry pi 3
– Thi công mô hình xe robot
– Sản phẩm cuối cùng và chạy thực tế

1.3 Phương pháp nghiên cứu


– Tìm hiểu tổng quan về lý thuyết của đề tài
– Đọc hiểu các tài liệu liên quan đến đề tài
– Thảo luận nhóm để thống nhất ý kiến
– Thiết kế phần cứng
– Thiết kế phần mềm
– Thực nghiệm và kiểm chứng sản phẩm

2
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1. GIỚI THIỆU PHẦN CỨNG
2.1.1. Giới thiệu Raspberry Pi 3
a. Raspberry Pi là gì

Raspberry Pi là cái máy tính giá 35USD kích cỡ như iPhone và


chạy hệ điều hành Linux. Với mục tiêu chính của chương trình là giảng
dạy máy tính cho trẻ em. Được phát triển bởi Raspberry Pi Foundation –
là tổ chức phi lợi nhuận với tiêu chí xây dựng hệ thống mà nhiều người
có thể sử dụng được trong những công việc tùy biến khác nhau.

H

n
h
2 Raspberry Pi sản xuất bởi 3 OEM: Sony, Qsida, Egoman. Và được
.
phân phối chính bởi Element14, RS Components và Egoman.
1
: Raspberry pi 3 ra đời nhằm tạo ra một máy tính rẻ tiền cho sinh
B
viên, nhưng sau đó pi đã được sự quan tâm của nhiều người . Đặc tính của
o
m

c 3
h
R
a
Raspberry Pi xây dựng xoay quanh bộ xử lí SoC Broadcom BCM2835 (
là chip xử lí mobile mạnh mẽ có kích thước nhỏ hay được dùng trong điện
thoại di động ) bao gồm CPU , GPU , bộ xử lí âm thanh /video và các tính
năng khác … tất cả được tích hợp bên trong chip có điện năng thấp này.

H

n
h
2 trúc phần cứng raspberry pi 3
b. Cấu
.
2
–: Raspberry Pi có hai phiên bản, Model A có giá 25$ và Model B
S
ơ có giá 35$. Model B như hình trên thông dụng hơn cả. Model B
đ

c
4

u
t

bao gồm những phần cứng và những cổng giao diện.
– CPU: “Trái tim” của board mạch. Raspberry Pi 3 sử dụng vi xử
lý BCM2836 của Broadcom. Đây là loại SoC (system on chip)
tức là trên chip này tích hợp cùng lúc:
– CPU: 900 MHz ,4 nhân, kiến trúc ARM Cortex-A7. Vì sử
dụng ARM Cortex-A7 nên Raspberry Pi 3 có thể chạy được
Ubuntu core và Windows 10 core mượt mà.
– SD RAM: 1 GB
– GPU: Broadcom VideoCore IV @ 250 MHz
– Khe cắm thẻ micro-SD: Có thể nhận thấy sẽ không có ổ cứng
trên Raspberry Pi và thay vào đó là thẻ nhớ SD. Tất cả dữ liệu
sẽ được lưu trữ trên thẻ nhớ này. Cần dùng ít nhất là thẻ 4GB
class 4 (4MB/s) cho Raspberry Pi (khuyên dùng thẻ 8GB class
10).
– Cổng USB: Raspberry Pi 2 có 4 cổng USB 2.0. Đủ để bạn
cắm các ngoại vi cần thiết như chuột, bàn phím và usb wifi.
– Cổng Ethernet: Model 2 có cổng Ethernet chuẩn RJ45.
– Cổng HDMI: Dùng để truyền tín hiệu Video và Audio số. Có tới
14 chuẩn video được hỗ trợ và tín hiệu HDMI có thể dễ dàng
chuyển đổi thành các chuẩn khác như DVI, RCA, hoặc SCART.
– Ngõ ra Audio-Video: Ngõ ra này là giắc cắm chuẩn 3.5mm, hỗ
trợ cho người dùng không có màn hình hỗ trợ HDMI. Âm thanh
và hình ảnh lấy ra từ cổng này có chất lượng kém hơn một chút
so với từ cổng HDMI.
– Cổng cấp nguồn Micro USB: Một trong những điều đầu tiên có
thể nhận thấy là Raspberry Pi không có nút nguồn. Micro USB
được chọn làm cổng cấp nguồn. Nguồn cấp cho Raspberry Pi là
5v điện áp (bắt buộc) và dòng nên lớn hớn 1A. Cấp nguồn quá
5v sẽ rất dễ làm cháy board mạch.
– Cổng DSI (Display Serial Interface): Cổng này dùng để kết nối
với LCD hoặc màn hình OLED.

5
– Cổng CSI (Camera Serial Interface): Cổng này dùng để kết nối
với module camera riêng của Raspberry Pi. Module này thu
được hình ảnh chất lượng lên đến 1080p.
– GPIO (General Purpose Input and Output): Giống như các
chân của vi điều khiển, các IO này của Raspberry Pi cũng
được sử dụng để xuất tín hiệu ra led, thiết bị… hoặc đọc tín
hiệu vào từ các nút nhấn, công tắc, cảm biến… Ngoài ra còn
có các IO tích hợp các chuẩn truyền dữ liệu UART, I2C và
SPI.Sơ đồ chân GPIO Raspberry pi.

Hình 2.3: Sơ đồ chân GPIO của Raspberry


❖ Trong 40 chân GPIO bao gồm:
– 26 chân GPIO. Khi thiết lập là input, GPIO có thể được sử dụng
như chân interupt, GPIO 14 & 15 được thiết lập sẵn là chân

6
input.
– 1UART, 1 I2C, 2 SPI, 1 PWM (GPIO 4)
– 2 chân nguồn 5V, 2 chân nguồn 3.3V, 8 chân GND

– 2 chân ID EEPROM
– Vi xử lý ARMv7 32bit quad core 900Mhz, dung lượng Ram
1G, và bộ nhớ kiểu micro-SD dung lượng tùy chọn (nên
>=4G).
– Khi một chân GPIO lên mức cao sẽ đạt điện áp 3.3V, dòng ra tối
đa Imax = 5mA

2.1.2 Hệ điều hành và phần mềm


Về cơ bản Raspberry Pi có khá nhiều OS linux chạy được nhưng
vẫn có sự thiếu vắng của Ubuntu (do CPU ARMv6) Điểm danh một số
Distributions Linux (nhúng) chạy trên Raspberry Pi như Raspbian,Pidora,
openSUSE, OpenWRT, OpenELEC,….

a. Raspbian

Đây là bản build Linux dựa trên nên Debian (Gần giống ubuntu)

H với giao diện LXDE (thay vì GNOME). Có đầy đủ web browser, media

player, tools, etc … Nói chung HĐH này dành cho những người muốn
n
h dùng Raspberry Pi như một cái PC.
2
.
4
: 7
G
i
a
b. Ubuntu Mate

Tương tự như Raspbian, Ubuntu Mate cũng hướng đến người dùng
sử dụng Raspberry Pi như máy tính văn phòng. Tuy nhiên Ubuntu Mate
có giao diện đẹp hơn rất nhiều so với Raspbian. Được phát triển từ Ubuntu
– hệ điều hành được xem là đối đầu trực tiếp với Windows.

H
ì Martin Wimpress và Rohith Madhavan là cha đẻ của Ubuntu Mate
n phát triển từ nền Ubuntu gốc. Theo tác giả, nó được tối ưu rất tốt với
được
h
Raspberry
S Pi 2 và 3, tuy nhiên để đảm bảo tốc độ cao nhất bạn nên sử
E thẻ MicroSD từ class 6 trở lên. Theo đánh giá của chúng tôi, Ubuntu
dụng
Q
Mate
H mới nhất (15.04) có tốc độ cũng rất nhanh, giao diện đẹp, hỗ trợ đầy
ì các phần mềm thông dụng cho nhu cầu văn phòng.
đủ
n
h
\
*
A
R
A
B
I
C
1
.
8
5
:
G
2.1.3 Mạch công suất cầu H (L298N)
a. Định nghĩa
Mạch cầu H điều khiển động cơ L298N cho phép bạn kiểm soát
tốc độ và hướng của hai động cơ DC ,hoặc kiểm soát một động cơ bước
lưỡng cực một cách dễ dàng.

Hình 2.6: Module mạch cầu H L298N


b. Cấu tạo Mạch cầu H
– 2V power, 5V power. Đây là 2 chân cấp nguồn trực tiếp đến động cơ
– Power GND chân này là GND của nguồn cấp cho Động cơ
– 2 Jump A enable và B enable, để như hình, Gồm có 4 chân Input. IN1,
IN2, IN3, IN4. Chức năng các chân này tôi sẽ giải thích ở bước sau.
Output A: nối với động cơ A. bạn chú ý chân +, -. Nếu bạn nối ngược thì
động cơ sẽ chạy ngược. Và chú ý nếu bạn nối động cơ bước, bạn phải đấu
nối các pha cho phù hợp

❖ Sơ đồ nguyên lý:

9
c. Nguyên lý hoạt động

H – Hai chân ENA và ENB dùng để điều khiển các mạch cầu H trong L298.

Nếu ở mức logic “1” (nối với nguồn 5V) thì cho phép mạch cầu H hoạt
n
h động, nếu ở mức logic “0” thì mạch cầu H không hoạt động
2
– Khi ENA = 0: Động cơ không quay với mọi đầu vào
.
7 – Khi ENA = 1:
:
S – INT1 = 1; INT2 = 0: động cơ quay thuận
ơ – INT1 = 0; INT2 = 1: động cơ quay nghịch
đ
– INT1 = INT2: động cơ dừng ngay tức thì

n d. Thông số kỹ thuật
g
– Driver: L298N tích hợp hai mạch cầu H
u
y – Điện áp điều khiển: +5 V ~ +12 V
ê
– Dòng tối đa cho mỗi cầu H là: 2A (=>2A cho mỗi motor)
n
l – Điện áp của tín hiệu điều khiển: +5 V ~ +7 V
ý
– Dòng của tín hiệu điều khiển: 0 ~ 36mA (Arduino có thể chơi đến 40mA
L
2 nên khỏe re nhé các bạn)
8
9 – Công suất hao phí: 20W (khi nhiệt độ T = 75 ℃)
N
– Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃

10
2.1.4. Cảm biến siêu âm
a. Định nghĩa

Cảm biến khoảng cách siêu âm HC-SRF04 được sử dụng rất phổ
biến để xác định khoảng cách vì rẻ và chính xác. Cảm biến sử dụng sóng
siêu âm và có thể đo khoảng cách trong khoảng từ 2 -> 300 cm, với độ
chính xác gần như chỉ phụ thuộc vào cách lập trình.

Hình 2.8: Module cảm biến siêu âm


b. Cấu tạo

Có 4 chân là Vcc, Trig, Echo, GND

c. Nguyên lý hoạt động

Hình 2.9: Nguyên lý hoạt động SR04


Để đo khoảng cách, ta sẽ phát 1 xung rất ngắn (5 microSeconds )

11
từ chân Trig. Sau đó, cảm biến sẽ tạo ra 1 xung High ở chân Echo cho đến
khi nhận lại được sóng phản xạ ở pin này. Chiều rộng của xung sẽ bằng
với thời gian sóng siêu âm được phát từ cảm biển và quay trở lại.
Tốc độ của âm thanh trong không khí là 340 m/s (hằng số vật lý),
tương đương với 29,412 microSeconds/cm (106 / (340*100)). Khi đã tính
được thời gian, ta sẽ chia cho 29,412 để nhận được khoảng cách.
❖ Nguyên tắc phát và nhận phản hồi của sóng siêu âm cơ bản của SRF04

Nguyên tắc cơ bản của sonar: là tạo ra một xung âm thanh điện
tử và sau đó lắng nghe tiếng vọng tạo ra khi các làn sóng âm thanh số
truy cập một đối tượng và được phản xạ trở lại.
Để tính thời gian cho phản hồi trở về, một ước tính chính xác có
thể được làm bằng khoảng cách tới đối tượng.
Xung âm thanh tạo ra bởi SRF04 là siêu âm, nghĩa là nó là ở trên
phạm vi nhận xét của con người. Trong khi tần số thấp hơn có thể được
sử dụng trong các loại ứng dụng, tần số cao hơn thực hiện tốt hơn cho
phạm vi ngắn, nhu cầu độ chính xác cao.

Một số đặc điểm khác của cảm biến siêu âm SRF04

Mức độ của sóng âm hồi tiếp phụ thuộc vào cấu tạo của đối tượng và góc
phản xạ của nó:

12
Một tín hiệu mềm có thể cho ra tín hiệu phản hồi yếu hoặc không có phản
hồi.

Một đối tượng ở một góc cân đối thì mới có thể chuyển thành tín hiệu
phản chiếu cho cảm biến nhận.

Nếu ngưỡng của vùng phát hiện đối tượng được đặt quá gần so với cảm
biến, các đối tượng trên một đường có thể bị va chạm tại một điểm mù. Nếu
ngưỡng này được đặt ở một khoảng cách quá lớn từ cảm biến thì các đối
tượng sẽ được phát hiện mà không phải là trên một đường va chạm.

2.1.5. Động cơ DC
a. Giới thiệu động cơ DC

Motor giảm tốc 12v (min 6v) DC365 là loại motor kim loại sử
dụng loại hộp giảm tốc GA25 bánh răng thép. Bền có độ chính xác cao

13
giá thành tốt.
b. Thông số kỹ thuật

– Dải điện áp hoạt động: 6V – 12V

H
❖ Tốc độ
ì động cơ:
– Tại điện
n áp 6V, dòng 0,15A: tốc độ 110 vòng/phút
h
– Tại điện áp 12V có dòng 0,18A tốc độ 240 vòng/phút
2
.
9
:
Đ

n
g
c
ơ
D
C

14
CHƯƠNG 3: THIẾT KẾ PHẦN CỨNG

❖ Sơ đồ khối

❖ Code:

import RPi.GPIO as GPIO


import time
from time import delay

dis = 30
IN1 = 13
IN2 = 12
IN3 = 21
IN4 = 20
ENA = 6
ENB = 26

15
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(IN1,GPIO.OUT)
GPIO.setup(IN2.GPIO.OUT)
GPIO.setup(IN3.GPIO.OUT)
GPIO.setup(IN4.GPIO.OUT)
GPIO.setup(ENA.GPIO.OUT)
GPIO.setup(ENB.GPIO.OUT)
PWMA = GPIO.PWM(ENA,500)
PWMB = GPIO.PWM(ENB,500)
PWMA.start(0)
PWMB.start(0)
def backward():
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
PWMA.ChangeDutyCycle(100)
PWMB.ChangeDutyCycle(100)
def stopmotor():
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
PWMA.ChangeDutyCycle(0)

16
PWMB.ChangeDutyCycle(0)
def forward():
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
PWMA.ChangeDutyCycle(100)
PWMB.ChangeDutyCycle(100)
def right():
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
PWMB.ChangeDutyCycle(100)
def left():
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
PWMA.ChangeDutyCycle(100)

while True :
GPIO.setmode(GPIO.BCM)

17
GPIO_TRIGGER_FORWARD = 23
GPIO_ECHO_FORWARD = 24

GPIO.setup(GPIO_TRIGGER_FORWARD,GPIO.OUT)
GPIO.setup(GPIO_ECHO_FORWARD,GPIO.IN)
GPIO.output(GPIO_TRIGGER_FORWARD, False)
time.sleep(0.05)
GPIO.output(GPIO_TRIGGER_FORWARD, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER_FORWARD, False)
start = time.time()
while GPIO.input(GPIO_ECHO_FORWARD)==0:
start = time.time()
while GPIO.input(GPIO_ECHO_FORWARD)==1:
stop = time.time()
elapsed_forward = stop-start
distance_forward = elapsed_forward * 17150
print ("Distance_forward: ",distance_forward)
sleep(0.002)

GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER_RIGHT = 8
GPIO_ECHO_RIGHT = 25

GPIO.setup(GPIO_TRIGGER_RIGHT,GPIO.OUT)

18
GPIO.setup(GPIO_ECHO_RIGHT,GPIO.IN)
GPIO.output(GPIO_TRIGGER_RIGHT, False)
time.sleep(0.05)
GPIO.output(GPIO_TRIGGER_RIGHT, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER_RIGHT, False)
start = time.time()
while GPIO.input(GPIO_ECHO_FORWARD)==0:
start = time.time()
while GPIO.input(GPIO_ECHO_RIGHT)==1:
stop = time.time()
elapsed_right = stop-start
distance_right= elapsed_right * 17150
print ("Distance_right:",distance_right)

GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER_LEFT = 22
GPIO_ECHO_LEFT = 27

GPIO.setup(GPIO_TRIGGER_LEFT,GPIO.OUT)
GPIO.setup(GPIO_ECHO_LEFT,GPIO.IN)
GPIO.output(GPIO_TRIGGER_LEFT, False)
time.sleep(0.05)
GPIO.output(GPIO_TRIGGER_LEFT, True)
time.sleep(0.00001)

19
GPIO.output(GPIO_TRIGGER_LEFT, False)
start = time.time()
while GPIO.input(GPIO_ECHO_LEFT)==0:
start = time.time()
while GPIO.input(GPIO_ECHO_LEFT)==1:
stop = time.time()
elapsed_left = stop-start
distance_left = elapsed_left * 17150
print ("Distance_left: ",distance_left)
sleep(0.002)
if distance_left<dis and distance_forward>dis and distance_right>dis :
right()
sleep(0.2)
elif distance_left>dis and distance_forward<dis and distance_right>dis :
if distance_left>distance_right :
left()
sleep(0.2))
if distance_left<distance_right :
right()
sleep(0.2))
elif distance_left>dis and distance_forward>dis and distance_right<dis :
left()
sleep(0.2)
elif distance_left<dis and distance_forward<dis and distance_right>dis :
right()

20
sleep(0.2)
elif distance_left>dis and distance_forward<dis and distance_right<dis :
left()
sleep(0.2)
elif distance_left<dis and distance_forward>dis and distance_right<dis :
if distance_left>distance_right :
left()
sleep(0.2)
if distance_left<distance_right :
right()
sleep(0.2)
elif distance_left<dis and distance_forward<dis and distance_right<dis :
stopmotor()
sleep(1)
backward()
sleep(1)
left()
sleep(0.4)
else :
forward()

21
CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM

Link video chạy thực tế:


https://drive.google.com/file/d/1e3WDo-zyvGOlWZCu7M2-
UxCOPSh8gdUr/view?usp=sharing

22
CHƯƠNG 5: TỔNG KẾT

5.1. Những điều đã làm được


❖ Kết quả nhóm đạt được là khá tốt

● Hiểu hơn về Raspberry Pi

● Giao tiếp được với module L298N để điều khiển động cơ

● Giao tiếp được cảm biến siêu âm SRF04 để đo khoảng cách xe robot

Xe hoạt động khá ổn định. Xe có thể chạy tới, lui, xoay trái, xoay phải và
đang chạy có thể nói dừng thì xe dừng nhưng khi phát hiện vật cản trong vòng
25 cm xe sẽ dừng nhờ vào cảm biến siêu âm SRF04. động cơ chạy rất tốt và bộ
vi xử lý điều khiển và xử lý tín hiệu khá ổn định.

23

You might also like