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) Project 10: Giao tip Arduino vi Servo motor. ............................................... 54 Ti liu tham kho. ........................................................................................................... 56
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
HC VIN HNG KHNG SV: NGUYN TRUNG TN 1
Chng 1: Tng quan v Arduino Uno. 1. Tng quan. Arduino tht ra l mt bo mch vi x l c dng lp trnh tng tc vi cc thit b phn cng nh cm bin, ng c, n hoc cc thit b khc. c im ni bt ca Arduino l mi trng pht trin ng dng cc k d s dng, vi mt ngn ng lp trnh c th hc mt cch nhanh chng ngay c vi ngi t am hiu v in t v lp trnh. V iu lm nn hin tng Arduino chnh l mc gi rt thp v tnh cht ngun m t phn cng ti phn mm. Arduino Uno l s dng chip Atmega328. N c 14 chn digital I/O, 6 chn u vo (input) analog, thch anh dao ng 16Mhz. Mt s thng s k thut nh sau : Chip ATmega328 in p cp ngun 5V in p u vo (input) (kin ngh ) 7-12V in p u vo(gii hn) 6-20V S chn Digital I/O 14 (c 6 chn iu ch rng xung PWM) S chn Analog (Input ) 6 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 32KB (ATmega328) vi 0.5KB s dng bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Xung nhp 16 MHz
HC VIN HNG KHNG SV: NGUYN TRUNG TN 2
2. S chn ca Arduino. Hnh 1: Arduino Uno.
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 V in 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.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 3
Chn 5V v chn 3.3V (Output voltage) : cc chn ny dng ly ngun ra t ngun m chng ta cung cp cho Arduino. Lu : khng c cp ngun vo cc chn ny v s lm hng Arduino. GND: chn mass. c) Chip Atmega328. Chip Atmega328 C 32K b nh flash trong 0.5k s dng cho bootloader. Ngoi ra cn c 2K SRAM, 1K EEPROM. d) Input v Output ( 4, 5 v 6). Arduino Uno c 14 chn digital vi chc nng input v output s dng cc hm pinMode(), digitalWrite() v digitalRead() iu khin cc chn ny ti s cp chng cc phn sau. Cng trn 14 chn digital ny chng ta cn mt s chn chc nng l: Serial : chn 0 (Rx ), chn 1 ( Tx). Hai chn ny dng truyn (Tx) v nhn (Rx) d liu ni tip TTL. Chng ta c th s dng n giao tip vi cng COM ca mt s thit b hoc cc linh kin c chun giao tip ni tip. PWM (pulse width modulation): cc chn 3, 5, 6, 9, 10, 11 trn bo mch c du ~ l cc chn PWM chng ta c th s dng n iu khin tc ng c, sng ca n SPI : 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK), cc chn ny h tr giao tip theo chun SPI. I2C: Arduino h tr giao tip theo chun I2C. Cc chn A4 (SDA) v A5 (SCL) cho php chng tao giao tip gia Arduino vi cc linh kin c chun giao tip l I2C. e) Reset (7): dng reset Arduino.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 4
Chng 2: Ci t chng trnh Arduino IDE v Driver cho Arduino 1. Ci t chng trnh Arduino IDE Cc bn truy cp vo trang web http://arduino.cc/en/Main/Software v ti v chng trnh Arduino IDE ph hp vi h iu hnh ca my mnh bao gm Windown, Mac OS hay Linux. i vi Windown c bn ci t (.exe) v bn Zip, i vi Zip th ch cn gii nn v chy chng trnh khng cn ci t. Sau khi ci t xong th giao din chng trnh nh sau:
Hnh 2: Arduino IDE
HC VIN HNG KHNG SV: NGUYN TRUNG TN 5
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 Hnh 3: Driver Software Installation. By gi bn click vo Start Menu chn Control Panel k n chng ta chn System and Security, click System v sau chn Device Manager. Hnh 4: Device Manager.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 6
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 5: Right click v chn Update Driver Software Chn Browse my computer for driver software. Hnh 6: Click chn Browse my computer for driver software Chn ng dn ti folder driver ni m phn mm Arduino c lu tr. Hnh 6: Driver Click Next Windown t ng ci t driver, qua trnh ci t driver hon tt.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 7
3. Arduino IDE Arduino IDE l ni son tho code, kim tra li v upload code cho arduino Hnh 7: Arduino IDE. a) Arduino Toolbar: c mt s button v chc nng ca chng nh sau : Hnh 8: Arduino Toolbar. Verify : kim tra code c li hay khng Upload: np code ang son tho vo Arduino New, Open, Save : To mi, m v Save sketch Serial Monitor : y l mn hnh hin th d liu t Arduino gi ln my tnh b) Arduino IDE Menu: Hnh 9: IDE Menu
HC VIN HNG KHNG SV: NGUYN TRUNG TN 8
File menu: Hnh 10: File menu. Trong file menu chng ta quan tm ti mc Examples y l ni cha code mu v d nh: cch s dng cc chn digital, analog, sensor Hnh 11: Click Examples.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 9
Edit menu: Hnh 11: Edit menu Sketch menu Hnh 12: Sketch menu Trong Sketch menu : Verify/ Compile : chc nng kim tra li code. Show Sketch Folder : hin th ni code c lu. Add File : thm vo mt Tap code mi. Import Library : thm th vin cho IDE
HC VIN HNG KHNG SV: NGUYN TRUNG TN 10
Tool memu: Hnh 13: Tool menu. Trong Tool menu ta quan tm cc mc Board v Serial Port Mc Board : cc bn cn phi la chn bo mch cho ph hp vi loi bo m bn s dng nu l Arduino Uno th phi chn nh hnh: Hnh 14: Chn Board Nu cc bn s dng loi bo khc th phi chn ng loi bo m mnh ang c nu sai th code Upload vo chip s b li. Serial Port: y l ni la chn cng Com ca Arduino. Khi chng ta ci t driver th my tnh s hin thng bo tn cng Com ca Arduino l bao nhiu, ta ch vic vo Serial Port chn ng cng Com np code, nu chn sai th khng th np code cho Arduino c.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 11
Chng 3: Hng dn ci t bn m phng Arduino trn Proteus. m phng c Arduino trn proteus th chng ta cn phi download th vin arduino cho proteus. c c th vin ny cc bn cn truy cp vo trang web: http://blogembarcado.blogspot.com/search/label/Proteus Hnh 15: Th vin m phng Arduino. Sau khi download v cc bn chp 2 file ARDUINO.IDX v ARDUINO.LIB vo th mc: Proteus 7: C:\Program Files (hoc x86) \Labcenter Electronics\Proteus 7 Professional\LIBRARY Proteus 8: C:\Program Files (hoc x86) \Labcenter Electronics\Proteus 8 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.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 12
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.
Hnh 16: M phng Arduino bng Proteus. Lu chng ta cn phi cp ngun vo 2 chn 5V v Gnd trn mch nh hnh trn.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 13
Chng 4: Giao tip Arduino vi mt s linh kin in t. 1) Project 1: Led nhp nhy. Sau y ti s to mt project nhp nhy led thi gian delay l 1 giy s dng proteus m phng. S mch:
Hnh 17: Led nhp nhy. Code chng trnh. int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } Sau khi g code vo chng trnh son tho bn cn click v kim tra li.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 14
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.
Hnh 18: Click Preferences. Cc bn check vo compilation v OK. Hnh 19: Check compilation. Sau tip tc bm
HC VIN HNG KHNG SV: NGUYN TRUNG TN 15
Chng trnh s t ng built mt file hex c lu ng dn nh hnh di Hnh 20: ng dn cha file hex. Cc bn chp file hex ra mt th mc no sau m proteus ln v double click vo Aruino Uno. Hnh 21: Add file Hex cho Proteus. Bm vo v tr s 1 v chn ni lu file hex trn chn tip Open, OK v Play. Cc bn s thy led nhp nhy tt v sng thi gian delay l 1s.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 16
Gii thch chng trnh. int ledPin = 9; Khai bo mt gi tr bin integer l ledPin = 9. void setup() { pinMode(ledPin, OUTPUT); } Trong Arduino sketch cn phi c hm setup() v loop() nu khng c th chng trnh bo li. Hm Setup() ch chy mt ln k t khi bt u chng trnh. Hm ny c chc nng thit lp ch vo, ra cho cc chn digital hay tc baud cho giao tip Serial... Cu trc ca hm pinMode() l nh sau: pinMode(pin,Mode); pin : l v tr chn digital. Mode: l ch vo ( INPUT), ra (OUTPUT). Lnh tip theo. pinMode(ledPin, OUTPUT); Lnh ny thit lp chn s 9 trn board l chn ng ra (OUTPUT). Nu khng khai bo int ledPin = 9; th bn c th vit cch sau nhng ngha khng thay i: pinMode(9, OUTPUT); Bt buc khai bo mt hm loop() trong Arduino IDE. Hm ny l vng lp v hn void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW);
HC VIN HNG KHNG SV: NGUYN TRUNG TN 17
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.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 18
2) Project 2 : n sng khi nhn phm. S mch: Hnh 22: n sng khi nhn phm Code chng trnh : const int buttonPin = 2; const int ledPin = 13; int buttonState = LOW; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop(){ buttonState = digitalRead(buttonPin); if (buttonState == HIGH) {
HC VIN HNG KHNG SV: NGUYN TRUNG TN 19
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.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 20
Nu c tc l buttonState =HIGH th lc ny ta bt led bng lnh digitalWrite() if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } Ngc li th ta mt ln na s dng hm digitalWrite() tt led else { digitalWrite(ledPin, LOW); }
HC VIN HNG KHNG SV: NGUYN TRUNG TN 21
3) Project 3 : Led sng dn t led 1 n led 10 v ngc li. S mch. Hnh 23: Led sng dn t led 1 n led 10 v ngc li. Code chng trnh. byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; int direction = 1; int currentLED = 0; void setup() { for (int x=0; x<10; x++) { pinMode(ledPin[x], OUTPUT);} }
if (currentLED == 9) {direction = -1;} if (currentLED == 0) {direction = 1;} delay(500); } Gii thch chng trnh. Trong Project ny chng ta s dng 10 chn digital iu khin 10 led, cho chng trnh ngn gn th y ti s dng mng 1 chiu gm 10 phn t trong cha 10 v tr chn led m ta s dng trong project byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; Tip tc khai bo 2 bin integer l : int direction = 1; int currentLED = 0; Trong hm setup() ti s dng mt vng lp nh ngha mode cho cc chn led. Ti ngh l khng kh hiu c cc cu lnh ny. Tip theo l hm loop(), u tin ti tt tt c cc led bng cc cu lnh: for (int x=0; x<10; x++) { digitalWrite(ledPin[x], LOW);}
HC VIN HNG KHNG SV: NGUYN TRUNG TN 23
Sau cho sng led u tin bng cu lnh : digitalWrite(ledPin[currentLED], HIGH); V ta khai bo currentLED = 0 nn mng s truy xut phn t u tin trong mng c gi tr l 4 v th led v tr chn digital s 4 s sng. currentLED += direction; Tng currentLED ln 1 n v ( direction =1 ). Vng lp tip theo s l led chn digital 5 sng v c nh th cho n led chn s 13 sng, th lc ny currentLED == 9, cu lnh if (currentLED == 9) {direction = -1;} s thc hin v led s sng ngc li t led 10 xung led th 1. Hai cu lnh : if (currentLED == 9) {direction = -1;} if (currentLED == 0) {direction = 1;} dng quy nh chiu sng ca led l tng dn hay gim dn. Nu l Led th 10 sang th tip theo s gim xung led th 9 v ngc li nu led th 0 sang th chu k tip theo led 1 s sng.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 24
4) Project 4 : Led sng dn t led 1 n led 10 v ngc li thi gian delay thay i c. S mch : Trong project ny hon ton ging project 3 ch thm mt bin tr dng iu chnh thi gian delay cho chng trnh 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 SV: NGUYN TRUNG TN 25
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;
if (currentLED == 9) {direction = -1;} if (currentLED == 0) {direction = 1;} delay(delayvalu); } Gii thch chng trnh. Chng trnh ta ch thm v thay i mt vi cu lnh m thi ngoi ra khng khc g nhiu so vi project 3, cc cu lnh nh sau : int potPin = 0 ; int delayvalu= analogRead(potPin);
HC VIN HNG KHNG SV: NGUYN TRUNG TN 26
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.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 27
5) Project 5: iu khin tc ng c bng PWM. S mch Hnh 25: iu khin tc ng c. Code chng trnh. int potPin = 0; int transistorPin = 9; int potValue = 0; void setup() { pinMode(transistorPin, OUTPUT);} void loop() { potValue = analogRead(potPin) / 4; analogWrite(transistorPin, potValue); }
HC VIN HNG KHNG SV: NGUYN TRUNG TN 28
Gii thch chng trnh. Nh trong s mch ta thy bin tr c ni vi chn A0, transistor c ni vi chn s 9 thng qua in tr 1k. Nh vy ta khai bo 2 bin cha v tr chn cho bin tr v transistor. int potPin = 0; int transistorPin = 9; Bin integer potValue cha gi tr c c t chn A0. int potValue = 0 Mt cu hi t ra y l nu chng ta khng kt ni transistor iu khin ng c vo chn s 9 m thay vo l chn s 1 hoc 2 iu khin tc ng c th c c khng ?. Cu tr li l Khng. Vy ti sao Khng ? Ti s tr li cu hi ny sau. Nhng trc ht ti ni v PWM. PWM (pulse width modulation) l phng php iu ch da trn s thay i rng ca chui xung dn n s thay i in p ra. to ra c PWM trn Arduino th chng ta s dng lnh analogWrite(Pin, Value); Trong : Pin: l v tr chn, i vi Arduino Uno th ch c cc chn 3, 5, 6, 9, 10 & 11 mi c chc nng to PWM. Vy chng ta c th tr li c cu hi bn trn, cc chn digital cn li ca c th c hoc xut 2 gi tr l 0 v 1 m thi. Value: Gi tr nm trong khong 0 n 255. hiu r hn v PWM ti s minh ho qua v d sau. Nu ti s dng lnh analogWrite(transistorPin, 127); th dng xung chn 9 ( transistorPin = 9) s nh hnh di v gi tr trung bnh ng ra s l 2,5V (50% ).
HC VIN HNG KHNG SV: NGUYN TRUNG TN 29
Hnh 26: PWM 50%. Nu Value = 64 (hay 25%) th dng xung nh sau: Hnh 27: PWM 25%. Value = 229 (hay 90%) th dng xung s l : Hnh 28: PWM 90%. T v d trn ta thy s thay i rng ca chui xung dn n s thay i in p ra. Ta cng thy rng in p trn motor cng thay i tuyn tnh theo s thay i in p ng ra trn chn 9. Tc l nu in p trung bnh trn chn 9 l 2,5 volt (50% ) th in p trn hai u motor l 6 volt ( ngun motor l 12 volt ). Quay li chng trnh ta cn quan tm ti mt cu lnh l: potValue = analogRead(potPin) / 4;
HC VIN HNG KHNG SV: NGUYN TRUNG TN 30
Chng ta cn phi chia gi tr c c cho 4 v gi tr analog s nm trong khong 0 (0 volt ) n 1023 (5 volt ), nhng gi tr cn xut ra ngoi chn 9 li nm trong khong 0 n 255 chnh l l do ti sao c chia 4 y. V cu lnh cui cng l to PWM trn chn 9 iu khin tc ng c. analogWrite(transistorPin, potValue); Nu nh iu kin c tc ng c bng PWM ri th vic iu khin sng ca Led hay n i vi cc bn bay gi l chuyn qu n gin. Cc bn ch cn ni chn s 9 vi mt Led c in tr hn dng l 220 ohm v code chng trnh hon ton ging nh iu khin ng c. Lu l khi m phng cc bn s khng thy c led thay i sng m ch thy nhp nhy nguyn nhn l do phn mm proteus khng p ng kp s thay i ca cc xung PWM. Nhng khi lm thc t cc bn s thy c s thay i sng ca Led r rt.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 31
6) Project 6 : iu khin ng c bng L293D. S mch: Hnh 29: iu khin ng c bng L293D. Code chng trnh #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 int Mspeed = 0; void setup() { pinMode(switchPin, INPUT); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(speedPin, OUTPUT);
HC VIN HNG KHNG SV: NGUYN TRUNG TN 32
}
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 SV: NGUYN TRUNG TN 33
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); }
HC VIN HNG KHNG SV: NGUYN TRUNG TN 34
7) Project 7: Giao tip Arduino vi LCD 16x2. Giao tip gia Arduino v LCD 16x2 rt n gin bi v Arduino IDE c sn th vin cho LCD l LiquidCrystal.h, cng vic ca chng ta l hiu v bit cch s dng th vin ny m thi. S mch: Hnh 30: giao tip vi LCD 16x2. Code chng trnh : #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // thiet lap chan cho LCD void setup() { lcd.begin(16, 2); // thiet lap loai LCD su dung la 16 cot va 2 dong } void loop() { introduce(); basicPrintDemo(); displayOnOffDemo(); setCursorDemo();
HC VIN HNG KHNG SV: NGUYN TRUNG TN 35
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 SV: NGUYN TRUNG TN 36
for(int x=0; x < 3; x++) { lcd.noDisplay(); delay(500); lcd.display(); delay(500); } } void setCursorDemo() { lcd.clear(); lcd.print("Setup Cursor"); delay(500); lcd.clear(); lcd.setCursor(5,0); // thiet lap con tro o vi tri cot 5 hang 0 lcd.print("5,0"); delay(500); lcd.setCursor(10,1); // thiet lap con tro cot 10 hang thu 1 lcd.print("10,1"); delay(500); lcd.setCursor(3,1); // thiet lap con tro o vi tri cot 3 hang 1 lcd.print("3,1"); delay(500); } void scrollLeftDemo() { lcd.clear(); lcd.print("Scroll Left Demo"); delay(500); lcd.clear();
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 SV: NGUYN TRUNG TN 39
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); } }
HC VIN HNG KHNG SV: NGUYN TRUNG TN 40
Gii thch chng trnh: u tin chng ta khai bo th vin m chng ta s s dng iu khin LCD. Nh ni trn chng ta s s dng th vin c tn l LiquidCrystal.h. C rt nhiu th vin v code mu cho nhng loi LCD khc, bn c th truy cp vo trang web http://www.arduino.cc/playground/Code/LCD ti v s dng. khai bo th vin cho LCD hay bt c th vin no khc ta dng cu lnh #include <tenthuvien.h> Trong trng hp ny ta khai bo l : #include <LiquidCrystal.h> Tip theo to mt i tng v gn chn cho n bng cu lnh : LiquidCrystal Object(RS, E, D4, D5, D6, D7); Nh vy trong on code trn ti khai bo mt i tng c tn l lcd ( cc bn c th thay th lcd bng nhng t khc m cc bn mun ) v chn 12 ca Arduino ni vi chn RS, chn 11 ni vi E v cc chn 5 n chn 2 ln lt ni vi D4 n D7 trn LCD 16x2. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Trong hm setup() chng ta cn khai bo loi LCD m chng ta s dng. V trong th vin LiquidCrystal.h h tr rt nhiu loi LCD chng hn nh 16x2, 16x4, 20x2, 20x4, GLCD. y chng ta s dng 16x2 th ta khai bo. lcd.begin(16,2); Trong loop() chng ta c 8 chng trnh con, v ti s gii thch tng chng trnh con.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 41
Chng trnh con th 1: introduce(). y l chng trnh gii thiu. Chng trnh con th 2: basicPrintDemo() Trong chng trnh con ny chng ta s iu khin sao cho LCD hin th dng ch m ta mong mun. u tin chng ta xo tt c mn hnh bng cu lnh: lcd.clear(); Chng ta cn lu i tng lcd : nu nh ban u chng ta khai bo i tng l LCD16x2 th chng ta phi vit cu lnh l LCD16x2.clear(). hin th mt dng k t bt k ln mn hnh th ta dng cu lnh print() c th trong trng hp ny l: lcd.print("HV HANG KHONG"); Cc k t bn trong ngoc kp s c hin th ln mn hnh, nu tng cc k t ln hn 16, th cc k t t th 17 tr i s khng c hin th ln mn hnh. Chng trnh con th 3: displayOnOffDemo() Trong chng trnh con ny hng dn cho chng ta cc cu lnh chc nng bt v tt mn hnh. Ta cn quan tm ti 2 cu lnh sau. lcd.nodisplay(); Cu lnh ny c chc nng tt mn hnh hin th. lcd.display(); Cu lnh ny cho php hin th mn hnh.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 42
Chng trnh con th 4: setCursorDemo() Hnh 31: LCD 16x2. Chng trnh con ny hng dn chng ta cc cu lnh dch chuyn v tr con tr theo mun, cc cu lnh cn quan tm l: lcd.setCursor(5,0); lcd.print("5,0"); Dch con tr n ct th 5 hng th 0. Sau xut ra mn hnh LCD 5,0 t ct th 5 hng 0 tr i. lcd.setCursor(10,1); // thiet lap con tro cot 10 hang thu 1 lcd.print("10,1"); Dch con tr n v tr ct 10 hng th 1. Xut ra mn hnh "10,1" Tng t nh vy i vi 2 cu lnh cui l : lcd.setCursor(3,1); // thiet lap con tro o vi tri cot 3 hang 1 lcd.print("3,1");
HC VIN HNG KHNG SV: NGUYN TRUNG TN 43
Chng trnh con th 5: scrollLeftDemo() Chng trnh con ny s dch cc k t ang hin th trn mn hnh sang bn tri. Cc cu lnh trong chng trnh con ny khng kh, chng ta ch quan tm ti cc cu lnh sau: for(int x=0; x<16; x++) { lcd.scrollDisplayLeft(); // cuon man hinh sang trai delay(250); } Trong vng lp chng ta c cu lnh: lcd.scrollDisplayLeft(); Mi ln chng trnh thc hin cu lnh ny s dch tt c cc k t ang hin th trn mn hnh sang bn tri 1 ct. Chng ta c vng lp 16 ln nh vy cc k t s c dch ht v bn tri.
Hnh 32: Trc khi dch tri.
HC VIN HNG KHNG SV: NGUYN TRUNG TN 44
Hnh 33: Dch tri ln th 8. Khi vng lp thc hin c 16 ln th mn hnh s trng hon ton. Chng trnh con th 6: scrollRightDemo() Hon ton tng t nh scrollLeftDemo() chng trnh con ny s thc hin dch phi cc k t trn mn hnh. Cu lnh cn quan tm l: lcd.scrollDisplayRight(); Chng trnh con th 7: cursorDemo() phn ny chng ta s tm hiu cc cu lnh iu khin con tr bt, tt v nhp nhy. lcd.cursor() : cu lnh ny cho php chng ta bt con tr. Hnh 34: Con tr LCD
HC VIN HNG KHNG SV: NGUYN TRUNG TN 45
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 SV: NGUYN TRUNG TN 46
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));
HC VIN HNG KHNG SV: NGUYN TRUNG TN 47
8) Project 8: Giao tip vi my tnh. Trong phn ny ti s trnh by cch giao tip gia Arduino vi my tnh thng qua chun giao tip ni tip khng ng b UART. iu khin bt tt bng cch gi lnh t my tnh. S mch: Dng cp USB kt ni Arduino vi my tnh. Led ni vi chn 13 thng qua in tr 220 ohm. Code chng trnh: int ledpin =13; void setup() { Serial.begin(9600); pinMode(ledpin,OUTPUT); }
Gii thch chng trnh: c th iu khin c led bt tt chng ta cn m Serial monitor bng cch nhp vo biu tng : Hnh 35: Serial Monitor. Trong chng trnh ta cn ch ti cc cu lnh sau: Serial.begin(9600); Cu lnh ny thit lp tc truyn d liu ca chng ta l 9600 bps. Chng ta c th thit lp cc tc khc nh 300, 1200, 2400, 4600, 9600, 19200, 57600, 115200. Cn lu rng tc truyn gia my tnh v thit b phi ging nhau, nu khng th d liu nhn c s b li. Trong vng lp loop() chng ta c cu lnh: Serial.available()>0 Cu lnh ny dng kim tra xem c d liu truyn ti hay khng. Ngoi ra Serial.available() cn tr v cho chng ta s k t c truyn ti Arduino
HC VIN HNG KHNG SV: NGUYN TRUNG TN 49
char setupled = Serial.read(); Khi d liu c truyn ti Arduino th d liu s c lu vo b nh m. Chng ta khai bo bin setupled vi kiu d liu char v dng hm Serial.read() truy sut d liu trong b nh m v lu vo trong n. Nh vy k t u tin trong chui k t c truyn ti s c gn vo setupled. Dng hm Switch-case kim tra, nu l 1 th sng led, nu l 0 th tt led, cc trng hp cn li th khng lm g.
9) Project 9. o nhit mi trng dng LM35D hin th LCD v Serial Monitor. S mch.
Hnh 36: giao tip vi LM35, LCD v Serial monitor. Code 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;
HC VIN HNG KHNG SV: NGUYN TRUNG TN 50
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 SV: NGUYN TRUNG TN 51
int temp = sensor* 0.1074188; Serial.print("Nhiet do moi truong :"); Serial.print(temp); Serial.println(" do C"); lcd.print(temp); lcd.write(B11011111); // 0
lcd.print("C "); if (temp>maxC) {maxC=temp;} if (temp<minC) {minC=temp;} lcd.setCursor(0,1); lcd.print("H="); lcd.print(maxC); lcd.write(B11011111); lcd.print("C L="); lcd.print(minC); lcd.write(B11011111); lcd.print("C "); } void fahrenheit(int sensor) { lcd.setCursor(0,0); float temp = ((sensor * 0.1074188) * 1.8)+32; // chuyen doi sang do F Serial.print("Nhiet do moi truong :"); Serial.print(int(temp)); Serial.println("do F"); lcd.print(int(temp)); lcd.write(B11011111); lcd.print("F ");
HC VIN HNG KHNG SV: NGUYN TRUNG TN 52
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 SV: NGUYN TRUNG TN 53
in p tham chiu cho b chuyn i ADC l 1,1V. i vi LM35 th in p ng ra tuyn tnh vi nhit ca mi trng. H s chuyn i in p sang nhit l 10mV/1 0 C = 0,01V/1 0 C. Xy dng cng thc tnh nhit . Ta bit: 1,1 volt (1100 mV) c 1024 mc biu din, vy 1 mc s l 1,1/1024 (volt), chuyn i t in p sang nhit th ta chia tip cho 0,01V. T y ta thy c 1 mc chuyn i ca ADC tng ng vi 1,1 1024.0,01
0 C = 0.10742188 0 C. Nh vy chng ta ch cn c gi tr u vo chn A0 (gi tr nm trong khong 0 - 1023) v gn chng cho bin integer sensor. int sensor = analogRead(0); tnh ra nhit chnh xc chng ta nhn gi tr ca sensor vi 0.10742188. Trong chng trnh con celsius(int sensor) ta c cu lnh: int temp = sensor* 0.1074188; Trong chng trnh con fahrenheit(int sensor) ta c cu lnh chuyn i t C sang F l: float temp = ((sensor * 0.1074188) * 1.8)+32;
HC VIN HNG KHNG SV: NGUYN TRUNG TN 54
10) Project 10: Giao tip Arduino vi Servo motor. S mch Hnh 37: Giao tip vi Servo motor Code chng trnh. #include <Servo.h> Servo servo1; void setup() { servo1.attach(5); } void loop() { int angle = analogRead(0); // Read the pot value angle=map(angle, 0, 1023, 0, 180);
HC VIN HNG KHNG SV: NGUYN TRUNG TN 55
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 0 n 180 0 ta s dng cu lnh : angle=map(angle, 0, 1023, 0, 180); Cu Lnh ny s chuyn i t gi tr ca bin tr sang gc quay tng ng ca Servo. iu khin gc quay ca Servo ta dng cu lnh: servo1.write(angle);
HC VIN HNG KHNG SV: NGUYN TRUNG TN 56
Ti liu tham kho. Beginning Arduino - Mike McRoberts Arduino cookbook Michael Margolis http://arduino.cc http://blogembarcado.blogspot.com