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 Tấn Phú
2- Trương Công Nhật
GIÁO VIÊN HƯỚNG DẪN :
Thầy : Nguyễn Nhật Quang
Huế -2017
Trang 2MỤC LỤ
I HIỂN THỊ LCD 16x2 THEO NỘI DUNG NHẬP TỪ BÀN PHÍM BẰNG MÁY TÍNH
1.1 Lưu đồ thuật toán điều khiển……….1
1.2 Bằng phần mềm Arduino UNO R3………1
1.3 Bằng phần mềm Visual Studio……… 3
1.4 Hình ảnh của sổ chụp từ màn hình PC……… 4
1.5 Kết quả thực hiện trong thực tế và nhận xét……… 4
1.5.1 kết quả thực hiện trong thực tế………4
1.5.2 nhận xét……… 4
1.6 Hai đoạn code tương ứng cho hai chương trình viết trên Arduino uno r3……….5
1.6.1 Code viết trong Arduino ………6
1.6.2 Code viết trong Visual Studio……… 8
BÀI 02: ĐIỀU KHIỂN CƠ BƯỚC BẰNG MÁY TÍNH 2.1 Lưu đồ thuật toán điều khiển……….9
2.1.1 Bằng phần mềm Arduino UNO R3………9
2.1.2 Bằng phần mềm Visual Studio……….10
2.2 Hình ảnh của sổ chụp từ màn hình PC………11
2.3 Kết quả thực hiện trong thực tế và nhận xét………11
2.3.1 kết quả thực hiện trong thực tế……… 11
2.3.2 nhận xét……….11
2.6 Hai đoạn code tương ứng cho hai chương trình viết trên Arduino uno r3………… 12
i
Trang 32.6.1 Code viết trong Arduino ……… 12
2.6.2 Code viết trong Visual Studio……… 13
BÀI 03 : ĐIỀU KHIỂN ĐỘNG CƠ DC BẰNG MÁY TÍNH 3.1 Lưu đồ thuật toán điều khiển……… 14
3.1.1 Bằng phần mềm Arduino UNO R3……… 14
3.1.2 Bằng phần mềm Visual Studio……….15
3.2 Hình ảnh giao diện chụp từ màn hình PC………16
3.3 Kết quả thực hiện trong thực tế và nhận xét………16
3.3.1 kết quả thực hiện trong thực tế……… 16
3.3.2 nhận xét……….16
3.4 Hai đoạn code tương ứng cho hai chương trình viết trên Arduino uno r3………… 17
3.4.1 Code viết trong Arduino ……… 18
3.4.2 Code viết trong Visual Studio……… 19
BÀI 04: GIAO TIẾP GIỮA CẢM BIẾN NHIỆT ĐỘ VÀ ĐỘ ẨM BẰNG MÁY TÍNH 4.1 Lưu đồ thuật toán điều khiển……… 19
4.1.1 Bằng phần mềm Arduino UNO R3……… 19
4.1.2 Bằng phần mềm Visual Studio……….20
4.4 Hình ảnh của sổ chụp từ màn hình PC……….21
4.5 Kết quả thực hiện trong thực tế và nhận xét………21
4.5.1 kết quả thực hiện trong thực tế……… 21
4.5.2 nhận xét……….21
4.6 Hai đoạn code tương ứng cho hai chương trình viết trên Arduino uno r3………… 22
4.6.1 Code viết trong Arduino ……… 22
Trang 44.6.2 Code viết trong Visual Studio……… 23
BÀI 05: HIỂN THỊ LCD 16x2,ĐIỀU KHIỂN ĐỘNG CƠ DC VÀ ĐỘNG CƠ BƯỚC,ĐO NHIỆT ĐỘ ĐỘ ẨM BẰNG MÁY TÍNH 5.1 Lưu đồ thuật toán điều khiển……… 24
5.2 Bằng phần mềm Arduino UNO R3……… 24
5.3 Bằng phần mềm Visual Studio……… … 25
5.4 Hình ảnh của sổ chụp từ màn hình PC……….26
5.5 Kết quả thực hiện trong thực tế và nhận xét………26
5.5.1 kết quả thực hiện trong thực tế……… 26
5.5.2 nhận xét……….26
5.6 Hai đoạn code tương ứng cho hai chương trình viết trên Arduino uno r3………… 27
5.6.1 Code viết trong Arduino ……… 28
5.6.2 Code viết trong Visual Studio……… 39
KẾT LUẬN………
TÀI LIỆU THAM KHẢO………
iii
Trang 5DANH SÁCH CÁC HÌNH VẼ
Hình 1: Minh họa sơ đồ khối board Arduino uno r3……… vi
Hình 2: Minh họa hình ảnh thực tế VĐK ATmega328……….vii
Hình 3: minh họa các cổng vào ra của boar Arduino UNO R3………viii
Hình 4: Minh họa giao diện lập trình Arduino IDE ( Integrated Development Environment )………x
Hình 5: Minh họa vùng ToolBar trên giao diện Arduino IDE ( Integrated Development Environment )……….x
Hình 6: Minh họa chọn board Arduino phù hợp………xi
Hình 7: Minh họa chọn cổng COM giao tiếp phù hợp……… xii
Hình 8: Minh họa vùng viết chương trình……….xii
Hình 9: Minh họa vùng thông báo……… xiii
Hình 10: Giao diện chương trình hiển thị LCD (Liquid Crystal Display)………4
Hình 11: Giao diện chương trình điều khiển động cơ một chiều ……… 11
Hình 12: giao diện điều khiển động cơ servo………16
Hình 13: Giao diện chương trình đo nhiệt độ……… 21
Hình 14: Giao diện điều khiển toàn bộ……… 26
Trang 6DANH 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…
IDE Integrated Development
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
UART Universal Asynchronous
Reveiver - Transmitter Bộ truyền nhận khôngđồng bộ
USB Universal Serial Bus Bộ kết nối các thiết bị
ngoại vi
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
v
Trang 7MỞ ĐẦU
Mạch Arduino uno là dòng mạch rất phổ biến,khi mới bắt đầu làm quen, lập trình vớiarduino thì mạch Arduino thường nói tới chính là Arduino uno.Hiện nay dòng mạch này
đã phát hiện đến thế hệ thứ 3(Arduino uno r3)
Arduino uno là dòng cơ bản,linh hoạt,thường được sử dụng cho người mới bắt đầu.Bạn
có thể sử dụng các dòng arduino khác như: Arduino MEGA,Arduino NANO…Nhưngvới những ứng dụng cơ bản thì mạch Arduino uno là lựa chọn phù hợp nhất
Hình 1: Minh họa sơ đồ khối board Arduino uno r3
NGUỒN CẤP CHO Arduino UNO R3:
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc 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 pinvuô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ượtquá ngưỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO
Trang 8Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8, ATmega168,ATmega328 Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LEDnhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ - độ ẩm vàhiển thị lên màn hình LCD,… hay những ứng dụng khác.
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
Hình 2: Minh họa hình ảnh thực tế VĐK ATmega328
CÁC CHÂN NĂNG LƯỢNG:
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 tiếp 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 5V đầ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
vii
Trang 9IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chânnày,và nó luôn là 5V.
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Ω
CÁC CỔNG VÀO RA :
Hình 3: minh họa các cổng vào ra của boar Arduino UNO R3
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 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
Trang 10nố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ầngiao 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) Ngoà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ácthiết bị khác
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L) Khi bấm nút Reset,
bạn sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân nàyđược người dùng sử dụng, LED sẽ sáng
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ý
ix
Trang 11dấ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 4: 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
Hình 5: Minh họa vùng ToolBar trên giao diện Arduino IDE ( Integrated Development
Environment ).
Trang 12Cá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
Hình 6: Minh họa chọn board Arduino phù hợp.
xi
Trang 13Hình 7: 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 14dò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 xungPWM…
- 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ùngnày
Hình 9: 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
xiii
Trang 15BÀI 01: HIỂN THỊ LCD 16x2 THEO NỘI DUNG NHẬP TỪ BÀN PHÍM
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 )
Trang 171.1.2 Bằng phần mềm Visual Studio
Trang 18
1.2 Hình ảnh cửa sổ điều khiển chụp từ màn hình PC ( Personal Computer )
Hình 10: Giao diện chương trình hiển thị LCD (Liquid Crystal Display)
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 và mạch điều khiển hiển thị được dữ liệu bằng chương trình hiểnthị LCD ở hai dòng ( dòng một và dòng hai )
1.3.2 Nhận xét
Khi điều khiển thì Kit Arduino Uno r3 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
4
Trang 191.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 Uno r3
#include <LiquidCrystal.h> //khai báo thư viện lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //khai báo chân
lcd.init(); // khoi dong lcd
lcd.backlight(); //bat den nen lcd
Serial.begin(9600); //khai báo tố1c độ truyề5n
Serial.println("Nhap Chuoi Can Hien THi Len LCD 16x2");
Trang 221.4.2 Code trong Visual Studio
System.EventArgs) Handles MyBase.Load
Combobox1.Datasource=SerialPorts1.GetPortNames
SerialPort1.PortName = ComboBox1.Text
EndSub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
SerialPort1.Open()
EndSub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
SerialPort1.Write(TextBox1.text)
EndSub
8
Trang 23BÀI 02: ĐIỀU KHIỂN HOẠT ĐỘNG ĐỘNG CƠ ĐIỆN MỘT CHIỀU BẰNG MÁY TÍNH
2.1 Lưu đồ thuật toán điều khiển
2.1.1 Bằng phần mềm Arduino IDE ( Integrated Development Environment )
Trang 242.1.2 Bằng phần mềm Visual Studio
10
Trang 252.2 Hình ảnh điều khiển chụp từ màn hình PC ( Personal Computer )
Hình 11: Giao diện chương trình điều khiển động cơ một chiều
2.3 Kết quả thực hiện trong thực tế và nhận xét
Trang 262.4 Hai đoạn code ứng với hai chương trình viết trên Arduino Integrated Development Environment hay Visual Studio
2.4.1 Code trên Arduino uno r3
Trang 27}
2.4.2 Code trong Visual Studio
PublicClass Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) HandlesMyBase.Load
Combobox1.DataSource=SerialPort1.GetPortNames
SerialPort1.PortNames=Combobox1.Text
EndSub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
SerialPort1.Open()
EndSub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
SerialPort1.Write("thuan")
EndSub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
SerialPort1.Write("nghich")
EndSub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
SerialPort1.Write("dung")
EndSub
Trang 28BÀI 03: ĐIỀU KHIỂN ĐỘNG CƠ SERVO BẰNG MÁY TÍNH
3.1 Lưu đồ thuật toán điều khiển
3.1.1 Bằng phần mềm Arduino IDE ( Integrated Development Environment)
14