Professional Documents
Culture Documents
Tai Lieu Arduino Starter Kit 2021
Tai Lieu Arduino Starter Kit 2021
s t a r t e rk i t 2 0 2 1
để tải về.
01
Bước 2: Sau khi tải về, ta cho chạy file mới
Chọn I Agree
02
Chọn nơi lưu trữ và chọn Install
03
Chọn Install
04
Viết và nạp một chương trình cho Arduino Uno
Giao diện Arduino khi mới khởi động
05
Soạn một chương trình đơn giản: Hiển thị chữ “Hello Word” ra Serial:
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Hello world");
delay(1000);
}
06
Chọn board Arduino Uno:
07
Nhấn Upload để nạp code, màn hình báo Done
uploading là hoàn thành:
08
Giới thiệu cơ bản về Arduino Uno
Power:
• LED: Chân D13 của Arduino được kết nối với 1 led. Khi
chân có giá trị mức cao (HIGH) thì LED sẽ sáng và mức
thấp LED sẽ tắt
• VIN: dùng để cung cấp nguồn khi không dùng USB
hoặc các nguồn khác, điện áp 7-12VDC
• 5V: Chân này xuất ra nguồn 5V
• 3V3: Nguồn cung cấp 3.3V (dòng điện trên chân này tối
đa là 50mA).
• GND: Là chân mang điện cực âm trên board.
• IOREF: chân này dùng để cung cấp tham chiếu điện áp
mà bộ vi điều khiển hoạt động.
• Reset: dùng để kết nối với nút reset ra bên ngoài.
10
Chức năng các chân đặc biệt:
1.ĐÈN LED
Đèn led hay còn gọi là điốt phát quang, là một biến thể
của diode cơ bản, nó xác định độ chênh lệch điện áp
nhỏ nhất giữa Anode (+ ) và Cathode (-), led khác
diode ở chỗ là tạo ra ánh sáng khi dòng điện
đi qua. Đèn led cần được kết nối đúng âm dương của
nguồn điện để hoạt động. Đèn led có rất nhiều màu
sắc khác nhau: đỏ, vàng, xanh lá, xanh dường,
trắng…
1
Điện áp: Mỗi đèn led đều có một mức điện áp
đầu vào nhất định (led 5mm dao động 1.9 –
3.2 Vol), nếu cung cấp không đủ đèn sẽ
không phát sáng hoặc cung cấp nguồn lớn
hơn thì cần phải sử dụng trở để giảm điện thế
vào led. Nếu bạn mắc nhiều đèn led nối tiếp,
song song thì cần phải tính toán mức điện áp,
dòng điện cung cấp cho tất cả các led.
13
Thự c hà nh: Điề u
khiể n đè n LED
qua Arduino
Chuẩn bị phần cứng:
ArduinoUno
8 đèn led (màu nào cũng
được) Testboard cắm
Dây cắm
8 điện trở 220 Ohm
Kết nối theo sơ đồ sau:
1
Code điều khiển bật tắt lần lượt 8 đèn LED
void loop()
{
digitalWrite(2,HIGH); //Bật đèn led chân số 2
delay(500); //Thời gian trễ 500ms
digitalWrite(3,HIGH); //Bật đèn led chân số 3
delay(500);
digitalWrite(4,HIGH); //Bật đèn led chân số 4
delay(500);
digitalWrite(5,HIGH); //Bật đèn led chân số 5
delay(500);
digitalWrite(6,HIGH); //Bật đèn led chân số 6
delay(500);
digitalWrite(7,HIGH); //Bật đèn led chân số 7
delay(500);
digitalWrite(8,HIGH); //Bật đèn led chân số 8
delay(500);
15
digitalWrite(9,HIGH); //Bật đèn led chân số 9
delay(500);
digitalWrite(9,LOW); //Tắt đèn led chân số 9
delay(500);
digitalWrite(8,LOW); //Tắt đèn led chân số 8
delay(500);
digitalWrite(7,LOW); //Tắt đèn led chân số 7
delay(500);
digitalWrite(6,LOW); //Tắt đèn led chân số 6
delay(500);
digitalWrite(5,LOW); //Tắt đèn led chân số 5
delay(500);
digitalWrite(4,LOW); //Tắt đèn led chân số 4
delay(500);
digitalWrite(3,LOW); //Tắt đèn led chân số 3
delay(500);
digitalWrite(2,LOW); //Tắt đèn led chân số 2
delay(500);
}
16
CÁ CH2 :SỬ DỤ NG
/*
Tắt lần lượt các đèn LED
*/
for (int i = 0;i < TongLed; i += 1)
{ digitalWrite(led[i],LOW); // Tắt đèn led
delay(500); // Thời gian trễ giữa các lần là
500ms
}
}
17
2. BIẾN TRỞ
Biến trở là
một dạng điện trở có thể thay đổi giá trị, ví dụ điện
trở 10kΩ thì giá trị của nó chỉ là 10kΩ, còn biến trở
10kΩ là có thể thay đổi từ 0 ~ 10kΩ.
Cấu tạo của biến trở rất đơn giản bao gồm: con chạy,
cuộn dây được làm bằng hợp kim có điện trở công
suất lớn, chân ngõ ra 3 chân.
Biến trở được ứng dụng rộng rãi trong các mạch điện
tử, được dùng để điều chỉnh sai số, điều chỉnh phân áp,
phân dòng trong mạch… Ví dụ dùng để tăng giảm âm
lượng trong các mạch âm thanh, tăng giảm độ sáng của
đèn…
18
Thự c hà nh: Đọ c
giá trị biế n trở
1
Code đọc giá trị điện áp qua biến trở
void setup ()
{
Serial.begin(9600); //Mở cổng Serial ở baudrate 9600
}
void loop()
{
int giatri = analogRead(A2); // đọc giá trị điện áp ở
chân A2
Serial.println(giatri); // xuất giá trị đo được
int dienap;
dienap = map(giatri,0,1023,0,5000);
// chuyển thang đo của giatri từ 0-1023 sang 0-5000mV
Serial.println(dienap); // xuất giá trị điện áp đơn vị mV
delay(500); // thời gian trễ mỗi lần đọc là 500ms
}
20
Kết nối theo sơ đồ sau:
2
Điều chỉnh độ sáng của đèn led bằng
biến trở với Arduino
void setup ()
{
pinMode(led_pin, OUTPUT); // Khai báo chân nối led là
chân ngõ ra
}
void loop ()
{
output = analogRead(pot_pin); // đọc giá trị từ biến trở
led_value = map(output, 0, 1023, 0, 255); //chuyển từ 0-
1023 sang 0-255
analogWrite(led_pin, led_value); // cài giá trị độ sáng
của led
delay(10); // Thời gian trễ 10ms
}
22
3. NÚT NHẤN
Nút nhấn
là một dạng công tắc đơn giản để đóng ngắt các thiết bị
hoặc điều khiển một số hoạt động, quá trình của các
thiết bị điện tử, máy móc. Hầu hết, các nút nhấn được
làm bằng nhựa hoặc kim loại. Nút nhấn có 2 loại là nút
nhấn thường đóng và thường mở.
NGƯỜI TAĐỒN
RẰNGTỔNG
THỐNG MỸ
NGỒI NHÀ TRẮNG CŨNG CÓ THỂ NHẤN
NÚT PHÓNG TÊN LỬA HẠT NHÂN
23
Cấu tạo :
25
Code đọc trạng thái nút nhấn báo qua LED
int button =11; // Nút nhấn được kết nối với chân 11 của Arduino
int led = 2; // Led được kết nối với chân 2 của Arduino
void setup()
{
Serial.begin(9600); // Mở cổng Serial ở baudrate 9600
pinMode(button, INPUT); // Khai báo chân D11 ở trạng thái đọc
dữ liệu
pinMode(led,OUTPUT); // Khai báo chân nối led là ngõ ra
}
void loop()
{
int buttonStatus = digitalRead(button); //Đọc trạng thái button
if (buttonStatus == HIGH) // Nếu mà button bị nhấn
{
Serial.println("Nut dang duoc nhan");
digitalWrite(led,HIGH); // Đèn led sáng
}
else
{
digitalWrite(led,LOW); // ngược lại button không bị nhấn
Serial.println ("Nut chua duoc nhan");
}
}
26
4. CÒI BUZZ THỤ ĐỘNG
27
Thự c hà nh: Cò i buzz
thụ độ ng vớ i Arduino
28
Code: Một vài nốt nhạc tìm hiểu các câu lệnh
void setup(){
pinMode(3,OUTPUT); // Chân số 3 là ngõ ra
}
void loop(){
// tone(pin, frequency)
// tone(pin, frequency, duration)
// pin: chân kết nối, frequency: tần số sóng vuông,
//duration: thời gian phát nhạc (đơn vị mili giây)
tone(3,31);
delay(400);
tone(3,587);
delay(200);
tone(3,220,400);
delay(1000);
tone(3,1047,250);
delay(500);
tone(3,87,125);
delay(125);
noTone(3); // ngừng phát
nhạc delay(2000); // trễ 2s
}
29
5. QUANG TRỞ
Quang trở hoạt động dựa trên hiệu ứng quang điện
trong khối vật chất. Khi photon có năng lượng đủ
lớn đập vào, sẽ làm bật electron khỏi phân tử, trở
thành tự do trong khối chất và làm chất bán dẫn
thành dẫn điện. Mức độ dẫn điện tùy thuộc vào số
photon được hấp thụ.
Tùy thuộc chất bán dẫn mà quang trở phản ứng
khác nhau với bước sóng photon khác nhau. Quang
trở phản ứng trễ hơn điốt quang, cỡ 10ms, nên nó
tránh
được thay đổi nhanh của nguồn sáng.
30
Thự c hà nh: Sử dụ ng cầ u chia
á p để đọ c giá trị thay đổ i củ a
quang trở vớ i Arduino.
31
Chuẩn bị phần cứng:
Arduino Uno
Testboard cắm
Quang trở
Đèn led
Điện trở 10k
Điện trở 220 Ohm
32
Code bật tắt LED theo giá trị quang trở
int LED = 13; // Chân led được kết nối với chân 13 của Arduino
int val = A0; // Quang trở được nối với chân A0
void setup ( )
{
pinMode(LED,OUTPUT); // Khai báo chân led là ngõ ra
Serial.begin(9600); //Mở cổng Serial ở baudrate 9600
}
void loop ( )
{
val = analogRead(A0); // Đọc giá trị analog tại
chân A0 Serial.println(val); // Xuất giá trị đọc được
ra serial if(val<800) // Trời sáng
{
digitalWrite (LED,LOW); // Led tắt
}
else // Trời tối
{
digitalWrite (LED,HIGH); // Led bật
}
delay(10); // Thời gian trễ 10ms
}
33
5. CẢM BIẾN PHÁT HIỆN LỬA
34
Dây kết nối
35
Kết nối theo sơ đồ sau:
Kết nối theo sơ đồ sau:
35
Code: Đọc giá trị analog của cảm biến trên
Serial, xem sự thay đổi khi có lửa và không có
lửa
void setup(){
void loop(){
Sau khi đọc được giá trị cảm biến, các bạn
có thể chia khoảng giá trị ra có lửa và
không có lửa, dùng lệnh if để so sánh kết
quả, rồi kết nối thêm còi và đèn led để báo
động (tương tự như với cảm biến quang
trở).
36
7. CẢM BIẾN NGHIÊNG,
RUNG SW520D
NHÌN Ả NH
B I Ế TL U Ô N C Ấ U T Ạ O
37
Các cảm biến độ nghiêng kiểu công tắc bóng này
là một loại công tắc kỹ thuật số thay đổi trạng thái
từ mở sang đóng dựa trên độ nghiêng của nó so
với vector trường hấp dẫn của trái đất. Về mặt
điện, chúng hoạt động giống như nút nhấn mà
chúng ta đã sử dụng trước đây, nơi các tiếp điểm
dẫn điện khi công tắc đóng và không dẫn điện khi
nó mở ra. Về mặt cơ học, chúng thường bao
gồm một vỏ rỗng (thường là hình trụ) và một khối
tự do dẫn điện bên trong (điển hình là một đốm
thủy ngân hoặc một quả cầu kim loại lăn tròn);
trên một đầu của vỏ, cảm biến có hai hoặc nhiều
phần tử dẫn điện bị đoản mạch khi hướng của
cảm biến đến mức khối lượng tự do bên trong
cuộn và tiếp xúc vật lý với chúng.
Chuẩn bị phần
cứng: Arduino
Uno Testboard
cắm
Cảm biến nghiêng, rung SW520D
Dây cắm
Đèn led
39
KIỂ MTRACẢ MBIẾ N C
ÓNGHIÊNG HAY KHÔ
NG
const int ledPin = 13; // led được kết nối với chân số 13 Arduino
void setup ( )
{
pinMode(ledPin,OUTPUT); // Khai báo chân led là ngõ ra
pinMode(2,INPUT_PULLUP); // Khai báo chân 2 là ngõ vào, có
dùng
// trở treo của Arduino
}
void loop ( )
{
int a = digitalRead(2); // Đọc trạng thái chân số 2 lưu vào biến a
if(a == HIGH) // Nếu giá trị a = 1 tương ứng cảm biến đang
nghiêng
{
digitalWrite(ledPin,LOW); // Tắt Led
}
else // Nếu giá trị a = 0 tương ứng cảm biến không nghiêng
{
digitalWrite(ledPin,HIGH); // Bật Led
}
}
40
8. LED 7 ĐOẠN
41
Loại Cathode chung (các
chân " – " của led được
mắc chung với nhau)
Chân 3 và chân 8 là 2
chân được nối chung với
GND (chân âm của led),
các chân dương của led
được sử dụng riêng biệt,
cần thanh led nào sáng chỉ
cần cho cực dương của
led đó được kết nối với
nguồn dương.
Chân 3 và chân 8 là 2
chân được nối chung với
Vcc (chân dương của led),
các chân âm của led được
sử dụng riêng biệt, cần
thanh led nào sáng chỉ cần
cho cực âm của led đó
được kết nối với nguồn
âm.
42
Thự c hà nh: Hiể n thị
nhữ ng con số vớ i
LED 7 đoạ n
Arduino Uno
Led 7 đoạn (Cathode
chung) Điện trở 1K hoặc
220 Ohm Testboard cắm
Dây cắm
43
HIỂ NTHỊ LẦ NLƯ ỢT
SỐ 0 ĐẾN SỐ 9
delay(1000);
44
V ÀT Ư Ơ N GT Ự
VIẾTCÁCCONSỐCÒNLẠINÀO
SỐ CÒN LẠI
LÀ CỦA BẠN
45
CÁCH 2 : SỬ DỤNG VÒNG LẶP FOR
void Display_Segment(int);
// Lưu trữ tất cả giá trị cấu hình của led 7 đoạn
int digit[10][7] = {
{0,1,1,1,1,1,1}, // Số '0'
{0,0,0,1,0,0,1}, // Số '1'
{1,0,1,1,1,1,0}, // Số '2'
{1,0,1,1,0,1,1}, // Số '3'
{1,1,0,1,0,0,1}, // Số '4'
{1,1,1,0,0,1,1}, // Số '5'
{1,1,1,0,1,1,1}, // Số '6'
{0,0,1,1,0,0,1}, // Số '7'
{1,1,1,1,1,1,1}, // Số '8'
{1,1,1,1,0,1,1 }}; // Số '9'
void setup ()
{
for(int a=2; a<=8; a++){
pinMode(a, OUTPUT);
}
}
void loop()
{
for (int value = 0; value<=9; value++){ // Đếm từ 0 đến 9
delay(1000);
Display_Segment(value); //Chuyển giá trị cho hàm
}
delay(2000);
}
// Hàm lấy giá trị và hiển thị lên led 7 đoạn
void Display_Segment(int value)
{
int startPin= 2;
for (int x=6; x >= 0; x--)
{ digitalWrite(startPin, digit[value]
[x]); startPin++;
}
} 46
9. LED 7 ĐOẠN 4 SỐ
Arduino Uno
Led 7 đoạn 4 số (Cathode
chung) Điện trở 1K hoặc 220
Ohm Testboard cắm
Dây cắm
47
Kết nối theo sơ đồ sau:
'Cá c châ n chữ số D1, D2, D3 và D4 củ a led 7 đoạ n cầ n đượ c kết nố i vớ i cá c điện
48
Code hiển thị các số 1000 đến
9999 1 giây đếm lên 1 đơn vị
void loop ( )
{
static unsigned long timer = 0; // Khởi tạo biến timer
if (millis() - timer >= 1000) {
timer = millis();
sevseg.setNumber(num);
num++; // Đếm lên 1 đơn
vị
}
sevseg.refreshDisplay();
}
49
10.IC 74HC595
50
VCC: chân cấp nguồn dương cho
IC GND: chân nối với cực âm
OE Output Enable: chân có cho phép IC hoạt động hay
không, dùng để bật/tắt IC, IC được phép chạy khi chân ở
trạng thái LOW
MR Master Reclear: chân reset, khi chân này ở trạng thái
HIGH, bộ nhớ trong IC bị xóa
DS Serial Data Input: chân nhận dữ liệu vào IC
ST_CP Storage register clock pin: hay còn gọi là chân
LATCH, khi chân này từ trạng thái LOW chuyển sang
HIGH thì data trong IC sẽ được xuất ra các chân Q1 →
Q7 SH_CP Shift register clock pin: còn gọi là chân
CLOCK, khi từ trạng thái LOW → HIGH tức là một xung,
dữ liệu sẽ được dịch vào một bit theo trạng thái hiện tại
của của chân DS
Q1 → Q7 : tượng trưng cho 8 bit trong vùng nhớ IC.
nshopvn.com
CÓ SỬ DỤNG HÌNH ẢNH VÀ
NHIỀU NGUỒN THAM KHẢ
OTỪ INTERNE T
51
Thự c hà nh: Điều khiển nhiều LED tiết kiệm c
Cá c châ n 8, 11, 12 lầ n lượ t điều khiển cá c châ n LATCH, CLOCK, INPUT. Cá c châ
52
53
Code dùng IC 74HC595 điều khiển bật
tắt lần lượt 8 LED
int latchPin = 8; // Chân LATCH của IC được nối với chân số 8 của
Arduino int clockPin = 12; // Chân CLOCK của IC được nối với chân số
12 của Arduino int dataPin = 11; // Chân INPUT của IC được nối với
chân số 11 của Arduino
void setup()
{
pinMode(latchPin, OUTPUT); // Khai báo chân số 8 Arduino là ngõ ra
pinMode(clockPin, OUTPUT); // Khai báo chân số 12 Arduino là ngõ ra
pinMode(dataPin, OUTPUT); // Khai bào chân số 11 Arduino là ngõ ra
}
void loop()
{
for (int x = 1; x < 256; x = x << 1) // Dịch bit
{
digitalWrite(latchPin, LOW); // giữ trạng thái chân LATCH là LOW
shiftOut(dataPin, clockPin, MSBFIRST, x); // dịch bit
digitalWrite(latchPin, HIGH); // chuyển trạng thái chân LATCH sang
HIGH delay(500); // delay 0.5s cho lần chạy kế tiếp
}
}
Giải thích: Tạo vòng lặp có giá trị từ 1 đến 255, bước nhảy của vòng lặp này
là dịch qua 1 bit. Số x ban đầu là 1:
0000 0001: 2^0 = 1
0000 0010: 2^1 = 2
0000 0100: 2^2 = 4
0000 1000: 2^3 = 8
0001 0000: 2^4 =16
0010 0000: 2^5 = 32
0100 0000: 2^6= 64
1000 0000: 2^7 = 128
Do đó, giới hạn vòng lặp x khi bằng 256 thì dừng. Mỗi vòng lặp bắt đầu
bằng việc cài đặt cho chân LATCH có trạng thái là LOW. MSBFIRST,
LSBFIRST trong hàm shifOut có nghĩa là dịch bit từ bit bên phải nhất hoặc
từ bit bên trái nhất.
54
11.ĐỘNG CƠ SERVO 180 ĐỘ
Động cơ servo
55
Bên trong 1 servo thường bao gồm bốn thành phần
chính: động cơ DC, hộp số, biến trở và mạch điều khiển.
Động cơ DC có tốc độ cao và mô-men xoắn thấp nhưng
hộp số giảm tốc độ xuống đồng thời tăng mô-men xoắn
lên.
Chiết áp được gắn trên bánh răng cuối cùng hoặc trục
đầu ra, do đó động cơ cũng quay chiết áp, tạo ra một
điện áp liên quan đến góc tuyệt đối của trục đầu ra.
Trong mạch điều khiển, điện áp chiết áp này được so
sánh với điện áp đến từ đường tín hiệu. Nếu cần, bộ
điều khiển kích hoạt mạch cầu H tích hợp cho phép động
cơ quay theo hai hướng cho đến khi hai tín hiệu đạt mức
56
chênh lệch bằng không.
57
Thự c hà nh: Điều khiển Servo sử dụ ng Arduin
57
Code điều khiển góc quay của Servo
dùng Arduino
void setup ( )
{
myservo.attach(servoPin); // Cài đặt chức năng điều khiển servo cho chân
// servoPin
Serial.begin(9600); // Mở giao tiếp Serial ở baudrate 960
}
void loop ( )
{
int value = analogRead(bientro); // Đọc giá trị biến trở
// dùng để điều khiển góc quay cho servo
int servoPos = map(value, 0, 1023, 0, 180); // Chuyển giá trị analog (0-1023)
// đọc được từ biến trở sang số đo độ (0-180 độ )
58
12.CẢM BIẾN NHIỆT ĐỘ LM35
5 0
Thực hành: Đọc giá trị nhiệt độ môi trường bằng cảm biến L
6 0
Code: Đọc giá trị nhiệt độ môi trường hiển thị ra
Serial bằng cảm biến LM35 và Arduino
int sensorPin = A0; // chân analog kết nối tới cảm biến LM35
void setup()
{
Serial.begin(9600); //Khởi động Serial ở mức baudrate 9600
void loop()
{
//tính ra giá trị hiệu điện thế (đơn vị Volt) từ giá trị cảm
biến float voltage = reading * 5.0 / 1024.0;
// Cứ mỗi 10mV = 1 độ C, nên ta nhân giá trị cho 100 để ra được nhiệt đo
float temp = voltage * 100.0;
61
13. CẢM BIẾN THU HỒNG NGOẠI IR 1838 TS
63
Thực hành: Sử dụng cảm biến thu hồng ngoại IR 1838 để nh
63
Code: Nhận tín hiệu từ remote và hiển thị giá trị ra Serial
int RECV_PIN = 3; // Chân số 3 Arduino kết nối với chân tín hiệu của cảm biến IR
void setup()
{
Serial.begin(9600); // Khởi động Serial ở baudrate 9600
irrecv.enableIRIn(); // Bắt đầu nhận tín hiệu
}
void loop() {
if (irrecv.decode(&results)) { // Nếu nhận được tín hiệu
Serial.println(results.value, HEX); // Hiển thị kết quả ra Serial dưới mã Hex
irrecv.resume(); // Nhận giá trị tiếp theo
}
}
64
14. MÀN HÌNH LCD 1602
Màn hình LCD với khả năng hiển thị 2 dòng với mỗi
dòng 16 ký tự, có thể hiển thị các kí tự đa dạng (chữ,
số, kí tự đồ họa), được ứng dụng nhiều trong các
board mạch điện tử khác nhau.
NSHOPVN.COM
+84 902 64 39 78
Email : info@nshopvn.com
65
Sơ đồ chân của LCD:
66
Thực hành: Lập trình hiển thị chữ ra màn hình LCD 1602 với Arduin
67
Code: Hiển thị chữ ra
màn hình LCD
LiquidCrystal lcd(4, 6, 10, 11, 12, 13); //Khởi tạo với các chân lcd
void setup() {
lcd.begin(16, 2); // Khởi động màn hình loại 1602
lcd.print("Hello World"); // Hiển thị chữ "Hello World" ra màn
hình, mặc định sẽ hiển thị tại hàng 1, cột 1
}
void loop() {
// Lưu ý: hàng 1 là hàng thứ 2, hàng 0 là hàng thứ 1. Nó
đếm từ 0 từ không phải từ 1
lcd.setCursor(0, 1); // Sét vị trí tại cột 1 hàng 2
lcd.print("Xin chao cac ban"); // Hiển thị chữ "Xin chao cac ban"
ra màn hình
}
phù hợp.
68
BƯỚC ULN2003 + STEP 28YJ-48
6 9
Sơ đồ động cơ bước:
7 0
Thực hành: Điều khiển động cơ bước 28YJ-48 bằng Driver
7
Code: Điều khiển động cơ bước bằng ULN2003 và Arduino
int Pin1 = 8; // Khai báo chân 8 Arduino kết nối với chân IN1 của ULN2003
int Pin2 = 9; // Khai báo chân 9 Arduino kết nối với chân IN1 của ULN2003
int Pin3 = 10; // Khai báo chân 10 Arduino kết nối với chân IN1 của ULN2003
int Pin4 = 11; // Khai báo chân 11 Arduino kết nối với chân IN1 của ULN2003
int _step = 0;
int count =0;
void setup()
{
// Khai báo các chân là ngõ ra
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
}
void loop()
{
// Động cơ quay tới
int day2 = 1;
while (day2 < 2000) {
day2 += 1; //
quaytoi() ;
}
// Động cơ quay chiều ngược lại
int day1 = 1;
while (day1 <2000)
{ day1 += 1; //
quaylui() ;
}
}
72
void quaytoi() case 5:
{ digitalWrite(Pin1, HIGH);
// Hàm cấp xung điều khiển động cơ quay digitalWrite(Pin2, HIGH);
tới switch(_step){ digitalWrite(Pin3, LOW);
case 0: digitalWrite(Pin4, LOW);
digitalWrite(Pin1, LOW); break;
digitalWrite(Pin2, LOW); case 6:
digitalWrite(Pin3, LOW); digitalWrite(Pin1, HIGH);
digitalWrite(Pin4, HIGH); digitalWrite(Pin2, LOW);
break; digitalWrite(Pin3, LOW);
case 1: digitalWrite(Pin4, LOW);
digitalWrite(Pin1, LOW); break;
digitalWrite(Pin2, LOW); case 7:
digitalWrite(Pin3, HIGH); digitalWrite(Pin1, HIGH);
digitalWrite(Pin4, HIGH); digitalWrite(Pin2, LOW);
break; digitalWrite(Pin3, LOW);
case 2: digitalWrite(Pin4, HIGH);
digitalWrite(Pin1, LOW); break;
digitalWrite(Pin2, LOW); default:
digitalWrite(Pin3, HIGH); digitalWrite(Pin1, LOW);
digitalWrite(Pin4, LOW); digitalWrite(Pin2, LOW);
break; digitalWrite(Pin3, LOW);
case 3: digitalWrite(Pin4, LOW);
digitalWrite(Pin1, LOW); break;
digitalWrite(Pin2, HIGH); }
digitalWrite(Pin3, HIGH); _step--; if(_step>7)
digitalWrite(Pin4, LOW); {
break; _step=0;
case 4: }
digitalWrite(Pin1, LOW); if(_step<0){
digitalWrite(Pin2, HIGH); _step=7;
digitalWrite(Pin3, LOW); }
digitalWrite(Pin4, LOW); delay(1);
break; }
73
void quaylui() case 5:
{ digitalWrite(Pin1, HIGH);
// Hàm cấp xung điều khiển động cơ digitalWrite(Pin2, HIGH);
quay chiều ngược lại digitalWrite(Pin3, LOW);
switch(_step){ digitalWrite(Pin4, LOW);
case 0: break;
digitalWrite(Pin1, LOW); case 6:
digitalWrite(Pin2, LOW); digitalWrite(Pin1, HIGH);
digitalWrite(Pin3, LOW); digitalWrite(Pin2, LOW);
digitalWrite(Pin4, HIGH); digitalWrite(Pin3, LOW);
break; digitalWrite(Pin4, LOW);
case 1: break;
digitalWrite(Pin1, LOW); case 7:
digitalWrite(Pin2, LOW); digitalWrite(Pin1, HIGH);
digitalWrite(Pin3, HIGH); digitalWrite(Pin2, LOW);
digitalWrite(Pin4, HIGH); digitalWrite(Pin3, LOW);
break; digitalWrite(Pin4, HIGH);
case 2: break;
digitalWrite(Pin1, LOW); default:
digitalWrite(Pin2, LOW); digitalWrite(Pin1, LOW);
digitalWrite(Pin3, HIGH); digitalWrite(Pin2, LOW);
digitalWrite(Pin4, LOW); digitalWrite(Pin3, LOW);
break; digitalWrite(Pin4, LOW);
case 3: break;
digitalWrite(Pin1, LOW); }
digitalWrite(Pin2, HIGH); _step++; if(_step>7)
digitalWrite(Pin3, HIGH); {
digitalWrite(Pin4, LOW); _step=0;
break; }
case 4: if(_step<0){
digitalWrite(Pin1, LOW); _step=7;
digitalWrite(Pin2, HIGH); }
digitalWrite(Pin3, LOW); delay(1);
digitalWrite(Pin4, LOW); }
break;
74
15. LED MA TRẬN 8x8
75
Thực hành: Điều khiển đèn led ma trận 8x8 với Arduino
76
Code: Hiển thị hình trái tim trên led ma trận 8x8 với arduino
int R[] = {9,4,A2,6,10,A3,11,A5}; // Khai báo các chân nối với chân hàng của led
int C[] = {5,12,13,8,A4,7,3,2}; // Khai báo các chân nối với chân cột của led
unsigned char biglove[8][8] = //tạo hình trái tim lớn
{
1,1,1,1,1,1,1,1,
1,0,0,1,1,0,0,1,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,1,
1,1,0,0,0,0,1,1,
1,1,1,0,0,1,1,1,
};
unsigned char smalllove[8][8] = //tạo hình trái tim nhỏ
{
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,0,1,1,0,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
1,1,0,0,0,0,1,1,
1,1,1,0,0,1,1,1,
1,1,1,1,1,1,1,1,
};
void setup()
{
// Khai báo các chân là ngõ ra
for(int i = 0;i<8;i++)
{
pinMode(R[i],OUTPUT);
pinMode(C[i],OUTPUT);
}
}
77
void loop()
{
for(int i = 0 ; i < 100 ; i++)
{
Display(biglove); // Hiển thị trái tim lớn
}
for(int i = 0 ; i < 50 ; i++)
{
Display(smalllove); // Hiển thị trái tim nhỏ
}
}
void Display(unsigned char dat[8][8])
{
//Hàm hiển thị ra các led
for(int c = 0; c<8;c++)
{
digitalWrite(C[c],HIGH);
for(int r = 0;r<8;r++)
{
digitalWrite(R[r],dat[r][c]);
}
delay(1);
Clear(); // Tắt các led trống
}
}
void Clear()
{
// Hàm tắt các led
for(int i = 0;i<8;i+
+)
{
digitalWrite(R[i],HIGH);
digitalWrite(C[i],LOW);
}
}
78
Cách 2: Sử dụng led ma trận 8x8 với IC 74HC595
79
Code: Hiển thị trái tim bằng led ma trận 8x8 bằng IC
74HC595 và Arduino
int latchPin = 4; // chân 4 Arduino kết nối với chân LATCH của IC 74HC595
int clockPin = 5; // chân 5 Arduino kết nối với chân CLOCK của IC 74HC595
int dataPin = 3; // chân 3 Arduino kết nối với chân DATA của IC 74HC595
int pins [8] = {13,12,11,10,9,8,7,6}; // khai báo các chân cột của led
80
void loop() {
// Hiển thị từng hình trái tim
for (int k = 0; k < 1000; k++)
{ display_char(H);
}
for (int k = 0; k < 1000; k++)
{ display_char(h);
}
}
}
81
LINHKI Ệ NĐ I Ệ NT Ử
NSHOPVN.COM
NSHOP xin chân thành cảm ơn quý khách
hang đã tin tưởng và ủng hộ chúng tôi trong
suốt thời gian qua. Và mong rằng thời gian tới
đây NSHOP có cơ hội được đồng hành cùng
quý khách.
NSHOP xin cảm ơn các tác giả của cộng
đồng Arduino đã chia sẽ những bài viết để
chúng tôi có cơ hội tổng hợp, bổ sung và
biên soạn tài liệu này.
THÀNH CÔNG
trong mọi lĩnh vực