You are on page 1of 23

#0. What is Arduino?

What is Arduino? Arduino là gì?


Arduino was started in 2005 as a student project at Arduino được khởi động vào năm 2005 như là một
the Interaction Design Institute Ivrea camp in Ivrea, dự án dành cho sinh viên trại Interaction Design
Italy. Institute Ivrea (Viện thiết kế tương tác Ivrea) tại
Ivrea, Italy
Arduino is an open-source electronics platform based Arduino là một nền tảng điện tử mã nguồn mở dựa
on easy-to-use hardware and software. Arduino trên phần cứng và phần mềm dễ sử dụng. Bo mạch
boards are able to read inputs - light on a sensor, a Arduino có thể đọc đầu vào - ánh sáng trên cảm biến,
finger on a button, or a Twitter message - and turn it ngón tay trên nút hoặc tin nhắn Twitter - và biến nó
into an output - activating a motor, turning on an thành đầu ra - kích hoạt động cơ, bật đèn LED, xuất
LED, publishing something online. You can tell your bản nội dung trực tuyến. Bạn có thể cho bảng
board what to do by sending a set of instructions to Arduino của bạn biết phải làm gì bằng cách gửi một
the microcontroller on the board. To do so you use tập hợp các hướng dẫn sketch đếnp bộ vi điều khiển
the Arduino programming language (based on trên Arduino. Để làm như vậy, bạn sử dụng ngôn ngữ
Wiring), and the Arduino Software (IDE), based on lập trình Arduino (dựa trên Hệ thống dây nối) và
Processing. Phần mềm Arduino (IDE), dựa trên Processing.

Arduino UNO R3 DIP vs Arduino UNO R3 SMD Arduino Mega Arduino Nano Arduino Micro
Over the years Arduino has been the brain of Trong nhiều năm, Arduino là bộ não của hàng nghìn
thousands of projects, from everyday objects to dự án, từ các vật dụng hàng ngày cho đến các công
complex scientific instruments. A worldwide cụ khoa học phức tạp. Một cộng đồng trên toàn thế
community of makers - students, hobbyists, artists, giới gồm các nhà sản xuất - sinh viên, người có sở
programmers, and professionals - has gathered thích, nghệ sĩ, lập trình viên và chuyên gia - đã tập
around this open-source platform, their contributions hợp xung quanh nền tảng mã nguồn mở này, những
have added up to an incredible amount of accessible đóng góp của họ đã bổ sung một lượng kiến thức
knowledge that can be of great help to novices and đáng kinh ngạc có thể truy cập được, có thể giúp ích
experts alike. rất nhiều cho người mới cũng như các chuyên gia.
Arduino was born at the Ivrea Interaction Design Arduino được sinh ra tại Học viện Thiết kế Tương
Institute as an easy tool for fast prototyping, aimed at tác Ivrea như một công cụ dễ dàng để tạo mẫu nhanh,
students without a background in electronics and hướng đến học sinh, sinh viên không có nền tảng về
programming. As soon as it reached a wider điện tử và lập trình. Ngay sau khi tiếp cận với một
community, the Arduino board started changing to cộng đồng rộng lớn hơn, bảng Arduino bắt đầu thay
adapt to new needs and challenges, differentiating its đổi để thích ứng với những nhu cầu và thách thức
offer from simple 8-bit boards to products for IoT mới, phân biệt ưu đãi của nó từ bảng 8-bit đơn giản
applications, wearable, 3D printing, and embedded đến các sản phẩm cho các ứng dụng IoT, thiết bị đeo
environments. được, in 3D và môi trường nhúng.
Why Arduino? Tại sao sử dụng Arduino?
Thanks to its simple and accessible user experience, Nhờ trải nghiệm người dùng đơn giản và dễ tiếp cận,
Arduino has been used in thousands of different Arduino đã được sử dụng trong hàng nghìn dự án và
projects and applications. The Arduino software is ứng dụng khác nhau. Phần mềm Arduino dễ sử dụng
easy-to-use for beginners, yet flexible enough for cho người mới bắt đầu, nhưng đủ linh hoạt cho người
advanced users. It runs on Mac, Windows, and dùng nâng cao. Nó chạy trên Mac, Windows và
Linux. Teachers and students use it to build low cost Linux. Giáo viên, học sinh và sinh viên sử dụng nó
scientific instruments, to prove chemistry and để chế tạo các công cụ khoa học chi phí thấp, để
physics principles, or to get started with chứng minh các nguyên lý hóa học và vật lý, hoặc để
programming and robotics. Designers and architects bắt đầu với lập trình và chế tạo robot. Các nhà thiết
build interactive prototypes, musicians and artists use kế và kiến trúc sư xây dựng các nguyên mẫu tương
it for installations and to experiment with new tác, các nhạc sĩ và nghệ sĩ sử dụng nó để lắp đặt và
musical instruments. Makers, of course, use it to thử nghiệm với các nhạc cụ mới. Tất nhiên, các nhà
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
build many of the projects exhibited at the Maker sản xuất sử dụng nó để xây dựng nhiều dự án được
Faire, for example. Arduino is a key tool to learn new trưng bày tại Maker Faire chẳng hạn. Arduino là một
things. Anyone - children, hobbyists, artists, công cụ quan trọng để học những điều mới. Bất kỳ ai
programmers - can start tinkering just following the - trẻ em, người yêu thích, nghệ sĩ, lập trình viên - đều
step by step instructions of a kit, or sharing ideas có thể bắt đầu mày mò chỉ cần làm theo hướng dẫn
online with other members of the Arduino từng bước của một bộ công cụ hoặc chia sẻ ý tưởng
community. trực tuyến với các thành viên khác của cộng đồng
Arduino.
Inexpensive - Arduino boards are relatively Không đắt - Bo mạch Arduino tương đối rẻ so với
inexpensive compared to other microcontroller các nền tảng vi điều khiển khác. Phiên bản mô-đun
platforms. The least expensive version of the Arduino rẻ nhất có thể được lắp ráp bằng tay và thậm
Arduino module can be assembled by hand, and even chí các mô-đun Arduino được lắp ráp sẵn có giá dưới
the pre-assembled Arduino modules cost less than $ 50
$50
Cross-platform - The Arduino Software (IDE) runs Đa nền tảng - Phần mềm Arduino (IDE) chạy trên
on Windows, Macintosh OSX, and Linux operating hệ điều hành Windows, Macintosh OSX và Linux.
systems. Most microcontroller systems are limited to Hầu hết các hệ thống vi điều khiển được giới hạn
Windows. trong Windows.
Simple, clear programming environment - The Môi trường lập trình đơn giản, rõ ràng - Phần
Arduino Software (IDE) is easy-to-use for beginners, mềm Arduino (IDE) dễ sử dụng cho người mới bắt
yet flexible enough for advanced users to take đầu nhưng cũng đủ linh hoạt để người dùng nâng cao
advantage of as well. For teachers, it's convenientlycũng có thể tận dụng. Đối với giáo viên, nó dựa trên
based on the Processing programming environment, môi trường lập trình Xử lý một cách thuận tiện, vì
so students learning to program in that environment vậy học sinh, sinh viên học lập trình trong môi
will be familiar with how the Arduino IDE works. trường đó sẽ quen thuộc với cách thức hoạt động của
Arduino IDE.
Open source and extensible software - The Phần mềm mã nguồn mở và có thể mở rộng - Phần
Arduino software is published as open source tools, mềm Arduino được xuất bản dưới dạng công cụ mã
available for extension by experienced programmers. nguồn mở, có sẵn để mở rộng bởi các lập trình viên
The language can be expanded through C++ libraries, có kinh nghiệm. Ngôn ngữ có thể được mở rộng
and people wanting to understand the technical thông qua các thư viện C++ và những người muốn
details can make the leap from Arduino to the AVR hiểu chi tiết kỹ thuật có thể thực hiện bước nhảy vọt
C programming language on which it's based. từ Arduino sang ngôn ngữ lập trình AVR C mà nó
Similarly, you can add AVR-C code directly into dựa trên. Tương tự, bạn có thể thêm mã AVR-C trực
your Arduino programs if you want to. tiếp vào các chương trình Arduino của mình nếu bạn
muốn.
Open source and extensible hardware - The plans Nguồn mở và phần cứng có thể mở rộng - Các kế
of the Arduino boards are published under a Creative hoạch của bảng Arduino được xuất bản theo giấy
Commons license, so experienced circuit designers phép Creative Commons, vì vậy các nhà thiết kế
can make their own version of the module, extending mạch có kinh nghiệm có thể tạo phiên bản mô-đun
it and improving it. Even relatively inexperienced của riêng họ, mở rộng và cải thiện nó. Ngay cả
users can build the breadboard version of the module những người dùng tương đối thiếu kinh nghiệm cũng
in order to understand how it works and save money. có thể xây dựng phiên bản breadboard của mô-đun để
hiểu cách nó hoạt động và tiết kiệm tiền.
Arduino Sensor and robot

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#1. Blink a LED Turn an LED on and off every second.
(Nhấp nháy một LED, tắt/mở một LED mỗi giây)
This example shows the simplest thing you can do Ví dụ này cho thấy điều đơn giản nhất bạn có thể làm
with an Arduino to see physical output: it blinks the với Arduino là xem đầu ra vật lý: là nó nhấp nháy 1
on-board LED. đèn LED tích hợp sẵn trên bo mạch.
Hardware Required Yêu cầu phần cứng
 1 Arduino Board UNO R3  1 bảng mạch Arduino UNO R3
 1 USB cable.  1 cáp USB.
 1 Laptop or PC installed Arduino IDE.  1 Laptop hoặc máy tính đã cài Arduino IDE
 1 LED  1 bóng đèn LED
 1 resistor 220 ohm / 330 ohm.  1 điện trở 220  /330  .
 2 wires male – male  2 dây cắm đực - đực
 1 breadboard  1 bảng cắm breadboard
1.1 Blink a LED_BUILTIN 1.1 Nhấp nháy một đèn LED tích hợp sẵn
This example uses the built-in LED that most Ví dụ này sử dụng đèn LED tích hợp mà hầu hết các
Arduino boards have. This LED is connected to a bảng Arduino đều có. Đèn LED này được kết nối với
digital pin and its number may vary from board type chân kỹ thuật số và số của chân có thể thay đổi tùy
to board type. To make your life easier, we have a theo loại bảng. Để giúp cuộc sống của bạn dễ dàng
constant that is specified in every board descriptor hơn, chúng tôi đã tạo ra một hằng số được chỉ định
file. This constant is LED_BUILTIN and allows you trong mọi lập trình Arduino. Hằng số này là
to control the built-in LED easily. Here is the LED_BUILTIN và cho phép bạn điều khiển đèn
correspondence between the constant and the digital LED tích hợp một cách dễ dàng. Đây là sự tương ứng
pin. giữa hằng số và chân kỹ thuật số.
In Arduino UNO R3, LED_BUILTIN connected to Trong Arduino UNO R3, LED_BUILTIN được kết
digital Pin 13. nối với Chân số 13.
Open Arduino IDE and type code below: Hình dưới đây chỉ vị trí LED_BUILTIN
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}

1.2 Blink a external LED 1.2 Nhấp nháy một đèn LED bên ngoài
If you want to light an external LED with this sketch, Nếu bạn muốn chiếu sáng một đèn LED bên ngoài
you need to build this circuit, where you connect one với sketch này, bạn cần phải xây dựng mạch điện,
end of the resistor to the digital pin correspondent to nơi bạn kết nối một đầu của điện trở với chân số
the LED_BUILTIN constant. Connect the long leg tương ứng với hằng số LED_BUILTIN. Kết nối chân
of the LED (the positive leg, called the anode) to the dài của đèn LED (chân dương, được gọi là cực dương
other end of the resistor. Connect the short leg of the anode) với đầu kia của điện trở. Kết nối chân ngắn
LED (the negative leg, called the cathode) to the của đèn LED (chân âm, được gọi là cực âm cathode)
GND. In the diagram below we show an UNO board với GND. Trong sơ đồ bên dưới, kết nối mạch với
that has D12 as the external LED. chân kỹ thuật số, số 12.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
The value of the resistor in series with the LED may Giá trị của điện trở mắc nối tiếp với đèn LED có thể
be of a different value than 220 ohms; the LED will có giá trị khác 220 ôm; đèn LED cũng sẽ sáng với giá
light up also with values up to 1K ohm. trị lên đến 1Kilo ohm.
Circuit (Mạch điện) Code

int ledPin = 12;


void setup(){
pinMode(ledPin, OUTPUT);
}
void loop(){
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
delay(1000);
}

Bài tập 1.1


Hãy kết hợp 1 LED ngoài với một LED xây dựng sẵn, lập trình thành mạch điện nháy đa hài. (Tức là LED
này sáng, thì LED kia tắt và ngược lại).

Bài tập 1.2


Sử dụng 3 đèn LED, 1 đỏ, 1 xanh, 1 vàng để xây dựng Cột đèn Đỏ-Xanh-Vàng điều phối giao thông ở các
ngã ba, ngã tư. Quy tắc: Giả sử đèn đỏ sáng 5s để xe dừng lại, đèn vàng sáng 2s để xe giảm tốc độ và dừng,
đèn xanh sáng 5 giây xe được phép đi. Lặp lại quy trình mãi mãi.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#2. Digital Read Serial Read a switch, print the state out to the Arduino Serial Monitor.
(Đọc nối tiếp kỹ thuật số. Đọc 1 công tắc và in trạng thái ra cửa sổ Arduino Serial Monitor)
This example shows you how to monitor the state of Ví dụ này cho bạn thấy cách theo dõi trạng thái của
a switch by establishing serial communication công tắc bằng cách thiết lập giao tiếp nối tiếp giữa
between your Arduino and your computer over USB. Arduino và máy tính của bạn qua USB.
Hardware Required Yêu cầu phần cứng
 Arduino Board  1 Bảng mạch Arduino
 A momentary switch, button, or toggle switch  Một công tắc nút nhấn tự thả.
 1 resistor 10k ohm, 1 resistor 220 ohm  1 điện trở 10K  , 1 điện trở 220  .
 3 wires male-male breadboard  3 dây nối đực-đực và 1 breadboard

Circuit (Mạch điện) Code

int pushButton = 2;
void setup() {
Serial.begin(115200);
pinMode(pushButton, INPUT);
}
void loop() {
int buttonState =
digitalRead(pushButton);
Serial.println(buttonState);
delay(10);
}

Schematic (Sơ đồ) Kết nối dây đỏ với 1 đầu của điện trở 220  đầu còn
lại với nguồn 5V.
Kết nối dây đen với 1 đầu điện trỏ 10K  và đầu
còn lại với nguồn âm GND.
Đầu còn lại của điện trở 10K  được kết nối với 1
chân của nút nhấn và kết nối với chân cắm D2
của Arduino UNO qua dây xanh.
Một trong 2 đầu còn lại của 2 điện trở được nối
với công tắc nút nhấn.
Nạp chương trình, chạy và mở cử sổ Serial lên sẽ
thấy xuất hiện toàn số 0. Ấn công tắc sẽ xuất
hiện số 1.
Nguyên lý hoạt động
Khi chương trình mới chạy, chân D2 được điện trở 10K  kéo về GND nên nhận tín hiệu vào LOW, tức
0V, nên digital trả về 0. Khi nhấn công tắc, chân D2 được kéo về cực dương 5V, nên INPUT nhận 5V ở
mức HIGH nên tính hiệu digital là 1.
Lưu ý: Điện trở 220  chỉ có tác dụng bảo vệ, sợ cắm nhầm, chập nguồn cháy con vi xử lý của
Arduino. Nếu đã chắc chắn, không nhầm thì có thể loại bỏ nó.
Bài tập 2.1 Cải tiến chương trình để nhấn và giữ công tắc thi đèn LED external hoặc LED_BUILTIN sáng và
thả ra thì đèn LED tắt.
Bài tập 2.2 Cải tiến chương trình để nhấn công tắc 1 lần thì đèn LED sáng, nhấn công tắc 1 lần nữa thì LED
tắt. Chu trình cứ lặp đi lặp lại.
Bài tập 2.3 Cải tiến chương trình để nhấn và giữ công tắc 5 giây thì LED sáng. Thả công tắc ra và nếu tiếp
tục nhấn và giữ 5 giây nữa thì LED tắt.
Bài tập 2.4 Viết chương trình đêm xem người dùng đã nhấn nút nhấn bao nhiêu lần và in ra Serial Monitor
cho họ biết số lần đã nhấn.
Bài tập 2.5 Cải tiến chương trình trong bài tập 2.4, để người dùng nhấn 10 lần thì led sáng, nhấn 5 lần nữa
thì led tắt.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#3 Fading a LED Demonstrates the use of analog output to fade an LED
(Làm mờ dần một LED, minh họa dùng tín hiệu analog xuất ra để làm mờ LED)
This example demonstrates the use of the Ví dụ này minh họa việc sử dụng hàm analogWrite()
analogWrite() function in fading an LED off and on. trong việc tắt và bật đèn LED. AnalogWrite sử dụng
AnalogWrite uses pulse width modulation (PWM), điều chế độ rộng xung (PWM), bật và tắt chân kỹ
turning a digital pin on and off very quickly with thuật số rất nhanh với tỷ lệ % khác nhau giữa bật và
different ratio between on and off, to create a fading tắt, để tạo ra hiệu ứng mờ dần.
effect.
Hardware Required Circuit & Schematic
 Arduino board
 LED
 220 ohm resistor
 hook-up wires male - male
 breadboard

Connect the anode (the longer, positive leg) of your Kết nối cực dương anode (chân dương, dài hơn) của
LED to digital output pin 9 on your board through a đèn LED với chân đầu ra kỹ thuật số 9 trên Arduino
220 ohm resistor. Connect the cathode (the shorter, của bạn thông qua điện trở 220 ohm. Nối cực âm
negative leg) directly to ground. cothode (chân âm, ngắn hơn) trực tiếp với GND.
Code: Hàm digitalWrite() chỉ cho phép bật mức HIGH
hoặc tắt mức LOW đồng nghĩa với LED sáng hoặc
int ledPin = 9; tắt hoàn toàn. Tuy nhiên, đôi lúc chúng ta cần chân
void setup(){
Serial.begin(115200);
(Pin) nào đó của Arduino chỉ bật 20%, 50%... của
pinMode(ledPin, OUTPUT); mức điện áp 5V để LED sáng 20%, 50% thôi.
} Khi đó các chân PWM (Pulse Width Modulation) ra
void loop(){ đời. Hiểu nôm na là các chân PWM không những
for(int i=0; i<=255; i++){ cho phép bật / tắt hoàn toàn mà còn bật / tắt ở một số
analogWrite(ledPin, i);
delay(10); % nhất định.
} Không phải tất cả các chân của Arduino đều cho
for(int i=255; i>=0; i--){ phép PWM, chỉ có chân nào kí hiệu ~ bên cạnh nó
analogWrite(ledPin, i); thì mới có chức năng PWM.
delay(10); Hàm analogWrite() cho phép chúng ta làm điều này
}
} với các chân PWM.
Trong đoạn code bên trái, chúng ta có 2 vòng lặp for.
Basics of PWM (Pulse Width Modulation) Vòng lặp đầu tiên ra lệnh cho hàm analogWrite()
hãy bật chân số 9 tăng từ 0 đến 255. Và for thứ 2
ngược lại. Hàm analogWrite(Pin, 0  i  255 )
Điều chế độ rộng xung, PWM (Pulse Width
Modulation), là một kỹ thuật để thu được kết quả
analog bằng các phương tiện kỹ thuật số. Điều khiển
kỹ thuật số được sử dụng để tạo ra một sóng vuông,
một tín hiệu chuyển đổi giữa bật và tắt giữa 0V và
5V (hoặc 0V và 3.3V) bằng cách thay đổi phần bật
HIGH và tắt LOW. Khoảng thời gian bật "HIGH"
được gọi là độ rộng xung.
Ví dụ: analogWrite(0%) là chân đó tắt LOW toàn
thời gian, analogWrite(50%=127) là HIGH phân
nửa, LOW phân nửa và analogWrite(100%=255) là
HIGH toàn thời gian.
Bài tập 3.1 Vì bản thân void loop() cũng đã là vòng lặp vô tận, nên trong đoạn code trên chúng ta hoàn toàn
không cần sử dụng 2 vòng lặp for để tăng / giảm độ sáng từ từ của LED.
Hãy viết lại chương trình có chức năng tương tự như trên mà không cần vòng lặp for.
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#4 Analog Read Serial Read a potentiometer, print its state out to the Arduino Serial Monitor.
(Đọc nối tiếp tín hiệu Analog, đọc một chiết áp và in trạng thái của nó ra Serial Monitor của Arduino)
This example shows you how to read analog input Ví dụ này cho bạn thấy cách đọc đầu vào analog từ
from the physical world using a potentiometer. A thế giới vật lý bằng cách sử dụng chiết áp (biến trở).
potentiometer is a simple mechanical device that Chiết áp là một thiết bị cơ học đơn giản cung cấp một
provides a varying amount of resistance when its lượng điện trở khác nhau khi quay quanh trục của nó.
shaft is turned. By passing voltage through a Bằng cách truyền điện áp qua chiết áp vào đầu vào
potentiometer and into an analog input on your tương tự (analog) trên bo mạch của bạn, có thể đo
board, it is possible to measure the amount of lượng điện trở được tạo ra bởi chiết áp (hay gọi tắt là
resistance produced by a potentiometer (or pot for pot) dưới dạng giá trị tương tự (analog). Trong ví dụ
short) as an analog value. In this example you will này, bạn sẽ theo dõi trạng thái của chiết áp sau khi
monitor the state of your potentiometer after thiết lập giao tiếp nối tiếp giữa Arduino và máy tính
establishing serial communication between your của bạn đang chạy phần mềm Arduino (IDE).
Arduino and your computer running the Arduino
Software (IDE).
Hardware Required Yêu cầu phần cứng
 Arduino Board, USB Cable  Arduino Board, USB Cable
 10k ohm Potentiometer  Chiết áp 10k ohm
 2 wires male-male, breadboard  2 dây nối đực-đực, breadboard
Curcuit (Mạch điện) Một chiết áp thường có 3 chân và có chỉ số điện trở
danh định mà nhà sản xuất tạo ra. Ở ví dụ này là điện
trở danh định 10K ohm.

Nếu dùng đồng hồ VOM đo thì 2 chân bìa có giá trị


10K ohm. Nếu đo 1 chân bìa và 1 chân giữa thì khi
Connect the three wires from the potentiometer to xoay chiết áp quanh trục của nó sẽ thay đổi điện trở
your board. The first goes from one of the outer pins từ 0 đến 10.000 ohm.
of the potentiometer to ground. The second goes
from the other outer pin of the potentiometer to 5 Kết nối ba chân từ chiết áp vào bo mạch của bạn.
volts. The third goes from the middle pin of the Đầu tiên đi từ chân bìa trái của chiết áp đến GND.
potentiometer to the analog pin A0. Thứ hai đi từ chân bìa phải của chiết áp đến 5V.
Chân giữa của chiết áp đến chân A0 của Arduino.
Schematic (Sơ đồ) Code:

void setup(){
Serial.begin(115200);
}
void loop(){
int giaTriChietAp = analogRead(A0);
Serial.println(giaTriChietAp);
delay(10);

Mở Arduino IDE và tạo 1 sketch với nội dung như


trên, sau đó nạp vào board Arduino.
Bên trong Arduino, vi xử lý có một bộ chuyển đổi
Mở cửa sổ Serial Monitor lên (Ctrl+Shift+M), dùng
tính hiệu tương tự sang kỹ thuật số, gọi tắt là ADC
tay xoay từ từ chiết áp và quan sát sự thay đổi giá trị
(Analog-to-Digital Converter). Bộ ADC này chuyển
từ 0 đến 1023.
điện áp đọc được từ chiết áp thành tính hiệu số có giá
Lưu ý: Nếu chiều xoay chiết áp ngược với giá trị
trị từ 0 đến 1023 (độ phân giải 10 bit = 2^10).
tăng giảm thì đảo chỗ 2 dây bìa của chiết áp.
Hàm analogRead() trả về giá trị từ 0 đến 1023.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
4.2 Read Analog Voltage 4.2 Đọc điện áp Analog
Reads an analog input and prints the voltage to the Đọc đầu vào tơng tự (analog) và in điện áp vào Serial
Serial Monitor. Monitor.
This example shows you how to read an analog input Ví dụ này cho bạn thấy cách đọc đầu vào analog trên
on analog pin A0, convert the values from chân analog A0, chuyển đổi các giá trị từ
analogRead() into voltage, and print it out to the analogRead() thành điện áp và in nó ra màn hình nối
serial monitor of the Arduino Software (IDE). tiếp của Phần mềm Arduino (IDE).
Code: Hàm analogRead() trả về giá trị từ 0 đến 1023 tương
void setup(){ ứng với từ 0V đến 5V.
Serial.begin(115200); Nên để đọc số Volt ta lấy 5V/1023 rồi nhân kết quả
}
void loop(){ này với giá trị đọc được của chiết áp ta sẽ được số
int giaTriChietAp = analogRead(A0); Volt tương ứng.
float heSo = 5/1023.0;
float dienAp = heSo * giaTriChietAp;
Serial.print(dienAp);
Serial.println("V");
delay(10);
}

Bài tập 4.1


Hãy điều chỉnh code trong phần Đọc điện áp Analog để đọc được giá trị của biến trở của chiết áp, từ 0 ohm
đến 10K ohm (=10.000 ohm) khi xoay chiết áp quanh trục của nó.

Bài tập 4.2


Dùng một điện trở 220 ohm mắc nối tiếp 1 LED từ GND vào chân số 9 của Arduino. Sử dụng hàm
analogWrite(), kết hợp với chiết áp để PWM chân 9 của Arduino làm cho LED mờ dần và sáng dần khi xoay
chiết áp. Tham khảo sơ đồ schematic bên dưới.

Bài tập 4.3


Sử dụng hàm analogWrite() ở các chân có chức năng PWM để điều chỉnh độ sáng của một LED RGB.
Led RGB là một đèn LED tích hợp cả 3 loại Led Đỏ (Red), Xanh lá cây (Green) và xanh da trời (Blue).
Ánh sáng chúng ta xem hằng ngày trên các màn hình điện thoại, máy tính… thường phát ra từ các điểm ảnh
(pixel), mỗi pixel thường là 1 led RGB. Tùy theo độ sáng mỗi led mà ánh sáng tổng hợp sẽ cho ra màu tương
ứng.

LED RGB Mạch điện Module Led RGB có sẵn

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#5 Blink Without Delay Blink an LED without using the delay() function
Sometimes you need to do two things at once. For
Đôi khi bạn cần làm hai việc cùng một lúc. Ví dụ,
example you might want to blink an LED whilebạn có thể muốn nhấp nháy đèn LED trong khi vẫn
reading a button press. In this case, you can't use
đọc nút nhấn. Trong trường hợp này, bạn không thể
delay(), because Arduino pauses your programsử dụng delay (), vì Arduino tạm dừng chương trình
during the delay(). If the button is pressed while
của bạn trong thời gian delay (). Nếu nút được nhấn
Arduino is paused waiting for the delay() to pass,
trong khi Arduino đang tạm dừng chờ thời delay()
your program will miss the button press. trôi qua, chương trình của bạn sẽ bỏ lỡ lần nhấn nút
This sketch demonstrates how to blink an LEDđó. Sketch này trình bày cách nhấp nháy đèn LED
without using delay(). It turns the LED on and then
mà không sử dụng delay(). Nó bật đèn LED và sau
makes note of the time. Then, each time through
đó ghi lại thời gian. Sau đó, mỗi lần qua vòng lặp
loop(), it checks to see if the desired blink time has
loop(), nó sẽ kiểm tra xem thời gian nhấp nháy mong
passed. If it has, it toggles the LED on or off and
muốn đã trôi qua chưa. Nếu có, nó sẽ bật hoặc tắt đèn
makes note of the new time. In this way the LED
LED và ghi chú thời gian mới. Bằng cách này, đèn
blinks continuously while the sketch execution never
LED nhấp nháy liên tục trong khi quá trình thực hiện
lags on a single instruction. sketch không bao giờ bị trễ trên một lệnh duy nhất.
An analogy would be warming up a pizza in your
Một sự tương tự sẽ là hâm nóng một chiếc bánh pizza
microwave, and also waiting some important email.
trong lò vi sóng của bạn và cũng đang chờ một số
You put the pizza in the microwave and set it for 10
email quan trọng. Bạn cho bánh pizza vào lò vi sóng
minutes. The analogy to using delay() would be to sit
để nướng trong 10 phút. Tương tự với việc sử dụng
in front of the microwave watching the timer count
delay() sẽ là ngồi trước lò vi sóng xem bộ đếm thời
down from 10 minutes until the timer reaches zero. If
gian đếm ngược từ 10 phút cho đến khi bộ đếm thời
the important email arrives during this time you will
gian về 0. Nếu email quan trọng đến trong thời gian
miss it. này, bạn sẽ bỏ lỡ nó.
What you would do in real life would be to turn on
Những gì bạn sẽ làm trong cuộc sống thực là bật
the pizza, and then check your email, and then maybe
pizza, sau đó kiểm tra email và sau đó có thể làm
do something else (that doesn't take too long!) and
điều gì đó khác (không mất quá nhiều thời gian!) Và
every so often you will come back to the microwave
cứ thường xuyên bạn sẽ quay lại lò vi sóng để xem
to see if the timer has reached zero, indicating that
nếu bộ đếm thời gian về 0, cho biết rằng bánh pizza
your pizza is done. của bạn đã hoàn thành hâm nóng.
In this tutorial you will learn how to set up a similar
Trong hướng dẫn này, bạn sẽ học cách thiết lập một
timer. bộ hẹn giờ tương tự.
Code: Để tiện lợi, chúng ta dùng LED_BUILTIN được kết
int ledPin = 13; nối với chân 13 của Arduino để minh họa Blink
int trangThaiLed = LOW; without delay().
unsigned long thoiGianTruocDo = 0;
const int khoangThoiGianLedBlink = 1000; Hàm millis() sẽ trả về số thời gian tính bằng mili giây
void setup() { kể từ khi chương trình Arduino bắt đầu chạy, lúc đó
pinMode(ledPin, OUTPUT); là 0 mili giây.
} Do return của hàm millis() là một số nguyên không
void loop() {
unsigned long thoiGianHienTai = millis(); âm kiểu unsigned long, nên nó không thể lớn hơn
if (thoiGianHienTai - thoiGianTruocDo >= 232 1  4.294.967.295 . Nếu lấy số này chia cho
khoangThoiGianLedBlink) thời gian của một ngày là 24 giờ ta sẽ được
{ thoiGianTruocDo = 232 1
thoiGianHienTai; if (trangThaiLed  49,7 ngày thì hàm millis() tự
== LOW){ 24 * 60* 60 *1000
trangThaiLed = HIGH;
} else {
động đếm lại từ 0 nếu chúng ta cho board mạch
trangThaiLed = LOW; Arduino chạy liên tục mà không reset hay rút điện ra.
}
digitalWrite(ledPin, trangThaiLed);
}
}
Bài tập 5.1
Hãy kết hợp vừa đọc tính hiệu analog từ 1 chiết áp và blink 1 đèn led nhưng có sử dụng hàm delay() để chớp
tắt led. Mở cửa sổ Serial Monitor lên xoay chiết áp và quan sát rồi tự cho nhận xét.
Bài tập 5.2
Từ nhận xét của bài 5.1, hãy cải tiến lại chương trình và không sử dụng hàm delay() để blink 1 đèn LED
trong khi vẫn đọc tín hiệu analog từ chiết áp. Tự cho nhận xét về việc có sử dụng delay() và không delay().
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#6 Input Pullup Serial Demonstrates the use of INPUT_PULLUP with pinMode()
This example demonstrates the use of Ví dụ này minh họa việc sử dụng INPUT_PULLUP
INPUT_PULLUP with pinMode(). It monitors the với pinMode(). Nó giám sát trạng thái của một công
state of a switch by establishing serial tắc bằng cách thiết lập giao tiếp nối tiếp giữa
communication between your Arduino and your Arduino và máy tính của bạn qua USB.
computer over USB. Ngoài ra, khi đầu vào ở mức HIGH, đèn LED trên bo
Additionally, when the input is HIGH, the onboard mạch được gắn vào chân 13 sẽ bật; khi LOW, đèn
LED attached to pin 13 will turn on; when LOW, the LED sẽ tắt.
LED will turn off.
Hardware Required Yêu cầu phần cứng
 Arduino Board  Arduino Board
 A momentary switch, button, or toggle switch  Công tắc tạm thời, nút hoặc công tắc bật tắt
 Breadboard  Breadboard
 2 wires male - male  Dây nối đực - đực
Circuit Code
int led = 13;
int pushButton = 2;
void setup(){
Serial.begin(115200);
pinMode(led, OUTPUT);
pinMode(pushButton, INPUT_PULLUP);
}
void loop(){
int sensorVal = digitalRead(pushButton);
Serial.println(sensorVal);
if (sensorVal == HIGH){
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
delay(100);
}

Connect two wires to the Arduino board. The black Kết nối hai dây với bảng Arduino. Một đầu dây đen
wire connects ground to one leg of the pushbutton. nối đất (GND), đầu còn lại nối với một chân của nút
The second wire goes from digital pin 2 to the other bấm. Dây thứ hai đi từ chân số 2 đến chân còn lại của
leg of the pushbutton. nút bấm.
Pushbuttons or switches connect two points in a Các nút bấm hoặc công tắc kết nối hai điểm trong
circuit when you press them. When the pushbutton is một mạch điện khi bạn nhấn chúng. Khi nút mở
open (unpressed) there is no connection between the (không được ấn), không có kết nối nào giữa hai chân
two legs of the pushbutton. Because the internal pull- của nút nhấn. Bởi vì thanh kéo bên trong chân 2 đang
up on pin 2 is active and connected to 5V, we read hoạt động và được kéo lên, kết nối với 5V, nên chúng
HIGH when the button is open. When the button is đạt mức HIGH khi nút mở. Khi đóng nút, chân 2
closed, the Arduino reads LOW because a connection được kéo xuống 0V, nên Arduino đọc LOW vì kết
to ground is completed. nối với GND đã hoàn tất đạt 0V.
Lưu ý: Khi chân INPUT đọc tín hiệu digital đầu vào
được kéo lên theo kiểu PULLUP này thì tín hiệu ít bị
nhiễu nên bạn không thấy có điện trở nào trong mạch
này.
Bài tập 6.1
Hãy in các kí tự trong bảng mã ASCII từ số 32 đến 126 ra dạng bình tường, số thập phân DEC, số thập lục
phân HEX, hệ bát phân OCT và số nhị phân BIN vào cửa sổ Serial Monitor
Ví dụ:
! , dec: 33, hex: 21, oct: 41, bin: 100001
" , dec: 34, hex: 22, oct: 42, bin: 100010
# , dec: 35, hex: 23, oct: 43, bin: 100011

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#7 Read ASCII String Parse a comma-separated string of integers to fade an LED.
(Đọc chuỗi ASCII, Phân tích một chuỗi lấy số nguyên được phân tách bằng dấu phẩy để làm mờ một đèn LED)
This sketch uses the Serial.parseInt() function to Sketch này sử dụng hàm Serial.parseInt() để định vị
locate values separated by a non-alphanumeric các giá trị được phân tách bằng một ký tự không phải
character. Often people use a comma to indicate chữ và số. Thông thường, mọi người sử dụng dấu
different pieces of information (this format is phẩy để biểu thị các phần thông tin khác nhau (định
commonly referred to as comma-separated-values or dạng này thường được gọi là các giá trị được phân
CSV), but other characters like a space or a period tách bằng dấu phẩy hoặc CSV), nhưng các ký tự
will work too. The values are parsed into integers and khác như dấu cách hoặc dấu chấm cũng sẽ hoạt động.
used to determine the color of a RGB LED. You'll Các giá trị được phân tích cú pháp thành các số
use the Arduino Software (IDE) serial monitor to nguyên và được sử dụng để xác định màu của đèn
send strings like "5,220,70" to the board to change LED RGB. Bạn sẽ sử dụng Serial Monitor của Phần
the light color. mềm Arduino (IDE) để gửi các chuỗi như "5,220,70"
tới bảng để thay đổi màu ánh sáng.
Hardware Required Code
 Arduino Board const int redPin = 3;
const int greenPin = 5;
 common cathode RGB LED const int bluePin = 6;
 3 220 ohm resistors void setup(){
 hook-up wires Serial.begin(115200);
 breadboard pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
Circuit pinMode(bluePin, OUTPUT);
}
void loop(){
while(Serial.available()>0){
int red = Serial.parseInt();
int green = Serial.parseInt();
int blue = Serial.parseInt();
if (Serial.read() =='\n'){
red = constrain(red, 0, 255);
green = constrain(green, 0, 255);
blue = constrain(blue, 0, 255);
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
Serial.println("red="+String(red)
+",
green="+String(green)
+", blue="+String(blue)
);
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
}
}
Bài tập 7.1
Viết chương trình yêu cầu người dùng nhập vào tên của họ. Sau đó in ra cửa sổ Serial Monitor cầu Chào bạn
“xxx” đến với lập trình Arduino.
Gợi ý: Sử dụng hàm Serial.read() hoặc Serial.readString()

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#8 Control RGB LED With Arduino and Processing
(Điều khiển led RGB với Arduino và phần mềm Processing)
Today, we learn how to control an RGB LED with the help of Arduino and Processing language. When you
move the mouse on the color wheel on the computer, the RGB led changes color accordingly.
Hardware Required Code Arduino:
Arduino board, 1 module LED RGB, 4 wires male – int redPin = 3;
int greenPin = 5;
male, 1 Breadboard
int bluePin = 6;
Software Required long int inputByte;
Processing 4 software, 1 Color Wheel jpg image int wait = 10; //10ms
Circuit The same #7 void setup(){
Serial.begin(115200);
Hướng dẫn cách làm: pinMode(redPin, OUTPUT);
Bước 1: Kết nối mạch điện giống mục #7 pinMode(greenPin, OUTPUT);
Bước 2: Mở Arduino IDE và tạo sketch với nội dung pinMode(bluePin, OUTPUT);
như file bên phải và upload lên Arduino UNO. }
void OutputColor(int red, int green, int
Bước 3: Mở phần mềm Processing 4 và tạo sketch blue) {
nội dung như bên dưới. analogWrite(redPin, red);
Bước 4: Tải bánh xe màu Color_Wheel.jpg và lưu nó analogWrite(bluePin, blue);
vào cùng thư mục file sketch của Processing 4. analogWrite(greenPin, green);
}
Bước 5: Chạy file Processing và di chuyển chuột vào int* getColor() {
bánh xe màu, quan sát LED RGB. int* color;
int i;
Tiếp phần bên trái void loop của code Arduino: i = 0;
void loop(){ while (i < 3){
if (Serial.available() > 0) { if (Serial.available() > 0) {
inputByte = Serial.read(); color[i] = Serial.read();
if (inputByte == '@') { i++;
int* one; }
one = getColor(); }
OutputColor(one[1],one[2],one[3]); return color;
} }
}
delay(wait);
}

Code Processing RGB Led


import processing.serial.*;
PImage img;
Serial portUno;
void setup() {
size(512,512); //set image size
int i = 0;
for(String x : Serial.list()){
println("Port",i," =",x," ");
i++;
}
img = loadImage("Color_Wheel.jpg");
portUno = new Serial(this, Serial.list()[5], 115200);
}
void draw() {
background(0);
image(img,0,0);
img.loadPixels();
}
void mouseMoved(){//void mousePressed()
portUno.write("@~");//Ki tu bi mat
portUno.write(int(red(img.pixels[mouseX+mouseY*img.width])));
portUno.write(int(green(img.pixels[mouseX+mouseY*img.width])));
portUno.write(int(blue(img.pixels[mouseX+mouseY*img.width])));
}

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#9 Ultrasonic HC-SR04 Range Finder Detect objects with an ultrasonic range finder
The HC-SR04 is an ultrasonic range finder. It detects HC-SR04 là một công cụ tìm phạm vi bằng sóng siêu
the distance of the closest object in front of the âm. Nó phát hiện khoảng cách của đối tượng gần
sensor (from 3 cm up to 400 cm). It works by nhất ở phía trước cảm biến (từ 2 cm đến 400 cm). Nó
sending out a burst of ultrasound and listening for the hoạt động bằng cách phát ra một loạt sóng siêu âm và
echo when it bounces off of an object. It pings the lắng nghe tiếng vọng khi nó dội lại từ một vật thể. Nó
obstacles with ultrasound. The Arduino board sends a ping các chướng ngại vật bằng sóng siêu âm. Bo
short pulse to trigger the detection, then listens for a mạch Arduino gửi một xung ngắn để kích hoạt phát
pulse on the same pin using the pulseIn() function. hiện, sau đó lắng nghe xung trên cùng một chân bằng
The duration of this second pulse is equal to the time cách sử dụng hàm pulseIn(). Khoảng thời gian của
taken by the ultrasound to travel to the object and xung thứ hai này bằng thời gian siêu âm truyền đến
back to the sensor. Using the speed of sound vật thể và quay trở lại cảm biến. Sử dụng tốc độ âm
(340m/s), this time can be converted to distance. thanh (340m/s), thời gian này có thể được chuyển đổi
thành khoảng cách.
Hardware Required Ultrasonic HC-SR04
Arduino Board; Ultrasonic HC-SR04; wires
Circuit

Điện áp: 5V (có loại 3.3-5); Dòng: 15mA; Tần số:


40KHz; Khoảng cách đo: 2cm – 400cm.
Độ chính xác  3mm; Góc đo: 15 độ
Kích thước: 45 x 20 x 15mm
Kết nối với Arduino: VCC->5V; Trig->6; Echo->5;
GND->GND.
VCC supplies power to the HC-SR04 ultrasonic VCC cung cấp nguồn cho cảm biến siêu âm HC-
sensor. You can connect it to the 5V output from SR04. Bạn có thể kết nối nó đến nguồn 5V.
your Arduino. Trig (Trigger) chân này được sử dụng để kích hoạt
Trig (Trigger) pin is used to trigger ultrasonic sound xung âm thanh siêu âm. Bằng cách đặt chân này ở
pulses. By setting this pin to HIGH for 10µs, the mức HIGH trong 5-10µs, cảm biến bắt đầu chờ sóng
sensor initiates an ultrasonic burst. siêu âm phản hồi khi chân này LOW.
Echo pin goes high when the ultrasonic burst is Echo chân đi lên HIGH khi phát ra chùm sóng siêu
transmitted and remains high until the sensor âm và duy trì ở mức HIGH cho đến khi cảm biến
receives an echo, after which it goes low. By nhận được một tiếng vọng, sau đó nó sẽ đi xuống
measuring the time the Echo pin stays high, the mức LOW. Bằng cách đo thời gian chân Echo ở mức
distance can be calculated. HIGH, bạn có thể tính được khoảng cách.
GND is the ground pin. Connect it to the ground of GND là chân nối đất. Kết nối nó với mặt đất của
the Arduino. Arduino.
Code Arduino digitalWrite(trigPin, LOW);
int trigPin = 6; delayMicroseconds(2);
int echoPin = 5; digitalWrite(trigPin, HIGH);
unsigned long thoiGianChoPhanHoi; delayMicroseconds(5);
unsigned int khoangCach; digitalWrite(trigPin, LOW);
void setup(){ thoiGianChoPhanHoi=pulseIn(echoPin,HIGH);
Serial.begin(115200); khoangCach = thoiGianChoPhanHoi*0.034/2;
pinMode(trigPin, OUTPUT); Serial.print("Khoang cach: ");
pinMode(echoPin, INPUT); Serial.print(khoangCach);
} Serial.println(" cm");
void loop(){ delay(100);
}
Giải thích: chân trigPin bật mức HIGH 5µs để báo cho cảm biến kích hoạt sóng siêu âm phát đi. Sau đó nó
tắt LOW, đồng thời lúc đó ra lệnh cho chân echoPin bật chế độ HIGH và chờ âm thanh phản hồi. Khi sóng
siêu âm gặp vật cản, nó sẽ phản hồi trở về. Khi cảm biến nhận được phản hồi thì chân echoPin đạt LOW.
Hàm pulseIn() sẽ trả về thời gian tính theo µs từ HIGH->LOW. Mà vận tốc âm thanh là 340m/s, từ đó tính
đực khoảng cách. Chúng ta phải chia 2, vì quảng đường tính cả đi và về.
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#10 Arduino with IR Sensor How to interface an IR sensor with an Arduino Uno
(Arduino với cảm biến hồng ngoại. Cách giao tiếp cảm biến hồng ngoại với Arduino Uno)
Today I will show you how to interface an IR sensor Hôm nay tôi sẽ chỉ cho bạn cách giao tiếp cảm biến
with an Arduino UNO. So let's start! IR với Arduino UNO. Vì vậy, chúng ta hãy bắt đầu!

Components: Arduino Uno, IR sensor, LED, Arduio Linh kiện: Arduino Uno, Cảm biến hồng ngoại IR,
cable, Jumper wire. LED, Arduino cáp, dây nối.

What is an infrared sensor? An infrared sensor is Cảm biến hồng ngoại là gì? Cảm biến hồng ngoại là
an electronic device, that emits in order to sense một thiết bị điện tử, phát ra để cảm nhận một số khía
some aspects of the surroundings. An IR sensor can cạnh của môi trường xung quanh. Một cảm biến IR
measure the heat of an object as well as detects the có thể đo nhiệt của một vật thể cũng như phát hiện
motion.These types of sensors measures only chuyển động. Các loại cảm biến này chỉ đo bức xạ
infrared radiation, rather than emitting it that is called hồng ngoại chứ không phát ra nó được gọi là cảm
as a passive IR sensor. biến IR thụ động.
Trong hình bên trái, diode màu trắng phát ra tia hồng
ngoại, diod màu đen nhận tín hiệu phản hồi.
Biến trở màu xanh, điều chỉnh độ nhạy của cảm biến.
Chân OUT trả về tín hiệu Digital 0 hoặc 1
Kết nối với Arduino:
VCC ->5V/3.3V; GND ->0V; OUT->2

Circuit Code Arduino

int irSensorPin = 2;
void setup(){
Serial.begin(9600);
pinMode(irSensorPin, INPUT);
}
void loop(){
int sensorStatus =
digitalRead(irSensorPin);
Serial.println(sensorStatus);
delay(50);
}

Hướng dẫn: Chạy chương trình Arduino, mở cửa sổ serial monitor, dùng bàn tay đưa lại gần cảm biến hồng
ngoại từ từ rồi đưa ra xa dần. Quan sát sự thay đổi tín hiệu.

Bài tập 10.1


Lấy một tờ giấy trắng, dùng băng keo cách điện màu đen dán lên một vệt.
Sử dụng cảm biến hồng ngoại chiếu vào giấy trắng, sau đó chiếu vào phần màu đen. Quan sát sự thay đổi tín
hiệu trên màn hình. (có thể cần phải dùng tua vít nhỏ điều chỉnh độ nhạy của cảm biến).
Hãy cải tiến mạch điện trên bằng cách nếu chiếu cảm biến ir vào dùng màu trắng thì bật sáng một đèn led.
Chiếu vào dùng màu đen thì tắt đèn led.

Ứng dụng: Có thể sử dụng 2 cảm biến hồng ngoại để làm robot dò đường.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#11. Controlling NeoPixels LED RGB with Arduino
Điều khiển NeoPixels LED RGB với Arduino
What Is a Neopixel Anyway? Neopixel là gì?
Neopixels are a specific brand of individually Neopixels là một dải các bóng đèn LED RGB và mỗi
addressable RGB LED sold by Adafruit. bóng có địa chỉ riêng do hãng Adafruit bán.
Individually addressable means you can program the Cá nhân mỗi bóng LED RGB có địa chỉ riêng có
fourth LED in the strip to do one thing, while the nghĩa là bạn có thể lập trình đèn LED thứ tư sáng
tenth one does something else, and all of the others trong dải để làm một việc, trong khi đèn thứ mười
do a third thing. làm việc khác và tất cả các đèn khác làm việc thứ ba.

RGB means each light is made of a red LED, a green


LED, and a blue LED. The color that the LED will RGB có nghĩa là mỗi đèn được tạo bởi một đèn LED
appear depends on how brightly each of those three màu đỏ, một đèn LED xanh lục và một đèn LED
colors is powered. Neopixels can appear to be all the xanh lam. Màu sắc mà đèn LED sẽ xuất hiện phụ
colors of the rainbow and also white. thuộc vào mức độ sáng của từng màu trong số ba
The neopixels have three connections: a power, a màu đó. Neopixels có thể có tất cả các màu của cầu
ground, and a digital pin connection. They are based vồng và cũng có thể là màu trắng.
specifically on the WS2812, WS2811, and SK6812 Các neopixel có ba kết nối: nguồn(+), nối đất GND
LED drivers. và kết nối chân số DI. Chúng đặc biệt dựa trên trình
điều khiển LED WS2812, WS2811 và SK6812.
How Do You Connect a Neopixel to Your Làm thế nào để bạn kết nối Neopixel với bộ xử lý
Processor? của bạn?
Each neopixel has six points of connection. On one Mỗi neopixel có sáu điểm kết nối. Ở một đầu, nó có
end it has three pins that are for ground, digital pin ba chân dành cho nối đất GND, chân kỹ thuật số DI
in, and 5 volt power, on the other end it has three và nguồn 5 volt VCC, ở đầu kia nó có ba chân dành
pins that are for ground, digital pin out, and 5 volt cho nối đất, chân kỹ thuật số và nguồn 5 volt. Khi
power. When you connect your circuit makes sure bạn kết nối mạch, hãy đảm bảo rằng bạn đã kết nối
you connect the pin on your processor to the input chân cắm trên bộ xử lý với chân cắm đầu vào. Chân
pin. The output pin is connected to the next neopixel đầu ra được kết nối với neopixel tiếp theo trong
in the sequence. You cannot light a neopixel without chuỗi LED. Bạn không thể thắp sáng neopixel nếu
a microprocessor. không có bộ vi xử lý.
Chú ý: Cần cài đặt thư viện Adafruit_NeoPixel
Circuit Code Arduino
#include "Adafruit_NeoPixel.h"
#define pinLed 9
#define ledNum 8
Adafruit_NeoPixel dayLed(ledNum, pinLed,
NEO_GRB + NEO_KHZ800);
void setup()
{ dayLed.begin();
dayLed.show();
dayLed.setBrightness(70);
}
void loop() {
dayLed.setPixelColor(0, 255, 0, 0);
dayLed.show(); delay(1000);
dayLed.setPixelColor(1, 0, 255, 0);
dayLed.show(); delay(1000);
dayLed.setPixelColor(2, 0, 0, 255);
dayLed.show(); delay(1000);
for(int i = 7; i>2; i--)
{ dayLed.setPixelColor(i,
random(0,255),
random(0,255), random(0, 255));
dayLed.show();delay(500);
}
dayLed.clear(); }
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#12 L298N DC Motor Driver Module with Arduino
Sử dụng module L298N điều khiển 2 động cơ DC bằng Arduino
If you’re planning on assembling your new robot, Nếu bạn đang có kế hoạch lắp ráp rô bốt mới của
you’ll eventually want to learn how to control DC mình, cuối cùng bạn sẽ muốn tìm hiểu cách điều
motors. The easiest and affordable way to control DC khiển động cơ DC. Cách dễ nhất và giá cả phải chăng
motors is to interface the L298N motor driver with để điều khiển động cơ DC là giao diện trình điều
the Arduino. It can control both the speed and the khiển động cơ L298N với Arduino. Nó có thể điều
spinning direction of two DC motors. khiển cả tốc độ và chiều quay của hai động cơ DC.
The L298N Motor Driver is a controller that uses an Bộ điều khiển động cơ L298N là bộ điều khiển sử
H-Bridge to easily control the direction and speed of dụng cầu H để dễ dàng điều khiển hướng và tốc độ
up to 2 DC motors. This tutorial will show you how của tối đa 2 động cơ DC. Hướng dẫn này sẽ chỉ cho
to use it. bạn cách sử dụng nó.
Module L298N Control 2 Motors DC Module L298 có thể điều khiển cùng lúc 2 motor DC.
chạy cùng chiều, đảo chiều và dùng các chân PWM
để điều khiển tốc độ động cơ DC nhanh hoặc chậm.
VCC: Cấp điện cho motor DC từ 5V – 35V
Chân 5V cấp nguồn cho mạch logic.
Chân GND nối với nguồn âm.
Kết nối với Arduino:
IN1->9; IN2->8 -> Điều khiển Motor A
IN3->7; IN4->6 -> Điều khiển Motor B
Điều khiển
IN1=LOW, IN2=HIGH => Motor A quay.
IN1=HIGH, IN2=LOW => Motor A quay ngược lại.
Nếu IN1 & IN2 cùng LOW hoặc cùng HIGH thì
Lưu ý: nếu bạn sử dụng nguồn 5V chung với mạch motor A tắt không quay. Tương tự cho motor B.
logic thì phải gắn jumper vào chỗ 12V, còn dùng Muốn cho điều chỉnh tốc độ thì dùng analogWrite()
nguồn riêng thì gỡ nó ra.
Code Arduino digitalWrite(IN1, LOW);
int IN1 = 9; //PWM digitalWrite(IN2, LOW);
int IN2 = 8; Serial.println("Motor A stop 1s vi
int IN3 = 7; //PWM IN1=LOW, IN2=LOW");
int IN4 = 6; delay(1000);
void setup(){ digitalWrite(IN1, HIGH);
Serial.begin(9600); digitalWrite(IN2, LOW);
pinMode(IN1, OUTPUT); Serial.println("Motor A quay dao chieu
pinMode(IN2, OUTPUT); 5s");
pinMode(IN3, OUTPUT); delay(5000);
pinMode(IN4, OUTPUT); digitalWrite(IN1, HIGH);
} digitalWrite(IN2, HIGH);
void loop(){ Serial.println("Motor A stop 1s vi
digitalWrite(IN1, LOW); IN1=HIGH, IN2=HIGH");
digitalWrite(IN2, HIGH); delay(1000);
Serial.println("Motor A quay 5s."); }
delay(5000);
Speed: You can change the speed with the EN pins Tốc độ: Bạn có thể thay đổi tốc độ bằng các chân EN
using PWM. ENA controls the speed of the left bằng PWM. ENA điều khiển tốc độ của động cơ bên
motor and ENB controls the speed of the right motor. trái và ENB điều khiển tốc độ của động cơ bên phải.
You can attach the control pins to any digital (or Mặc định ENA và ENB được jump về HIGH nên tốc
even analog) pins. However, for motor speed control, độ motor đạt 100%. Nếu bạn muốn tốc độ theo ý thì
the motor enable pins must be attached to a PWM dùng hàm analogWrite(ENA_Pin, 0  x  255 ) và
enabled pin. gỡ jumper ra, kết nối nó với pin của Arduino.
Bài tập 12.1
Bạn hãy điều khiển cả 2 motor A, B quay cùng chiều 5s, rồi đảo chiều lại 5s, rồi 2 motor quay ngược nhau 5s
và tiếp tục đảo ngược lại 5s. Đồng thời in nó ra cửa sổ serial monitor để tiện theo dõi.
Bài tập 12.2
Hãy kết hợp với cảm biến hồng ngoại IR Sensor, để khi đưa tay gần lại thì motor tắt, đưa tay ra xa thì motor
quay.
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#13 BMP280: Measure Temperature, Pressure and Altitude
(BMP280 cảm biến đo nhiệt độ, áp suất khí quyển và độ cao)
Hello, and welcome to this tutorial where I use the Xin chào và chào mừng bạn đến với hướng dẫn này,
BMP280 to measure temperature, pressure and also nơi tôi sử dụng BMP280 để đo nhiệt độ, áp suất và cả
altitude, with the help of an Arduino UNO board. độ cao, với sự trợ giúp của bảng Arduino UNO.

BMP280 is a pressure, temperature, and approximate BMP280 là cảm biến áp suất, nhiệt độ và độ cao gần
altitude sensor developed by Bosch Sensortec. It is đúng do Bosch Sensortec phát triển. Nó được sử
ideally used for environment-related applications and dụng lý tưởng cho các ứng dụng liên quan đến môi
this sensor can also be used for Prosthetic related trường và cảm biến này cũng có thể được sử dụng
applications where pressure is a very critical cho các ứng dụng liên quan đến Chân giả (giúp người
parameter to work with. It is further useful in drones khuyết tật), nơi áp suất là một thông số rất quan trọng
where pressure, temperature, and altitude can be để làm việc. Nó hữu ích hơn nữa trong máy bay
useful to monitor and make further observations. không người lái, nơi áp suất, nhiệt độ và độ cao có
thể hữu ích để theo dõi và quan sát thêm.
Kết nối với Arduino
VCC -> 3.3V ; GND -> GND
SDA -> A4; SCL ->A5
BMP280
I2C Interface Giao diện I2C
The module features a simple two-wire I2C interface Mô-đun có giao diện I2C hai dây đơn giản có thể dễ
which can be easily interfaced with any dàng giao tiếp với bất kỳ bộ vi điều khiển nào bạn
microcontroller of your choice. chọn.
The default I2C address of the BME280 module is Địa chỉ I2C mặc định của mô-đun BMP280 là 0x76.
0x76
What is I2C? How does it work? I²C là một loại bus nối tiếp hai chiều với hai dây tín
hiệu được phát triển bởi hãng sản xuất linh kiện điện
tử Philips cho quá trình giao tiếp giữa các IC. Truyền
thông với bus I²C là quá trình truyền thông đồng bộ
nối tiếp, hỗ trợ nhiều master và slave trên đường
truyền. Mỗi thiết bị tham gia vào kết nối I2C đều có
một địa chỉ. Ví dụ: 0x76; 0x77; 0x36…
Chú ý: Vào Tool/Manage Libraries tìm và cài thư
viện Adafruit BMP 280.
Circuit Code Arduino
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C
void setup() {
Serial.begin(115200);
bmp.begin(0x76);
}
void loop() {
Serial.println("Nhiet do:
"+String(bmp.readTemperature())+"*C");
Serial.println("Ap suat:
"+String(bmp.readPressure())+" Pa");
Serial.println("Do cao:
"+String(bmp.readAltitude(1013.25))+" m");
Serial.println();
delay(2000);
}
Sau khi code xong, upload vào Arduino và mở Serial Monitor lên xem thông tin.
Có thể vào Examples/Adafruit BMP280 Library/bmp280test để xem ví dụ tham khảo.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#14 Servo Motor Control with an Arduino
Servo motors are great devices that can turn to a Động cơ servo là thiết bị tuyệt vời có thể quay đến
specified position. một vị trí xác định.
Usually, they have a servo arm that can turn 180 Thông thường, chúng có một cánh tay servo có thể
degrees. Using the Arduino, we can tell a servo to go quay 180 độ. Sử dụng Arduino, chúng ta có thể yêu
to a specified position and it will go there. As simple cầu một servo đi đến một vị trí được chỉ định và nó
as that! sẽ đến đó. Đơn giản vậy thôi!
Servo motors were first used in the Remote Control Động cơ servo lần đầu tiên được sử dụng trong đồ
(RC) world, usually to control the steering of RC cars chơi Điều khiển từ xa (RC), thường để điều khiển lái
or the flaps on a RC plane. With time, they found xe ô tô RC hoặc cánh đảo gió máy bay RC. Cùng với
their uses in robotics, automation, and of course, the thời gian, người ta đã tìm thấy công dụng của chúng
Arduino world. trong lĩnh vực robot, tự động hóa và tất nhiên, trong
thế giới Arduino.

Here we will see how to connect a servo motor and Ở đây chúng ta sẽ xem cách kết nối động cơ servo và
then how to turn it to different positions. sau đó là cách xoay nó sang các vị trí khác nhau.
We will need the following things: Chúng ta sẽ cần những thứ sau:
 An Arduino board connected to a computer  Bảng Arduino được kết nối với máy tính qua
via USB USB
 A servo motor  Một động cơ servo
 Jumper wires  Dây nhảy
How Servo Motors Work? Động cơ Servo hoạt động như thế nào?
You can control the servo motor by sending a series Bạn có thể điều khiển động cơ servo bằng cách gửi
of pulses to the signal line. A conventional analog một loạt xung tới đường tín hiệu. Một động cơ servo
servo motor expects to receive a pulse roughly every tương tự thông thường dự kiến sẽ nhận được một
20 milliseconds (i.e. signal should be 50Hz). xung khoảng 20 mili giây một lần (tức là tín hiệu
The length of the pulse determines the position of the phải là 50Hz).
servo motor. Độ dài của xung xác định vị trí của động cơ servo.
A Servo motor working timing diagram: Sơ đồ thời gian làm việc của động cơ Servo:
 If the pulse is high for 1ms, then the servo
angle will be zero. (Nếu xung cao trong 1ms,
thì góc servo sẽ bằng không.)
 If the pulse is high for 1.5ms, then the servo
will be at its center position. (Nếu xung cao
trong 1,5ms, thì servo sẽ ở vị trí trung tâm
của nó tứ 90 độ)
 If the pulse is high for 2ms, then the servo
will at 180 degrees. (Nếu xung cao trong 2ms,
thì servo sẽ ở 180 độ)
 Pulses ranging between 1ms and 2ms will
move the servo shaft through the full 180
degrees of its travel. (Các xung dao động từ
1ms đến 2ms sẽ di chuyển trục servo qua toàn Chú ý:
bộ hành trình 180 độ của nó) Thời gian của các xung đôi khi có thể thay đổi với
Note: The duration of the pulses may sometimes các nhãn hiệu sản xuất khác nhau và chúng có thể là
vary with different brands and they can be 0.5ms for 0,5ms đối với 0 độ và 2,5ms đối với 180 độ.
0 degrees and 2.5ms for 180 degrees.
Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
Connet to Arduino Kết nối với Arduino
GND is a common ground for both the motor and GND là điểm chung cho cả động cơ và logic -> GND
logic -> GND 5V là điện áp dương cấp nguồn cho servo -> 5V.
5V is a positive voltage that powers the servo ->5V. Chân điều khiển nhận tín hiệu xung vào ->Chân
Control is input for the control system ->Digital Pin Arduino.
Note: The color of the wires varies between servo Lưu ý: Màu sắc của dây khác nhau giữa các động cơ
motors, but the red wire is always 5V and GND will servo, nhưng dây màu đỏ luôn là 5V và GND sẽ có
either be black or brown. The control wire is usually màu đen hoặc nâu. Dây điều khiển thường có màu
orange or yellow. cam hoặc vàng
Circuit Code Arduino
#include <Servo.h>
int servoPin = 9;
Servo MyServo_1;
void setup() {
MyServo_1.attach(servoPin);
}
void loop()
{ MyServo_1.write(0);
delay(1000);
MyServo_1.write(90);
delay(1000);
MyServo_1.write(180);
delay(1000);
}

Chú ý: Để dễ dàng điều khiển động cơ Servo thì chúng ta cần nhúng thư viện Servo vào. (Chọn Tool/Mange
Libraries và tìm từ khóa Servo.

Bài tập 13.1


Sử dụng một chiết áp, điều khiển servo xoay theo một góc nào đó khi bạn xoay chiết áp.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#15 Calibrate Sensor Input Define a maximum and minimum for expected analog sensor values
Hiệu chỉnh đầu vào cảm biến, Xác định giá trị tối đa và tối thiểu cho các giá trị cảm biến analog

This example demonstrates one techinque for Ví dụ này minh họa một kỹ thuật để cân chỉnh đầu
calibrating sensor input. The board takes sensor vào cảm biến. Arduino nhận các kết quả đọc của cảm
readings for five seconds during the startup, and biến trong năm giây khi khởi động và theo dõi các
tracks the highest and lowest values it gets. These giá trị cao nhất và thấp nhất mà nó nhận được. Các số
sensor readings during the first five seconds of the đọc cảm biến này trong năm giây đầu tiên của quá
sketch execution define the minimum and maximum trình thực hiện sketch xác định giá trị tối thiểu và tối
of expected values for the readings taken during the đa của các giá trị mong đợi cho các số đọc được thực
loop. hiện trong vòng lặp.
Hardware Required Yêu cầu phần cứng
Arduino board, 1 LED, analog sensor (a Bo mạch Arduino, 1 đèn LED, cảm biến tương tự
photoresistor will do), 10k ohm resistor, 220 ohm (một điện trở quang sẽ làm được), điện trở 10k ohm,
resistor, hook-up wires, breadboard điện trở 220 ohm, dây nối, breadboard
Circuit Arduino Code
const int sensorPin = A0;
const int ledPin = 9;
int sensorValue = 0;
int sensorMin = 1023;
int sensorMax = 0;
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
Schematic }
digitalWrite(13, LOW);
}
void loop() {
sensorValue = analogRead(sensorPin);
sensorValue = constrain(sensorValue,
sensorMin, sensorMax);
sensorValue = map(sensorValue, sensorMin,
sensorMax, 0, 255);
analogWrite(ledPin, sensorValue);
}

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
#16 MỘT SỐ BÀI TẬP CUỐI KHÓA HỌC ARDUINO CĂN BẢN
BÀI TẬP 16.1: Điều khiển đèn chiếu sáng tự động bật/tắt theo cường độ ánh sáng mặt trời
Vấn đề hiện tại:
Hệ thống đèn chiếu sáng đường hoặc nơi công cộng, hằng ngày phải bật khi trời
tối và tự động tắt khi trời sáng.
Nếu dùng bộ cài đặt hèn giờ thì có những tháng này dài hơn đêm, sẽ không phù
hợp dẫn đến lãng phí điện.
Giải pháp thay thế:
Hãy thiết kế một mô hình hệ thống điều khiển bật / tắt hệ thống đèn chiếu sáng
dựa vào cường độ ánh sáng của mặt trời.
Khi trời bắt đầu tối, ánh sáng yếu dần và đến một ngưỡng nào đó thì đèn tự động bật. Khi trời sáng mặt trời lên,
ánh sáng tăng dần và tới ngưỡng nào đó thì đèn tự động tắt.
Linh kiện vật tư cần thiết:
1 Board Arduino, 1 Module ánh sáng, 1 Rờ le 5V điều khiển 220V, 1 bóng đèn 220V, 1 breadboard và dây
cắm…
Ước lượng chi phí: 100k (không kể Arduino)
Chú ý: Đảo bảo an toàn tuyệt đối về điện, cần có người quan sát, theo dõi hướng dẫn khi thực hành.
Gợi ý sơ đồ hoạt động:

BÀI TẬP 16.2 Đèn tự động sáng khi có người di chuyển


Vấn đề hiện tại:
Phòng làm việc, nhà kho hay nhà vệ sinh… Có những lúc vào buổi tối, khi bạn đi vào đó phải tìm công tắc bật
đèn rất khó khăn. Sẽ tuyệt vời hơn nếu hệ thống đèn chiếu sáng tự động bật sáng khi có người đi vào và tự động
tắt khi không có người ở đó.

Giải quyết vấn đề:


Em hãy thiết một mạch điều khiển tự động bằng cách sử dụng cảm biến chuyển động HC-SR501 PIR và một
vi điều khiển, để phát hiện trong phòng còn người chuyển động hay không. Nếu sau một khoảng thời gian mà
không còn người hoạt động trong phòng thì hệ thống đèn tự động tắt.
Linh kiện vật tư cần thiết:
1 Board Arduino, 1 Cảm biến HC-SR501 PIR , 1 Rờ le 5V điều khiển 220V, 1 bóng đèn 220V, 1 breadboard và
dây cắm…
Ước lượng chi phí: 150k (không kể Arduino)
Chú ý: Đảo bảo an toàn tuyệt đối về điện, cần có người quan sát, theo dõi hướng dẫn khi thực hành.

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc
BÀI TẬP 16.3 Xe dò line tự động
Vấn đề hiện tại
Tại một số xưởng sản xuất người ta cần có nhu cầu di chuyển các chi tiết máy móc, nguyên vật liệu một cách tự
động từ địa điểm A đến địa điểm B. Nếu phải thuê nhân công khuân vác hoặc điều khiển xe chuyên chở thì tốn
kém. Sẽ tuyệt vời hơn nếu có một thiết bị tự động làm điều này.

Giải pháp giải quyết vấn đề:


Em hãy ứng dụng 2 cảm biến hồng ngoại, kết hợp với module điều khiển động cơ DC và 1 con vi điều khiển và
một só linh kiện khác để thiết kế mô hình xe chuyển động bằng cách dò theo 1 line được chỉ định trước.
Linh kiện vật tư cần thiết:
1 Arduino, 2 motor DC kèm bánh xe, 1 bánh xe vô hướng, 1 module điều khiển DC như L298N, 2 cảm biến
hồng ngoại dò line, 1 pin nguồn điện 5V – 9V, khung xe robot…
Ước lượng chi phí: 350k (không kể Arduino)

BÀI TẬP 16.4 Robot tránh vật cản


Vấn đề hiện tại
Khi điều khiển xe cộ và các phương tiện di chuyển khác. Đôi khi vì khuất tầm nhìn hoặc vì mệt mỏi mà người
điều khiển không kịp thời phát hiện vật cản, chướng ngại vật phía trước hoặc xung quanh. Thật tuyệt vời nếu có
hệ thống cảm biến phát hiện vật cản, chướng ngại vật và cảnh báo cho người lái.
Giải pháp giải quyết vấn đề
Em hãy sử dụng cảm biến siêu âm ultrasonic HC-SR04, động cơ Servo để thiết kế một robot tự động di chuyển
và tránh vật cản.
Linh kiện vật tư cần thiết:
1 Arduino, 2 motor DC kèm bánh xe, 1 bánh xe vô hướng, 1 module điều khiển DC như L298N, 1 cảm biến
siêu âm ultrasonic HC-SR04, 1 động cơ Servo, 1 pin nguồn điện 5V – 9V, khung xe robot…
Ước lượng chi phí: 400k (không kể Arduino)

Tài liệu học Arduino căn bản – Biên soạn: Thầy Lê Đức Quốc

You might also like