1. Trang chủ >
  2. Kỹ thuật >
  3. Giao thông - Vận tải >

PHỤ LỤC A: GIỚI THIỆU VỀ ARDUINO

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (12.58 MB, 123 trang )


2. Tại sao chọn Arduino?

Hiện tại ở Việt Nam và trên thế giới có rất nhiều bo mạch vi điều khiển khác nhau. Tuy

nhiên Arduino có rất nhiều ưu điểm để khiến nó trở nên rất phổ biến trên thế giới. Các ưu

điểm nổi trội như: chi phí đầu tư cho mỗi board thấp; khả năng thích ứng với nhiều hệ điều

hành; chương trình đơn giản; rất dễ sử dụng; sử dụng mã nguồn mở; có thể thực hiện nhiều

nhiệm vụ lấy tín hiệu từ các cảm biến hoặc xung điều khiển đèn, động cơ, và nhiều đối

tượng; có thể kết hợp với nhiều module khác (đọc thẻ từ, athernet shield, Sim900A,…).

3. Tổng quan về Arduino Uno R3

3.1. Phần cứng của Arduino Uno R3

Nhắc tới dòng mạch Arduino dùng để lập trình, cái đầu tiên mà người ta thường nói tới

chính là dòng Arduino UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (R3).



Hình 1: Arduino Uno R3.



 Cổng USB:

Dùng để kết nối board Arduino với máy tính bằng cáp USB hoặc có thể sử dụng nguồn

5V từ USB máy tính truyền đến.



 Cổng nguồn ngồi:



Cấp nguồn ngoài với điện áp khuyên dùng là 7 - 12V DC và giới hạn là 6 - 20V. Thường

thì cấp nguồn bằng pin vuông 9V là hợp lý nhất nếu bạn khơng có sẵn nguồn từ cổng USB.

Nếu cấp nguồn vượt quá ngưỡng giới hạn trên có thể sẽ làm hỏng Arduino UNO.



 Chân cấp nguồn cho cảm biến:

-



GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các thiết bị

sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau.



-



5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.



-



3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.



-



Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của

nguồn với chân này và cực âm của nguồn với chân GND.



-



IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân

này. Và dĩ nhiên nó ln là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân này để

sử dụng bởi chức năng của nó khơng phải là cấp nguồn.



-



RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân

RESET được nối với GND qua 1 điện trở 10KΩ.



 Chân lấy tín hiệu Analog:

Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 →

210 - 1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể

để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V

vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V

với độ phân giải vẫn là 10bit. Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ

trợ giao tiếp I2C/TWI với các thiết bị khác.



 IC Atmega 328:



-



IC Atmega 328 là phần quan trọng nhất của board Arduino UNO, IC này giống như một

bộ não dùng để thu thập dữ liệu và xử lý chúng để truyền đi. Một sô thông tin cơ bản của

IC này:



-



32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ Flash

của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho

bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu.



-



2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai báo khi lập

trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM. Tuy

vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà bạn phải bận tâm.

Khi mất điện, dữ liệu trên SRAM sẽ bị mất.



-



1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): đây

giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của mình vào đây

mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.



 Nút Reset: Nút này thường được sử dụng khi muốn chạy lại chương trình hay đơi khi

chương trình bị lỗi chúng ta muốn reset lại chương trình đó.

 ICSP Atmega: ICSP (In - Ciruit Serial Programming) là các chân giao tiếp của chíp

Atmega 16U2. Các chân này thường được sử dụng trong các dự án lớn về Arduino.



 Các chân đọc và xuất tín hiệu Digital:

Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức

điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân đều có các

điện trở pull - up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện

trở này khơng được kết nối).

Một số chân digital có các chức năng đặc biệt như sau:



-



2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ

liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết

nối bluetooth thường thấy nói nơm na chính là kết nối Serial không dây. Nếu không cần

giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết



-



Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải

8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách

đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ

cố định ở mức 0V và 5V như những chân khác.



-



Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngồi các chức năng

thơng thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các

thiết bị khác.



3.2. Phần mềm Arduino IDE

Arduino IDE (Integrated Development Environment) là một trình soạn thảo văn bản,

giúp bạn viết code để nạp vào bo mạch Arduino. Arduino IDE là phần mềm nguồn mở được

viết bằng Java và sẽ làm việc được trên các nền tảng khác nhau: Windows, Mac, và Linux.

IDE cho phép bạn viết mã trong môi trường đặc biệt với sự nhấn mạnh cú pháp và các tính

năng khác sẽ làm cho việc lập trình dễ dàng hơn, và sau đó dễ dàng tải mã của bạn vào thiết

bị với việc đơn giản nháy vào một cái núm.



 Giao diện Arduino IDE



Hình 2: Giao diện Arduino

-



Nút kiểm tra lỗi của code: khi hoàn tất việc viết code ta cần dùng nút này để kiểm tra

xem code đã đúng chưa. Khi code bị sai, bên phần vùng thông tin sẽ thông báo cho ta

biết lỗi sai và vị trí lỗi trên mã code.



-



Nút nạp code cho board Arduino: dùng để nạp code xuống board khi code đã được kiểm

tra và sửa lỗi hoàn chỉnh.



-



Nút hiển thị màn hình giao tiếp với máy tính (Serial Monitor): khi nhấn vào màn hình sẽ

hiển thị phần mà người dùng muốn đưa lên nhằm giao tiếp với các phần mềm khác.



-



Vùng lập trình: tại đây người dùng viết code theo ngơn ngữ lập trình mà mình muốn cài

đặt lên board Arduino hoạt động để thu thập tin hiệu hay truyền tín hiệu đi cho các hệ

thống liên quan.



-



Vùng thông tin: chức năng chính của vùng này là thơng báo các vấn đề của mã code đã

viết về lỗi và các thông tin liên quan khác.



 Sử dụng một số chức năng khác trên thanh Menu của Arduino IDE

-



File - Example: thông thường ở các phần mềm cơ bản đều có File nhưng ở phần mềm

Arduino IDE này có thêm phần Example rất hữu ích cho người dùng. Nó đưa ra các ví dụ

mẫu cơ bản nhất để những người mới hay đã lập trình thơng thạo cũng có thể sử dụng và

tham khảo để giảm bớt thời gian viết code.



Hình 3: Thư viện Example của Arduino

-



Tools - Board: tại đây chúng ta cần chọn board Arduino đúng với board mà mình đang sử

dụng. Phần mềm bên dưới đang sử dụng kiểu board Arduino Uno do đó khi chọn nhầm

board khác thì code sẽ khơng nạp xuống được.



Hình 4: Chọn đúng board Arduino đang sử dụng

-



Tools - PORT: Giống như việc chọn board trên chúng ta cũng phải đồng thời chọn đúng

cổng PORT mà board Arduino kết nối với cổng USB trên máy tính.



4. Lập trình trên Arduino IDE

4.1. Ngơn ngữ lập trình trên Arduino

Bảng A.1: Cấu trúc, giá trị và hàm thủ tục

CẤU TRÚC

-



stepup()



-



soop()



Cấu trúc điều khiển



GIÁ TRỊ



HÀM VÀ THỦ TỤC



Hằng số



Nhập xuất Digital



 High | Low

 INPUT



 if



 INPUT_PULLUP



 if…else



 OUTPUT



 switch/case



 LED_BULTIN



 for



(digital I/O)

 pinMode()

 digitalWrite()

 digitalRead()

Nhập xuất Analog

(Analog I/O)



 true | fales



 while



Kiểu dữ liệu



 analogReference()



 break



 void



 analogRead()



 continue



 boolean



 analogWrite()



 return



 char



 goto



 unsigned char



Cú pháp



 byte



 ; (dấu chấm phẩy)



 int



 {} (dấu ngoặc



 unsigned int



nhọn)

 //(single line



 word



comment)



 long

 unsigned long

 float



 #define



 double



 #include



 array



Toán tử số học



 string (chuỗi ký

tự biểu diễn bằng



 = (phép gán)

 + (phép cộng)





- (phép trừ)



Hàm thời gian

 millis()

 mcros()

 delay()

 delayMicrosecond

s()



comment)

 /**/(muti - line



PWM – PPM



array)



Hàm toán học

 min()

 max()

 abs()

 map()

 pow()

 sqrt()



Chuyển đổi kiểu dữ



 sq()



liệu



 isnan()



 * (phép nhân)



 char()



 /(phép chia)



 byte()



 % (phép chia lấy



 int()



 contrain()

Hàm lượng giác

 cos()



dư)



 word()



 sin()



Toán tử so sánh



 long()



 tan()



 == (so sánh bằng)



 float()



Sinh số ngẫu nhiên



 != (khác bằng)



Phạm vi của biến và



 randomSeed()



 > (lớn hơn)



phân loại



 random(0



 < (bé hơn)



 static – biến tĩnh



 >= (lớn hơn hoặc



 const – biến hằng



bằng)

 <= (bé hơn hoặc

bằng)

Toán tử logic

 && (và)

 || (hoặc)

 ! (phủ định)

 ^ (loại trừ)

Phép toán hợp nhất

 ++ (cộng thêm

một đơn vị)

 -- (trừ đi một đơn

vị)

 += (phép rút gọn

của phép cộng)

 -= (phép rút gọn



 volatile

Hàm hỗ trợ

 sizeof()



Nhập xuất nâng cao

(advanced I/O)

 tone()

 noTone()

 shiftOut()

 shiftln()

 pulseln()

Bít và Bytes

 lowByte()

 highByte()

 bitRead()

 bitWrite()

 bitSet()

 bitClear()

 bit()

Ngắt (interrupt)

 attachInterrupt()



của phép trừ)

 *= (phép rút gọn

của phép nhân)

 /= (phép rút gọn

của phép chia)



 detachInterrupt()

 interrupts()

 noInterrupts()

Giao tiếp

 Serial



4.2. Chương trình code

1 - int THA, THW, PIM, VTA, FUEL;

2 - const int pin1 = 3;

3 - const int pin0 = 2;

4 - unsigned long thoigianmuccao1, biencux1, biencuy1, thoigianmucthap1;

5 - unsigned long thoigianmuccao0, biencux0, biencuy0, thoigianmucthap0;

6 - unsigned long chuky, tocdo;

7 - void setup()

8-{

9 - Serial.begin(9600);

10 - pinMode(3, INPUT_PULLUP);

11 - pinMode(2, INPUT_PULLUP);

12 - attachInterrupt(1, ngat1, FALLING);

13 - attachInterrupt(0, ngat0, FALLING);

14 - }

15 - void ngat1()

16 - {

17 - detachInterrupt(1);



18 - if (digitalRead(pin1) == LOW)

19 - {

20 - thoigianmuccao1 = micros() - biencuy1;

21 - biencux1 = micros();

22 - attachInterrupt(1, ngat1, RISING);

23 - }

24 - else

25 - {

26 - thoigianmucthap1 = micros() - biencux1;

27 - biencuy1 = micros();

28 - attachInterrupt(1, ngat1, FALLING);

29 - }

30 - }

31 - void ngat0() {

32 - detachInterrupt(0);

33 - if (digitalRead(pin0) == LOW)

34 - {

35 - thoigianmuccao0 = micros() - biencuy0;

36 - biencux0 = micros();

37 - attachInterrupt(0, ngat0, RISING);

38 - }

39 - else

40 - {



Xem Thêm
Tải bản đầy đủ (.docx) (123 trang)

×