Professional Documents
Culture Documents
Huong Dan Su Dung Arduino-Nguyen Trung Tin-Hvhk
Huong Dan Su Dung Arduino-Nguyen Trung Tin-Hvhk
MC LC:
Li ni u.
Chng 1: Tng quan v Arduino Uno. ........................................................................... 1
1. Tng quan. ................................................................................................................. 1
2. S chn ca Arduino. .......................................................................................... 2
Chng 2: Ci t chng trnh Arduino IDE v Driver cho Arduino ....................... 4
1. Ci t chng trnh Arduino IDE ......................................................................... 4
2. Ci t Driver ............................................................................................................ 5
3. Arduino IDE .............................................................................................................. 7
Chng 3: Hng dn ci t bn m phng Arduino trn Proteus.......................... 11
Chng 4: Giao tip Arduino vi mt s linh kin in t. ......................................... 13
1) Project 1: Led nhp nhy. ...................................................................................... 13
2) Project 2 : n sng khi nhn phm. ..................................................................... 18
3) Project 3 : Led sng dn t led 1 n led 10 v ngc li. .................................. 21
4) Project 4 : Led sng dn t led 1 n led 10 v ngc li thi gian delay thay
i c. ......................................................................................................................... 24
5) Project 5: iu khin tc ng c bng PWM. ............................................... 27
6) Project 6 : iu khin ng c bng L293D. ........................................................ 31
7) Project 7: Giao tip Arduino vi LCD 16x2. ........................................................ 34
8) Project 8: Giao tip vi my tnh. .......................................................................... 47
9) Project 9. o nhit mi trng dng LM35D hin th LCD v Serial
Monitor. .......................................................................................................................... 49
10)
Li Ni u.
Arduino v ang c s dng rt rng ri trn th gii, v ngy cng chng t
c sc mnh ca chng thng qua v s ng dng c o ca ngi dng trong cng
ng ngun m. Arduino thc s gy sng gi trn th trng ngi dng trn ton
th gii trong vi nm gn y, s lng ngi dng cc ln v a dng vi trnh tri
rng t bc ph thng ln n i hc lm cho ngay c nhng ngi to ra chng phi
ngc nhin v mc ph bin.Tuy nhin ti Vit Nam Arduino vn cn cha c bit
n nhiu, cc ti liu lin quan n n vn cn rt hn ch. c s gii thiu v ch dn
ca thy Nguyn Thanh Dng, sau mt thi gian tm hiu tc gi bin son ti liu
HNG DN S DNG C BN ARDUINO. Trong ti liu ny cung cp cho bn
c mt lng kin thc c bn nht v Arduino cng nh cc ng dng thc t ca n.
Ti liu gm c cc ni dung sau:
Chng 1: Tng quan v Arduino Uno.
Chng 2: Ci t chng trnh Arduino IDE v Driver cho Arduino.
Chng 3: Hng dn ci t bn m phng Arduino trn Proteus.
Chng 4: Giao tip Arduino vi mt s linh kin in t.
Khi bin son, tc gi tham kho mt s ti liu nc ngoi ti liu va m
bo v mc ni dung va c th tip cn c vi bn c.
Khi vit tc gi c gng ti liu c hon chnh nht song chc chn khng
trnh khi sai st, v vy rt mong nhn c s gp ca bn c.
Mi kin ng gp xin lin h: trungtin.vaa@gmail.com
Tc gi
SV: NGUYN TRUNG TN
ATmega328
in p cp ngun
5V
6-20V
40 mA
50 mA
Flash Memory
SRAM
2 KB (ATmega328)
EEPROM
1 KB (ATmega328)
Xung nhp
16 MHz
2. S chn ca Arduino.
a) USB (1).
Arduino s dng cp USB giao tip vi my tnh. Thng qua cp USB chng ta
c th Upload chng trnh cho Arduino hot ng, ngoi ra USB cn l ngun cho
Arduino.
b) Ngun ( 2 v 3 ).
Khi khng s dng USB lm ngun th chng ta c th s dng ngun ngoi thng
qua jack cm 2.1mm ( cc dng gia ) hoc c th s dng 2 chn Vin v GND cp
ngun cho Arduino.
Bo mch hot ng vi ngun ngoi in p t 5 20 volt. Chng ta c th cp
mt p ln hn tuy nhin chn 5V s c mc in p ln hn 5 volt. V nu s dng ngun
ln hn 12 volt th s c hin tng nng v lm hng bo mch. Khuyt co cc bn nn
dng ngun n nh l 5 n di 12 volt.
2. Ci t Driver
S dng cp USB kt ni Arduino vi my tnh, lc ny bn s thy n led power
ca bo sng. My tnh s nhn dng thit b v bn s nhn c thng bo:
Device driver software was not successfully installed
Chng ta s thy cnh bo mu vng thiu driver trn Arduino. Click chut phi trn
Arduino Uno icon sau chn Update Driver Software
Hnh 6: Driver
Click Next Windown t ng ci t driver, qua trnh ci t driver hon tt.
3. Arduino IDE
Arduino IDE l ni son tho code, kim tra li v upload code cho arduino
File menu:
Edit menu:
Tool memu:
10
Files
(hoc
x86)
\Labcenter
Electronics\Proteus
professional\Data\LIBRARY
Trong th vin ny h tr 5 loi board Arduino khc nhau trong gm c Arduino
Uno, MEGA, NANO, LILYPAD v UNO SMD v mt cm bin siu m Untrasonic.
11
Sau khi chp xong chng ta khi ng Proteus ln vo th vin linh kin bng cch
bm phm P v g t kho l ARDUINO chng s hin ra danh sch cc board hin c
y ti chn Arduino Uno.
12
To File Hex.
Chng ta cn phi c file Hex cung cp cho proteus v khi bm play chng trnh
mi hot ng c. Cch to file Hex trn Arduino IDE nh sau:
Click vo File chn Preferences.
14
15
16
delay(1000);
}
Tip theo ta s phn tch hm digitalWrite( ledPin, HIGH); lnh ny c ngha l
xut ra chn digital c tn l ledPin ( chn 9) mc cao ( HIGH), mc cao tng ng l 5
volt.
delay(1000);
Lnh ny to mt khong tr vi thi gian l 1 giy. Trong hm delay() ca IDE th
1000 tng ng vi 1 giy.
digitalWrite(ledPin, LOW);
Cng ging nh digitalWrite( ledPin, HIGH); lnh ny xut ra chn ledPin mc thp
(LOW) tc l 0 volt.
V tip tc l mt hm delay().
Nh vy chng ta c th thy chng trnh s thc hin tt sng led lin tc khng
ngng tr khi ta ngt ngun.
17
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
HC VIN HNG KHNG
18
digitalWrite(ledPin, HIGH); }
else {
digitalWrite(ledPin, LOW);
}}
Gii thch chng trnh :
Trc tin ta khai bo hai bin lu tr v tr chn ca phm nhn v led :
const int buttonPin = 2;
const int ledPin = 13;
Phm nhn s v tr chn s 2 v led chn s 13.
Ta khai bo mt bin trang thi ca phm nhn l int buttonState = LOW;
Trong hm setup() l khai ch (Mode) cho chn button v chn led. Chn button
l chn ng vo v chn led l chn ng ra.
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Trong hm loop() ta c cu lnh u tin l :
buttonState = digitalRead(buttonPin);
Cu lnh ny c ngha l gn gi tr c c t chn button (chn 2) cho bin
buttonState.. buttonState s c gi tr 0 nu nh button khng c nhn v c gi tr 1 nu
c nhn. Bng cch s dng hm digitalRead() ta c th kim tra c cc chn digital
ang mc cao hay thp.
Sau khi c c gi tr c chn buttonPin ( chn 2) ta kim tra xem l button c
nhn hay khng.
19
20
21
void loop() {
for (int x=0; x<10; x++) {
digitalWrite(ledPin[x], LOW);
}
digitalWrite(ledPin[currentLED], HIGH);
currentLED += direction;
22
23
Hnh 24: Led sng dn t led 1 n led 10 thi gian delay thay i c.
Code chng trnh.
int ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int direction = 1;
HC VIN HNG KHNG
24
int currentLED = 0;
int potPin = 0;
unsigned long changeTime;
void setup() {
for (int x=0; x<10; x++) {
pinMode(ledPin[x], OUTPUT);
}
}
void loop() {
int delayvalu= analogRead(potPin);
for (int x=0; x<10; x++) {
digitalWrite(ledPin[x], LOW);
}
digitalWrite(ledPin[currentLED], HIGH);
currentLED += direction;
25
delay(delayvalu);
u tin chng ta khai bo mt bin cha v tr chn bin tr kt ni l v tr A0
int potPin = 0 ;
c gi tr t chn analog A0 bng cu lnh analogRead(potPin) v gn n cho bin
delayvalu. Arduino c 6 chn u vo analog nh du t A0 n A5 vi 10 bit chuyn i
t analog sang digital (ADC). Ngha l chn analog c th c c cc gi tr in p t 0
n 5 volt tng ng vi cc s integer t 0 ( 0 volt ) n 1023 ( 5 volt ).
Trong project ny chng ta cn thit lp thi gian delay bng cch iu chnh bin
tr. Ta s dng cu lnh delay(delayvalu) to thi gian tr. Nu ta iu chnh bin tr
sao cho in p u vo chn analog l 5 volt th delayvalu s c gi tr l 1023 ( hn 1
giy), nu l 2,5 volt th delayvalu s l 511. Cc bn th iu chnh bin tr ta s thy thi
gian delay thay i hoc l nhanh dn hoc l chm dn.
Lu : i vi cc chn analog chng ta khng cn thit lp ch vo ra bng hm
pinMode nh cc chn digital. Mc nh cc chn analog l input.
26
27
28
29
30
31
void loop() {
Mspeed = analogRead(potPin)/4;
analogWrite (speedPin, Mspeed);
if (digitalRead(switchPin)) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH); }
else {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
}
}
Gii thch chng trnh:
Code ca project ny hon ton n gin. Trc tin ta nh ngha cc chn s s
dng trn arduino.
#define switchPin 2 // chn cng tc
#define motorPin1 8 // L293D Input 1
#define motorPin2 7 // L293D Input 2
#define speedPin 9 // L293D enable chn 1
#define potPin 0 // chn bin tr ni vi A0
Khai bo mt bin cha tc c t bin tr.
int Mspeed = 0;
Tip theo trong setup() ta thit lp ch vo, ra cho cc chn va nh ngha.
pinMode(switchPin, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
HC VIN HNG KHNG
32
pinMode(speedPin, OUTPUT)
Trong vng loop() chng ta c gi tr t bin tr kt ni vi chn A0 v gn n cho
Mspeed :
Mspeed = analogRead(potPin)/4;
Thit lp tc cho ng c bng cu lnh:
analogWrite (speedPin, Mspeed);
Kim tra xem cng tc c c bt hay khng, nu c th thit lp motorPin1 =
LOW v motorPin2 = HIGH ta s thy ng c quay ngc chiu kim ng h.
if (digitalRead(switchPin)) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH); }
v nu cng tc khng c bt th motor s quay cng chiu kim ng h:
else {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
}
33
34
scrollLeftDemo();
scrollRightDemo();
cursorDemo();
createGlyphDemo();
}
void introduce(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HV HANG KHONG VN");
lcd.setCursor(1,1);
lcd.print("HD SD ARDUINO");
delay (1000);
for(int x=0; x < 3; x++) {
lcd.noDisplay(); //tat hien thi
delay(300);
lcd.display(); // bat hien thi
delay(300);
}
}
void basicPrintDemo() {
lcd.clear(); // xoa man hinh
lcd.print("HV HANG KHONG");
delay(1000);
}
void displayOnOffDemo() {
lcd.clear();
lcd.print("BAT/TAT MAN HINH");
HC VIN HNG KHNG
35
36
lcd.setCursor(7,0);
lcd.print("Beginning");
lcd.setCursor(9,1);
lcd.print("Arduino");
delay(500);
for(int x=0; x<16; x++) {
lcd.scrollDisplayLeft(); // cuon man hinh sang trai
delay(250);
}
}
void scrollRightDemo() {
lcd.clear();
lcd.print("Scroll Right");
lcd.setCursor(0,1);
lcd.print("Demo");
delay(500);
lcd.clear();
lcd.print("Beginning");
lcd.setCursor(0,1);
lcd.print("Arduino");
delay(500);
for(int x=0; x<16; x++) {
lcd.scrollDisplayRight(); // cuon mang hinh sang phai
delay(250);
}
}
37
void cursorDemo() {
lcd.clear();
lcd.cursor(); // bat con tro
lcd.print("Cursor On");
delay(1000);
lcd.clear();
lcd.noCursor(); // tat con tro
lcd.print("Cursor Off");
delay(1000);
lcd.clear();
lcd.cursor();
lcd.blink(); // nhap nhay con tro
lcd.print("Cursor Blink On");
delay(1000);
lcd.noCursor();
lcd.noBlink(); // tat nhap nhay con tro
}
void createGlyphDemo() {
lcd.clear();
byte char1[8] = { //to ch
B01110,
B10001,
B00000,
B01110,
B10001,
B10001,
HC VIN HNG KHNG
38
B01110,
B00000
};
byte char2[8] = { //to ch
B01110,
B00001,
B00010,
B01110,
B10001,
B10001,
B01110,
B00000
};
lcd.createChar(0, char1); // tao ky t tu chnh 0
lcd.createChar(1, char2); // to k t tu chnh 1
for(int x=0; x<5; x++) {
lcd.setCursor(8,0);
lcd.write(byte(0)); // in ch ra mn hnh
delay(1000);
lcd.setCursor(8,0);
lcd.write(byte(1)); // in ch ra mn hnh
delay(1000);
}
}
39
40
41
42
43
44
lcd.noCursor(): tt con tr
lcd.blink(): nhp nhy con tr
Chng trnh con th 8: createGlyphDemo()
By gi chng ta s tm hiu cch t to ra mt k t khng thuc h thng m
ASCII, chng hn nh cc ch ci c du trong h thng ch ci ting vit nh , , , .
i vi LCD 16x2 c mi k t trong mt s c to thnh t 5x8 nh ( 5 ct,
8 dng)
to mt k t th chng ta dng mt mng gm 8 phn t, mi phn t l 1 byte,
nhng ch s dng 5 bit thp ca 1 byte biu din k t .
byte happy[8] = { //to ch
B01110,
B10001,
B00000,
B01110,
B10001,
B10001,
B01110,
B00000
};
byte sad[8] = { to ch
B01110,
B00001,
B00010,
B01110,
B10001,
HC VIN HNG KHNG
45
B10001,
B01110,
B00000
};
Sau khi to c k t mong mun ta s dng cu lnh:
lcd.createchar(num,data);
Trong :
num: l cc ch s t 0 n 7.
data: l cc mng cha k t ca chng ta.
Cu lnh ny s gn k t ta to vo mt ch s.
lcd.createChar(0, happy);
lcd.createChar(1, sad);
hin th mt k t ra mn hnh ta dng cu lnh lcd.write(data).
Hin th ch ra mn hnh LCD.
lcd.write(byte(0));
Hin th ch ra mn hnh LCD
lcd.write(byte(1));
46
void loop() {
if( Serial.available()>0)
char setupled = Serial.read();}
switch(setupled)
{
case '1' :
digitalWrite(ledpin,HIGH); break;
}
case '0':
{
digitalWrite(ledpin,LOW); break; }}}
HC VIN HNG KHNG
47
48
49
int scale = 1;
int buttonPin=8; //chan ket noi voi phim nhan
void setup() {
lcd.begin(16, 2); // khai bao su dung lcd 16x2
analogReference(INTERNAL);// khai bao dien ap tham chieu cho lm35
Serial.begin(9600);
pinMode(buttonPin, INPUT);
lcd.clear();
}
void loop() {
lcd.setCursor(0,0);
int sensor = analogRead(0); // doc du lieu tu lm35
int buttonState = digitalRead(buttonPin);
if (buttonState==1) {
scale=-scale;
lcd.clear();
}
switch (scale) {
case 1:
celsius(sensor);
break;
case -1:
fahrenheit(sensor);}
delay(250);
}
void celsius(int sensor) {
lcd.setCursor(0,0);
HC VIN HNG KHNG
50
51
if (temp>maxF) {maxF=temp;}
if (temp<minF) {minF=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxF);
lcd.write(B11011111);
lcd.print("F L=");
lcd.print(minF);
lcd.write(B11011111);
lcd.print("F ");
}
Gii thch chng trnh:
Tng quan: chng trnh s kim ta mc in p ng ra ca LM35 tng ng vi
nhit ca mi trng hin th trn Lcd v Serial Monitor. Nhit ca mi trng c
tnh bng C v F, nu nhn phm th s thay i hin th l C hay F.
Bt u chng trnh ta khai bo th vin Lcd v nh ngha chn cng nh cc bin
cn dng cho ton b chng trnh.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // dinh nghia chan cho LCD
int maxC=0, minC=100, maxF=0, minF=212;
int scale = 1;
int buttonPin=8;// chan ket noi voi phim nhan
Trong hm setup() chng ta cn quan tm ti cu lnh:
analogReference(INTERNAL);
Khai bo in p tham chiu cho b chuyn i ADC bn trong Arduino Uno l 1,1V
( y l gi tr in p tham chiu ni mc nh ca Arduino Uno).
tnh ton ng nhit mi trng chng ta cn lu nhng im sau:
B chuyn i ADC gm 10 bit tc l 1024 mc.
HC VIN HNG KHNG
52
1,1
1024.0,01
C = 0.10742188 0C.
53
54
servo1.write(angle);
delay(15);
}
Gii thch chng trnh:
Khai bo th vin cho Servo motor bng cu lnh.
#include <Servo.h>
Khai bo i tng c tn l servo1
Trong hm setup() ta nh ngha chn cho Servo:
servo1.attach(5) ;
Chn s 5 ca Arduino s ni vi chn input ca Servo motor.
c gi tr in p ca bin tr v gn n cho bin integer angle :
int angle = analogRead(0);
Gi tr c c t bin tr s nm trong khong 0 n 1023 v gc quay ca Servo
t 0 n 1800 ta s dng cu lnh :
0
55
56