07/11/2022

GIỚI THIỆU MẠCH ĐIỆN ARDUINO VÀ ỨNG DỤNG

Bài viết tóm tắt lịch sử phát triển của vi điều khiển nói chung và sự hình thành phát triển của vi mạch ứng dụng vi điều khiển Arduino. Tiếp theo bài viết mô tả mạch điện phần cứng cũng như phần mềm sử dụng cho Arduino. Với những thuận lợi về phần cứng phụ trợ cũng như thư viện phần mềm mã nguồn mở, mạch điện Arduino là cách tiếp cận đơn giản và hiệu quả cho người dùng với mục đích học tập, nghiên cứu hay phát triển các ứng dụng trong thực tế.

GIỚI THIỆU MẠCH ĐIỆN ARDUINO VÀ ỨNG DỤNG

ThS. Đàm Hải Quân

Tóm tắt:

            Bài viết tóm tắt lịch sử phát triển của vi điều khiển nói chung và sự hình thành phát triển của vi mạch ứng dụng vi điều khiển Arduino. Tiếp theo bài viết mô tả mạch điện phần cứng cũng như phần mềm sử dụng cho Arduino. Với những thuận lợi về phần cứng phụ trợ cũng như thư viện phần mềm mã nguồn mở, mạch điện Arduino là cách tiếp cận đơn giản và hiệu quả cho người dùng với mục đích học tập, nghiên cứu hay phát triển các ứng dụng trong thực tế.

Nội dung:

I. Tổng quan về lịch sử phát triển của vi điều khiển

            Vi điều khiển (Microprocessor) có thể hiểu là một máy tính thu nhỏ với các thành phần cần thiết như bộ xử lý trung tâm, các bộ nhớ ROM, RAM, các cổng truyền thông, cổng vào ra giao tiếp với thiết bị ngoại vi. Khác với vi xử lý với tốc độ xử lý cao, chủ yếu phục vụ cho việc tính toán, vi điều khiển với tốc độ xử lý chậm hơn, hướng vào các ứng dụng điều khiển. Vi điều khiển được thiết kế để có thể chạy độc lập, với mức tiêu thụ năng lượng nhỏ, đã được ứng dụng rộng rãi trong rất nhiều lĩnh vực như trong công nghiệp, viễn thông, thiết bị gia dụng, các hệ thống nhà thông minh…

            Vi điều khiển xuất hiện lần đầu tiên năm 1972 là phiên bản 4004 4-bit  của hãng Intel [1] và tiếp theo đó là chip vi điều khiển 8008 8-bit cũng của hãng này, tuy nhiên các phiên bản đầu tiên này phải sử dụng các bộ nhớ nằm bên ngoài riêng biệt. Trước đó vào năm 1971, hai kỹ sư Gary Boone và Micheal Cochran của hãng TI đã nghiên cứu thiết kế thành công vi điều khiển đầu tiên và đưa ra sản phẩm thương mại đầu tiên năm 1974 có tên gọi TMS 1000, đây có thể gọi là phiên bản vi điều khiển đầu tiên với các thành phần bộ nhớ ROM, RAM, vi xử lý, đồng hồ thời gian thực được tích hợp trên cùng một chip. Sản phẩm này được đưa ra thị trường với mục tiêu nhắm đến các hệ thống nhúng. Cũng trong khoảng thời gian này, các nhà sản xuất điện tử Nhật Bản cũng bắt đầu giới thiệu các sản phầm dành cho ứng dụng di động, bao gồm các vi điều khiển 4-bit cho các ứng dụng giải trí trên ô tô, khóa điện tử, bảng điều khiển, các vi điều khiển 8-bit điều khiển động cơ…

            Cùng với sự xuất hiện vi điều khiển TMS 1000, hãng Intel đã phát triển một sản phẩm vi điều khiển có tên Intel 8048 được tích hợp vi xử lý, bộ nhớ RAM và ROM trên cùng một chip. Theo lời chủ tịch Intel – Luke J.Valenter, sản phẩm này có thể được xem như một trong những sản phẩm thành công nhất của hãng Intel.

            Trong một chip vi điều khiển, bộ nhớ ROM được sử dụng để lưu trữ chương trình hoạt động – có thể được hiểu như là các hệ điều hành trên máy tính. Sự phát triển của các dòng vi điều khiển gắn với công nghệ bộ nhớ ROM qua các thời kỳ. Ban đầu bộ nhớ EPROM được sử dụng, đây là bộ nhớ có thể lập trình bằng điện nhưng xóa bằng tia cực tím, trên thân mỗi chip có sử dụng EPROM đều có một cửa sổ thạch anh để nhận tia cực tím. Với các sản phẩm thương mại, người ta lại sử dụng bộ nhớ PROM – chỉ lập trình được một lần, các bộ nhớ này còn được gọi là OTP ROM (One Time Programmable ROM). Năm 1993, công nghệ bộ nhớ EEPROM được giới thiệu và tích hợp trong vi điều khiển PIC 16C84, đây là bộ nhớ có thể lập trình được nhiều lần, có thể xóa bằng tín hiệu điện. Trong cùng khoảng thời gian này, hãng Atmel đã giới thiệu vi điều khiển đầu tiên sử dụng bộ nhớ Flash, một dạng đặc biệt của EEPROM. Cả hai công nghệ này vẫn đang phát triển song song và được sử dụng rộng rãi trong các dòng vi điều khiển cao cấp sau này.

Thời điểm hiện tại, vi điều khiển đang phát triển rất phong phú. Các nhà sản xuất luôn chú trọng cải thiện về dung lượng bộ nhớ, tốc độ xử lý, tốc độ đọc ghi dữ liệu và trang bị thêm rất nhiều chức năng như các cổng truyền thông theo các giao thức khác nhau (RS232, I2C, SPI, USB, Ethernet…), các bộ chuyển đổi A/D, D/A, các chức năng định thời gian, thời gian thực, các bộ định thời quản lý hoạt động của vi điều khiển – watchdog timer…Có thể kể ra một số dòng vi điều khiển thông dụng như 8051, PIC, AVR, STM, PSoC, MSP…

II. Arduino và ứng dụng

Các dòng vi điều khiển mặc dù đã được trang bị rất nhiều tính năng, được ứng dụng rộng rãi trong nhiều lĩnh vực, tuy nhiên vẫn có những khó khăn và rào cản khi tiếp cận như chương trình dịch, ngôn ngữ lập trình, các chương trình giao tiếp, các mạch điện phụ kiện phần cứng và đặc biệt là vấn đề bản quyền cũng như tính mở của các chương trình ứng dụng.

Arduino là một nền tảng mã nguồn mở phần cứng và phần mềm. Phần cứng Arduino (các board mạch vi điều khiển) được sinh ra tại thị trấn Ivrea ở Ý, nhằm xây dựng các ứng dụng tương tác với nhau hoặc với môi trường được thuận lợi hơn. Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi điều khiển AVR Atmel 8-bit, hoặc ARM Atmel 32-bit. Những model hiện tại được trang bị gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật số tương thích với nhiều board mở rộng khác nhau. Được giới thiệu vào năm 2005, những nhà thiết kế của Arduino cố gắng mang đến một phương thức dễ dàng, chi phí thấp dành cho những người yêu thích, học sinh/sinh viên và giới chuyên nghiệp để tạo ra những thiết bị có khả năng tương tác với môi trường thông qua các cảm biến và các cơ cấu chấp hành. Những ví dụ phổ biến cho những người yêu thích mới bắt đầu bao gồm các robot đơn giản, điều khiển nhiệt độ và phát hiện chuyển động. Đi cùng với nó là một môi trường phát triển tích hợp (IDE) chạy trên các máy tính cá nhân thông thường và cho phép người dùng viết các chương trình cho Arduino bằng ngôn ngữ C hoặc C++ [2].

Về mặt mạch điện phần cứng, Arduino có nhiều phiên bản mạch điện khác nhau, với kích cỡ mạch khác nhau, sử dụng vi điều khiển phiên bản khác nhau (chủ yếu là dòng vi điều khiển AVR), số đầu vào/ra khác nhau tùy nhu cầu ứng dụng của người sử dụng, trong đó có thể kể đến 4 loại thông dụng: Arduino Mega2560, Uno, Nano và Promini tương ứng giảm dần về kích cỡ mạch, số chân vào/ra và cổng truyền thông.

 

Hình 1. Mạch điện Arduino UNO R3

Để bắt đầu làm quen với Arduino, theo khuyến cáo của người viết bài, có thể lựa chọn mạch điện Arduino Uno. Đây là mạch điện được trang bị đầy đủ các tính năng, hỗ trợ về phần nguồn, giao tiếp máy tính cũng như các phụ kiện đi kèm giúp đơn giản  hóa và tối thiểu hóa các kết nối và thành phần bên ngoài. Có thể nói ngắn gọn là người dùng chỉ việc kết  nối vào máy tính thông qua cổng USB và viết chương trình đầu tiên. Mạch điện phần cứng Arduino được  mô tả như hình 1, bao gồm vi điều khiển trung tâm Atmega328, các mạch chuyển đổi nguồn, mạch tạo dao động thạch anh, IC giao tiếp USB, đèn LED hiển thị trên mạch và các cổng kết nối. Cổng cấp nguồn được sử dụng trong trường hợp sử dụng bộ chuyển đổi nguồn bên ngoài với dải điện áp từ 5v-20v. Với các ứng dụng học tập hoặc thử nghiệm không yêu cầu nguồn công suất lớn, mạch điện có thể lấy trực tiếp nguồn 5V từ cổng USB của máy tính. Cổng USB được sử dụng để kết nối với máy tính, tải các chương trình người dùng viết để  biên dịch và nạp vào bộ nhớ chương trình của vi điều khiển. Các cổng vào ra của Arduino được thiết kế theo dạng chân cắm để dễ dàng kết nối với mạch điện bên ngoài, trong đó các chân được đánh số từ 2-13 là các chân vào/ra số, một số chân có ký hiệu “~” còn được trang bị chức năng điều chế độ rộng xung – PWM. Riêng hai chân 0 và 1 được sử dụng cho cổng truyền thông nối tiếp.

 

            Các chân có ký hiệu A0-A5 là các đầu vào tín hiệu tương tự, được sử dụng để đọc tín hiệu điện áp dạng tương tự (như từ các cảm biến, biến trở…). Ngoài ra trên các chân cắm còn có thêm các đường cấp nguồn 3,3V, 5V, GND, các đường cấp nguồn này có thể được sử dụng để cấp cho các mạch ngoại vi công suất nhỏ như các cảm biến, động cơ servo…

            Trên mạch điện còn tích hợp các đèn LED hiển thị trạng thái của cổng truyền thông nối tiếp, đồng thời có thêm một đèn LED kết nối với chân 13 của mạch với mục đích giúp cho việc kiểm tra hoạt động của mạch điện trở nên rất dễ dàng.

 

Hình 2 .b Cửa sổ soạn thảo mã lệnh

Hình 2 .a Logo phần mềm Arduino

                       

            Để lập trình được cho Arduino có thể sử dụng nhiều phương pháp lập trình khác nhau như lập trình bằng câu lệnh, lập trình bằng ngôn ngữ dạng kéo thả, sử dụng các trình biên dịch khác nhau. Trong phạm vi bài viết này, tác giả chỉ đề cập đến ngôn ngữ và trình biên dịch phổ thông hơn cả là phần mềm Arduino IDE – một công cụ được đội ngũ kỹ sư của Arduino phát triển, có thể chạy trên Windows, MAC OS X và Linus [3]. Ngôn ngữ sử dụng cho Arduino trong phần mềm Arduino IDE là ngôn ngữ C, tuy nhiên đã được tối giản đi khá nhiều cú pháp và câu lệnh, giúp cho người học tiếp cận một cách nhanh nhất và dễ hiểu nhất. Phần mềm Arduino IDE được thiết kế để người sử dụng có thể tải về và sử dụng ngay mà không cần cài đặt, để kết nối được với mạch điện Arduino, người dùng chỉ cần cài đặt thêm driver cho phần cứng nhận cổng COM ảo – là cổng trao đổi dữ liệu nối tiếp của vi điều khiển Atmega. Giao diện phần mềm Arduino IDE (hình 2) có thiết kế đơn giản, thân thiện với người dùng. Việc cài đặt driver và sử dụng phần mềm trình biên dịch đã được đề cập rất chi tiết tại các website hoặc tài liệu của cộng đồng Arduino trên thế giới và tại Việt nam, một điểm cần lưu ý đối với người mới học tập và làm quen đó là có thể tự học từ một số lượng lớn các ví dụ ngay trên phần mềm bằng cách vào đường dẫn File/Examples.

 

            Một chức năng rất hữu dụng và làm nên điểm khác của phần mềm này là nó được trang bị chức năng hiển thị giá trị dữ liệu dạng text hoặc đồ thị của cổng truyền thông nối tiếp (Hình 3). Chức năng này cho phép người dùng quan sát dữ liệu hoặc mô phỏng dữ liệu dạng đồ thị theo thời gian, rất hữu dụng trong quá trình quan sát dữ liệu đọc được từ các cảm biến với tốc độ cao hoặc các giá trị điều khiển thay đổi tốc độ cao mà không cần dùng đến các công cụ đo đạc khác như đồng hồ vạn năng hay máy hiện sóng. Để sử dụng chức năng này, trên phần mềm chọn Tools/Serial Monitor hoặc Tools/Serial Plotter.

(a)

(b)

Hình 3 (a) Cửa sổ dữ liệu cổng COM. (b) Đồ thị dữ liệu cổng COM

Arduino là tài nguyên dạng mã nguồn mở, do đó sự hỗ trợ về phần cứng và phần mềm là vô cùng phong phú.

Về mảng phần cứng, có thể thấy có rất nhiều sản phẩm, mạch điện hoặc linh kiện phụ trợ cho các mạch Arduino. Từ các mạch cảm biến nhiệt độ, âm thanh, cảm biến chuyển động, mạch điều khiển động cơ bước A4988, mạch điều khiển tốc độ và chiều quay động cơ L298, tới các mạch tích hợp dạng shield như màn hình LCD, mạch điều khiển CNC, các mạch cao cấp hơn như mô đun thu phát bluetooth HC05, thu phát vô tuyến NRF24L01, mô đun giao tiếp internet ESP8266…

Về phần mềm, với các cộng đồng Arduino đông đảo và không ngừng hỗ trợ, người dùng không còn phải phát triển các ý tưởng từ thiết kế ban đầu trở đi, thay vào đó là hệ thống thư viện mã nguồn mở luôn được cập nhật, phát triển và đặc biệt là miễn phí với tất cả mọi người. Người sử dụng có thể dễ dàng tìm kiếm các thư viện mã nguồn mở trên các trang web như arduino.cc, github.com  hay arduino.vn. Người dùng lúc này không còn đóng vai trò là người thiết kế mà nghiêng về mặt phát triển hệ thống mã nguồn mở theo nhu cầu hoặc dự án cụ thể.

Kết luận

            Với những thuận lợi kể ra trên đây, có thể thấy Arduino là lĩnh vực nghiên cứu ứng dụng phù hợp với hầu hết các đối tượng, từ học sinh phổ thông tới sinh viên kỹ thuật, thậm chí kể cả các đối tượng nghiên cứu ở mức độ chuyên môn cao hơn.

            Tuy nhiên cũng xuất phát từ chính những điểm mạnh, các mạch điện Arduino cũng cho thấy mặt hạn chế. Với sự phụ thuộc vào nguồn hỗ trợ và thư viện sẵn có khổng lồ, người sử dụng có thể sẽ bị hạn chế tính sáng tạo trong các ứng dụng của riêng mình. Mặt khác, với mục đích tiếp cận một cách nhanh nhất tới ứng dụng, người dùng cũng không được trang bị các hiểu biết cặn kẽ về điện tử cơ bản hay vi điều khiển, dẫn tới khó hoặc không có khả năng xử lý khi gặp phải một vài lỗi về phần cứng hoặc phần mềm.

Hiện tại ở nước ta, Arduino đang được sử dụng rộng rãi trong giáo dục STEM. Arduino cũng đã được đưa vào chương trình môn Công nghệ cho học sinh trung học phổ thông. Arduino cũng là một công cụ được ưa thích đối với sinh viên các trường kỹ thuật. Xa hơn nữa, ta cũng có thể dễ dàng tìm thấy một nghiên cứu được công bố trên tạp chí quốc tế có sử dụng Arduino. Như vậy có thể thấy Arduino vẫn là một cách tiếp cận phù hợp và hiệu quả đến lĩnh vực điện tử, điều khiển hay IoT.

Tài liệu tham khảo

[1] https://en.wikipedia.org/wiki/Microcontroller

[2] https://vi.wikipedia.org/wiki/Arduino

[3] http://arduino.vn