Arduino

**Arduino** là nền tảng vi mạch thiết kế mở phần cứng (*Open-source hardware*) và phần mềm (*Open-source software*). Phần cứng Arduino là những bộ vi điều khiển bo mạch đơn (*Single-board microcontroller*) được tạo 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 xử lý AVR Atmel 8bit, 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, không tốn kém cho những người yêu thích, 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 mạch bằng ngôn ngữ Arduino, một ngôn ngữ riêng được phát triển dựa trên C/C++.

Giá của các board Arduino dao động xung quanh €20, hoặc $27, nếu được "làm giả" thì giá có thể giảm xuống thấp hơn $9. Các board Arduino có thể được đặt hàng ở dạng được lắp sẵn hoặc dưới dạng các kit tự-làm-lấy. Thông tin thiết kế phần cứng được cung cấp công khai để những ai muốn tự làm một mạch Arduino bằng tay có thể tự mình thực hiện được (mã nguồn mở). Người ta ước tính khoảng giữa năm 2011 có trên 300 ngàn mạch Arduino chính thức đã được sản xuất thương mại, và vào năm 2013 có khoảng 700 ngàn mạch chính thức đã được đưa tới tay người dùng.

## Lịch sử
Arduino được khởi động vào năm 2005 như là một dự án dành cho sinh viên trại Interaction Design Institute Ivrea (Viện thiết kế tương tác Ivrea) tại Ivrea, Italy. Vào thời điểm đó các sinh viên sử dụng một "BASIC Stamp" (con tem Cơ Bản) có giá khoảng $100, xem như giá dành cho sinh viên. Massimo Banzi, một trong những người sáng lập, giảng dạy tại Ivrea. Cái tên "Arduino" đến từ một quán bar tại Ivrea, nơi một vài nhà sáng lập của dự án này thường xuyên gặp mặt. Bản thân quán bar này có được lấy tên là Arduino, Bá tước của Ivrea, và là vua của Italy từ năm 1002 đến 1014.

Lý thuyết phần cứng được đóng góp bởi một sinh viên người Colombia tên là Hernando Barragan. Sau khi nền tảng Wiring hoàn thành, các nhà nghiên cứu đã làm việc với nhau để giúp nó nhẹ hơn, rẻ hơn, và khả dụng đối với cộng đồng mã nguồn mở. Trường này cuối cùng bị đóng cửa, vì vậy các nhà nghiên cứu, một trong số đó là David Cuarlielles, đã phổ biến ý tưởng này.

Giá hiện tại của board mạch này dao động xung quanh $30 và được làm giả đến mức chỉ còn $9. Một mạch bắt chước đơn giản Arduino Mini Pro có lẽ được xuất phát từ Trung Quốc có giá rẻ hơn $4, đã trả phí bưu điện.

## Phần cứng

Một mạch Arduino bao gồm một vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình và có thể mở rộng với các mạch khác. Một khía cạnh quan trọng của Arduino là các kết nối tiêu chuẩn của nó, cho phép người dùng kết nối với CPU của board với các module thêm vào có thể dễ dàng chuyển đổi, được gọi là *shield*. Vài shield truyền thông với board Arduino trực tiếp thông qua các chân khác nhau, nhưng nhiều shield được định địa chỉ thông qua serial bus I²C-nhiều shield có thể được xếp chồng và sử dụng dưới dạng song song. Arduino chính thức thường sử dụng các dòng chip megaAVR, đặc biệt là ATmega8, ATmega168, ATmega328, ATmega1280, và ATmega2560. Một vài các bộ vi xử lý khác cũng được sử dụng bởi các mạch Aquino tương thích. Hầu hết các mạch gồm một bộ điều chỉnh tuyến tính 5V và một thạch anh dao động 16&nbsp;MHz (hoặc bộ cộng hưởng ceramic trong một vài biến thể), mặc dù một vài thiết kế như LilyPad chạy tại 8&nbsp;MHz và bỏ qua bộ điều chỉnh điện áp onboard do hạn chế về kích cỡ thiết bị. Một vi điều khiển Arduino cũng có thể được lập trình sẵn với một boot loader cho phép đơn giản là upload chương trình vào bộ nhớ flash on-chip, so với các thiết bị khác thường phải cần một bộ nạp bên ngoài. Điều này giúp cho việc sử dụng Arduino được trực tiếp hơn bằng cách cho phép sử dụng 1 máy tính gốc như là một bộ nạp chương trình.

Theo nguyên tắc, khi sử dụng ngăn xếp phần mềm Arduino, tất cả các board được lập trình thông qua một kết nối RS-232, nhưng cách thức thực hiện lại tùy thuộc vào đời phần cứng. Các board Serial Arduino có chứa một mạch chuyển đổi giữa RS232 sang TTL. Các board Arduino hiện tại được lập trình thông qua cổng USB, thực hiện thông qua chip chuyển đổi USB-to-serial như là FTDI FT232. Vài biến thể, như Arduino Mini và Boarduino không chính thức, sử dụng một board adapter hoặc cáp nối USB-to-serial có thể tháo rời được, Bluetooth hoặc các phương thức khác. (Khi sử dụng một công cụ lập trình vi điều khiển truyền thống thay vì ArduinoIDE, công cụ lập trình AVR ISP tiêu chuẩn sẽ được sử dụng.)

Board Arduino sẽ đưa ra hầu hết các chân I/O của vi điều khiển để sử dụng cho những mạch ngoài. Diecimila, Duemilanove, và bây giờ là Uno đưa ra 14 chân I/O kỹ thuật số, 6 trong số đó có thể tạo xung PWM (điều chế độ rộng xung) và 6 chân input analog, có thể được sử dụng như là 6 chân I/O số. Những chân này được thiết kế nằm phía trên mặt board, thông qua các header cái 0.10-inch (2.5&nbsp;mm). Nhiều shield ứng dụng plug-in cũng được thương mại hóa. Các board Arduino Nano, và Arduino-compatible Bare Bones Board và Boarduino có thể cung cấp các chân header đực ở mặt trên của board dùng để cắm vào các breadboard.

Có nhiều biến thể như Arduino-compatible và Arduino-derived. Một vài trong số đó có chức năng tương đương với Arduino và có thể sử dụng để thay thế qua lại. Nhiều mở rộng cho Arduino được thực thiện bằng cách thêm vào các driver đầu ra, thường sử dụng trong các trường học để đơn giản hóa các cấu trúc của các 'con rệp' và các robot nhỏ. Những board khác thường tương đương về điện nhưng có thay đổi về hình dạng-đôi khi còn duy trì độ tương thích với các shield, đôi khi không. Vài biến thể sử dụng bộ vi xử lý hoàn toàn khác biệt, với các mức độ tương thích khác nhau.

## Các board chính thức
Xem thêm: Danh sách các board Arduino và các hệ thống tương thích với chúng

Phần cứng Arduino gốc được sản xuất bởi công ty Italy tên là Smart Projects. Một vài board dẫn xuất từ Arduino cũng được thiết kế bởi công ty của Mỹ tên là SparkFun Electronics. Sáu phiên bản phần cứng của Arduino cũng đã được sản xuất thương mại tính đến thời điểm hiện tại.


Tập tin:Arduino Diecimila 6.jpg|Arduino Diecimila in Stoicheia
Tập tin:Arduino Duemilanove 2009b.jpg|Arduino Duemilanove (rev 2009b)
Tập tin:Arduino UNO unpacked.jpg|Arduino UNO R3
Tập tin:Arduino Leonardo.jpg|Arduino Leonardo
Tập tin:Arduino Mega.jpg|Arduino Mega
Tập tin:Arduino MEGA 2560 R3, front side.jpg|Arduino MEGA 2560 R3 (mặt trước)
Tập tin:Arduino MEGA 2560 R3, back side.jpg|Arduino MEGA 2560 R3 (mặt sau)
Tập tin:Arduino Nano.jpg|Arduino Nano
Tập tin:Arduino Due.jpg|Arduino Due (nền tảng ARM)
Tập tin:LilyPad Arduino Main Board.JPG|LilyPad Arduino (rev 2007)


## Shield
Các board Arduino và Arduino-compatible sử dụng các *shield*— các board mạch in mở rộng được dùng bằng cách cắm vào các chân header của Arduino. Các shield có thể là module điều khiển cho động cơ, GPS, ethernet, LCD, hoặc cũng có thể là breadboard. Một số lượng lớn các shield cũng có thể được chế tạo bởi DIY (những người thích tự làm lấy các ứng dụng cho riêng họ).


Image:Arduino Protoboard Shields.jpg|Nhiều shield có thể được xếp chồng lên nhau. Trong ví dụ này shield ở trên cùng có chứa một breadboard chưa hàn
Image:Wingshield on Arduino - ARSH-05-WI.jpg|Shield này sử dụng các đầu domino bắt vít dùng để đấu các đầu dây vào
Image:Adafruit Motor Shield - ARSH-02-MS 01.jpg|Shield Adafruit Motor với các đầu domino dùng để kết nối với động cơ
Image:ARSH-09-DL 03.jpg|Shield Adafruit Datalogging với một khe chứa thẻ nhớ SD và chip clock Real-Time


## Software

Môi trường phát triển tích hợp (IDE) của Arduino là một ứng dụng cross-platform (đa nền tảng) được viết bằng Java, và từ IDE này sẽ được sử dụng cho Ngôn ngữ lập trình xử lý (Processing programming language) và project Wiring. Nó được thiết kế để dành cho những người mới tập làm quen với lĩnh vực phát triển phần mềm. Nó bao gồm một chương trình code editor với các chức năng như đánh dấu cú pháp, tự động brace matching, và tự động canh lề, cũng như compile(biên dịch) và upload chương trình lên board chỉ với 1 cú nhấp chuột. Một chương trình hoặc code viết cho Arduino được gọi là một *sketch*.

Các chương trình Arduino được viết bằng ngôn ngữ Arduino dựa trên C/C++. Arduino IDE đi kèm với một thư viện phần mềm được gọi là "Wiring", từ project Wiring gốc, có thể giúp các thao tác input/output được dễ dàng hơn. Người dùng chỉ cần định nghĩa 2 hàm để tạo ra một chương trình vòng thực thi (cyclic executive) có thể chạy được:

* `setup()`: hàm này chạy mỗi khi khởi động một chương trình, dùng để thiết lập các cài đặt
* `loop()`: hàm này được gọi lặp lại cho đến khi tắt nguồn board mạch

Một chương trình điển hình cho một bộ vi điều khiển đơn giản chỉ là làm cho một bóng đèn Led sáng/tắt. Trong môi trường Arduino, ta sẽ phải viết một chương trình giống như sau:


```c
#define LED_PIN 13

void setup () {
  pinMode (LED_PIN, OUTPUT); // Đặt chân 13 làm đầu ra digital
}

void loop () {
  digitalWrite (LED_PIN, HIGH); // Bật LED on
  delay (1000); // chờ trong 1 giây (1000 mili giây)
  digitalWrite (LED_PIN, LOW); // Tắt LED off
  delay (1000); // chờ trong 1s
}
```


Một đặc điểm của hầu hết các board Arduino là chúng có một đèn LED và điện trở nối giữa chân 13 với đất; một đặc điểm thuận tiện cho nhiều ứng dụng đơn giản. Đoạn code ở trên không thể đọc được bởi một compiler C++ chuẩn như là một chương trình đúng, vì vậy khi ta click vào nút "Upload to I/O board" trong IDE này, một bản copy của đoạn code này sẽ được ghi vào một file tạm với một extra include header ở phía trên cùng và một hàm main() đơn giản nằm ở phía đáy, để làm cho thành một chương trình C++ khả dụng.

Arduino IDE này sử dụng GNU toolchain và AVR Libc để biên dịch chương trình, và sử dụng avrdude để upload chương trình lên board.

Vì nền tảng của Arduino là các vi điều khiển của Atmel, cho nên môi trường phát triển của Atmel, AVR Studio hoặc các phiên bản Atmel Studio mới hơn, cũng có thể được sử dụng để làm phần mềm phát triển cho Arduino.

## Phát triển
Arduino là một nền tảng phần cứng mã nguồn mở: Các thiết kế phần cứng tham khảo của Arduino được phân phối dưới dạng Creative CommonsAttribution Share-Alike 2.5 license và có sẵn trên website của Arduino. Một vài phiên bản phần cứng của Arduino còn đưa lên cả file Layout và thành phẩm. Mã nguồn cho IDE này cũng khả dụng và được xuất bản dưới dạng GNU General Public License, version 2.

Mặc dù các thiết kế phần cứng và phần mềm là miễn phí dưới dạng copyleft license, các nhà phát triển cũng được yêu cầu cái tên "Arduino" chỉ được dành riêng cho các sản phẩm chính thức và không được sử dụng cho các sản phẩm phái sinh mà được sự cho phép. Các văn bản chính sách chính thức về việc sử dụng tên Arduino nhấn mạnh rằng dự án này là mở đối với những người khác trong việc cộng tác để tạo ra sản phẩm chính thức. Nhiều sản phẩm tương thích với Arduino phát hành thương mại đã tránh cái tên "Arduino" bằng cách sử dụng từ phái sinh "-duino".

## Các ứng dụng
Xem thêm: Danh sách các dự án phần cứng mã nguồn mở
* Xoscillo: oscilloscope mã nguồn mở
* Các thiết bị khoa học
* Arduinome: một thiết bị điều khiển MIDI bắt chước Monome
* OBDuino: một máy tính hành trình sử dụng giao diện chẩn đoán on-board được tìm thấy trong hầu hết các loại xe hơi hiện đại
* Thiết bị đọc sách cho con người: thiết bị điện tử giá rẻ với đầu ra TV có thể chứa một thư viện năm ngàn cuốn sách (ví dụ như các biên soạn offline Wikipedia) trên một thẻ nhớ microSD 
* Ardupilot: software / hardware máy bay không người lái
* ArduinoPhone

## Liên kết ngoài
* Trang chủ

## Tham khảo