Tải bản đầy đủ (.docx) (59 trang)

Báo cáo THực hành ghép nối máy tính với 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 (611.45 KB, 59 trang )

ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC KHOA HỌC
KHOA ĐIỆN TỬ - VIỄN THÔNG
---------

BÁO CÁO TOÀN VĂN
THỰC HÀNH
CƠ SỞ ĐIỆN TỬ - VIỄN THÔNG II

SINH VIÊN THỰC HIỆN :

1- Trần Minh Giang
2- Lê Nguyên Đạt
3- Lê Gia Thạnh
4- Trần Văn Thành Đạt
GIÁO VIÊN HƯỚNG DẪN :
Thầy : HOÀNG LÊ HÀ

Huế -2016


MỤC LỤC

DANH SÁCH CÁC HÌNH VẼ

2


DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt


Diễn giải

Dịch nghĩa

COM

Computer Output on Micro

Cổng COM nối thiết bị
chơi game,máy in…

IDE

Integrated Development
Environment

Môi trường phát triển tích
hợp

SPI

Serial Peripheral Interface

Giao diện ngoại vi nối tiếp

UART

Universal Asynchronous
Reveiver - Transmitter


Bộ truyền nhận không
đồng bộ

ICSP

In-Circuit Serial Programming

Các chân giao tiếp SPI

USB

Universal Serial Bus

Bộ kết nối các thiết bị
ngoại vi

PWM

Pulse Width Modulation

Kỹ thuật điều chế độ rộng
xung

PCI

Peripheral Component
Interconnect

Các thành phần cấu hình
nên cổng giao tiếp ngoại

vi theo chuẩn nối tiếp

SRAM

Static Random Access Memor
y

Bộ nhớ truy cập ngẫu
nhiên tĩnh

DRAM

Dynamic Random Access
Memory

Bộ nhớ truy cập ngẫu
nhiên động
3


EFPROM

Electronic Erasable
Programmable Read Only
Memory

Bộ nhớ xóa được bằng
điện trường

ACPI


Advanced Configuration and
Power Interface

Cấu hình cao cấp và giao
diện nguồn

SPI

Serial Peripheral Interface

Giao diện giao tiếp ngoại
vi

SD

Secure Digital

Kỹ thuật số an toàn

ADC

Analog digital convert

Chuyển đổi tín hiệu tương
tự qua tín hiệu số

TWI

Two Wire Interface


Giao diện hai dây

SDA

Serial Data Line

Đường giao tiếp dữ liệu

SCL

Serial Clock Line

Đường giao tiếp xung
nhịp đồng hồ

AREF.

Analogue REFerence

Tham chiếu tín hiệu tương
tự

IOREF

Input Output REFerence

Tham chiếu đầu vào ra

TX


Transmitter

Gửi dữ liệu

GND

Ground

Đất

JTAG

Joint Test Action Group

Nhóm hoạt động đo thử
liên hợp

LED

Light Emitting Diode

Đốt phát quang

PC

Personal Computer

Máy tính cá nhân


LCD

Liquid Crystal Display

Màn hình tinh thể lỏng

RX

Receiver

Nhận dữ liệu

4


MỞ ĐẦU
I.

MÔ TẢ PHẦN CỨNG

Intel Galileo do Intel trực tiếp phát triển và là sản phẩm đầu tiên được đội ngũ phát triển
Arduino chứng nhận đạt chuẩn tương thích với nền tảng Arduino. Intel Galileo là một
board ứng dụng đầu tiên sử dụng vi xử lý Intel Quark SoC X1000, một vi xử lý 32 bit đầu
tiên thuộc dòng “Santa Clara” sản xuất trên công nghệ System on Chip lớp Petium 32nm
với mức độ tiêu thụ điện rất thấp. Vi xử lý X1000 hoạt động với xung nhịp 400Mhz dựa
trên nền tảng Intel Pentium x86 với bộ nhớ L1 cache 16Kb. Galileo được thiết kế thích
với chuẩn board Arduino Uno R3.
Tương tự như những board Arduino khác, board Intel Galileo tuân theo những tiêu chuẩn
nhất định của nền tảng Arduino. Các chân Digital được đánh số từ chân 0 tới 13 (kề cận
là chân AREF và GND), các chân Analog từ chân 0 tới 5, header nguồn, header ICSP và

2 chân truyền UART là tất cả những điểm giống nhau với Arduino Uno R3. Tất cả các
chân của Galileo đều tuân theo chuẩn Arduino pinout 1.0.

Hình I.1: Minh họa sơ đồ khối board Intel Galileo Gen 2.

Sức mạnh của board Galileo tạo ra chủ yếu từ vi xử lý Intel Quark Soc X1000, ngoài khả
năng tương thích với chuẩn Arduino thì việc nhận được sự hỗ trợ từ nhà sản xuất vi xử lý
lớn nhất thế giới Intel cũng góp phần nào tạo ra một board phát triển đầy tiềm năng. Vi
xử lý 400Mhz tương thích với tập lệnh 32 bit Intel Pentium với các đặc điểm như sau:
- Bộ nhớ cache L1 16Kb.
5


- Đơn lõi, đơn luồng, tốc độ không đổi.

Hình I.2: Minh họa hình ảnh thực tế board Intel Galileo Gen 2.

- Hỗ trợ trạng thái ngủ ACPI.
- Một đồng hồ thời gian thực được tích hợp, sử dụng một pin 3V không có sẵn trên board,
cấp nguồn thông qua header.
- 11 Kb EEPROM có thể được lập trình thông qua thư viện EEPROM.
- Bộ nhớ flash Legacy SPI 8Mb để lưu trữ firmware (hay bộ nạp khởi động) hoặc Sketch
mới nhất. Ở giữa 256 Kb và 512 Kb được dành riêng cho việc lưu chương trình Sketch.
Việc upload diễn ra một cách tự động trừ khi có một bản nâng cấp được thêm vào
firmware.
- 512 Kb SRAM và 256 Mb DRAM được cho phép bởi firmware mặc định.
- Tùy chọn thêm vào thẻ nhớ micro SD cho phép không gian lưu trữ lên tới 32 Gb.
- Lưu trữ thông qua USB tương thích với chuẩn USB 2.0.
Galileo được thiết kế để hỗ trợ các Shield có điện áp hoạt động 3,3V hoặc 5V. Điện áp
hoạt động lõi của Galileo là 3,3V. Tuy nhiên, 1 jumper trên board cho phép chuyển đổi

thành 5V trên các chân I/O. Sự cung cấp này hỗ trợ cho các Shield Uno 5V và đây là thiết
lập mặc định. Nếu jumper bị chuyển vị trí, bộ chuyển đổi điện áp có thể không hoạt động
và cung cấp điện áp 3,3V ở các chân I/O. Những đầu vào Analog còn lại có điện áp từ 0V
tới 5V bất kể vị trí của jumper. Sự đa năng trong cách sử dụng các chân trên board
Galileo như sau:
- Chức năng vào/ra dữ liệu số/tương tự:
6


+ 14 chân vào ra kỹ thuật số được đánh số từ D0 đến D13, trong đó có 6 chân có thể được
sử dụng như đầu ra PWM với độ phẩn giải 8/12 bit. Mỗi chân trong số đó đều có thể
được sử dụng như input hay là output. Điều đó thực hiện được nhờ vào các hàm
pinMode(), digitalWrite() và digitalRead() trong quá trình lập trình.Các chân hoạt động ở
mức điện áp 3.3V hoặc 5V. Mỗi chân chịu được dòng vào 10mA hoặc tối đa là 25mA và
có điện trở kéo bên trong ( không kết nối theo mặc định ) từ 5,6kOhm tới 10kOhm.
+ 6 chân đầu vào analog là A0 tới A5, thông qua một IC chuyển đổi Analog to Digital
AD7298. Mỗi chân trong số chúng được cung cấp một độ phân giải ADC 10 bit hoặc 12
bit và điện áp đầu vào từ 0V tới 5V, điện áp tham chiếu là 5V.
- Chức năng hỗ trợ chuẩn giao tiếp:
+ Bus I2C, TWI với chân SDA và SCL, cạnh đó là chân AREF.
+ TWI: Chân A4 hay là chân SDA và chân A5 hay là chân SCL. Hỗ trợ giao tiếp TWI
với thư viện hỗ trợ là Wire Library.

Hình I.3: Minh họa các chân đầu vào/ra của Intel Galileo.

+ SPI mặc định ở 4MHz, có thể lập trình lên đến 25MHz. Galileo sẽ không làm một SPI
slave mà chỉ có thể là SPI master, nó có thể hoạt động như một slave nhưng phải thông
qua kết nối USB client.
+ Giao tiếp UART có thể cấu hình tốc độ baud, và giao tiếp thông qua 3 chân là 0 (RX)
và 1(TX).

7


+ ICSP: 6 chân trong mạch, phần cứng là 6 header có thể cắm vào.
- Chân Vin: khi sử dụng nguồn bên ngoài thì có thể cung cấp cho Galileo thông qua chân
này.
- Chân output 5V: được cung cấp bởi nguồn bên ngoài hoặc qua cổng USB. Dòng tối đa
cung cấp cho ngoại vi là 800mA.
- Chân output 3,3V: Cung cấp 3,3V qua bộ điều chỉnh trên mạch, dòng tối đa cung cấp
cho ngoại vi là 800mA.
- Chân GND là chân nối đất, sử dụng với mục đích tạo mạch kín khi cấp nguồn cho ngoại
vi.
- IOREF: Các chân IOREF trên Galileo cho phép 1 shield đính kèm với cấu hình thích
ứng với các điện áp cung cấp bởi board. Điện áp trên các chân IOREF được điều khiển
bởi một jumper trên board cho phép lựa chọn mức điện áp 3,3V hay 5V.
- Chân hay nút RESET, mức tích cực thấp để khởi động chạy lại phần mềm đã nạp từ
đầu.
- Chân AREF không được sử dụng trên board Galileo. Việc cung cấp một điện áp tham
chiều từ bên ngoài không được hỗ trợ cho Galileo, mặc định điện áp tham chiều của
Galileo là 5V để đo điện áp đầu vào từ các Analog Input.
Ngoài ra board này còn hỗ trợ các khối chức năng thể hiện các nhiệm vụ mở rộng như
sau:
- Kết nối Ethernet 10/100.
- Khe cắm PCI Express đầy đủ, với những tính năng PCIe phù hợp.
- Kết nối USB Host 2.0. Hỗ trợ lên đến 128 thiết bị kết cuối.
- Kết nối USB Client. Sử dụng để nạp chương trình Sketch.
- 10 chân JTAG tiêu chuẩn sử dụng để gỡ rối (debug).
- Nút Reboot để khởi động lại vi xử lý.
- Các tùy chọn lưu trữ.
II.


Phương pháp lập trình bằng trình biên dịch IDE ( Integrated
Development Environment )

Chúng ta truy cập vào trang web và tải về chương
trình Arduino IDE phù hợp với hệ điều hành của máy mình bao gồm Windown, Mac OS
hay Linux. Đối với Windown có bản cài đặt (.exe) và bản Zip, đối với Zip thì chỉ cần giải
8


nén và chạy chương trình không cần cài đặt. Môi trường phát triển tích hợp (IDE) của
Arduino là một ứng dụng đa nền tảng được viết bằng Java.Nó được thiết kế để dành cho
các nhà phát triển và những người mới tập tành làm quen với lĩnh vực phát triển phần
mềm. Nó bao gồm một trình biên tập mã nguồn (code editor) với các chức năng như đánh
dấu cú pháp, tự động kiểm tra phù hợp dấu ngoặc và tự động canh lề, cũng như biên dịch
(complie) và tải (upload) chương trình lên bo. Một chương trình hoặc mã nguồn viết cho
Arduino được gọi là một sketch.

Hình II.1: Minh họa giao diện lập trình Arduino IDE ( Integrated Development
Environment ).

Các chương trình Arduino được viết bằng C hoặc C++. Arduino IDE đi kèm với một thư
viện phần mềm được gọi là "Wiring", từ project Wiring gốc, có thể giúp các thao tác
input/output được dễ dàng hơn. Người dùng chỉ cần định nghĩa 2 hàm để tạo ra một
chương trình vòng thực thi (cyclic executive) có thể chạy được.
Arduino IDE là nơi để soạn thảo chương trình, kiểm tra lỗi và nạp chương trình cho
Arduino. Giao diện này gồm có 3 vùng rõ ràng.
- Vùng Toolbar có chứa các phím lệnh như kiểm tra chương trình, nạp chương trình, lưu,
mở hay tạo mới chương trình.


9


Hình II.2: Minh họa vùng ToolBar trên giao diện Arduino IDE ( Integrated Development
Environment ).

Các nút chức năng có nhiệm vụ như sau.
-

Kiểm tra chương trình viết có đúng cú pháp hay không- Verify Sketch

Biên dịch chương trình và nạp vào board Arduino- Complie and upload sketch to
arduino
-

Tạo một sketch mới- New Sketch

-

Mở một sketch đã lưu trước đó- Open Sketch

-

Lưu chương trình lại- Save Sketch

Mở màn hình hiển thị Serial Monitor sử dụng cài này khi trong Sketch có lệnh in ra
màn hình hay gửi ký tự thông qua chuẩn RS232 - Open Serial Monitor
- Current tab: Sketch đang được mở hiện tại, có thể đồng thời có nhiều tab tương ứng với
nhiều sketch hiện trên thanh tab.
- Tab menu: Vào menu để chọn các chỉ dẫn.

Ngoài ra, trong Tool menu ta quan tâm các mục mạch và cổng nối tiếp như mục Board. Ở
đây việc lựa chọn bo mạch cho phù hợp với loại bo mà chúng ta đang sử dụng đóng vai
trò hết sức quan trọng. Nếu sử dụng loại bo mạch khác thì phải chọn đúng loại bo mạch,
nếu chọn sai thì nạp chương trình vào chip sẽ bị báo lỗi.

10


Hình II.3: Minh họa chọn board Arduino phù hợp.

Hình II.4: Minh họa chọn cổng COM giao tiếp phù hợp.

Cổng giao tiếp giữa máy tính và Board được thiết lập thông qua tab Serial Port: đây là
nơi lựa chọn cổng COM của Arduino. Khi chúng ta cài đặt driver thì máy tính sẽ hiện
thông báo tên cổng COM của Arduino là bao nhiêu( xem ở phần Device Manager), ta
chỉviệc vào Serial Port chọn đúng cổng COM để nạp chương trình, nếu chọn sai thì
không thể nạp chương trình cho Arduino được.
- Vùng viết chương trình được đánh số dòng như hình vẽ. Đây là nơi để viết các dòng
lệnh điều khiển hoạt động của VĐK.
11


Hình II.5: Minh
vùng viết chương
trình.

họa

Nội dung trong
void

setup()
{……} là các
khai báo ban đầu
cấu hình ngõ vào
có sử dụng cảm
biến
hay
không…

như
ra,

Nội dung trong
void
loop()
{……} là các dòng lệnh thực hiện một cách liên tục như đặt các chân ở logic cao/thấp,
tạo xung PWM…..
- Vùng thông báo chính là vùng có giao diện Đen và nằm ở cuối của Giao diện, các quá
trình nạp chương trình thành công hay các lỗi, vị trí lưu file đều được thông báo ở vùng
này.

Hình II.6: Minh họa vùng thông báo.

- Current line number: Dòng của con trỏ hiện tại (Ví dụ 33).
- Current arduino model: Dòng board Arduino đang sử dụng (Ví dụ Intel Galileo Gen2).
- Your system’s name for current USB port: Tên cổng giao tiếp giữa máy tính và Vi điều
khiển ( Ví dụ COM1 ).

12



BÀI 01: ĐIỀU KHIỂN LED HOẠT ĐỘNG BẰNG MÁY TÍNH
1.1. Lưu đồ thuật toán điều khiển
1.1.1. Bằng phần mềm Arduino IDE ( Integrated Development Environment )
Bắt đầu

Khai báo giao tiếp cổng
COM

Đọc dữ liệu nhận được từ cổng COM
Thiết lập trạng thái đầu của các Led đơn và Laze

Nhận các ký tự đặc biệt
Sai

Đúng
Tắt bật các Led đơn hoặc Led RGB

Nhận ký tự
A – Z hoặc số

Sai

Đúng
Tắt nguồn

Tắt nguồn
Đúng
Kết thúc


13


1.1.2. Bằng phần mềm Visual Studio
Bắt đầu

Khai báo chọn cổng COM

Kiểm tra chọn cổng

Sai

Đúng
Tạo kết nối

Kiểm tra nút nhấn điều khiển LED
Sai

Đúng
Gữi các kí tự đặc biệt qua cổng COM

Kiểm tra nút nhấn gữi mã morse
Sai

Đúng
Gữi các kí tự trong ô textbox qua cổng COM

Kết thúc

14



1.2. Hình ảnh cửa sổ điều khiển chụp màn hình PC ( Personal Computer )

Hình 1: Giao diện chương trình điều khiển LED và bảng Morse.

1.3. Kết quả thực hiện trong thực tế và nhận xét
1.3.1. Kết quả thực hiện trong thực tế
Khi điều khiển phần mềm Arduino Intel Galileo 2 và Visual Studio thì mạch giao tiếp với
cổng COM khá ổn định, chúng ta có thể điều khiển các led1, led 2, led 3, led 4. led 5 bật
và tắt luân phiên hay tất cả đều sang và đều tắt.
1.3.2. Nhận xét
Khi điều khiển thì Kit Arduino Galileo 2 phải có code tương ứng với Visual Studio mới
đạt được yêu cầu đặt ra của bài.
Chúng ta điều khiển các led bật và tắt bằng cách cho nó ở trạng thái mức thấp và mức cao
gắn với các chân led tương ứng trong Arduino chúng ta yêu cầu.

1.4. Hai đoạn code tương ứng với hai chương trình viết trên Arduino
Integrated Development Environment hay Visual Studio
1.4.1. Code trên Arduino Intel Galileo Gen 2
byte rbg[]={6, 5, 3}; // Khai báo các chân tín hiệu
byte led[]={8,9,10,11,12};
15


int led1 = 8;
int led2 = 9;
int led3 = 10;
int led4 = 11;
int led5 = 12;

int Red = 6;
int Green =5;
int Blue = 3;
String data;
void setup() // vòng khởi tạo
{
// Khai báo giá trị ban đầu cho các chân điều khiển.
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
16


digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
pinMode(Red, 0);
pinMode(Green, 0);
pinMode(Blue, 0);
Serial.begin(9600); // khai báo cổng serial và tốc độ truyền là 9600
}
void loop() // vòng lặp
{

data = Serial.readString(); // đọc giá trị nhận được.
if(data == "chayvong") // chạy vòng bắt đầu bằng red, green, blue.
{
for(int r=0; r<100; r++)
{
for(int l=0; l<4; l++)
{
analogWrite(rbg[l], 255);delay(20);
analogWrite(rbg[l], 0);delay(10);
}
}
}
if(data=="sangdan") // đèn red sáng dần.
{
17


for (int lucdau=0;lucdau<255;lucdau++)
{
analogWrite(Red, lucdau);
delay (30);
}
}
if(data=="tatdan") // đèn red tắt dần.
{
for(int lucdau=255;lucdau>0;lucdau--)
{
analogWrite(Red, lucdau);
delay(30);
}

}
if(data=="led1sang") // đèn led1 sáng.
{
digitalWrite(led1, HIGH);
}
if(data=="led1tat") // đèn led1 tắt.
{
digitalWrite(led1, LOW);
}
if(data=="led2sang") // đèn led2 sáng.
18


{
digitalWrite(led2, HIGH);
}
if (data=="led2tat") // đèn led2 tắt.
{
digitalWrite(led2, LOW);
}
if(data=="led3sang") // đèn led3 sáng.
{
digitalWrite(led3, HIGH);
}
if(data=="led3tat") // đèn led3 tắt.
{
digitalWrite(led3, LOW);
}
if(data=="led4sang") // đèn led4 sáng.
{

digitalWrite(led4, HIGH);
}
if(data=="led4tat") // đèn led4 tắt.
{
digitalWrite(led4, LOW);
}
19


if(data=="led5sang") // đèn led5 sáng.
{
digitalWrite(led5, HIGH);
}
if(data=="led5tat") // đèn led5 tắt.
{
digitalWrite(led5, LOW);
}
if(data=="5ledsang") // 5 led sáng cùng lúc.
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
if(data=="5ledtat") // 5 led tắt cùng lúc.
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);

digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
20


}
if(data=="red") // Red sáng.
{
analogWrite(Red, 255);
}
if(data=="green") // Greeen sáng.
{
analogWrite(Green, 255);
}
if(data=="blue") // Blue sáng.
{
analogWrite(Blue, 255);
}
if(data=="rbgtat") // Đèn RBG tắt.
{
analogWrite(Red, 0);
analogWrite(Green, 0);
analogWrite(Blue, 0);
}
if(data == "do")
{
analogWrite(Red, 255);
analogWrite(Green, 0);
21



analogWrite(Blue, 0);
}
if(data == "xanh")
{
analogWrite(Red, 0);
analogWrite(Green, 255);
analogWrite(Blue, 0);
}
if(data == "xanhd")
{
analogWrite(Red, 0);
analogWrite(Green, 0);
analogWrite(Blue, 255);
}
if(data == "rbgbat") // RBG sáng.
{
analogWrite(Red, 255);
analogWrite(Green, 255);
analogWrite(Blue, 255);
}
if(data=="5ledsangdan") // 5 led sáng dần.
{
for(int i=0; i<5;i++)
22


{
digitalWrite(led[i], 1);delay(100);
}

}
if(data=="5ledtadan") // 5 led tắt dần.
{
for(int i=0; i<5;i++)
{
digitalWrite(led[i], 0);delay(100);
}
}
/// Mã morse.
if( data == "A")
{
cham();gach();
}
if ( data == "B")
{
gach();cham();cham();cham();
}
if ( data == "C")
{
gach();cham();gach();cham();
23


}
if ( data == "D")
{
gach();cham();cham();
}
if( data == "E")
{

cham();
}
if( data == "F")
{
cham();cham();gach();cham();
}
if( data == "G")
{
gach();gach();cham();
}
if( data == "H")
{
cham();cham();cham();
}
if ( data == "I")
{
24


cham();cham();
}
if( data == "J")
{
cham();gach();gach();gach();
}
if( data == "K")
{
gach();cham();gach();
}
if( data == "L")

{
cham();gach();cham();cham();
}
if( data == "M")
{
gach();gach();
}
if( data == "N")
{
gach();cham();
}
if( data == "O")
25


×