➢ 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
BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG 🙣🙣🙣 BÁO CÁO MÔN HỌC MÔN HỌC: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG ĐỀ TÀI: THIẾT KẾ ĐIỀU KHIỂN XE Ô TƠ MƠ HÌNH BẰNG ĐIỆN THOẠI Hà Nội, 2022 Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh Mục lục Lời cảm ơn .3 Chương Tổng quan đề tài 1.1, Đặt vấn đề 1.2, Mục tiêu đề tài 1.3, Nội dung nghiên cứu Chương Cơ sở lý thuyết .5 2.1 Giới thiếu linh kiện .5 2.1.1 Tổng quan vi xử lý ARM 2.1.2 Kit STM32F103C8T6 2.1.3 Module HC06 .7 2.1.4 Module L298 2.1.5 Động giảm tốc 2.1.6 Động servo SG90 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 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 cách add thư viện FreeRtos Keil C .14 2.4.3 Create Task 15 Chương 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 tốn 19 3.2.2 Lưu thật tốn 20 3.3 Lắp ráp, thi công 20 3.3.1 Xe bánh .20 3.3.2 Cánh tay robot 20 [2] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 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 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 Kết luận 27 4.1 Nhận xét 27 4.2 Hướng phát triển 27 Chương Tài liệu tham khảo .28 [3] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh Lời cảm ơn Nhóm chúng em xin gửi lời cảm ơn sâu sắc chân thành tới thầy Nguyễn Ngọc Minh tận tình giúp đỡ, bảo, hướng dẫn nhóm thực suốt trình thực đề tài 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 tinh thần làm việc, thái độ nghiên cứu môn học nghiêm túc, hiệu thầy điều cần thiết cho nhóm q trình học tập công tác cho chúng em sau Kính chúc thầy sức khoẻ, hạnh phúc thành cơng đường nghiệp giảng dạy! Chân thành cảm ơn đến bạn nhóm ln đồng hành, giúp đỡ để nhóm thực đề tài thành công! [4] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh Chương Tổng quan đề tài 1.1, Đặt vấn đề Cuộc sống ngày phát triển nhanh chóng đại hơn, cơng nghệ ngày phát minh phát triển để đưa vào phục vụ sống ngày người Nhằm mang lại tiện nghi, an toàn cho người sử dụng, nhóm chúng 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 nhóm nghiên cứu, khảo sát thực với mục đích áp dụng kiến thức học trường giúp cho nhu cầu điều khiển trở nên tiện lợi Vì 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 HC06, truyền nhận ký tự từ app 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 điều khiển xe ➢ Nội dung 4: Thiết kế, thi công thử nghiệm phần cứng ➢ Nội dung 5: Đánh gia kết viết báo cáo Chương Cơ sở lý thuyết 2.1 Giới thiếu linh kiện 2.1.1 Tổng quan vi xử lý ARM ARM ( viết cách điệu arm, trước từ viết tắt Advanced RISC Machine,ban đầu Acorn RISC Machine) họ kiến trúc dạng RISC cho vi xử lý máy tính, cấu hình cho mơi trường khác Arm Holdings phát triển kiến trúc cấp phép cho công ty khác, nơi mà thiết kế sản phẩm riêng họ để thực kiến trúc bao gồm SoC module hệ thống (SoM) kết hợp với thành phần khác nhớ, giao diện, radio Họ thiết kế lõi thực tập lệnh cấp phép cho thiết kế cho công ty đối tác để thiết kế sản phẩm riêng họ dựa lõi [5] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 2.1.2 Kit STM32F103C8T6 Hình 2.1 STM32F103C8T6 ➢ STM32 dịng chip phổ biến ST với nhiều họ thông dụng F0,F1,F2,F3,F4… Stm32f103 thuộc họ F1 với lõi ARM COTEX M3 STM32F103 vi điều khiển 32 bit, tốc độ tối đa 72Mhz Giá thành rẻ so với loại vi điều khiển có chức tương tự Mạch nạp cơng cụ lập trình đa dạng dễ sử dụng Phần mềm lập trình: có nhiều trình biên dịch cho STM32 IAR Embedded Workbench, Keil C… Hình 2.2 Cấu tạo STM32F103C8T6 ➢ Sơ lược Board • cổng Mini USB dùng để cấp nguồn, nạp debug • MCU bao gồm MCU nạp MCU dùng để lập trình • Có chân Output riêng cho chân mạch nạp MCU1 • Có chân Output đầy đủ cho chân MCU2 • Chân cấp nguồn ngồi riêng cho MCU2 khơng sử dụng nguồn từ USB • Thạch anh 32,768khz dùng cho RTC Backup.9 • Chân nạp dùng cho chế độ nạp boot loader [6] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh • Nút Reset ngồi led hiển thị chân PB9, 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 chân hoàn chỉnh giúp dễ dàng kết nối để thực thí nghiệm, module thiết kế 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 sử dụng cổng COM ảo, việc truyền nhận với COM ảo giống truyền nhận liệu trực tiếp với UART module ➢ Lưu ý thay đổi Baudrate cho COM ảo không làm thay đổi baudrate UART, baudrate UART thay đổi AT command module Module thu phát bluetooth HC-06 setup mặc định Slave thay đổi nên giao tiếp với thiết bị bluetooth dạng master Smart phone, HC-05 master,… hai module bluetooth set Slave giao tiếp với ➢ 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 5VDC • Baudrate UART chọn được: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 [7] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh • 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 hoạt động: Pairing 30 mA, sau pairing hoạt động truyền nhận bình thường mA • Kích thước module chính: 28 mm x 15 mm x 2.35 mm • Thiết lập mặc định: • Baud rate: 9600, N, 8, • Pairing code: 1234 2.1.4 Module L298 Hình 2.4 Mạch điều khiển động DC L298N ➢ Mạch điều khiển động DC L298N có khả điều khiển động DC, dịng tối đa 2A động cơ, mạch tích hợp diod bảo vệ IC nguồn 7805 giúp cấp nguồn 5VDC cho module khác (chỉ sử dụng 5V nguồn cấp SR = (uint16_t)~USART_IT_RXNE; USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ(USART1_IRQn); /*Clear interrupt flag for first /*Allow interrupt receive*/ /*Enable NVIC UART1*/ • Sử dụng hàm “Serial_Read()” để nhận ký tử gửi từ module HC06 uint8_t Serial_Read(void) { uint8_t data_read; RB_Pop(&ring_buffer, &data_read); return data_read; } [17] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 3.2 Sử dụng app điều khiển Hình 3.2 App Bluetooth Electronics CH Play ➢ Bước 1: Bật bluetooth đ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 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 kết nối thành công [18] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh ➢ Bước 4: Cuối chỉnh sửa mã code gửi từ app tương ứng với mã code 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 điều khiển giải thuật PID ta khơng cần quan tâm nhiều chân servo, ta quan tâm đến chân PWM để cấp xung vào điều khiển động ➢ Do servo hoạt động tần số 50Hz, tức chu kì xung PWM điều khiển servo T = 20ms Nhiệm vụ người lập trình sử dụng timer STM32F103C8T6 băm xung tạo xung có chu kì 20ms để điều khiển động ➢ Cơng thức tính tốn tạo xung PWM có tần số 50Hz sau: fPWM = 50Hz => TPWM = 20ms fbus_timer2 = 72MHz, chọn prescaler = 72 = > ftimer_tick = fbus_timer2 / prescaler = 1MHz Tìm period: period = (ftimer_tick / fPWM) -1 = 1000000 / 50 – = 20000 (tick) [19] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 3.2.2 Lưu thật tốn Hình 3.2 Lưu đồ điều khiển servo stm32 3.3 Lắp ráp, thi cơng 3.3.1 Xe bánh Hình 3.2 Linh kiện chuẩn bị lắp ráp 3.3.2 Cánh tay robot Hình 3.3 Cánh tay robot mica [20] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 3.4 Thực thi hệ thống 3.4.1 Sơ đồ khối Hình 3.4 Sơ đồ khối hoạt động 3.4.2 Nguyên lý hoạt động ➢ Khối nguồn: Sử dụng pin 18650 cấp nguồn cho module L298 xấp xỉ 11V, tạo nguồn đầu 5V module L298 có mạch ổn áp IC7805, sử dụng nguồn 5V đầu cấp vào vi điều khiển STM32 thực hoạt động ➢ Khối input: Nhận liệu từ module HC06 gửi vi điều khiển thông qua USART1 gồm hai chân PA9 PA10, tơc độ baud 9600 ➢ Khối output: Từng liệu nhận thực đ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 ký tự nhận từ điện thoại, từ điều chỉnh độ góc xoay động cho hợp lý, sử dụng freertos chia làm hai tác vụ chính, tác vụ để thực đọc liệu, tác vụ lại để xử lý liệu • Task 1: Kiểm tra liệu từ điện thoại gửi thông qua kết nối module HC06, thực tiến hành gửi liệu vào queue [21] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh • Task 2: Từ liệu có đệm queue, tiến hành xử lý để điều khiển ô tơ Hình 3.5 Lưu đồ thuật toan tác vụ thứ Hình 3.6 Lưu đồ thuật tốn tác vụ thứ hai [22] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 3.4.4 Lập trình điều khiển động giảm tốc void Robot_Down() { Led_DownHigh(); GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, } void Robot_Up() { Led_UpHigh(); GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, } void Robot_Right() { Led_RightHigh(); GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, } void Robot_Left() { Led_LeftHigh(); GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, } void Robot_Stop() { Led_SetLow(); GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, GPIO_WriteBit(GPIOA, } GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, (BitAction)(1)); (BitAction)(0)); (BitAction)(1)); (BitAction)(0)); GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, (BitAction)(0)); (BitAction)(1)); (BitAction)(0)); (BitAction)(1)); GPIO_Pin_4, GPIO_Pin_3, GPIO_Pin_5, GPIO_Pin_6, (BitAction)(1)); (BitAction)(0)); (BitAction)(0)); (BitAction)(0)); GPIO_Pin_4, GPIO_Pin_3, GPIO_Pin_6, GPIO_Pin_5, (BitAction)(0)); (BitAction)(0)); (BitAction)(1)); (BitAction)(0)); GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, (BitAction)(0)); (BitAction)(0)); (BitAction)(0)); (BitAction)(0)); 3.4.5 Lập trình điều khiển cánh tay robot static void Task1_ReceiveData( void *pvParameters ) { uint16_t readDataFormHC06; Serial_Begin(9600); Led_Config(); while (1) { if (Serial_Available() > 0) { readDataFormHC06 = Serial_Read(); if (readDataFormHC06 == 'F') Led_UpHigh(); if (readDataFormHC06 == 'B') Led_DownHigh(); if (readDataFormHC06 == 'R') Led_RightHigh(); if (readDataFormHC06 == 'L') Led_LeftHigh(); xQueueSend(queueBuffer, &readDataFormHC06, TIME_OUT); } vTaskDelay(10); } } left_pos -= 5; if (left_pos < 20) left_pos = 20; Myservo_Write(GPIOA, GPIO_Pin_1, left_pos); } 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 else else else else if (data_receive if (data_receive if (data_receive if (data_receive Robot_Stop(); == == == == 'U') 'D') 'R') 'L') Robot_Up(); Robot_Down(); Robot_Right(); Robot_Left(); } [23] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh static void Task2_HandleData ( void *pvParameters ) { uint8_t data_receive; int16_t rotage_pos = 90; int16_t right_pos = 90; int16_t left_pos = 20; Robot_Config(); Myservo_Attach(GPIOA, Myservo_Attach(GPIOA, Myservo_Attach(GPIOA, Myservo_Attach(GPIOB, Myservo_Attach(GPIOB, Myservo_Write(GPIOA, Myservo_Write(GPIOA, Myservo_Write(GPIOB, Myservo_Write(GPIOB, GPIO_Pin_0); GPIO_Pin_0); GPIO_Pin_1); GPIO_Pin_0); GPIO_Pin_1); GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_1, //Right //Left //Rotage //Clamp right_pos); left_pos); rotage_pos); //Rotage 15); //Clamp uint16_t receiveData; while (1) { if (xQueueReceive(queueBuffer, &data_receive, TIME_OUT)) { if (data_receive == '1') { rotage_pos += 5; if (rotage_pos > 180) rotage_pos = 180; Myservo_Write(GPIOB, GPIO_Pin_0, rotage_pos); } else if (data_receive == '2') { rotage_pos -= 5; if (rotage_pos < 15) rotage_pos = 15; Myservo_Write(GPIOB, GPIO_Pin_0, rotage_pos); } if (data_receive == '3') { right_pos += 5; if (right_pos > 140) right_pos = 140; Myservo_Write(GPIOA, GPIO_Pin_0, right_pos); } else if (data_receive == '4') { right_pos -= 5; if (right_pos < 50) right_pos = 50; Myservo_Write(GPIOA, GPIO_Pin_0, right_pos); } if (data_receive == '5') { left_pos += 5; if (left_pos > 90) left_pos = 90; Myservo_Write(GPIOA, GPIO_Pin_1, left_pos); } else if (data_receive == '6') { left_pos -= 5; if (left_pos < 20) left_pos = 20; Myservo_Write(GPIOA, GPIO_Pin_1, left_pos); } 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 else else else else if (data_receive == 'U') if (data_receive == 'D') if (data_receive == 'R') if (data_receive == 'L') Robot_Stop(); } vTaskDelay(10); Robot_Up(); Robot_Down(); Robot_Right(); Robot_Left(); } } [24] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh 3.4.3 Sử dụng app điều khiển Hình 3.7 App Bluetooth Electronics CH Play ➢ Bước 1: Bật bluetooth đ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 giao diện máy quét thiết bị thành công [25] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh ➢ Bước 3: Tạo giao diện điều khiển sau kết nối thành công ➢ Bước 4: Cuối chỉnh sửa mã code gửi từ app tương ứng với mã code trình biên dịch vi điều khiển để điều khiển thiết bị hợp lý [26] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh Chương Kết luận 4.1 Nhận xét Hình 3.7 Hình ảnh thực tế nhóm ➢ Xe điều khiển bluetooth nhóm chúng em cịn nhiều hạn chế như: ➢ Bản tin gửi từ điện thoại nhận ký tự chưa sử dụng chuẩn đóng gói ➢ Xe điều khiển HC06 phạm bluetooth có phạm vi hạn chế ➢ Cánh tay robot chất liệu mica động SG90 vật liệu giá rẻ phù hợp gắp vật có khối lượng nhỏ 4.2 Hướng phát triển ➢ Lắp camera thực nhận diện đồ vật từ điều khiển cánh tay gắp vật ➢ Thay vật liệu động cơ, bánh xe, chất liệu cánh tay để cánh tay thực khỏe trơn tru [27] Đồ án thiết kế hệ thống nhúng GVHD: Nguyễn Ngọc Minh Chương Tài liệu tham khảo https://deviot.vn/tutorials/stm32f1.23165131/uart-voi-stm32.99038892 https://deviot.vn/tutorials/stm32f1.23165131/timer-voi-stm32-phan-3-pwmmode.19209473 https://huynhnhattung.com/hc06-giao-tiep-stm32-module-bluetooth-hc06-kichrelay-stm/ https://controllerstech.com/servo-motor-with-stm32/ [28]