báo cáo thực hành ghép nối máy tính với arduino, ghép nối vi xữ lý arduino với máy tính để điều khiển các thiết bị ngoại vi, như cảm biến nhiệt độ, sensor, động cơ 1 chiều DC, màn hình LCD
Trang 1ĐẠ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À
Trang 2Huế -2016
2
Trang 3MỤC LỤ
MỤC LỤC i
DANH SÁCH CÁC HÌNH VẼ iv
DANH MỤC CÁC TỪ VIẾT TẮT v
MỞ ĐẦU vii
BÀI 01: ĐIỀU KHIỂN LED HOẠT ĐỘNG BẰNG MÁY TÍNH 1
1.1 Lưu đồ thuật toán điều khiển 1
1.1.1 Bằng phần mềm Arduino IDE ( Integrated Development Environment ) 1
1.1.2 Bằng phần mềm Visual Studio 2
1.2 Hình ảnh cửa sổ điều khiển chụp màn hình PC ( Personal Computer ) 3
1.3 Kết quả thực hiện trong thực tế và nhận xét 3
1.3.1 Kết quả thực hiện trong thực tế 3
1.3.2 Nhận xét 3
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 4
1.4.1 Code trên Arduino Intel Galileo Gen 2 4
1.4.2 Code trong Visual Studio 20
BÀI 02: HIỂN THỊ LCD 16x2 THEO NỘI DUNG NHẬP TỪ BÀN PHÍM 25
2.1 Lưu đồ thuật toán điều khiển 25
2.1.1 Bằng phần mềm Arduino IDE ( Integrated Development Environment ) 25
2.1.2 Bằng phần mềm Visual Studio 26
2.2 Hình ảnh cửa sổ điều khiển chụp từ màn hình PC ( Personal Computer ) 27
2.3 Kết quả thực hiện trong thực tế và nhận xét 27
2.3.1 Kết quả thực hiện trong thực tế 27
Trang 42.3.2 Nhận xét 27
2.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 28
2.4.1 Code trên Arduino Intel Galileo Gen 2 28
2.4.2 Code trong Visual Studio 30
BÀI 03: ĐIỀU KHIỂN HOẠT ĐỘNG ĐỘNG CƠ ĐIỆN MỘT CHIỀU VÀ ĐỘNG CƠ BƯỚC BẰNG MÁY TÍNH 32
3.1 Lưu đồ thuật toán điều khiển 32
3.1.1 Bằng phần mềm Arduino IDE ( Integrated Development Environment ) 32
3.1.2 Bằng phần mềm Visual Studio 33
3.2 Hình ảnh điều khiển chụp từ màn hình PC ( Personal Computer ) 34
3.3 Kết quả thực hiện trong thực tế và nhận xét 34
3.3.1 Kết quả thực hiện 34
3.3.2 Nhận xét 34
3.4 Hai đoạn code ứng với hai chương trình viết trên Arduino Integrated Development Environment hay Visual Studio 35
3.4.1 Code trên Arduino Intel Galileo Gen 2 35
3.4.2 Code trong Visual Studio 40
BÀI 04: GIAO TIẾP GIỮA CẢM BIẾN ĐÓ NHIỆT ĐỘ - ĐỘ ẨM VÀ MÁY TÍNH .41
4.1 Lưu đồ thuật toán điều khiển 42
4.1.1 Bằng phần mềm Arduino IDE ( Integrated Development Environment) 42
4.1.2 Bằng phần mềm Visual Studio 42
4.2 Hình ảnh cửa sổ điều khiển chụp từ màn hình PC ( Personal Computer ) 43
4.3 Kết quả thực hiện trong thực tế và nhận xét 43
4.3.1 Kết quả thực hiện trong thực tế 44
4.3.2 Nhận xét 43
ii
Trang 54.4 Hai đoạn code ứng với hai chương trình viết trên Arduino Integrated Development
Environment hay Visual Studio 44
4.4.1 Code trên Arduino Intel Galileo Gen 2 44
4.4.2 Code trong Visual Studio 45
KẾT LUẬN 47
TÀI LIỆU THAM KHẢO 47
Trang 6DANH SÁCH CÁC HÌNH V
Hình I.1: Minh họa sơ đồ khối board Intel Galileo Gen 2 viii
Hình I.2: Minh họa hình ảnh thực tế board Intel Galileo Gen 2 viii
Hình II.1: Minh họa giao diện lập trình Arduino IDE ( Integrated Development Environment ) xii
Hình II.2: Minh họa vùng ToolBar trên giao diện Arduino IDE ( Integrated Development Environment ) xii
Hình II.3: Minh họa chọn board Arduino phù hợp xiii
Hình II.4: Minh họa chọn cổng COM giao tiếp phù hợp xiv
Hình II.5: Minh họa vùng viết chương trình xiv
Hình II.6: Minh họa vùng thông báo xv
Hình 1: Giao diện chương trình điều khiển LED và bảng Morse 3
Hình 2: Giao diện chương trình hiển thị LCD (Liquid Crystal Display) 27
Hình 3: Giao diện chương trình điều khiển động cơ một chiều và động cơ bước 34
Hình 4: Giao diện chương trình đo nhiệt độ 43
iv
Trang 7DANH MỤC CÁC TỪ VIẾT TẮT
COM Computer Output on Micro Cổng COM nối thiết bị
chơi game,máy in…
Environment Môi trường phát triển tíchhợp
SPI Serial Peripheral Interface Giao diện ngoại vi nối tiếp
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
Interconnect Các thành phần cấu hìnhnên cổng giao tiếp ngoại
vi theo chuẩn nối tiếp
SRAM Static Random Access Memory Bộ nhớ truy cập ngẫu
nhiên tĩnh
Memory
Bộ nhớ truy cập ngẫunhiên động
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à giaodiện nguồn
SPI Serial Peripheral Interface Giao diện giao tiếp ngoại
vi
ADC Analog digital convert Chuyển đổi tín hiệu tương
Trang 8tự qua tín hiệu số
nhịp đồng hồ
tự
JTAG Joint Test Action Group Nhóm hoạt động đo thử
liên hợp
LCD Liquid Crystal Display Màn hình tinh thể lỏng
vi
Trang 9trên nền tảng Intel Pentium x86 với bộ nhớ L1 cache 16Kb Galileo được thiết kế thíchvớ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ẩnnhấ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ácchâ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
- Đơn lõi, đơn luồng, tốc độ không đổi
Trang 10Hì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 Sketchmớ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àofirmware
- 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 áphoạt động lõi của Galileo là 3,3V Tuy nhiên, 1 jumper trên board cho phép chuyển đổithà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ếtlậ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ừ 0Vtớ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 boardGalileo như sau:
- Chức năng vào/ra dữ liệu số/tương tự:
viii
Trang 11+ 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àmpinMode(), 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 DigitalAD7298 Mỗi chân trong số chúng được cung cấp một độ phân giải ADC 10 bit hoặc 12bit 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 TWIvớ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 SPIslave mà chỉ có thể là SPI master, nó có thể hoạt động như một slave nhưng phải thôngqua 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)
Trang 12+ 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ânnà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 đacung 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ấpcho 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ạivi
- 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ểnbở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 thamchiều từ bên ngoài không được hỗ trợ cho Galileo, mặc định điện áp tham chiều củaGalileo 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ý
x
Trang 13né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ủaArduino là một ứng dụng đa nền tảng được viết bằng Java.Nó được thiết kế để dành chocá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ầnmề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ư đánhdấ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 choArduino đượ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ácinput/output được dễ dàng hơn Người dùng chỉ cần định nghĩa 2 hàm để tạo ra mộtchươ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 choArduino 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
Trang 14Hì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 toarduino
- 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 ramà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ớinhiề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 vaitrò 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
xii
Trang 15Hì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ệnthông báo tên cổng COM của Arduino là bao nhiêu( xem ở phần Device Manager), tachỉ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ònglệnh điều khiển hoạt động của VĐK
Trang 16Hình II.5: Minh họa vùng viết chương
trình.
Nội dung trong
void setup()
{……} là các
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ềukhiển ( Ví dụ COM1 )
xiv
Trang 17BÀ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 )
Sai Nhận ký tự
A – Z hoặc số Đúng
Tắt nguồn
Đúng
Trang 181.1.2 Bằng phần mềm Visual Studio
2
Kết thúc
Bắt đầu
Khai báo chọn cổng COM
Sai Kiểm tra chọn cổng
Đú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
Trang 191.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ớicổ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.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
Trang 21data = Serial.readString(); // đọc giá trị nhận được.
if(data == "chayvong") // chạy vòng bắt đầu bằng red, green, blue
Trang 27for(int i=0; i<5;i++)
Trang 30if( data == "O")
Trang 341.4.2 Code trong Visual Studio
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click
If Button1.Text = "KẾT NỐI" Then
Trang 35Button1.Text = "KÊT NỐI"
Trang 37Private Sub Button6_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button6.Click
If (ListView5.BackColor = Color.White) Then
Trang 38PrivateSub Timer1_Tick(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Timer1.Tick
If (ListView6.BackColor = Color.Red) Then
Trang 39EndIf
EndSub
Private Sub Button10_Click(ByVal sender AsSystem.Object,ByVale
As System.EventArgs) Handles Button10.Click
SerialPort1.Write(UCase(TextBox1.Text))
EndSub
EndClas