XE điều KHIỂN FOLLOW ME (có code) ............................................................ XE điều KHIỂN FOLLOW ME (có code) ............................................................ XE điều KHIỂN FOLLOW ME (có code) ............................................................ XE điều KHIỂN FOLLOW ME (có code) ............................................................ XE điều KHIỂN FOLLOW ME (có code) ............................................................ XE điều KHIỂN FOLLOW ME (có code) ............................................................
Trang 1XE ĐIỀU KHIỂN “FOLLOW ME”
Trang 3DANH MỤC CÁC BẢNG BIỂU
Trang 4GPS Global Positioning System
I2C Inter-integrated Circuit
LCD Liquid Crystal Display
NMEA National Marine Electronics Assocition
UART Universal Asynchronous Receiver-Transmitter
Trang 5CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu
Xe điều khiển là một trong các loại robot quen thuộc, được sử dụng vớinhiều mục đích khác nhau, có thể ứng dụng trong đời sống từ những việc nhỏnhặt đến những việc con người không thể làm được
Hình 1-1 Xe golf “follow me”[5]
Hình 1-2 Cách hoạt động[9]
Trang 6Xe điều khiển “Follow me” là xe hay robot tự động đi theo người điều khiển,hoạt động nhờ sự định hướng của la bàn số và tọa độ GPS của xe với ngườithông qua đường truyền bluetooth Nó còn có thể phụ giúp mang, di chuyển đồvật.
Xe “Follow me”:
- Ưu điểm: điều khiển qua bluetooth, đáp ứng nhiều nhu cầu, phục vụ đời sống,ứng dụng nhiều mục đích
- Khuyết điểm: hoạt động dựa trên GPS nên chỉ sử dụng ở ngoài trời thoáng, sai
số la bàn nếu gần các thiết bị có trường điện từ
Đề tài sử dụng chíp vi điều khiển Atmega328p, cảm biến la bàn sốHMC5883L, điều khiển qua module bluetooth HC-05, module GPS NEO7
1.2 Mục tiêu đề tài
Thiết kế mạch vi điều khiển Atmega328p, hiểu được cảm biến là bàn số, tìmhiểu dữ liệu GPS cũng như các công thức tính toán, biết được thuật toán hoạtđộng định hướng giữa la bàn và tọa độ GPS
Lấy dữ liệu tọa độ từ module GPS chuyển qua vi điều khiển bằng modulebluetooth, thiết kế xe có thể ứng dụng thực tế
1.3 Hướng thực hiện đề tài
Đọc tài liệu tìm hiểu cảm biến la bàn số HMC5883L, module GPS NEO7, viđiều khiển Atmega328p, lấy thông tin GPS của smartphone
Tìm hiểu thuật toán tìm đường giữa hướng của la bàn số và tọa độ GPS, củng
cố kỹ năng lập trình, đọc hiểu datasheet, tài liệu liên quan, củng cố kỹ năng thiết
kế mạch, vẽ mô hình xe
Trang 7Xe “Follow Me”
GPS
La bàn HC-05 LCD
GPS HC-05
Vi điều khiển
CHƯƠNG 2 THIẾT KẾ ĐỀ TÀI
1.4 Sơ đồ khối1.1.1 Sơ đồ khối
Hình 2-2 Sơ đồ khối của hệ thống
Trang 8UART UART
Nguồn (pin)
Bluetooth HC-05Hình 2-3 Sơ đồ khối của xe
Hình 2-2 Sơ đồ khối phía phát
Trang 91.1.2 Chức năng các khối
Phần phía phát: sử dụng 1 vi điều khiển đọc giá trị của module GPS, truyềnchuỗi thông tin qua bluetooth bằng module HC-05 Hai module bluetooth tựđộng kết nối với nhau sau vài giây khi cấp nguồn
Khối Bluetooth HC-05: truyền nhận thông tin chuỗi GPS
Khối vi điều khiển: Atmega 328P đọc dữ liệu bluetooth, GPS và cảm biến labàn, xử lý số liệu và xuất tín hiệu điều khiển động cơ
Khối nguồn (pin): sử dụng pin lipo 11,1V cung cấp cho động cơ và toànmạch
Khối L298: nhận tín hiệu điều khiển, sử dụng mạch cầu H điều khiển động
cơ DC
Khối động cơ: sử dụng 2 động cơ DC giảm tốc, là thành phần tạo sự dichuyển của mô hình
1.5 Tìm hiểu các thành phần, module
1.1.3 Vi điều khiển Atmega328P
Đồ án dùng chíp vi điều khiển Atmega328P 8-bit, nhỏ nhẹ, đủ cung cấp cácđiều kiện để đọc, xử lý tín hiệu và điều khiển
Atmega328p là một trong những vi điều khiển họ AVR mới, sản xuất bởihãng ATmel, là 1 trong những dòng vi điều khiển 8 bit nhưng mạnh mẽ, được hỗtrợ bootloader và ngôn ngữ lập trình C,C++
Hình 2-3 Atmega328P [8]
Trang 10Bảng 2-1 Tóm tắt Atmega328P [8]
- Điện áp hoạt động 1.8-5 V
- Digital I/O pin 14
- PWM Digital I/O Pins 6
- Analog Input Pins 6
- Cường độ dòng điện trên mỗi I/O pin 20 mA
Trang 111.1.4 Cảm biến la bàn số HMC5883L
Cảm biến HMC5883L là cảm biến la bàn gồm 3 trục cảm biến điện trở từ và
có bộ chuyển đổi ADC 12 bit
HMC5883L có kích thước nhỏ gọn, dùng để xác định phương hướng, có thểứng dụng trong máy bay điều khiển, điện thoại thông minh, các thiết bị địnhhướng cá nhân, robot tìm đường
Cảm biến la bàn cho phép xuất các dữ liệu thô của 3 trục x, y, z từ đó có thểtính toán dữ liệu theo nhu cầu sử dụng dựa vào datasheet
Cảm biến HMC5883L dùng truyền thông kết nối I2C với vi điều khiển vớitốc độ nhanh 160Hz, độ chính xác cao đến 1 hay 2 độ, độ phân giải tính toán ±8gauss
Giao tiếp I2C (Inter-integrated Circuit): là một chuẩn giao tiếp ở phạm vingắn, tốc độ truyền nhận cao, giao thức kiểu Multi-Master Multi-Slave, chỉ sửdụng hai dây SCL và SDA để truyền nhận dữ liệu, tiết kiệm chân giao tiếp cho
vi điều khiển và có thể nối nhiều thiết bị trên cùng một bus I2C
Cảm biến kết nối với vi điều khiển theo chuẩn giao tiếp I2C, SCL nối vớichân 28, SDA nối với chân 27
Hình 2-4 Cảm biến la bàn số HMC5883L [7]
Cảm biến la bàn số HMC5883L gồm 5 chân, đề tài chỉ dùng 4 chân: 2 chânnguồn với mức điện áp 3-5 V, 2 chân truyền nhận dữ liệu SDA và SCL
Trang 121.1.5 GPS (Global Positioning System)
GPS là hệ thống định vị toàn cầu, xác định vị trí dựa trên vị trí của các vệtinh nhân tạo do Hoa Kỳ thiết kế,xây dựng, quản lý và cho phép mọi người sửdụng một số chức năng miễn phí toàn cầu
Trong một thời điểm, tọa độ của một điểm trên bề mặt trái đất sẽ được xácđịnh nếu xác định được khoảng cách từ điểm đó đến ít nhất 3 vệ tinh
Hình 2-5 GPS [5]
Các vệ tinh bay quanh trái đất theo một quỹ đạo chính xác, phát tín hiệuthông tin xuống Các máy thu GPS tiếp nhận dữ liệu và tính toán lượng giác xácđịnh được vị trí người dùng
Máy thu GPS hay các module GPS phải nhận được tín hiệu ít nhất của 3 vệtinh để tính được kinh độ và vĩ độ, càng nhận được nhiều vệ tinh thì càng tínhđược nhiều thông tin của người sử dụng
Đề tài sẽ sử dụng module GPS NEO 7 để thu tín hiệu GPS từ các vệ tinh.Mạch GPS NEO 7 có kích thước nhỏ gọn, tích hợp sẵn anten thu sóng nhưngphải đặt anten ở nơi thoáng đãng không bị chướng ngịa vật che trên đầu
Trang 13Mạch GPS NEO 7 có độ ổn định và khả năng bắt sóng cao, chuẩn giao tiếpUART với vi điều khiển Mạch sẽ trả về một chuỗi dữ liệu NMEA thu được từ
vệ tinh, từ đó lập trình giải mã chuỗi để tìm được thông tin cần thiết
Hình 2-6 Module GPS NEO 7 [6]
Chuỗi NMEA là 1 chuỗi giao tiếp hay có thể gọi là ngôn ngữ giao tiếp giữacác thiết bị như máy đo vận tốc, hướng gió, la bàn, máy thu GPS do Hiệp hộiđiện tử hàng hải quốc gia Mỹ (National Marine Electronics Assocition) địnhnghĩa và quản lý
Chuỗi NMEA sử dụng chuỗi mã ASCII đơn giản, truyền tuần tự theo mộtchiều duy nhất trong một thời điểm, chuỗi bắt đầu bởi dấu $, các số liệu cáchnhau bởi dấu phẩy và khoảng trắng
Hình 2-7 Chuỗi NMEA [9]
Trang 14Phân tích chuỗi NMEA:
- GPGGA là Global Positioning System Fix Data chứa các dữ liệu nângcao độ chính xác của vị trí
- UTC Time: thời gian hiện tại
- Checksum: kiểm tra tính hợp lệ của dữ liệu nhận được
Đề tài sẽ sử dụng dữ liệu kinh độ, vĩ độ của GPS để tính toán các thông tin vịtrí dựa vào việc giải mã chuỗi NMEA
1.1.6 Module bluetooth HC-05
Hình 2-8 Module bluetooth HC-05 [3]
Đề tài sẽ sử dụng giao thức bluetooth để truyền nhận tín hiệu giữa ngườidùng và xe; và sử dụng module bluetooth HC-05 do module này có chức năngvừa là slave vừa là master nên có thể dễ dàng áp dụng 1 trong 2 kiểu truyềnnhận
Trang 15Module HC-05 có tính phổ biến cao, là bluetooth thế hệ 2.0, hoạt động ở tần
số 2.4GHz, khoảng cách truyền khi không có vật cản là 10-12m Module HC-05rất phổ biến hiện nay, được sử dụng nhiều trong các dự án ứng dụng với phạm vinhỏ
- Động cơ có giá đỡ, trục nối bánh xe và sử dụng bánh xe loại 65mm
1.1.8 Nguồn cung cấp
Trang 16Hình 2-10 Pin lipo 11.1 V [3]
Xe sẽ sử dụng pin lipo 3S là nguồn nuôi chính cho toàn bộ mạch
Dòng xả tối đa của pin là 2.2×25=55A, dung lượng 2200mA, điện áp từ10.6V đến 12.6V, độ bền tốt để hoạt động lâu dài và dễ dàng sạc lại
Ngoài ra, đề tài sẽ sử dụng mạch hạ áp để chuyển từ nguồn pin xuống 5Vcung cấp cho vi điều khiển cùng các module ngoại vi
Trang 17CHƯƠNG 3 LẬP TRÌNH VÀ THIẾT KẾ HỆ THỐNG
1.6 Mô hình đề tài
Yêu cầu: gửi dữ liệu GPS thông qua bluetooth của 2 module bluetooth
HC-05, đọc và tính toán góc của la bàn số, xử lý dữ liệu GPS của module, tính toán,lập trình xe chạy đến một vị trí định sẵn, lập trình xe chạy theo vị trí người sửdụng
Mục đích: hiểu rõ hệ thống GPS cũng như các cách ứng dụng nó, hiểu đượccác công thức lượng giác tính toán vị trí, điều hướng
1.7 Nguyên lí hoạt động
1.1.9 Sơ đồ nguyên lí
Hình 3-4 Sơ đồ nguyên lí
Trang 19Bắt đầu
S Kiểm tra kết nối Bluetooth
Kiểm tra dữ liệu GPS S
Trang 201.1.11 Nguyên lý hoạt động
Xe điều khiển “Follow me” hoạt động dựa trên thuật toán tìm đường kết hợpgiữa tọa độ vi trí GPS và điều hướng la bàn số, giúp xe có thể nhận biết hướng
đi và khoảng cách đến vị trí người sử dụng điện thoại
Trước hết, người sử dụng và xe phải được kết nối bluetooth với nhau thôngqua module bluetooth HC-05 Sau đó, vi điều khiển phía phát gửi chuỗi GPSsang cho phía xe, giải mã sẽ thu được kinh độ, vĩ độ của người sử dụng
La bàn số sẽ cho ra được góc lệch so với cực Bắc, giống các la bàn thôngthường sẽ chỉ ra các góc tương ứng với 4 hướng Đông, Tây, Nam, Bắc, đề tài sẽquy về -180o - 0o - 180o tương ứng 1 vòng tròn để tiện tính toán
Vi điều khiển đọc, giải mã chuỗi NMEA sẽ lấy được kinh độ, vĩ độ củamodule GPS đặt trên xe Qua đó, chúng ta sẽ có 2 vị trí tọa độ là tọa độ của xe
và tọa độ của điện thoại Xe sẽ chạy tới tọa độ của điện thoại
Đồ án sẽ dùng công thức Haversine tính khoảng cách giữa hai tọa độ địa lý.Hai tọa độ A(lat1,long1) và B(lat2,long2) tương ứng với 2 tọa độ GPS của xe vàđiện thoại
Công thức Havesine được tính toán như sau :
R là bán kính Trái Đất, quy ước là 6371 km
∆lat = lat2 –lat1
∆long = long2 – long1
h = sin2 + cos (lat1)*cos (lat2)*sin
c = 2* atan2 (, )
d = R*c, trong đó d là khoảng cách giữa 2 điểm
Các giá trị tọa độ phải được đổi từ góc sang radian, hàm atan2(x,y) tương đương arctan
Trang 21Sử dụng công thức tính được khoảng cách giữa xe và người dùng, khi xe điđúng hướng thì khoảng cách sẽ nhỏ dần và đến 1 khoảng cách nhất định sẽ dừnglại Do sai số của cả hai thiết bị GPS nên đồ án sẽ dùng khoảng cách nhỏ hơn 3m
để xe dừng lại
Để biết được hướng hay góc từ xe đến người dùng, đồ án sẽ dùng công thứctính góc xoay (Bearing angle) của 2 tọa độ so với góc Bắc 0o Công thức đượctính như sau :
x = sin (∆long)*cos (lat2)
y = cos (lat1)*sin(lat2) – sin(lat1)*cos(lat2)*cos(∆long)
Góc so với góc 0o = atan2(x, y)*
Khi biết được góc giữa xe và người so với góc Bắc, chúng ta truyền gócbearing vào hệ PID của xe, xe sẽ chạy theo góc bearing được điều chỉnh bởi hệvòng kín PID
1.1.12 Kiểm tra, các bước thực hiện, thiết kế mô hình xe
Viết chương trình đọc giá trị thô 3 trục của la bàn số và tính toán theo 2 trụcsong song với mặt đất để có được góc la bàn từ 0→360 độ Chuyển đổi góc0→180 và -180→0 Tiếp theo, viết chương trình cho xe luôn chạy theo 1 góccho trước dựa theo thuật toán PID và hiệu chỉnh các hệ số PID ổn định
Ở phía phát, khi nhận được tín hiệu GPS, vi điều khiển sẽ lấy một chuỗithông tin GPS để gửi qua bluetooth Có thể thêm một vài điều kiện gửi chuỗithông tin để thích hợp truyền nhận với phía xe
Đối với module GPS NEO7 đặt trên xe di chuyển, chúng ta sẽ kết nối với viđiều khiển theo giao tiếp UART và module sẽ trả về các giá trị 1 giây 1 lần, viếtchương trình giải mã chuỗi NMEA để lấy giá trị vĩ độ, kinh độ
Trang 22Hình 3-4 Bán kính sai số của GPS NEO7
Hình 3-5 Sai số tọa độ của GPS NEO7
Trang 23Hình trên cho thấy được độ chính xác của module GPS NEO7 sử dụng phầnmềm chuyên dụng của nhà sản xuất Hình ảnh cho thấy được độ sai số của tọa
độ vị trí gồm vĩ độ và kinh độ; sai số trong khoảng 12m là ổn định Do sai sốkhá lớn so với phạm vi đường truyền của bluetooth nên cũng gây khó khăn việctính toán các giá trị
Sau khi lấy được tọa độ của module GPS, tiền hành viết chương trình cho xechạy tới 1 điểm cố định cho trước tọa độ Sau đó, khi có sự ổn định, chúng ta kếthợp với tọa độ di chuyển nhận được từ bluetooth
Tính toán khoảng cách và góc xoay khi có được 2 tọa độ GPS của xe vàngười dùng, truyền góc xoay vào hệ PID để hệ thống tự điều chỉnh tốc độ động
cơ để xe có the xoay đúng hướng với người dùng
Mô hình xe được vẽ 2D trên AutoCad và nguyên liệu là mica 3mm:
Hình 3-6 Bản vẽ xe
1.1.13 Kết quả, thiết kế, gia công mạch
Trang 24Sau khi kiểm thử và kết hợp viết chương trình giữa các module, chúng ta sẽ
vẽ mạch in để thu gọn và có hình thức đẹp hơn
Hình 3-7 Mặt dưới của mạch
Hình 3-8 Mặt trên gồm các linh kiện
Mạch được vẽ trên phần mềm Proteus, trên mạch gồm: vi điều khiển, mạch
IC L298 điều khiển động cơ DC và các chuẩn giao tiếp với các module
Trang 25Hình 3-9 Mô hình xe và mạch phát
Trên xe có gắn thêm màn hình LCD để hiện thị 2 tọa độ GPS, góc la bàn, gócgiữa 2 tọa độ so với cực Bắc và vòng LED để chỉ độ lệch của xe so với góc 0o
Trang 27Tiếng Việt:
[1] tinh-gps
http://arduino.vn/bai-viet/1257-gps-va-arduino-phan-2-lay-du-lieu-tu-ve-[2] Ngô Diên Tập(NXB Khoa Học Kỹ Thuật 2003) – Kỹ Thuật Vi Điều KhiểnVới AVR
Trang 28SoftwareSerial ss(10,9);//tx gps nối zo pin 12, rx pin 11
#define addr 0x1E //I2C Address for The HMC5883
#define NUM_LEDS 16 // Number of LEDs on Ring
#define DATA_PIN_RING 13 // Pin 13 connected to RGB RingCRGB leds[NUM_LEDS];
const double RtoD = 180/PI;
const double DtoR = PI/180;
Trang 31if(b!=0)
{
if (Serial.find("$GNRMC,"))
{
String tempMsg = Serial.readStringUntil('\n');
for (int i = 0; i < tempMsg.length(); i++)
Trang 34lngfirst = posneg += lngfirst;
bool newData = false;
for (unsigned long start = millis(); millis() - start < 1000;)
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Trang 35float dy = (Latitude - vidoGPS)*DtoR; //đổi sang radian
float dx = (Longtitude - kinhdoGPS)*DtoR;
float h = sin(dy/2)*sin(dy/2) +cos(vidoGPS*DtoR)*cos(Latitude*DtoR)*sin(dx/2)*sin(dx/2);
Trang 36lcd.setCursor(12,1);
lcd.print(gocxoay,2);
/*float x = sin(Longtitude-kinhdoGPS)*cos(Latitude);
float y = cos(vidoGPS)*sin(Latitude) sin(vidoGPS)*cos(Latitude)*cos(Longtitude-kinhdoGPS);
Wire.beginTransmission(addr); //start talking
Wire.write(0x02); // Set the Register
Wire.write(0x00); // Tell the HMC5883 to Continuously Measure
static unsigned long lastCompassRead = 0;
unsigned long now = millis();
if ( now - lastCompassRead > 40) {
lastCompassRead = now;
Trang 37if(goc<0) goc += 2*PI;
if(goc>2*PI) goc -= 2*PI;
goclaban = goc*(RtoD);
gocmoi = int(goclaban);
while (goclaban < -180) goclaban += 360;
while (goclaban > 180) goclaban -= 360;
lcd.setCursor(12,0);
lcd.print(goclaban);
}
}
Trang 39/**************************** PID theo góc giữa 2 tọa độ
dloi = loi - loitruoc;
pid_out = kp*loi + tongloi + kd*dloi;
pwm1 = int(230 - pid_out); // động cơ bên phải
pwm2 = int(230 + pid_out); // động cơ bên trái