Tổng quan về webserver và lựa chọn phần cứng.

Một phần của tài liệu Biên soạn các bài học cho môn thực tập lập trình điều khiển ô tô đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 54 - 70)

Chương 4. THIẾT KẾ WEBSERVER HIỂN THỊ DỮ LIỆU

Tổng quan về webserver và lựa chọn phần cứng.

• Giới thiệu thư viện AnalogButton.h.

Tương tự được phát triển dựa trên thư viện Button.h, thư viện AnalogButton.h giúp xác định được các sự kiện của nút nhấn. Nội dung phần học sẽ trình bày về hướng dẫn sử dụng thư viện và lưu đồ thuật toán.

Pulse Width Modulation (PWM)

Giới thiệu về PWM

Kỹ thuật điều chế độ rộng xung PWM (Pulse Width Modulation) về bản chất vẫn là tín hiệu digital hai trạng thái nhưng có thêm những đặc trưng bao gồm tần số (frequency) và chu kì xung (duty cycle).

Hình 3.21. Kỹ thuật PWM

PWM “thủ công”

Vì PWM về cơ bản vẫn là những tín digital ouput nên có thể áp dụng kiến thức đã học để thực hiện. Nội dung phần học sẽ giúp các bạn học hiểu rõ về PWM và điều chế một xung PWM đơn giản.

45

analogWrite()

Arduino cung cấp hàm analogWrite() để điều chế xung PWM dễ dàng và thuận tiện hơn, nội dung phần học sẽ trình bày cách sử dụng hàm trong một chương trình cơ bản và một vài vấn đề nâng cao hơn.

Xung Input

Giới thiệu về xung input và kỹ thuật ngắt ngoài

Ngắt trên AVR (Interrupts) có thể hiểu đây là một tín hiệu khẩn cấp, yêu cầu tạm dừng tức khắc chương trình chính đang hoạt động để thực hiện một chương trình khác, có thể chia làm hai loại: Ngắt từ bên trong VĐK như ngắt tràn timer/counter, ngắt báo gửi dữ liệu hoàn thành… hoặc là ngắt từ bên ngoài như báo nhấn nút, báo tín hiệu thay đổi….

Phân tích những đặc điểm của xung input tuy bản chất là tín hiệu digital nhưng cần phải lập trình sử dụng kỹ thuật ngắt ngoài.

Tập lệnh sử dụng kỹ thuật ngắt ngoài

Nội dung phần học trình bày về các lệnh, chế độ ngắt, cách sử dụng ngắt ngoài trên Arduino nano.

Gợi ý thiết lập phần cứng

Vì bản chất xung input là dạng tín hiệu digital nên các bạn có thể sử dụng button để có thể nghiên cứu tương tự phần digital input, trong phần này sẽ sử dụng ngắt INT0 tại chân số 2 của Arduino nano để lập trình, chân số 2 sẽ được khai báo với chế độ INPUT_PULLUP sử dụng nội trở trong. Sơ đồ kết nối như sau:

Pin 2

GND Button

Arduino nano

Hình 3.22. Kết nối ngắt INT0 (Chân số 2

Lập trình

Nội dung phần học sẽ trình bày về hai yêu cầu thường gặp nhất khi lập trình với xung input:

• Chương trình đếm xung input.

• Xác định các thời gian của xung input.

46

Serial và các chuẩn giao tiếp

Quá trình truyền nhận dữ liệu

Để dữ liệu truyền đi và nhận thì phải được mã hóa dưới dạng một dãy các bit có giá trị 0 hoặc 1. Nội dung phần học sẽ trình bày và giải thích hai cách truyền dữ liệu song song và nối tiếp, trong đó cách truyền dữ liệu nối tiếp sẽ bao gồm truyền nối tiếp đồng bộ và không đồng bộ.

Sử dụng giao tiếp Serial

• Trình bày tập lệnh Serial để thực hiện truyền nhận dữ liệu trên Arduino. • Các vấn đề khác khi truyền nhận dữ liệu: bit kiểm tra, toán tử bit, tách ghép

các bytes…

Giới thiệu các chuẩn giao tiếp khác thường gặp

• SPI (Serial Peripheral Interface)

Hình 3.23. Mô hình kết nối chuẩn giao tiếp SPI

Hình 3.24. Mô hình kết nối nhiều slave giao tiếp SPI

• I2C (Inter-Integrated Circuit)

47 • Mạng CAN trên ô tô

Hình 3.26. Mạng CAN

Encoder – Đọc tốc độ động cơ GA25-370 3.3.8.1. Encoder

Nội dung phần học sẽ giới thiệu về encoder, phân loại encoder và trình bày về hai loại encoder cần lưu ý khi lập trình là encoder tuyệt đối và tương đối.

48

Hình 3.28. Encoder tuyệt đối và tương đối

3.3.8.2. Công tắc xoay encoder

Công tắc xoay encoder có thể xoay không giới hạn và tín hiệu đầu ra cơ bản không phải là analog mà là tín hiệu xung. Công tắc trên các bạn có thể tìm thấy ở các núm điều khiển hệ thống điều hòa, núm xoay điều chỉnh của lò vi sóng, một số loại máy in 3d…

Hình 3.29. Thiết bị encoder

Nội dung phần học bao gồm:

• Giới thiệu và sử dụng công tắc encoder bên dưới để nghiên cứu.

Hình 3.30. Công tắc xoay encoder

• Khảo sát thiết bị.

• Chương trình đếm nấc xoay.

49

3.3.8.3. Đo tốc độ động cơ GA25-370

Các thiết bị và sơ đồ kết nối

• Giới thiệu các thiết bị sử dụng.

Hình 3.31. Động cơ giảm tốc GA25-370 130RPM

Hình 3.32. Mạch L298N

50 • Sơ đồ kết nối.

Bảng 3.3. Bảng kết nối Arduino, L298N và GA25-370

Motor (GA25-370) 5V 12V 12V out1 out2 ENA IN1 IN2 IN3 IN4 ENB GND 5 10 11 8 9 6 GND 5V Arduino nano L298n 2 3 3,3~5V Encoder + Encoder - Phase A Phase B Encoder (GA25-370)

Hình 3.34. Sơ đồ kết nối Arduino nano, L298n, GA25-370

Lập trình đo tốc độ động cơ

Nội dung phần học sẽ trình bày về hai phương pháp lập trình đo tốc độ động cơ (phân tích ưu nhược điểm, so sánh…):

• Đo tốc độ động cơ trung bình dựa trên kỹ thuật ngắt ngoài đếm xung input. • Đo tốc độ động cơ dựa trên kỹ thuật ngắt ngoài xác định chu kỳ xung.

51

3.3.8.4. Vấn đề phát hiện xung răng khuyết

Các xung encoder đã nghiên cứu trả về khá đẹp, tuy nhiên trong quá trình học nhất là ở hệ thống đánh lửa các bạn có thể bắt gặp một số đĩa encoder có răng khuyết như sau:

Hình 3.35. Đĩa xung răng khuyết

Nội dung phần học sẽ cung cấp các giải pháp cho vấn đề trên và tài liệu tham khảo liên quan như lập trình nội suy vị trí từ vị trí răng khuyết.

52

PID – Điều khiển tốc độ, vị trí động cơ GA25-370 3.3.9.1. Giới thiệu bộ điều khiển PID

Bộ điều khiển PID là bộ điều khiển được sử dụng nhiều nhất trong các bộ điều khiển phản hồi, bộ điều khiển PID sẽ tính toán giá trị "sai số" là hiệu số giữa giá trị đo thông số biến đổi và giá trị đặt mong muốn.

PID là viết tắt của các từ Propotional (tỉ lệ), Integral (tích phân) và Derivative (đạo hàm), do đó đôi khi nó còn được gọi là điều khiển ba khâu.

Hình 3.36. Sơ đồ khối của bộ điều khiển PID

Nội dung phần học sẽ trình bày về các khâu của bộ điều khiển và một vài vấn đề liên quan.

3.3.9.2. Tập lệnh sử dụng

Nội dung phần học sẽ trình bày về cách dùng các bộ timer/counter của ATmega328 với Arduino IDE để tạo ra bộ đếm thời gian chính xác. Trên Atmega328 có 3 bộ timer là Timer/Counter0 (T/C) (8bit), Timer/Counter1 (16 bit), Timer/Counter2 (8 bit), để không làm ảnh hưởng đến hàm delay() và millis() của Arduino không nên tác động đến T/C0. Có nhiều chế độ cài đặt để tạo ra một bộ timer tuy nhiên trong phần học sẽ sử dụng chế độ ngắt tràn T/C1. Các thanh ghi sử dụng bao gồm:

• Thanh ghi TCNT1 (T/C1 Register)

• Thanh ghi TCCR1B (T/C1 Control Register B)

53 3.3.9.3. Thiết lập phần cứng Motor (GA25-370) 5V 12V 12V out1 out2 ENA IN1 IN2 IN3 IN4 ENB GND 5 10 11 8 9 6 GND 5V Arduino nano L298n 2 3 3,3~5V Encoder + Encoder - Phase A Phase B Encoder (GA25-370)

Hình 3.37. Sơ đồ kết nối Arduino nano, L298n, GA25-370

3.3.9.4. Lập trình điều khiển động cơ GA25-370

Lập trình điều khiển tốc độ

Nội dung phần học sẽ trình bày lập trình PID điều khiển tốc độ với hai phương pháp đo tốc độ đã trình bày (Mô hình điều khiển, lưu đồ giải thuật và chương trình mẫu):

• Đo tốc độ bằng kỹ thuật ngắt ngoài đếm xung.

• Đo tốc độ bằng kỹ thuật ngắt ngoài xác định chu kỳ xung.

Phân tích ưu nhược điểm mỗi phương pháp và phân tích kết quả thu được của chương trình.

Lập trình điều khiển vị trí

Nội dung phần học sẽ trình bày lập trình PID điều khiển vị trí và phân tích kết quả thu được của chương trình.

Các file và tài liệu hỗ trợ học tập:

Các thư viện nhóm đã viết ra nhằm hỗ trợ quá trình học tập, thực hành và sử dụng trong các dự án bao gồm:

• Thư viện Button: https://github.com/mnaduc/Button.git

• Thư viện AnalogButton: https://github.com/mnaduc/AnalogButton.git • Thư viện Led7: https://github.com/mnaduc/Led7.git

Chương trình trong các bài học: https://github.com/mnaduc/Code_Doan.git Tổng hợp các bài học, file chương trình, thư viện và các tài liệu tham khảo: https://www.dropbox.com/sh/bio9znwir2ytzhb/AAAuP4YkqDe7bbPK9im90QM- a?dl=0

54

Chương 4. THIẾT KẾ WEBSERVER HIỂN THỊ DỮ LIỆU Tổng quan về web server và lựa chọn phần cứng.

Trong quá trình thực hiện biên soạn các bài học và quá trình học tập một số môn học, nhóm em nhận thấy một số vấn đề sau:

• Trong các bài học đã biên soạn hai công cụ Serial Monitor và Serial Plotter do Arduino IDE cung cấp hỗ trợ quá trình học tập tốt nhưng yêu cầu phải kết nối trực tiếp (sử dụng dây kết nối) với mạch để quan sát được dữ liệu trên màn hình máy tính, máy chiếu... Điều này có thể gây khó khăn trong quá trình dạy học, thực hành nhóm đông sinh viên, học trực tuyến…

• Cách biểu diễn dữ liệu với hai công cụ trên không thể phát triển thêm để quan sát trực quan hơn như thể hiện dưới dạng các loại biểu đồ cột, đường, tròn, vành khăn… hay liệt kê dưới dạng bảng dữ liệu.

• Khi tiếp xúc với một vài mô hình ở các môn học, dữ liệu hệ thống được hiển thị bằng cách sử dụng các thiết bị như led, màn hình lcd, tft… hạn chế về không gian hiển thị và cách biểu diễn các thông số cũng như tốn kém chi phí phần cứng.

• Các mô hình, mạch Arduino có thể kết hợp sử dụng với các module giao tiếp không dây như bluetooth… tuy nhiên có thể sẽ hạn chế về khả năng mở rộng, tốc độ kết nối, số lượng kết nối, yêu cầu thiết bị phải cài đặt ứng dụng.

Với mong muốn giải quyết các vấn đề trên, nhóm chúng em đã phát triển thêm mô hình web server hỗ trợ hiển thị dữ liệu trong đồ án này với các yêu cầu sau:

• Các chương trình, mô hình kết nối được tạo ra có khả năng tái sử dụng và phát triển thêm trên các mô hình, dự án khác.

• Lựa chọn phần cứng thích hợp, nhỏ gọn phục vụ quá trình dạy học, thực hành, dễ dàng tích hợp và kết nối với các thiết bị sẵn có.

Mục đích phần phát triển này của nhóm là có thể giúp dữ liệu, kết quả xử lý có thể hiển thị trực quan hơn trên các ứng dụng web có sẵn trên hầu hết tất cả các thiết bị như điện thoại, máy tính… Đồng thời tăng thêm hiểu biết của bản thân về các vấn đề mạng kết nối, IOT (Internet Of Things) đang ngày càng phát triển và được ứng dụng trên ô tô ngày nay.

55

Giới thiệu về web server

Server hay còn gọi là máy chủ là một hệ thống đáp ứng yêu cầu trên một mạng lưới các thiết bị để cung cấp, hoặc hỗ trợ cung cấp một dịch vụ mạng ví dụ hệ thống hỗ trợ, cảnh báo tài xế được sử dụng trên VinBus của Vinfast được kết nối với hệ thống máy chủ và được giám sát điều hành liên tục… Các máy chủ điển hình là máy chủ cơ sở dữ liệu (database server), máy chủ file (file server), máy chủ mail (mail server), máy chủ in (print server), máy chủ web (web server) [5]

Web server là máy chủ cài đặt các chương trình phục vụ các ứng dụng web. Chức năng cơ bản nhất của máy chủ web là lưu trữ, xử lí và phân phối nội dung các trang web đến client. [6] Ví dụ: khi truy cập vào địa chỉ như “hcmute.edu.vn” sau một vài quá trình phân giải tên miền (tìm địa chỉ ip web server), trình duyệt web sẽ gửi yêu cầu đến web server. Web server sau khi nhận yêu cầu sẽ xử lý và gửi trả kết quả, tập tin (file) cần thiết như file dựng giao diện, các tài nguyên hình ảnh, âm thanh…

Tuy nhiên, các máy chủ web không chỉ được sử dụng để phục vụ các trình duyệt, nó có thể được tìm thấy trong các hệ thống nhúng. Khi này, web server có thể được sử dụng như một phần của hệ thống để theo dõi hoặc quản lý thiết bị. Điều này có nghĩa là có khể không cần phần mềm bổ sung nào phải được cài đặt trên client, vì chỉ cần một trình duyệt web (có sẵn trong hầu hết các hệ điều hành).

Chính vì ưu điểm trên, nhóm đã lựa chọn thiết kế web server hỗ trợ hiển thị dữ liệu để có thể sử dụng phổ biến trên hầu hết các thiết bị điện thoại, máy tính...

Lựa chọn phần cứng

Web server sẽ là nơi thu thập dữ liệu và thực thi chương trình phục vụ các ứng dụng web, điều đó có nghĩa mạch Arduino phải giao tiếp, kết nối được với máy chủ. Tuy nhiên phần lớn các dòng mạch Arduino hay các dòng vi điều khiển không trang bị sẵn cổng kết nối mạng hay kết nối wifi. Để có thể kết nối được với server, có thể dùng một số loại mạch đặc biệt tích hợp sẵn như WeMos của Arduino có kết nối wifi hoặc dùng Arduino Ethernet Shield W5100 để mở rộng thêm cổng LAN cho các board Arduino. Tuy nhiên những board mạch này có giá thành tương đối cao, khó tích hợp vào các thiết bị, vi điều khiển sẵn có vì phải thay đổi mã chương trình nhiều, ngoài ra số lượng các chân kết nối không nhiều hoặc bị hạn chế bớt so với các board mạch, vi điều khiển thường sử dụng như Arduino nano, uno, atmega328…

56

Hình 4.1. Mạch WeMos D1 và Arduino Ethernet Shield W5100

Để đáp ứng yêu cầu lựa chọn phần cứng thích hợp, nhỏ gọn phục vụ quá trình dạy học, thực hành, dễ dàng tích hợp và kết nối với các thiết bị sẵn có nên nhóm đã lựa chọn sử dụng vi điều khiển ESP8266 để làm cầu nối trung gian giữa Arduino và server.

ESP8266 là một vi điều khiển có thể lập trình tương tự như mạch Arduino nano được sử dụng trong các bài học nhưng được tích hợp thêm khả năng kết nối Wifi hoặc làm trạm phát Wifi 2.4GHz. Esp8266 có ưu điểm về giá thành, đa dạng phiên bản và cách đóng gói và có thể sử dụng trực tiếp Arduino IDE để lập trình. WeMos D1 có hình dáng giống Arduino UNO nhưng sử dụng vi điều khiển esp8266 cũng là một trong các dạng đóng gói của esp8266. Nhóm đã lựa chọn lập trình và kiểm thử trên hai phiên bản là NodeMCU và NodeMCU D1 Mini (Wemos D1). NodeMCU D1 Mini là một phiên bản thu nhỏ của NodeMCU có ưu điểm về kích thước nhỏ gọn nhưng vẫn trang bị đầy đủ các cổng kết nối.

57

Bảng 4.1. Thông số kỹ thuật NodeMCU D1 Mini

IC chính ESP8266 Wifi SoC phiên bản ESP12

Nguồn cấp 5VDC MicroUSB hoặc vào các chân 5V, Vin (hoặc 3V3 và chân 3V3)

Chip nạp và giao tiếp UART CH340 (hoặc CP2102 trên NodeMCU)

Xung nhịp 80MHz/160MHz

Chân digital 11

Chân Analog input 1

Bộ nhớ Flash 4MB

Kích thước 34.2 x 25.6mm

Bảng 4.2. Bảng đối chiếu các chân NodeMCU và ESP8266

Pin Chức năng ESP8266 Pin

TX TXD TXD

RX RXD RXD

A0 Analog input (max 3,3V) A0

D0 IO GPIO16

D1 IO, SCL GPIO5

D2 IO, SDA GPIO4

D3 IO, 10k Pull-up GPIO0

D4 IO, 10k Pull-up, BUILTIN_LED GPIO2

D5 IO, SCK GPIO14

D6 IO, MISO GPIO12

D7 IO, MOSI GPIO13

D8 IO, 10k Pull-down, SS GPIO15

G Ground GND

3V3 3.3V 3.3V

RST Reset RST

Tất cả các chân điều hỗ trợ ngắt/PWM/I2C/one-wire ngoại trừ D0

58 • Vào File > Preferences, vào textbox Additional Board Manager URLs

thêm đường dẫn sau và nhấn OK:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Hình 4.3. Cài đặt Arduino IDE lập trình với esp8266

• Vào Tool > Board > Boards Manager.

• Tìm kiếm và cài đặt ESP8266 by ESP8266 Community.

Hình 4.4. Cài đặt Arduino IDE lập trình với esp8266

• Chờ đợi phần mềm tải về và hoàn tất cài đặt. Tài liệu lập trình esp8266 và các cách cài đặt khác:

59 Để nạp chương trình, thực hiện lựa chọn board mạch, port kết nối tương tự như lập trình với mạch Arduino thông thường. (Lưu ý có thể lựa chọn Upload Speed cao để tăng tốc độ nạp chương trình).

60

Một phần của tài liệu Biên soạn các bài học cho môn thực tập lập trình điều khiển ô tô đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 54 - 70)