Khái niệm, lịch sử hình thành và phát triển.
Theo định nghĩa từ www.arduino.cc , Arduino là nền tảng điện tử mã nguồn mở, dựa trên phần cứng và phần mềm, linh hoạt và dễ sử dụng, các board Arduino có khả năng đọc dữ liệu từ môi trường (ánh sáng, nhiệt độ, độ ẩm,…), trạng thái nút nhấn, tin nhắn từ Twitter,… và điều khiển trở lại với các thiết bị như động cơ, đèn LED, gửi thông tin đến 1 nơi khác,…
Chúng ta có thể điều khiển các vi điều khiển trên board Arduino bằng cách sử dụng ngôn ngữ lập trình C++, được điều khiển biên dịch bởi Arduino IDE và các trình biên dịch đi kèm ra mã máy nhị phân. Lúc này Vi điều khiển có thể dễ dàng thực thi chương trình. Hiện tại, Arduino là một công ty hoạt động trong lĩnh vực phần cứng và phần mềm máy tính mã nguồn mở. Dự án Arduino được sinh ra tại học viện Interaction Design ở Ivrea, Italy vào năm 2003.
Mục đích ban đầu của board Arduino là giúp cho các sinh viên ở học viện - những người không có
nền tảng kiến thức về điện tử có thể tạo ra các sản phẩm 1 cách nhanh chóng với chi phí thấp và dễ
sử dụng. Đó là 1 dự án mã nguồn mở, Arduino phát triển thông qua việc cho phép người dùng trên
toàn thế giới có thể xây dựng, phát triển và đóng góp vào dự án.
Tên Arduino là tên của 1 quán bar ở Ivrea, Italy. Đây là nơi những nhà sáng lập ra dự án arduino gặp mặt để bắt đầu ý tưởng hình thành dự án này. Tên của quán bar này đặt theo tên của người chỉ huy quân đội (như lãnh chúa thời phong kiến) tại Ivrea và sau đó ông này là vua của nước Italy từ năm 1002 đến năm 1014.
Tại sao là Arduino ?
Hiện nay, Arduino được sử dụng trong rất nhiều dự án và trong nhiều lĩnh vực khác nhau. Chính vì sự đơn giản, dễ sử dụng và đặc biệt là mã nguồn và phần cứng mở nên nó nhận được sự hỗ trợ rất lớn từ các lập trình viên trên toàn thế giới. Phần mềm rất dễ cho những người mới bắt đầu nhưng cũng không thiếu sự linh hoạt cho những lập trình viên lâu năm. Cộng đồng Arduino rất lớn nên khi sử dụng với Arduino, theo cách nói vui là bạn được “support tới tận răng”, có nghĩa là vấn đề bạn gặp phải bây giờ, người dùng Arduino trên thế giới cũng đã gặp phải, giải quyết nó và đưa ra các thư viện tốt nhất cho bạn, với cộng đồng lớn và đặc biệt là tất cả đều open-source nên sẽ dễ dàng hơn nếu bạn chọn Arduino thay vì nền tảng lập trình khác.
Với những người “ngoại đạo” (đề cập đến những người không có nhiều kiến thức về điện tử) thì Arduino quả thực rất tuyệt vời, nó giúp họ dễ dàng tạo ra những sản phẩm liên quan đến điện tử.
Những kiến trúc sư, giáo viên, nghệ sĩ có thể chỉ mất vài ngày để tạo ra sản phẩm điện tử nhằm phục vụ cho nhu cầu của họ, trong khi việc này trước đây dường như là bất khả thi. Tuy nhiên, có một câu hỏi đặt ra là: Nếu là 1 kỹ sư điện tử lập trình, có nên dùng Arduino cho các dự án của mình hay không? Bởi nó quá đơn giản và nhìn giống như là “đồ chơi của trẻ con” ???
Đây là chủ đề được bàn luận khá sôi nổi và thật khó để tìm ra câu trả lời chính xác. Arduino che đi sự phức tạp của việc lập trình cho vi điều khiển bằng cách phủ lên mình lớp “vỏ bọc” bên trên. Chỉ 1 vài câu lệnh đơn giản là có thể chớp, tắt được 1 con LED trong khi với các nền tảng lập trình khác, muốn làm được chuyện này thì bạn phải hiểu kiến trúc của vi điều khiển, hiểu cách truy cập, setup giá trị các bit trong thanh ghi,… từ đó mới có thể dùng tập lệnh của nó để viết code điều khiển LED. Và sự phức tạp, tinh vi của nền tảng Arduino cũng không thua kém gì các thư viện của nhà sản xuất, có chăng nó làm cho người dùng cảm giác đơn giản hơn thôi. Những người xây dựng nền tảng Arduino đã tạo ra những lệnh vô cùng đơn giản, giúp cho người dùng dễ tiếp cận. Tuy nhiên cách học đối với “những người trong nghề” không gì tốt hơn nếu muốn nắm rõ về lập trình vi điều khiển là đào sâu tìm hiểu. Ví dụ, đối với 1 người đang làm việc ở lĩnh vực IT, muốn tạo hiệu ứng cho các bóng đèn LED qua 1 ứng dụng trên điện thoại. Với họ, việc tạo ứng dụng trên điện thoại là không thành vấn đề, liên quan đến điều khiển LED, chỉ cần kết nối board Arduino với LED, “google search” để tìm kiếm 1 thư viện phù hợp, lấy những hiệu ứng họ cần trong thư viện đó. Việc này khá đơn giản nếu dùng Arduino. Vấn đề của họ đã được giải quyết thành công mà không cần biết quá nhiều về kiến thức điện tử. Tuy nhiên, vấn đề phát sinh ở đây là: tôi muốn LED sáng mờ hơn, tôi muốn tạo 1 số hiệu ứng theo ý mình, tôi cần kết nối nó với các cảm biến khác, tôi cần truyền, nhận dữ liệu giữa các module mà tôi đã kết hợp,… bài toán đặt ra đã trở nên thực sự phức tạp và vượt tầm hiểu biết của họ. Lúc này, giá trị của 1 kĩ sư điện tử lập trình sẽ được thể hiện. Để làm được những yêu cầu ấy, bạn phải hiểu rõ cách thức hoạt động của vi điều khiển, các chức năng, các chuẩn truyền dữ liệu,… để từ đó có thể hiệu chỉnh lại thư viện đang có, tối ưu hóa và tùy biến theo yêu cầu của người dùng. Câu hỏi đặt ra tiếp theo ở đây là: rất nhiều nền tảng lập trình khác cũng làm được điều này, vậy đâu là những lợi ích của Arduino ? Ích lợi chính ở đây đó là sự đơn giản của các tập lệnh, cộng đồng lớn và open-source. Thư viện dành cho Arduino không quá khó tìm, lệnh không quá nhiều để học nhưng cái chính là bạn phải hiểu nó hoạt động như thế nào. Để tìm hiểu sâu hơn về nó, những người phát triển Arduino đã cung cấp cho chúng ta 1 thư viện Hardware Abstraction Library (gọi tắt là HAL) dành cho những ai muốn tìm hiểu sâu hơn về cách mà Arduino hoạt động.
Ví dụ, với Arduino, để bật 1 bóng LED, chúng ta sẽ dùng 2 lệnh đơn giản là pinMode(PIN_LED) và lệnh digitalWrite(PIN_LED) với PIN_LED là định nghĩa chân được đấu nối với đèn LED ngoài thực tế. Tìm hiểu chi tiết hơn thì pinMode() là 1 hàm 😀
• Nhằm cấu hình chân giống như ngõ vào (input) hoặc ngõ ra (output), nó sẽ cấu hình thanh ghi hướng dữ liệu DDR (Data Direction Register), nếu 1 bit của thanh ghi DDR là 0 thì chân đó sẽ được cấu hình là input, giá trị bit bằng 1 là output.
• Giá trị mặc định ban đầu của các bit này là 0 (input).
• DDR là tên gọi chung của các thanh ghi ở chip ATmega328P, nó bao gồm 3 thanh ghi DDRB, DDRC, DDRD. Các thanh ghi này liên quan đến các chân của chip ATmega328P (board Arduino Uno R3) như bảng bên dưới:
[upl-image-preview url=https://making.vn/assets/files/2020-06-09/1591664545-618593-image.png]
Tiếp theo, ATmega328P có 3 thanh ghi PORT để cài đặt giá trị cho các bit, các bit này tương ứng với các chân I/O của chip ATmega328P. Chân A0 - A5 là các chân Analog, các chân D0 - D13 là các chân Digital. Giá trị bit bằng 0 là LOW (mức thấp, điện áp 0V DC), bằng 1 là HIGH (mức cao, điện áp 5VDC). Giá trị mặc định ban đầu của bit là 0.
[upl-image-preview url=https://making.vn/assets/files/2020-06-09/1591664573-505572-image.png]
Như vậy, nếu chúng ta muốn cho các chân từ D0 - D7 là ngõ ra thì ta cần cài đặt DDRD = 0b00000000 (0b là định dạng kiểu nhị phân, được hiểu là gán giá trị 0 hoặc 1 cho từng bit), cho các chân này mức HIGH thì cài đặt giá trị thanh ghi PORTD = 0b11111111. Đó là cách hoạt động chung khi cài đặt hướng và setup giá trị cho các chân GPIPO của các nền tảng lập trình hiện nay. Nếu bạn là 1 kĩ sư điện tử lập trình thì cách học nên theo hướng như vậy. Một khi bạn đã hiểu cách hoạt động của vi điều khiển thì sử dụng Arduino sẽ giúp chúng ta xây dựng dự án 1 cách nhanh chóng do tập lệnh khá đơn giản để dùng.
Chúng ta có thể xem các tập lệnh của Arduino tại www.arduino.cc/reference/en
và tìm hiểu sâu hơn các tập lệnh của Arduino tại link Arduino hardware core
Một số hàm cơ bản được giải thích chi tiết hơn tại garretlab.web.fc2.com
Bên cạnh đó, một số điểm mạnh của Arduino nữa là:
• Các ví dụ mẫu đi kèm với thư viện và tất cả đều open-source nên khi tìm đến các ví dụ mẫu, chúng ta sẽ hiểu cách thức thư viện hoạt động. đồng thời có thể xem source code của họ viết 8/188 để có thể hiệu chỉnh, tối ưu thư viện theo cách của mình.
• Việc upload code thông qua cổng USB, giúp đơn giản quá trình nạp code