1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Đồ án thiết kế hệ thống nhúng Thiết kế điều khiển xe ô tô mô hình bằng điện thoại + file Code

28 41 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết kế điều khiển xe ô tô mô hình bằng điện thoại
Người hướng dẫn GVHD: Nguyễn Ngọc Minh
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành Hệ thống nhúng
Thể loại Đồ án
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 28
Dung lượng 1,35 MB
File đính kèm DoAn xe tự hành.rar (5 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

➢ Nội dụng 1: Tìm hiểu về HC06, truyền nhận ký tự từ app về vi điều khiển ➢ Nội dung 2: Viết thư viện giao tiếp nhiều servo, cụ thể sử dụng servo SG90 ➢ Nội dung 3: Xây dựng thuật toán điều khiển cánh tay robot và điều khiển xe ➢ Nội dung 4: Thiết kế, thi công và thử nghiệm phần cứng ➢ Nội dung 5: Đánh gia kết quả và viết báo cáo

Trang 1

BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

Trang 2

[2]

Mục lục

Lời cảm ơn 3

Chương 1 Tổng quan đề tài 5

1.1, Đặt vấn đề 5

1.2, Mục tiêu đề tài 5

1.3, Nội dung nghiên cứu 5

Chương 2 Cơ sở lý thuyết 5

2.1 Giới thiếu linh kiện 5

2.1.1 Tổng quan về vi xử lý ARM 5

2.1.2 Kit STM32F103C8T6 6

2.1.3 Module HC06 7

2.1.4 Module L298 8

2.1.5 Động cơ giảm tốc 9

2.1.6 Động cơ servo SG90 9

2.1.7 Pin 18650 11

2.2 Chuẩn giao tiếp UART 12

2.2.1 Khái niệm 12

2.2.2 Cách thức hoạt động của UART 12

2.2.3 Định dạng gói tin 12

2.3 PWM 13

2.4 FreeRtos 14

2.4.1 Giới thiệu RTOS 14

2.4.2 Tạo project và cách add thư viện FreeRtos trên Keil C 14

2.4.3 Create Task 15

Chương 3 Hệ thống 16

3.1 Lập trình giao tiếp với module HC06 16

3.2 Sử dụng app điều khiển 18

3.2 Lập trình giao tiếp với SG90 19

3.2.1 Mô tả thuật toán 19

3.2.2 Lưu đô thật toán 20

3.3 Lắp ráp, thi công 20

3.3.1 Xe 3 bánh 20

3.3.2 Cánh tay robot 20

Trang 3

[3]

3.4 Thực thi hệ thống 21

3.4.1 Sơ đồ khối 21

3.4.2 Nguyên lý hoạt động 21

3.4.3 Thuật toán điều khiển cánh tay robot 21

3.4.4 Lập trình điều khiển động cơ giảm tốc 23

3.4.5 Lập trình điều khiển cánh tay robot 23

3.4.3 Sử dụng app điều khiển 25

Chương 4 Kết luận 27

4.1 Nhận xét 27

4.2 Hướng phát triển 27

Chương 5 Tài liệu tham khảo 28

Trang 4

[4]

Lời cảm ơn

Nhóm chúng em xin gửi lời cảm ơn sâu sắc và chân thành tới thầy Nguyễn Ngọc Minh đã tận tình giúp đỡ, chỉ bảo, hướng dẫn nhóm thực hiện trong suốt quá trình thực hiện đề tài này Trong thời gian làm việc với thầy, nhóm chúng em đã không ngừng tiếp thu thêm nhiều kiến thức bổ ích mà còn học được tinh thần làm việc, thái độ nghiên cứu môn học nghiêm túc, hiệu quả của thầy đây là những điều rất cần thiết cho nhóm trong quá trình học tập và công tác cho chúng em sau này Kính chúc thầy sức khoẻ, hạnh phúc thành công trên con đường và sự nghiệp giảng dạy!

Chân thành cảm ơn đến các bạn trong nhóm đã luôn đồng hành, giúp đỡ để nhóm

có thể thực hiện được đề tài này thành công!

Trang 5

em đã đề xuất nghiên cứu xe điều khiển cánh tay robot

1.2, Mục tiêu đề tài

Đồ án được nhóm nghiên cứu, khảo sát và thực hiện với mục đích áp dụng các kiến thức đã được học ở trường giúp cho những nhu cầu điều khiển trở nên tiện lợi hơn

Vì vậy nhóm thiết kế “Xe điều khiển cánh tay robot”

1.3, Nội dung nghiên cứu

➢ Nội dụng 1: Tìm hiểu về HC06, truyền nhận ký tự từ app về vi điều khiển

➢ Nội dung 2: Viết thư viện giao tiếp nhiều servo, cụ thể sử dụng servo SG90

➢ Nội dung 3: Xây dựng thuật toán điều khiển cánh tay robot và điều khiển xe

➢ Nội dung 4: Thiết kế, thi công và thử nghiệm phần cứng

➢ Nội dung 5: Đánh gia kết quả và viết báo cáo

Chương 2 Cơ sở lý thuyết 2.1 Giới thiếu linh kiện

Trang 6

rẻ so với các loại vi điều khiển có chức năng tương tự Mạch nạp cũng như công

cụ lập trình khá đa dạng và dễ sử dụng Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR Embedded Workbench, Keil C…

Hình 2.2 Cấu tạo của STM32F103C8T6

➢ Sơ lược về Board

• 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug

• 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình

• Có chân Output riêng cho các chân mạch nạp trên MCU1

• Có chân Output đầy đủ cho các chân MCU2

• Chân cấp nguồn ngoài riêng cho MCU2 nếu không sử dụng nguồn từ USB

• Thạch anh 32,768khz dùng cho RTC và Backup.9

• Chân nạp dùng cho chế độ nạp boot loader

Trang 7

[7]

• Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2

2.1.3 Module HC06

Hình 2.3 Module thu phát bluetooth HC-06

➢ Module thu phát bluetooth HC-06 ra chân hoàn chỉnh giúp dễ dàng kết nối để thực hiện các thí nghiệm, module được thiết kế để cho thể hoạt động từ mức điện

áp 3V3 => 5V

➢ Khi kết nối với máy tính, HC-06 được sử dụng như 1 cổng COM ảo, việc truyền nhận với COM ảo sẽ giống như truyền nhận dữ liệu trực tiếp với UART trên module

➢ Lưu ý là khi thay đổi Baudrate cho COM ảo không làm thay đổi baudrate của UART, baudrate UART chỉ có thể thay đổi bằng AT command trên module Module thu phát bluetooth HC-06 được setup mặc định là Slave không thể thay đổi được nên chỉ có thể giao tiếp với các thiết bị bluetooth ở dạng master như Smart phone, HC-05 master,… hai module bluetooth được set là Slave không thể giao tiếp với nhau

➢ Thông số kỹ thuật:

• Điện áp hoạt động: 3.3 ~ 5VDC

• Điện áp giao tiếp: TTL tương thích 3.3VDC và 5VDC

• Baudrate UART có thể chọn được: 1200, 2400, 4800, 9600, 19200, 38400,

57600, 115200

Trang 8

[8]

• Dải tần sóng hoạt động: Bluetooth 2.4GHz

• Sử dụng CSR mainstream bluetooth chip, bluetooth V2.0 protocol standards

• Dòng điện khi hoạt động: khi Pairing 30 mA, sau khi pairing hoạt động truyền nhận bình thường 8 mA

• Kích thước của module chính: 28 mm x 15 mm x 2.35 mm

• Thiết lập mặc định:

• Baud rate: 9600, N, 8, 1

• Pairing code: 1234

2.1.4 Module L298

Hình 2.4 Mạch điều khiển động cơ DC L298N

➢ Mạch điều khiển động cơ DC L298N có khả năng điều khiển 2 động cơ DC, dòng tối đa 2A mỗi động cơ, mạch tích hợp diod bảo vệ và IC nguồn 7805 giúp cấp nguồn 5VDC cho các module khác (chỉ sử dụng 5V này nếu nguồn cấp

<12VDC)

➢ Thông số kỹ thuật

• IC chính: L298 – Dual Full Bridge Driver

• Điện áp đầu vào: 5~30VDC

• Công suất tối đa: 25W 1 cầu (lưu ý công suất = dòng điện x điện áp nên áp cấp vào càng cao, dòng càng nhỏ, công suất có định 25W)

• Dòng tối đa cho mỗi cầu H là: 2A

• Mức điện áp logic: Low -0.3V~1.5V, High: 2.3V~Vss

Trang 11

[11]

2.1.7 Pin 18650

Hình 2.8 Pin cell 18650 2000mAh

➢ Pin cell 18650 2000mAh là loại pin Li-ion (Lithium-Ion) với dung lượng lên tới 2000mah, thích hợp sử dụng trong các ứng dụng DIY mô hình như máy rửa tay

tự động, máy chào khách, sử dụng trong các đồ án sinh viên, phục vụ đời sống dân dụng như thay pin của đèn pin, thiết bị nguồn dự phòng,…

➢ Lưu ý: Không được xả quá mức điện áp tối thiếu của pin là 3V, khi tới mức này cần sạc lại ngay, hoặc sử dụng mạch sạc xả pin có chức năng tự ngắt để tránh bị

hư pin và sử dụng pin được lâu dài

➢ Thông số kỹ thuật:

• Tên sản phẩm: Pin sạc Lithium

• Loại Pin: Li-ON

Trang 12

[12]

2.2 Chuẩn giao tiếp UART

2.2.1 Khái niệm

UART (Universal Asynchronous Reciver/Transmister) một chuẩn giao tiếp không đồng

bộ cho MCU và các thiết bị ngoại vi

Chuẩn UART là chuẩn giao tiếp điểm và điểm, nghĩa là trong mạng chỉ có hai thiết bị đóng vai trò là transmister hoặc reciver

Hình 2.9 Sơ đồ khối UART

2.2.2 Cách thức hoạt động của UART

➢ UART là giao thức truyền thông không đồng bộ, nghĩa là không có xung Clock, các thiết bị có thể hiểu được nhau nếu các Setting giống nhau

➢ UART là truyền thông song công(Full duplex) nghĩa là tại một thời điểm có thể truyền và nhận đồng thời

➢ Trong đó quan trọng nhất là Baund rate (tốc độ Baund) là khoảng thời gian dành cho 1 bit được truyền Phải được cài đặt giống nhau ở gửi và nhận

2.2.3 Định dạng gói tin

Hình 2.10 Khung truyền UART

➢ Start – Bit: Start-bit còn được gọi là bit đồng bộ hóa được đặt trước dữ liệu thực

tế Khi đang ở chế độ “nhàn rỗi” thì đường tín hiệu được đưa lên mức cao (1)

Để bắt đầu truyền dữ liệu, đường dữ liệu sẽ được kéo từ mức điện áp cao (1)

Trang 13

dữ liệu sẽ được giữ ở mức cao tương đương 1 hoặc 2 bit

➢ Partity Bit: Bit chẵn lẻ cho phép người nhận đảm bảo liệu dữ liệu được thu thập

có đúng hay không Đây là một hệ thống kiểm tra lỗi cấp thấp Trên thực tế, bit này không được sử dụng rộng rãi nên không bắt buộc

➢ Data frame: Các bit dữ liệu bao gồm dữ liệu thực được truyền từ người gửi đến người nhận Độ dài khung dữ liệu có thể nằm trong khoảng 5 & 8 Nếu bit chẵn

lẻ không được sử dụng thì chiều dài khung dữ liệu có thể dài 9 bit Bit LSB sẽ được truyền trước

2.3 PWM

➢ PWM - Pulse Width Modulation, còn được gọi là điều chế độ rộng xung, hay băm xung Đây là phương pháp đơn giản dùng để điều chế điện áp ra tải dựa vào điều chỉnh tín hiệu điện thế trung bình

➢ Các khái niệm cần nắm về PWM:

• Duty cycle: Tỉ lệ phần trăm tín hiệu ở mức cao

• Period: Chu kỳ xung

• Pulse width: Thời gian mức cao trong một chu kỳ

Hình 2.11 Duty Cycle

Trang 14

[14]

• Nếu Duty Cycle = 0% tương ứng điện áp đầu ra U=5x0%=0V

• Nếu Duty Cycle = 30% tương ứng điện áp đầu ra U=5x30%=1.5V

• Nếu duty cycle = 50% tương ứng điện áp đầu ra U=5x50%=2.5V

• Nếu duty cycle = 100% tương ứng điện áp đầu ra U=5x1000%=5V

➢ Ứng dụng của PWM: Phương pháp băm xung PWM thường được sử dụng để điều khiển băm xung, điều khiển tốc độ động cơ, các bộ điều áp, xung áp,…

2.4 FreeRtos

2.4.1 Giới thiệu RTOS

➢ Viết tắt của Real-Time Operating system

➢ Cho Phép ứng dụng của mình chạy đa tác vụ

➢ Đáp ứng được “deadline” theo thời gian thực

➢ Chia nhỏ project để dễ trị

➢ Dễ dàng phân chia công việc trong làm việc nhóm

2.4.2 Tạo project và cách add thư viện FreeRtos trên Keil C

https://vidieukhien.xyz/2018/05/27/freertos-stm32-phan-1-tao-project-keil-c/

Trang 15

[15]

2.4.3 Create Task

Bước 1: Cấu trúc Funciton của 1 task trong FreeRtos

Bước 2: Tiếp theo trong hàm main, tạo task bằng hàm xTaskCreate và chạy task đã tạo

sử dụng vTaskStartScheduler();

Giải thích: Hàm xTaskCreate sẽ gồm các para input:

➢ vTaskLed1: Chương trình mình muốn tạo task mới

➢ ( const char * ) “Task LED 1”: Tên task bạn đặt số kí tự max được định nghĩa trong file FreeRTOSConfig.h #define configMAX_TASK_NAME_LEN ( 16 )

➢ configMINIMAL_STACK_SIZE: giá trị stack size bạn sử dụng với task đó ở đây stack size bằng 128byte Với mỗi byte stack size FreeRTOS sẽ lấy 4byte của RAM để back up giá trị của một trong các thanh ghi R0-R15 32bit sẽ tốn 128*4

= 512byte RAM Khi sử dụng nhiều Task khác nhau nếu gọi chương trình còn nhiều bạn sẽ cần nhiều stack_size hơn Vì vậy cần tính toán sơ bộ và cài đặt lại stack size trong file startup

➢ mainFLASH_TASK_PRIORITY: Mức ưu tiên của hệ điều hành max là 255

void vTaskLed1(void *pvParameters)

xTaskCreate(vTaskLed2,( const char * ) “Task LED

2”,configMINIMAL_STACK_SIZE,NULL,mainFLASH_TASK_PRIORITY,( xTaskHandle * ) NULL);

xTaskCreate(vTaskLed3,( const char * ) “Task LED

vTaskStartScheduler()

Trang 16

[16]

➢ ( xTaskHandle * ) NULL: Có tác dụng trong việc tạm dừng, xóa task

Chương 3 Hệ thống 3.1 Lập trình giao tiếp với module HC06

Hình 3.1 Sơ đồ kết nối module HC06 với MCU

➢ Cài đặt mặc định của mô-đun Bluetooth HC-06

➢ Xây dựng các hàm để giao tiếp với HC06

• Sử dụng hàm Serial_Begin() để khởi tạo UART1:

Trang 17

[17]

• Sử dụng hàm “Serial_Read()” để nhận được ký tử gửi về từ module HC06

void Serial_Begin (uint32_t baud)

// Step 1: Initialize GPIO for Tx and Rx pin

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE ); /*enable clock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE );

USART_Cmd(USART1, ENABLE); //kich hoat usart1

// Step 3: Enable USART receive interrupt

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

// Step 4: Initialize NVIC for USART IRQ

// Set NVIC prority group to group 4

//Note: Initialize NVIC for USART IRQ use register

use*/

Trang 18

[18]

3.2 Sử dụng app điều khiển

Hình 3.2 App Bluetooth Electronics trên CH Play

➢ Bước 1: Bật bluetooth trên điện thoại, tiến hành vào giao diện app để tìm kiếm thiết bị để kết nối

➢ Bước 2: Tìm kiếm thiết bị HC06 khi giao diện máy quét thiết bị thành công

➢ Bước 3: Tạo giao diện điều khiển sau khi kết nối thành công

Trang 19

[19]

➢ Bước 4: Cuối cùng chỉnh sửa mã code gửi về từ app tương ứng với mã code trên trình biên dịch vi điều khiển để điều khiển thiết bị hợp lý

3.2 Lập trình giao tiếp với SG90

3.2.1 Mô tả thuật toán

➢ Servo được điều khiển bằng giải thuật PID nhưng ta không cần quan tâm nhiều

vì trong 3 chân của servo, ta chỉ quan tâm đến chân PWM để cấp xung vào điều khiển động cơ

➢ Do servo hoạt động ở tần số 50Hz, tức chu kì xung PWM điều khiển servo là T

= 20ms Nhiệm vụ của người lập trình là sử dụng timer 2 của STM32F103C8T6 băm xung tạo ra xung có chu kì là 20ms để điều khiển động cơ

➢ Công thức tính toán tạo xung PWM có tần số 50Hz như sau:

fbus_timer2 = 72MHz, chọn prescaler = 72

Trang 20

[20]

3.2.2 Lưu đô thật toán

Hình 3.2 Lưu đồ điều khiển servo trong stm32

Trang 21

ra cấp vào vi điều khiển STM32 thực hiện hoạt động

➢ Khối input: Nhận dữ liệu từ module HC06 gửi về vi điều khiển thông qua bộ USART1 gồm hai chân đó là PA9 và PA10, tôc độ baud là 9600

➢ Khối output: Từng dữ liệu nhận được thì thực hiện điều khiển hệ thống xe

3.4.3 Thuật toán điều khiển cánh tay robot

➢ Ý tưởng: Sử dụng các ký tự nhận được từ điện thoại, từ đó điều chỉnh độ góc xoay từng động cơ sao cho hợp lý, sử dụng freertos chia làm hai tác vụ chính, một tác vụ để thực hiện đọc dữ liệu, tác vụ còn lại để xử lý dữ liệu

• Task 1: Kiểm tra dữ liệu từ điện thoại gửi về thông qua kết nối module HC06, thực hiện tiến hành gửi dữ liệu vào queue

Trang 22

[22]

• Task 2: Từ dữ liệu có trong bộ đệm queue, tiến hành xử lý để điều khiển ô tô

Hình 3.5 Lưu đồ thuật toan của tác vụ thứ nhất

Hình 3.6 Lưu đồ thuật toán của tác vụ thứ hai

Trang 23

[23]

3.4.4 Lập trình điều khiển động cơ giảm tốc

3.4.5 Lập trình điều khiển cánh tay robot

void Robot_Down()

{

Led_DownHigh();

GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)(1));

GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)(1));

GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(0));

}

void Robot_Up()

{

Led_UpHigh();

GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(1));

GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(1));

}

void Robot_Right()

{

Led_RightHigh();

GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(1));

GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(0));

}

void Robot_Left()

{

Led_LeftHigh();

GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(1));

GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)(0));

}

void Robot_Stop()

{

Led_SetLow();

GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)(0));

GPIO_WriteBit(GPIOA, GPIO_Pin_6, (BitAction)(0));

else if (data_receive == '7') Myservo_Write(GPIOB, GPIO_Pin_1, 15);

else if (data_receive == '8') Myservo_Write(GPIOB, GPIO_Pin_1, 30);

else if (data_receive == 'U') Robot_Up();

else if (data_receive == 'D') Robot_Down();

else if (data_receive == 'R') Robot_Right();

else if (data_receive == 'L') Robot_Left();

else Robot_Stop();

}

Trang 24

Myservo_Attach(GPIOA, GPIO_Pin_0); //Right

Myservo_Attach(GPIOA, GPIO_Pin_1); //Left

Myservo_Attach(GPIOB, GPIO_Pin_0); //Rotage

Myservo_Attach(GPIOB, GPIO_Pin_1); //Clamp

Myservo_Write(GPIOA, GPIO_Pin_0, right_pos);

Myservo_Write(GPIOA, GPIO_Pin_1, left_pos);

Myservo_Write(GPIOB, GPIO_Pin_0, rotage_pos); //Rotage

Myservo_Write(GPIOB, GPIO_Pin_1, 15); //Clamp

else if (data_receive == '7') Myservo_Write(GPIOB, GPIO_Pin_1, 15);

else if (data_receive == '8') Myservo_Write(GPIOB, GPIO_Pin_1, 30);

else if (data_receive == 'U') Robot_Up();

else if (data_receive == 'D') Robot_Down();

else if (data_receive == 'R') Robot_Right();

else if (data_receive == 'L') Robot_Left();

else Robot_Stop();

} vTaskDelay(10);

}

}

Ngày đăng: 03/10/2023, 17:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w