Sản xuất robot là ngành công nghiệp giá trị hàng tỉ USD và ngày càng phát triển mạnh, trong các họ robot chúng ta không thể không nhắc tới robot tránh vật cản với những đặc thù riêng mà
Trang 1TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
BÁO CÁO THỰC HÀNH
Đề tài: Thiết kế xe tự động tránh vật cản sử
dụng Arduino và L293D
Họ tên sinh viên:
Nguyễn Quang Đạt - 201405113 Thái Trung Kiên - 201413995 Nguyễn Đức An - 201403863
Vũ Thành Trung - 201404117
Ngành học: Thiết Kế Hệ Thống Nhúng
Giáo viên hướng dẫn:
~~ Năm học 2023 – 2024 ~~
Trang 2Lời mở đầu
Ngày nay, sự phát triển mạnh mẽ của khoa học đời sống, cuộc sống của con người đã thay đổi ngày một tốt hơn, với những trang thiết bị hiện đại phục vụ trong công cuộc công nghiệp hóa, hiện đại hóa Đặc biệt góp phần không nhỏ
đó là ngành kĩ thuật điện – điện tử trong sự nghiệp xây dựng đất nước Những thiết bị điện, điện tử được phát triển và ứng dụng rộng rãi trong đời sống hằng ngày Từ những thời gian đầu phát triển vi xử lý đã cho thấy sự ưu việt của nó
và cho tới ngày nay tính ưu việt đó ngày càng được khẳng định thêm Những thành tựu của nó đã có thể biến được những cái tưởng chừng như không thể thành những cái có thể, góp phần nâng cao đời sống vật chất và tinh thần cho con người
Để góp phần làm sáng tỏ hiệu quả của những ứng dụng trong thực tế của môn
vi xử lý, sau một thời gian học tập được thầy cô trong khoa giảng về kiến thức chuyên ngành, em đã thiết kế “robot tránh vật cản bằng arduino và cảm biến siêu âm” Nhưng do thời gian, kiến thức và kinh nghiệm của em còn hạn chế khó tránh khỏi có những sai sót Em rất mong được sự giúp đỡ và tham khảo ý kiến của thầy cô và các bạn nhằm đóng góp phát triển thêm đề tài
Mục lục
Chương 1: Tổng quan đề tài 4
1.1 Giới thiệu đề tài 4
1.2 Mục đích chọn đề tài 4
1.3 Sơ lược bước thực hiện 4
Chương 2: Giới thiệu Arduino và thành phần mạch 5
2.1 Giới thiệu về Arduino 5
2.1.1 Sơ lược về Arduino Uno R3 5
Hình 1.1 5
2.1.2 I/O PINS 6
Hình 1.2 6
2.1.4 Nguồn 7
2.2 Các thành phần của mạch 7
Trang 32.2.1 Cảm biến siêu âm HC – SR04 7
Hình 1.3 9
2.2.2 Module điều khiển động cơ L293D 10
Hình 1.4 10
Hình 1.5 11
2.2.3 Động cơ giảm tốc 12
Hình 1.6 12
2.2.4 Động cơ servo SG90 13
Hình 1.7 13
Chương 3: Nội dung 14
3.1 Sơ đồ khối và chức năng các khối 14
3.2 Chương trình điều khiển 16
Trang 4Chương 1: Tổng quan về đề tài
1.1 Giới thiệu đề tài
Ngày nay, robot đã đạt được những thành tựu to lớn trong sản xuất công nghiệp cũng như trong đời sống Sản xuất robot là ngành công nghiệp giá trị hàng tỉ USD và ngày càng phát triển mạnh, trong các họ robot chúng ta không thể không nhắc tới robot tránh vật cản với những đặc thù riêng mà các loại robot không có
Mobile robot có thể di chuyển một cách linh hoạt, do đó tạo nên hoạt động lớn và cho đến nay nó đã dần khẳng định vai trò quan trọng không thể thiếu trong nhiều lĩnh vực, thu hút được nhiều sự đầu tư và nghiên cứu Mobile robot cũng được chia làm nhiều loại: robot học đường đi, robot dò đường, robot tránh vật cản, robot tìm đường trong mê cung,… trong đó robot trán vật cản dễ dàng ứng dụng nhiều trong cuộc sống Việc phát triển loại robot này sẽ phục vụ rất đắc lực cho con người
1.2 Mục đích đề tài
Robot rò đường vừa có nhiều ứng dụng trong thực tế vừa dễ dàng để sinh viên vận dụng những kiến thức tiếp thu trên giảng đường vào nó Với những kết cấu đơn giản nhưng lại có thể kết hợp với khá nhiều thành phần điện
tử(sevor, cảm biến, arduino, module,…) nên những robot này rất phù hợp để sinh viên học tập và nghiên cứu thêm về ngành tự động hóa một cách cụ thể
1.3 Sơ lược bước thực hiện
Trước tiên ta phải chế tạo được khung xe của robot Khung xe phải đảm bảo bền chắc và đạt độ chính xác nhất định về việc bố trí các bánh xe và động cơ thông qua việc vẽ và lắp đặt động cơ
Và cuối cùng là công đoạn lập trình dụa trên những kiến thức đã học
Trang 5Chương 2: Giới thiệu arduino và các thành phần mạch
2.1 Giới thiệu về arduino
2.1.1 Sơ lược về Arduino Uno R3
Arduino Uno R3 là một bo mạch vi điều khiển dựa trên chip atmega328p Uno R3 có 14 chân I/O digital (trong đó có 6 chân xuất xung PWM), 6 chân input analog, 1 thạch anh 16Mhz, 1 cổng USB, 1 jack nguồn DC, 1 nút reset
Sơ đồ Uno R3:
Hình 1.1 Sơ đồ cấu trúc Arduino Uno R3
2.1.2 Một vài thông số
Vi điều khiển Atmega328P
Điện áp cấp(hoạt động tốt) 7-12V
Điện áp cấp(giới hạn) 6-12V
Chân I/O digital 14 (có 6 chân xung PWM) Chân Input Analog 6(A0-A5)
Dòng điện mỗi chân I/0O 20 mA
Dòng điện chân 3.3V 50 mA
Bộ nhớ flash 32 kB(Atmega328P)-trong đó
0.5kB dùng cho bootloader
EEPROM 1 kB(Atemega328P) Tốc độ xung nhịp 16 Mhz
Trang 6Kích thước 68.6 x 53.4 mm
2.1.3 I/O PINS
Sơ đồ chân vi điều khiển Atmega328P:0
Hình 1.2 Sơ đồ chân của Atmega328P
• Digital: Các chân I/O digital( chân số 2-13)được sử dụng làm
chân nhập, xuất tín hiệu số thông qua các hàm chính: pinMode(), digitalWrite(), digitalRead() Điện áp hoạt động lag 5V, dòng điện qua các chân này ở chế độ bình thường là 20mA, cấp dòng quá 40mA sẽ phá hỏng vi điều khiển
• Analog: Uno có 6 chân Input analog (A0 – A5), độ phân giải mỗi
chân là 10 bit (0 – 1023 ) Các chân này dùng để đọc tín hiệu điện
áp 0 – 5V (mặc định) tương ứng với 1024 giá trị, sử dụng hàm
analogRead()
• PWM: Các chân được đánh số 3,5,6,9,10,11; có chức năng cấp xung PWM (8bit) thông qua hàm analogWrite()
• UART: Atmega328P cho phép truyền dữ liệu thông qua 2 chân 0 (RX) và 1 chân (TX)
Trang 72.1.4 Nguồn
Có hai cách cấp nguồn chính cho bo mạch Uno: cổng USB và jack
DC
Giới hạn điện áp cấp cho Uno là 6-20V Tuy nhiên, dải điện áp khuyên dùng là 7-12V (tốt nhất là 9V) Lý do là nếu nguồn cấp dưới 7V thì điện áp ở chân 5V có thế thấp hơn 5V và mạch có thể hoạt động không ổn định; nếu nguồn cấp lớn hơn 12V có thể gấy nóng
bo mạch hoặc phá hỏng
Các chân nguồn trên Uno:
-Vin: chúng ta có thể cấp nguồn cho Uno thông qua chân này Cách cấp nguồn này ít được sử dụng
-5V: chân này có thể cho nguồn 5V từ bo mạch Uno Việc cấp nguồn vào chân này hay chân 3.3V đều có thể phá hỏng bo mạch -3.3V: chân này cho nguồn 3.3V và dòng điện maximum là 50mA -GND: chân đất
2.2 Các thành phần của mạch
2.2.1 Cảm biến siêu âm HC – SR04
Trang 8Hình dáng :
Trang 9Hình 1.3 một số hình ảnh về HC – SR04 THÔNG SỐ KỸ THUẬT CẢM BIẾN SIÊU ÂM HC-SR04
- Điện áp: 5V DC
- Dòng hoạt động: < 2mA
- Mức cao: 5V
- Mức thấp: 0V
- Góc tối đa: 15 độ
- Khoảng cách: 2cm – 450cm (4.5m)
- Độ chính xác: 3mm
Trang 102.2.2 Module điều khiển động cơ L293D
Hình 1.4 module điều khiển động cơ L293D Thông số kỹ thuật:
- Module L293D có thể điều khiển 4 động cơ DC hoặc 2 động cơ Servo
- Điện áp đầu vào: 4.5V~36V
- Tương thích: Arduino Uno R3, Leonardo R3, Mega 2560
- Điều khiển tối đa: 4 động cơ DC, 2 servo, 2 động cơ bước
- 2 cổng điều khiển động cơ servo có điện áp vào 5V
- Mỗi cầu H có dòng ra tối đa 0.6A (max1 2A) ở mỗi kênh điều khiển
- Có sẵn nút RESET để khởi động lại board Arduino
Công dụng:
- Arduino Motor Shield L293D là một phần board mở rộng cho các board
arduino, dùng để điều khiển các loại động cơ DC, động cơ bước và động cơ
servo Arduino Motor Shield được thiết kế gọn gàng, đẹp mắt và tương thích hoàn toàn với các board Arduino: arduino uno r3, arduino leonardo, arduino mega2560, giúp bạn có thể sử dụng và điều khiển một cách dễ dàng và nhanh chóng
- Arduino Motor Shield sử dụng 2 IC cầu H L293D hoàn chỉnh với các chế độ bảo vệ và 1 IC logic 74HC595 để điều khiển các động cơ
Trang 11- Arduino Motor Shield L293D có thể điều khiển nhiều loại motor khác nhau như step motor, servo motor, motor DC, với mức áp lên đến 36V, dòng tối đa 600mA cho mỗi kênh điều khiển
Cụ thể là điều khiển được số lượng motor như sau:
2 jack cắm điều khiển 2 động cơ RC servo
4 ngõ ra điều khiển đến 4 động cơ DC độc lập
2 động cơ step motor loại đơn cực (unipolar) hoặc lưỡng cực (bipolar)
Mạch tích hợp điện trở nối GND giúp cho không tự chạy khi khởi động board Các chân mà Arduino Motor Shield sử dụng là:
Chân điều khiển 2 RC servo được kết nối với chân số 9 và 10 Nguồn cung cấp được lấy trực tiếp từ board Arduino
Motor 1 nối với chân 11
Motor 2 nối với chân 3
Motor 3 nối với chân 5
Motor 4 nối với chân 6
Chân 4, 7, 8, 12 dùng điều khiển motor thông qua IC 74HC595
Ngoài ra để tiện cho việc sử dụng nguồn cắm ngoài, trên Arduino Motor Shield
sử dụng 1 jumper PWR mục đích để lấy nguồn ngoài thông qua jack DC của board arduino để cung cấp nguồn cho motor hoạt động Nếu trong trường hợp chúng ta không sử dụng jumper này thỉ phải cấp 1 nguồn riêng vào chân
EXT_PWR để cấp nguồn cho motor hoạt động
Sơ đồ mạch cứng và chức năng
Hình 1.5 sơ đồ mạch cứng và chức năng
Trang 122.2.3 Động cơ giảm tốc
Hình 1.6 động cơ giảm tốc
Thông số kỹ thuật:
-Điện áp hoạt động: 3V~9V DC
-Momen xoắc cực đại: 800gf cm min 1:48(3V)
-Tốc độ không tải: 125 vòng/1 phút (3V)
-Dòng không tải: 70mA (250mA MAX)0
Trang 132.2.4 Động cơ servo SG90
Hình 1.7 Động cơ servo SG90
Thông số kỹ thuật:
-Khối lượng: 9g
-Kích thước: 22.2x11.8.32mm
-Momen xoắn: 1.8kg/cm
-Tốc độ hoạt động: 60° trong 0.1 giây
-Điện áp hoạt động: 4.8V (~5V)
-Nhiệt độ hoạt động: 0°C-55°C
Trang 14Chương 3 Nội dung
3.1 Sơ đồ khối và chức năng các khối
* Sơ đồ khối:
Khối
nguồn
Khối cảm biến vị trí Khối hạ
áp
Khối hiển thị
Khối điều khiển công suất
Khối thực thi (Động cơ)
Khối điều khiển trung tâm
• Chức năng các khối:
a Khối cảm biến chức năng vị trí: nhận biết đường đi thông qua cảm biến ánh sáng
b Khối điều khiển trung tâm: nhận được tín hiệu vào từ khối cảm biến vị trí, thực hiện thuật toán để điều khiển mạch công suất để đáp
c Khối điều khiển công suất: nhận tín hiệu từ khối điều khiển trung tâm, điều khiển công suất khối thực thi
d Khối hiển thị: nhận tín hiệu từ khối điều khiển trung tâm, thể hiện trạng thái vị trí của xe
e Khối thực thi: 2 động cơ đọc lập được điều khiển tốc độ bằng khối điều khiển công suất
f Khối nguồn: đưa điện áp vào khối hạ áp, cấp nguồn trực tiếp cho khối điều khiển công suất
g Khối hạ áp: lấy điện áp từ khối nguồn, đưa khối điện áp ra 5V
để nuôi khối cảm biến vị trí, khối điều khiển trung tâm, và khối hiển thị
Trang 153.2 Sơ đồ phần cứng thực tế
Trang 163.3 Chương trình điều khiển
#include "AFMotor.h"
#include <Servo.h>
#define echopin A4 // echo pin
#define trigpin A5 // Trigger pin
Servo myservo;
const int MOTOR_1 = 1;
const int MOTOR_2 = 2;
const int MOTOR_3 = 3;
const int MOTOR_4 = 4;
AF_DCMotor motor1(MOTOR_1, MOTOR12_64KHZ); // create motor object, 64KHz pwm AF_DCMotor motor2(MOTOR_2, MOTOR12_64KHZ); // create motor object, 64KHz pwm AF_DCMotor motor3(MOTOR_3, MOTOR12_64KHZ); // create motor object, 64KHz pwm AF_DCMotor motor4(MOTOR_4, MOTOR12_64KHZ); // create motor object, 64KHz pwm //=======================================================================
========
// Initialization
//=======================================================================
========
int distance_L, distance_F, distance_R;
long distance;
int set = 20;
void setup() {
Serial.begin(9600); // Initialize serial port
Trang 17Serial.println("Start");
myservo.attach(10);
myservo.write(90);
pinMode (trigpin, OUTPUT);
pinMode (echopin, INPUT );
motor1.setSpeed(180); // set the motor speed to 0-255
motor2.setSpeed(180);
motor3.setSpeed(180);
motor4.setSpeed(180);
}
//=======================================================================
========
// Main
//=======================================================================
========
void loop() {
distance_F = data();
Serial.print("S=");
Serial.println(distance_F);
if (distance_F > set){
Serial.println("Forward");
motor1.run(FORWARD); // turn it on going forward
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
else{hc_sr4();}
}
Trang 18long data(){
digitalWrite(trigpin, LOW);
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
distance = pulseIn (echopin, HIGH);
return distance / 29 / 2;
}
void compareDistance(){
if (distance_L > distance_R){
motor1.run(BACKWARD); // turn it on going left motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
delay(350);
}
else if (distance_R > distance_L){
motor1.run(FORWARD); // the other right
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
delay(350);
}
else{
motor1.run(BACKWARD); // the other way motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
delay(300);
motor1.run(BACKWARD); // turn it on going left
Trang 19motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
delay(500);
}
}
void hc_sr4(){
Serial.println("Stop");
motor1.run(RELEASE); // stopped
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
myservo.write(0);
delay(300);
distance_R = data();
delay(100);
myservo.write(170);
delay(500);
distance_L = data();
delay(100);
myservo.write(90);
delay(300);
compareDistance();
}
Trang 20VII Kết quả
1 Robot:
• Robot hoàn thành kịp tiến độ Quá trình làm việc nhóm hiệu quả, phần gắn mạch và đấu nối mạch, lập trình đực phân chia đảm bảo sự liên kết giữa các thành viên trong nhóm
• Cảm biến siêu âm được bố trí khoa học, giảm tình trạng nhiễu và gây cản trở servo hoạt động
2 Kết quả chạy và đánh giá:
Robot chạy đúng quy trình và chính xác, đúng thuật toán thiết kế, hoàn thành nhiệm
vụ và thể hiện được khả năng hoạt động mà không cần can thiệp của cn người
• Hạn chế:
-Do thiếu kinh nghiệm nên robot ko đạt chỉ tiêu thẩm mĩ -Robot chạy chưa ổn định
Kết luận chung:
Quá trình thực hiện đề tài đã giúp chúng em thu được kết quả tốt bổ sung nhiều kiến thức chưa hiểu rõ trong qua trình học tập và hiểu rõ quá trình thiết kế đến thực hiện 1 ý tưởng kĩ thuật đơn giản Môn học đã cho sinh viên chúng môi trường làm việc thân thiện, sáng tạo, kích thích sự tìm tòi, sáng tạo Chúng em xin gửi lời cảm ơn tới thầy Phạm Hữu Chiến đã hướng dẫn
và góp ý chúng e trong qua trình thực hiện đề tài