Vì sao arduino được dùng nhiều hơn vi điều khiển

Có thể bạn đã quen lập trình trên PC, với những ngôn ngữ như C, C++, C#, Java, Python, Ruby...

Nhưng bạn có biết là phần mềm trên PC chỉ chiếm khoảng 10% sản lượng phần mềm trên thị trường. 90% còn lại là code điều khiển tivi, máy giặt, điều hòa, tủ lạnh... tóm lại là tất cả các thiết bị điện tử xung quanh bạn. Đây cũng là một mảng theo tôi là khá thú vị. Lập trình theo hướng này được gọi là embedded computing, hay physical computing, tức là lập trình để con người tương tác với các thiết bị thực.

Để người thiết kế có thể nhanh chóng đưa ra được mẫu thể hiện ý tưởng của mình, rất cần phải có những platform để dễ dàng prototyping. Và một trong những platform đang được sử dụng rất nhiều trong prototyping là Arduino.

Vậy Arduino là gì và vì sao nó được sử dụng rộng rãi như vậy?

Arduino là một bo mạch xử lý được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ,... Điểm hấp dẫn ở Arduino với anh em lập trình là ngôn ngữ cực kì dễ học (giống C/C++), các ngoại vi trên bo mạch đều đã được chuẩn hóa, nên không cần biết nhiều về điện tử, chúng ta cũng có thể lập trình được những ứng dụng thú vị. Thêm nữa, vì Arduino là một platform đã được chuẩn hóa, nên đã có rất nhiều các bo mạch mở rộng (gọi là shield) để cắm chồng lên bo mạch Arduino, có thể hình dung nôm na là "library" của các ngôn ngữ lập trình. Ví dụ, muốn kết nối Internet thì có Ethernet shield, muốn điều khiển động cơ thì có Motor shield, muốn kết nối nhận tin nhắn thì có GSM shield,... Rất đơn giản, và ta chỉ phải tập trung vào việc "lắp ghép" các thành phần này và sáng tạo ra các ứng dụng cần thiết :)

Có thể kể ở đây một số ứng dụng hay ho của Arduino:

  • Robot: Arduino được dùng để làm bộ xử lý trung tâm của rất nhiều loại robot. Đó là nhờ vào khả năng đọc các thiết bị cảm biến, điều khiển động cơ,... của Arduino.

  • Game tương tác: chúng ta có thể dùng Arduino để tương tác với Joystick, màn hình,... để chơi các trò như Tetrix, phá gach, Mario... Còn nhiều game rất sáng tạo nữa, ví dụ bạn có thể tham khảo ở đây:
    http://wn.com/arduino_game

  • Máy bay không người lái

  • Mô phỏng Ipod :D (ví dụ ở đây: )

  • và nhiều nhiều ứng dụng khác nữa ...

Để lập trình Arduino cần những gì?

Như vậy, bạn đã biết là tuy là một bo mạch nhỏ như thế, Arduino có thể dùng vào rất nhiều ứng dụng thú vị khác nhau. Vậy để phát triển ứng dụng dựa trên Arduino, ta cần những gì?
Rất đơn giản, bạn chỉ cần IDE phát triển (download ở đây), một dây kết nối USB loại A-B, và một bo mạch Arduino là bạn có thể bắt đầu được rồi.

Ngôn ngữ lập trình của Arduino chính là C/C++, nhưng so với lập trình lập trình trực tiếp với vi điều khiển, lập trình với Arduino đơn giản hơn nhiều vì bạn chỉ phải giao tiếp với phần cứng thông qua các thư viện, có thể xem như các lớp C++ wrapper lên các giao tiếp với phần cứng. Trên website, có khá nhiều các library viết sẵn để điều khiển ngoại vi: LCD, sensor, motor... nên việc bạn cần làm chỉ là kết hợp chúng với nhau để tạo ứng dụng cho riêng bạn.

Cận cảnh phần cứng của Arduino

Vì sao arduino được dùng nhiều hơn vi điều khiển

Hình trên là cận cảnh con Arduino Uno. Đối với chúng ta lập trình cho Arduino thì trước tiên quan tâm những thành phần được đánh số ở trên:

  1. Cổng USB (loại B): đây là cổng giao tiếp để ta upload code từ PC lên vi điểu khiển. Đồng thời nó cũng là giao tiếp serial để truyền dữ liệu giữa vi điểu khiển với máy tính.

  2. Jack nguồn: để chạy Arduino thì có thể lấy nguồn từ cổng USB ở trên, nhưng không phải lúc nào cũng có thể cắm với máy tính được. Lúc đó, ta cần một nguồn 9V đến 12V.

  3. Hàng Header: đánh số từ 0 đến 12 là hàng digital pin, nhận vào hoặc xuất ra các tín hiệu số. Ngoài ra có một pin đất (GND) và pin điện áp tham chiếu (AREF).

  4. Hàng header thứ hai: chủ yếu liên quan đến điện áp đất, nguồn.

  5. Hàng header thứ ba: các chân để nhận vào hoặc xuất ra các tín hiệu analog. Ví dụ như đọc thông tin của các thiết bị cảm biến.

  6. Vi điều khiển AVR: đây là bộ xử lý trung tâm của toàn bo mạch. Với mỗi mẫu Arduino khác nhau thì con chip này khác nhau. Ở con Arduino Uno này thì sử dụng ATMega328.

"Hello World" trên nền Arduino

Với việc học bất cứ một ngôn ngữ nào, thường người ta hay bắt đầu bằng ví dụ "Hello World", tức là bắt máy tính bắn ra màn hình dòng chữ "Hello, World!". Với các bạn có kinh nghiệm lập trình, việc này có lẽ quá dễ dàng, chỉ vài dòng code là được, ngôn ngữ nào cũng vậy (C, C++, Java, Python, Ruby...).

Nhưng với lập trình trên Arduino thì sao? Việc bắt cái bo mạch Arduino đưa ra một thông tin báo hiệu nào đó cho ta là nó đang chạy, phải thực hiện thế nào? Nói cách khác, output của Arduino sẽ là như thế nào đây:

  1. Nháy LED

  2. Kết nối với PC qua đường UART, bắn lên dòng chữ Hello World cho ta ngắm.

  3. Kết nối với một cái màn LCD, cũng bắt nó bắn lên Hello World cho ta nhìn.

... vài cách nữa

Trong bài mở đầu này, tôi chọn cách dễ nhất là Nháy LED. Nháy LED cũng được coi là Hello World của lập trình nhúng, với mỗi con chip mới, điều đầu tiên nên làm là nháy LED, để kiểm tra xem mình đã kiểm soát được đầu vào đầu ra cho con chip chưa :)

Đầu tiên là đoạn code nháy LED:

{% codeblock blink_series.c %}

/* Multiple blink Turns on and off a LED series, using Arduino pin 4,5,6,7 written by Viet Nguyen */ int led; //the setup routine runs once when you reset the Arduino void setup() { //initialize the digital pin as an output for(led = 4; led < 8; led ++) { pinMode(led, OUTPUT); //init the digital pin as output. } } // the loop routine runs over and over again void loop() { for(led = 4; led < 8; led++) { digitalWrite(led, HIGH); //turn the LED on (HIGH is the voltage level) delay(100); //100 ms digitalWrite(led, LOW); //turn the LED off by making the volage LOW delay(100); //100 ms } }

Bạn thấy đó, đoạn code trên rất đơn giản và mang phong cách giống C/C++. Một chương trình như trên được gọi là sketch, sẽ được upload lên bo mạch Arduino qua cổng USB.

Phân tích chương trình: có 2 method quan trọng nhất là setup() và loop().

  • setup() làm nhiệm vụ khởi tạo mode cho các ngoại vi của Arduino. Hàm này sẽ được chạy một lần khi bo mạch Arduino được reset. Ở chương trình này, setup() chỉ làm nhiệm vụ đặt các chân 4,5,6,7 của Arduino sang mode output.

  • loop() là chương trình chính của Arduino. Đoạn code trong loop() sẽ được Arduino chạy vô hạn. Trong chương trình này, có hàm digitalWrite() để đặt các chân (pin) ở mức điện áp cao (HIGH) hay thấp (LOW). Hàm tiếp theo là delay(), nhận đối số là một số nguyên, thẻ hiện số mili giây ta muốn chương trình tạm ngưng.

Đó là tất cả về phần code chạy, còn nối dây như thế nào? Dưới đây là sơ đồ nối dây:

Vì sao arduino được dùng nhiều hơn vi điều khiển

Giải thích một chút, đoạn code trên sẽ lần lượt xuất điện áp 5V ra các pin 4,5,6,7 rồi tắt. Để kiểm nghiệm, nối LED với một con trở giữa các pin đó với đất, ta sẽ thấy các đèn LED bật tắt nhịp nhàng :)

Sau đây là video demo :P

Kết luận

Bài này đã giới thiệu những kiến thức mở đầu về Arduino, cách lập trình trên platform này và demo bài "Hello World" của Arduino. Với cộng đồng chia sẻ rất lớn, nhiều ứng dụng, Arduino rất đáng để học, cũng là một cách để bạn tiếp cận dễ dàng hơn với electronics :D

Tham khảo

  • 07/05/2015: Sửa lại ngôn ngữ lập trình của Arduino.

Cùng một tác giả

Vì sao arduino được dùng nhiều hơn vi điều khiển

8 0

Trong bài viết này, tôi sẽ trình bày về một đặc tính của Haskell khá khác biệt so với các ngôn ngữ lập trình khác, đó là laziness (dịch tiếng việt ...

Vì sao arduino được dùng nhiều hơn vi điều khiển

7 0

Giới thiệu Quy hoạch động là một trong những kĩ thuật lập trình cơ bản được sử dụng khá nhiều trong các cuộc thi lập trình. Ý tưởng về cơ bản rất ...

Vì sao arduino được dùng nhiều hơn vi điều khiển

6 1

Đề bài Gần đây, thằng bạn tôi rảnh rỗi học cách parsing với Scala. Tôi nghe nói Scala có parser combinator khá là mạnh. Vừa hay, tôi cũng đang tìm...

Bài viết liên quan

Vì sao arduino được dùng nhiều hơn vi điều khiển

10 1

Các tiêu chí để lựa chọn hệ điều hành cho các thiết bị IoT như sau: Tiết kiệm năng lượng, tiết kiệm tài nguyên, có thể sử dụng trên những MCU siz...

Arduino là gì

Arduino là một nền tảng mã nguồn mở được sử dụng để xây dựng các dự án điện tử. Arduino bao gồm cả bảng mạch lập trình (thường được gọi là vi điều khiển) và một phần mềm hoặc IDE (Môi trường phát triển tích hợp) chạy trên máy tính, được sử dụng để viết và tải mã máy tính lên bo mạch.

Nền tảng Arduino giờ đã khá phổ biến với những người mới bắt đầu với thiết bị điện tử. Không giống như hầu hết các bo mạch lập trình trước đây, Arduino không cần phần cứng riêng để tải mã mới lên bo mạch - bạn có thể chỉ cần sử dụng cáp USB. Ngoài ra, Arduino IDE sử dụng phiên bản đơn giản của C++, giúp việc học lập trình dễ dàng hơn. Arduino cung cấp một mẫu chuẩn giúp dễ tiếp cận các chức năng của bộ vi điều khiển hơn.

Cấu tạo của arduino

Có nhiều loại bo mạch Arduino sử dụng cho các mục đích khác nhau, nhưng hầu hết  Arduino có các thành phần như dưới đây:

Vì sao arduino được dùng nhiều hơn vi điều khiển

Nguồn (USB / Đầu cắm nguồn cái)

Mỗi bo mạch Arduino có một cách nối nguồn. Arduino UNO được cấp nguồn từ cáp USB hoặc đầu cắm nguồn cái. Trong hình trên, cổng USB được đánh số (1) và đầu cắm nguồn cái được đánh số (2).

Cổng USB cũng hỗ trợ tải mã lên bo mạch Arduino.

LƯU Ý: KHÔNG sử dụng nguồn điện lớn hơn 20 Vôn sẽ làm hư Arduino. Điện áp thích hợp cho hầu hết các mô hình Arduino là từ 6 đến 12 Vôn.

Chân (5V, 3.3V, GND, Analog, Kỹ thuật số, PWM, AREF)

Các chân trên Arduino là chỗ nối dây để xây dựng mạch (để liên kết bo mạch với dây thường có các đầu cắm bằng nhựa đen để bạn có thể cắm ngay dây vào bo mạch). Arduino có nhiều loại chân khác nhau, mỗi loại được ghi chú trên bo mạch và được sử dụng cho các chức năng khác nhau.

GND (3): Viết tắt của ‘Ground’. Có một số chân GND trên Arduino, có thể sử dụng bất kỳ chân nào để nối đất cho mạch.

5V (4) & 3.3V (5): Chân 5V cấp nguồn 5 vôn, và chân 3.3V cấp nguồn 3,3 vôn. Hầu hết các linh kiện đơn giản sử dụng với Arduino chạy ổn định ở 5 hoặc 3,3 vôn.

Analog (6): Khu vực các chân có ký hiệu 'Analog In' (A0 đến A5 trên UNO) là các chân nhận tín hiệu đầu vào. Các chân này có thể đọc tín hiệu từ một cảm biến tương tự (như cảm biến nhiệt độ) và chuyển đổi nó thành một giá trị số mà chúng ta có thể đọc.

Digital (7): Qua khu vực các chân analog là tới các chân digital (0 đến 13 trên UNO). Các chân này sử dụng cho cả đầu vào digital (ví dụ như cho biết nút nào được nhấn) và đầu ra digital (như cấp năng lượng cho đèn LED).

PWM (8): Bạn có thể thấy dấu ngã (~) bên cạnh một số chân số (3, 5, 6, 9, 10 và 11 trên UNO). Các chân này hoạt động như các chân digital thông thường, ngoài ra có thể sử dụng cho điều chế độ rộng xung (PWM).

AREF (9): Là viết tắt của tham chiếu analog.  Chân này thường ít được sử dụng. Thỉnh thoảng nó được dùng để thiết lập điện áp tham chiếu bên ngoài (giữa 0 và 5 Vôn) làm giới hạn trên cho các chân analog đầu vào.

Nút reset

Cũng giống như Nintendo gốc, Arduino có nút reset (10). Nếu nhấn nút này sẽ tạm thời kết nối chân reset với đất và khởi động lại bất kỳ mã nào được nạp trên Arduino. Nó rất hữu dụng nếu mã của bạn không lặp lại và bạn muốn kiểm tra nó nhiều lần.

Đèn LED báo nguồn

Ngay bên dưới và bên phải của từ “UNO” trên bảng mạch có một đèn LED nhỏ bên cạnh chữ ‘ON’ (11). Đèn LED này sẽ sáng lên khi cắm Arduino vào nguồn điện.

Đèn LED RX TX

TX là viết tắt của truyền, RX là viết tắt của nhận. Những ký hiệu này xuất hiện khá nhiều trong các thiết bị điện tử để chỉ ra các chân chịu trách nhiệm về giao tiếp nối tiếp. Trong trường hợp bo mạch ở trên, có hai vị trí trên UNO Arduino nơi TX và RX xuất hiện - vị trí thứ nhất là chỗ các chân số 0 và 1, và vị trí thứ hai bên cạnh đèn LED báo TX và RX (12). Những đèn LED này sẽ cung cấp chỉ dẫn trực quan bất cứ khi nào Arduino nhận hoặc truyền dữ liệu.

Mạch tích hợp - IC

IC hay mạch tích hợp (13) có màu đen với các chân kim loại. Bạn có thể xem nó như là bộ não của Arduino. IC trên Arduino ở các bo mạch khác nhau có sự khác nhau, nhưng thường là dòng IC ATmega từ công ty ATMEL. Điều này rất quan trọng, vì bạn cần phải biết loại IC (cùng với loại bo mạch) trước khi tải lên một chương trình. Thông tin này thường được viết ở phía trên cùng của IC. Nếu bạn muốn biết thêm về sự khác biệt giữa các IC khác nhau thì có thể đọc datasheet của nó.

Vì sao arduino được dùng nhiều hơn vi điều khiển

Điều chỉnh điện áp

Bộ điều chỉnh điện áp (14) là thứ bạn không có tương tác với Arduino. Nhưng nó điều chỉnh lượng điện áp được đưa vào bo mạch Arduino. Giống như người gác cổng, nó sẽ xử lý điện áp phụ có thể gây hại cho mạch. Tất nhiên, nó có giới hạn của nó, do đó, không cấp điện cho Arduino lớn hơn 20 vôn.

Các loại arduino

Arduino có nhiều bo mạch khác nhau, mỗi bo mạch có khả năng khác nhau. Thêm vào đó, vì là phần cứng nguồn mở nên nhiều người có thể sửa đổi và tạo ra nhiều các bo mạch Arduino khác với nhiều chức năng hơn. Dưới đây là một số loại phổ biến:

Arduino Uno (R3)

Uno là một lựa chọn tuyệt vời nếu bạn mới làm quen với arduino. Nó có mọi thứ cần thiết để bạn bắt đầu. Nó có 14 chân đầu vào / đầu ra digital (trong đó 6 chân có thể được sử dụng làm đầu ra PWM), 6 đầu vào analog, kết nối USB, giắc cắm nguồn, nút reset và nhiều thứ khác nữa. Nó chứa mọi thứ cần thiết để hỗ trợ vi điều khiển; chỉ cần kết nối nó với một máy tính bằng cáp USB hoặc cấp điện cho nó bằng bộ chuyển đổi dòng xoay chiều thành dòng một chiều hoặc pin.

Vì sao arduino được dùng nhiều hơn vi điều khiển

Lilypad Arduino

LilyPad là một công nghệ dệt e-textile được phát triển bởi Leah Buechley và được hợp tác thiết kế bởi Leah và SparkFun. Mỗi LilyPad được thiết kế cho phép chúng có thể gắn lên quần áo bằng chỉ dẫn điện. LilyPad có đầu vào, đầu ra, điện, và bo mạch cảm biến xây dựng chuyên cho công nghệ dệt e-textile. Thậm chí có thể rửa được.

Vì sao arduino được dùng nhiều hơn vi điều khiển

RedBoard

RedBoard có thể được lập trình qua cáp USB Mini-B sử dụng Arduino IDE. Nó sẽ hoạt động trên Windows 8 mà không phải thay đổi cài đặt bảo mật. Nó ổn định hơn nhờ chip USB / FTDI, cộng với chip hoàn toàn phẳng ở mặt sau, giúp bạn dễ dàng nhúng vào các project hơn. Chỉ cần cắm bo mạch, chọn “Arduino UNO” từ menu là có thể tải mã lên. Bạn có thể cấp nguồn cho RedBoard qua USB hoặc qua đầu cắm nguồn cái. Bộ điều chỉnh nguồn trên bo mạch có thể xử lý từ 7 đến 15V DC.

Vì sao arduino được dùng nhiều hơn vi điều khiển

Arduino Mega (R3)

Arduino Mega giống như anh trai của UNO. Nó có rất nhiều chân đầu vào / đầu ra digital (14 chân có thể được sử dụng làm đầu ra PWM), 16 chân đầu vào analog, kết nối USB, giắc cắm nguồn và nút reset. Nó chứa mọi thứ cần thiết để hỗ trợ vi điều khiển; chỉ cần kết nối nó với một máy tính bằng cáp USB hoặc cấp điện cho nó bằng bộ chuyển đổi dòng xoay chiều thành một chiều hoặc pin. Vì có nhiều chân nên bo mạch này rất tiện dụng cho các project cần nhiều các đầu vào hoặc đầu ra digital (như nhiều đèn LED hoặc nhiều nút).

Vì sao arduino được dùng nhiều hơn vi điều khiển

Arduino Leonardo

Leonardo là bo mạch arduino đầu tiên sử dụng một vi điều khiển tích hợp USB. Vì thế nên nó rẻ hơn và đơn giản hơn. Ngoài ra, bởi vì bo mạch xử lý USB trực tiếp, các thư viện mã có sẵn cho phép bo mạch mô phỏng bàn phím máy tính, chuột và nhiều thứ nữa.

Vì sao arduino được dùng nhiều hơn vi điều khiển

Ứng dụng của arduino

Phần cứng và phần mềm Arduino được thiết kế cho các nghệ sĩ, nhà thiết kế, hacker  và bất kỳ ai quan tâm đến việc tạo ra các đối tượng hoặc môi trường tương tác. Arduino có thể tương tác với các nút, đèn LED, động cơ, loa, đơn vị GPS, máy ảnh, internet và thậm chí cả điện thoại thông minh hoặc TV. Sự linh hoạt này cộng với với phần mềm Arduino là miễn phí, các bo mạch phần cứng khá rẻ và cả phần mềm, phần cứng đều dễ học, nên nó có một cộng đồng người dùng lớn đã đóng góp mã và hướng dẫn cho một lượng lớn project dựa trên Arduino.

Đối với tất cả mọi thứ từ robot và miếng sưởi ấm tay đến các máy dự đoán tương lai, Arduino có thể được sử dụng như bộ não đằng sau hầu hết các dự án điện tử.

Bạn có thể tham khảo các sản phẩm arduino của Điện Tử Tương Lai tại đây: Kit phát triển