Arduino hiện nay đã được biết đến một cách rộng rãi tại Việt Nam, và trên thế giới thì nó đã quá phổ biến! Sức mạnh của chúng ngày càng được chứng tỏ theo thời gian với vô vàn các ứng dụng mở (open source) độc đáo được chia sẻ rộng rãi.
Với Arduino bạn có thể ứng dụng vào những mạch đơn giản như mạch cảm biến ánh sáng bật tắt đèn, mạch điều khiển động cơ,... hoặc cao hơn nữa bạn có thể làm những sản phẩm như: máy in 3D, Robot, khinh khí cầu, máy bay không người lái,...
Với Arduino bạn có thể ứng dụng vào những mạch đơn giản như mạch cảm biến ánh sáng bật tắt đèn, mạch điều khiển động cơ,... hoặc cao hơn nữa bạn có thể làm những sản phẩm như: máy in 3D, Robot, khinh khí cầu, máy bay không người lái,...
Arduino là một nền tảng mà mọi thiết bị phần cứng đều được làm sẵn và chuẩn hóa, người dùng chỉ việc chọn những thứ mình cần, ráp lại là có thể chạy được. Chúng ta muốn làm xe điều khiển từ xa? Arduino cung cấp cho chúng ta module điều khiển động cơ có sẵn, mạch điều khiển có sẵn, mạch thu phát sóng không dây có sẵn,… Chúng ta sẽ không cần phải tự thiết kế mạch điện cho chiếc xe bởi đơn giản là mọi thứ đều có sẵn.
Một hệ thống Arduino bao gồm phần cứng và phần mềm. Mỗi thứ phần cứng gắn mác “Arduino” đều có những đoạn lệnh đã được viết sẵn (gọi là thư viện) do cộng đồng người dùng Arduino cùng phát triển.
Một hệ thống Arduino có thể cung cấp cho bạn rất nhiều sự tương tác với môi trường xung quanh với:
- Hệ thống cảm biến đa dạng về chủng loại (đo đạc nhiệt độ, độ ẩm, gia tốc, vận tốc, cường độ ánh sáng, màu sắc vật thể, lưu lượng nước, phát hiện chuyển động, phát hiện kim loại, khí độc,…),…
- Các thiết bị hiển thị (màn hình LCD, đèn LED,…).
- Các module chức năng (shield) hỗ trợ kêt nối có dây với các thiết bị khác hoặc các kết nối không dây thông dụng (3G, GPRS, Wifi, Bluetooth, 315/433Mhz, 2.4Ghz,…), …
- Định vị GPS, nhắn tin SMS,…
Đối với dòng mạch Arduino dùng để lập trình, cái đầu tiên mà người ta thường nói tới chính là dòng Arduino UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (R3), hiện đang được dùng rất phổ biến hiện nay.
- Hệ thống cảm biến đa dạng về chủng loại (đo đạc nhiệt độ, độ ẩm, gia tốc, vận tốc, cường độ ánh sáng, màu sắc vật thể, lưu lượng nước, phát hiện chuyển động, phát hiện kim loại, khí độc,…),…
- Các thiết bị hiển thị (màn hình LCD, đèn LED,…).
- Các module chức năng (shield) hỗ trợ kêt nối có dây với các thiết bị khác hoặc các kết nối không dây thông dụng (3G, GPRS, Wifi, Bluetooth, 315/433Mhz, 2.4Ghz,…), …
- Định vị GPS, nhắn tin SMS,…
Đối với dòng mạch Arduino dùng để lập trình, cái đầu tiên mà người ta thường nói tới chính là dòng Arduino UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (R3), hiện đang được dùng rất phổ biến hiện nay.
- Một vài thông số của Arduino UNO R3:
- Vi điều khiển
- Arduino UNO có thể sử dụng 3 vi điều khiển họ 8 bit AVR là ATmega8, ATmega168, ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ - độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác.
- Thiết kế tiêu chuẩn của Arduino UNO sử dụng vi điều khiển ATmega328.
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp thường dùng là 7-12V DC và giới hạn là 6-20V. Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu không có sẵn nguồn từ cổng USB. Nếu cấp nguồn vượt quá ngưỡng giới hạn trên sẽ làm hỏng Arduino UNO.
- Các chân năng lượng:
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau.
5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.
3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND.
IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân này, không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn.
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ.
Lưu ý:
Arduino UNO không có bảo vệ cắm ngược nguồn vào. Do đó bạn phải hết sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp cho Arduino UNO. Việc làm chập mạch nguồn vào của Arduino UNO sẽ biến nó thành một miếng nhựa chặn giấy. mình khuyên bạn nên dùng nguồn từ cổng USB nếu có thể.
- Các chân 3.3V và 5V trên Arduino là các chân dùng để cấp nguồn ra cho các thiết bị khác, không phải là các chân cấp nguồn vào. Việc cấp nguồn sai vị trí có thể làm hỏng board. Điều này không được nhà sản xuất khuyến khích.
- Cấp nguồn ngoài không qua cổng USB cho Arduino UNO với điện áp dưới 6V có thể làm hỏng board.
- Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi điều khiển ATmega328.
- Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của Arduino UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển.
- Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO sẽ làm hỏng vi điều khiển.
- Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của Arduino UNO vượt quá 40mA sẽ làm hỏng vi điều khiển. Do đó nếu không dùng để truyền nhận dữ liệu, phải mắc một điện trở hạn dòng.
Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
- 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu.
- 2KB cho SRAM (Static Random Access Memory): Giá trị các biến khai báo khi lập trình sẽ lưu ở đây. Khi khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM.
- 1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): đây giống như một chiếc ổ cứng mini – nơi có thể đọc và ghi dữ liệu vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.
Các cổng vào/ra
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối).
Một số chân digital có các chức năng đặc biệt như sau:
- 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết
- Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép xuất ra xung PWM với độ phân giải 8 bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.
- Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác
- LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.
- Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu cấp điện áp 2.5V vào chân này thì có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10 bit.
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
Lập trình cho Arduino
Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngôn riêng. Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết cho phần cứng nói chung. Và Wiring lại là một biến thể của C/C++ nó còn được gọi là “ngôn ngữ Arduino. Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến hiện nay do đó rất dễ học, dễ hiểu.
Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch Arduino, nhóm phát triển cũng cấp đến cho người dùng một môi trường lập trình Arduino được gọi là Arduino IDE (Intergrated Development Environment) như hình dưới đây:
Đoạn mã nguồn như trong hình sẽ điều khiển một đèn LED nhấp nháy với chu kỳ 1 giây.
Bước 1: Khởi chạy mạch điều khiển LED đơn, LED ma trận, quan sát các đèn LED và đưa ra nhận xét về quy luật sáng tắt các đèn LED?
Bước 2: Click chuột vào biểu tượng "Code" tiến hành thay đổi quy luật sáng tắt đèn LED bằng cách thay đổi dòng code "HIGH" thiết lập đèn sáng và "LOW" để thiết lập đèn tắt. Tiếp tục thay đổi tần suất sáng tắt bằng cách thay đổi tham số dòng lệnh "Delay". Quan sát quy luật sáng tắt của đèn LED sau khi thay đổi, đưa ra nhận xét?
Bước 3: Khởi chạy mạch điều khiển động cơ, quan sát tốc độ quay các động cơ. Click chuột vào biểu tượng "Code" tiến hành thay đổi tham số trong các dòng lệnh "If". Quan sát tốc độ quay của động cơ và các đèn LED, đưa ra nhận xét?
Bước 4: Khởi chạy mạch điều khiển bàn phím, thực hiện các phép tính bằng cách nhấn các phím và quan sát kết quả trên màn hình LCD. Click chuột vào biểu tượng "Code" thay đổi vị trí các con số trong dòng lệnh "Char Keys [ROW] [COLS] = {" , đồng thời thay đổi các dòng chữ hiện thị LCD bằng cách thay đổi dòng lệnh "lcd.Print()". Quan sát kết quả và đưa ra nhận xét?
Bước 5: Khởi chạy mạch hiển thị màn hình LCD quan sát dòng chữ hiển thị trên LCD. Click chuột vào biểu tượng "Code" tiến hành thay đổi dòng chữ hiển thị bằng cách thay đổi dòng lệnh "lcd.Print()". Quan sát kết quả hiển thị LCD và đưa ra nhận xét?
Bước 2: Click chuột vào biểu tượng "Code" tiến hành thay đổi quy luật sáng tắt đèn LED bằng cách thay đổi dòng code "HIGH" thiết lập đèn sáng và "LOW" để thiết lập đèn tắt. Tiếp tục thay đổi tần suất sáng tắt bằng cách thay đổi tham số dòng lệnh "Delay". Quan sát quy luật sáng tắt của đèn LED sau khi thay đổi, đưa ra nhận xét?
Bước 3: Khởi chạy mạch điều khiển động cơ, quan sát tốc độ quay các động cơ. Click chuột vào biểu tượng "Code" tiến hành thay đổi tham số trong các dòng lệnh "If". Quan sát tốc độ quay của động cơ và các đèn LED, đưa ra nhận xét?
Bước 4: Khởi chạy mạch điều khiển bàn phím, thực hiện các phép tính bằng cách nhấn các phím và quan sát kết quả trên màn hình LCD. Click chuột vào biểu tượng "Code" thay đổi vị trí các con số trong dòng lệnh "Char Keys [ROW] [COLS] = {" , đồng thời thay đổi các dòng chữ hiện thị LCD bằng cách thay đổi dòng lệnh "lcd.Print()". Quan sát kết quả và đưa ra nhận xét?
Bước 5: Khởi chạy mạch hiển thị màn hình LCD quan sát dòng chữ hiển thị trên LCD. Click chuột vào biểu tượng "Code" tiến hành thay đổi dòng chữ hiển thị bằng cách thay đổi dòng lệnh "lcd.Print()". Quan sát kết quả hiển thị LCD và đưa ra nhận xét?
ỨNG DỤNG CỦA ARDUINO
I. ĐIỀU KHIỂN LED ĐƠN
I. ĐIỀU KHIỂN LED ĐƠN
II. ĐIỀU KHIỂN LED MA TRẬN
III. HIỂN THỊ LCD
IV. ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC