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
ĐẠ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Ẽ 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 ICSP In-Circuit Serial Programming Các chân giao tiếp SPI USB Universal Serial Bus Bộ kết nối 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 EFPROM Electronic Erasable Programmable Read Only Memory Bộ nhớ xóa điện trường ACPI Advanced Configuration and Power Interface Cấu hình cao cấp 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 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 TX Transmitter Gửi 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 liệu MỞ ĐẦU I MÔ TẢ PHẦN CỨNG Intel Galileo Intel trực tiếp phát triển sản phẩm đội ngũ phát triển Arduino chứng nhận đạt chuẩn tương thích với tảng Arduino Intel Galileo board ứng dụng sử dụng vi xử lý Intel Quark SoC X1000, vi xử lý 32 bit thuộc dòng “Santa Clara” sản xuất công nghệ System on Chip lớp Petium 32nm với mức độ tiêu thụ điện thấp Vi xử lý X1000 hoạt động với xung nhịp 400Mhz dựa tảng Intel Pentium x86 với nhớ L1 cache 16Kb Galileo thiết kế thích với chuẩn board Arduino Uno R3 Tương tự board Arduino khác, board Intel Galileo tuân theo tiêu chuẩn định tảng Arduino Các chân Digital đánh số từ chân tới 13 (kề cận chân AREF GND), chân Analog từ chân tới 5, header nguồn, header ICSP chân truyền UART tất điểm giống với Arduino Uno R3 Tất chân Galileo tuân theo chuẩn Arduino pinout 1.0 Hình I.1: Minh họa sơ đồ khối board Intel Galileo Gen Sức mạnh board Galileo tạo chủ yếu từ vi xử lý Intel Quark Soc X1000, ngồi khả tương thích với chuẩn Arduino việc nhận hỗ trợ từ nhà sản xuất vi xử lý lớn giới Intel góp phần tạo board phát triển đầy tiềm Vi xử lý 400Mhz tương thích với tập lệnh 32 bit Intel Pentium với đặc điểm sau: - Bộ nhớ cache L1 16Kb - Đơ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 - Hỗ trợ trạng thái ngủ ACPI - Một đồng hồ thời gian thực tích hợp, sử dụng pin 3V khơng có sẵn board, cấp nguồn thơng qua header - 11 Kb EEPROM lập trình thơng qua thư viện EEPROM - Bộ nhớ flash Legacy SPI 8Mb để lưu trữ firmware (hay nạp khởi động) Sketch Ở 256 Kb 512 Kb dành riêng cho việc lưu chương trình Sketch Việc upload diễn cách tự động trừ có nâng cấp thêm vào firmware - 512 Kb SRAM 256 Mb DRAM cho phép 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 thiết kế để hỗ trợ Shield có điện áp hoạt động 3,3V 5V Điện áp hoạt động lõi Galileo 3,3V Tuy nhiên, jumper board cho phép chuyển đổi thành 5V chân I/O Sự cung cấp hỗ trợ cho Shield Uno 5V thiết lập mặc định Nếu jumper bị chuyển vị trí, chuyển đổi điện áp khơng hoạt động cung cấp điện áp 3,3V chân I/O Những đầu vào Analog lại có điện áp từ 0V tới 5V vị trí jumper Sự đa cách sử dụng chân board Galileo sau: - Chức vào/ra liệu số/tương tự: + 14 chân vào kỹ thuật số đánh số từ D0 đến D13, có chân sử dụng đầu PWM với độ phẩn giải 8/12 bit Mỗi chân số sử dụng input output Điều thực nhờ vào hàm pinMode(), digitalWrite() digitalRead() trình lập trình.Các chân hoạt động mức điện áp 3.3V 5V Mỗi chân chịu dòng vào 10mA tối đa 25mA có điện trở kéo bên ( không kết nối theo mặc định ) từ 5,6kOhm tới 10kOhm + chân đầu vào analog A0 tới A5, thông qua IC chuyển đổi Analog to Digital AD7298 Mỗi chân số chúng cung cấp độ phân giải ADC 10 bit 12 bit điện áp đầu vào từ 0V tới 5V, điện áp tham chiếu 5V - Chức hỗ trợ chuẩn giao tiếp: + Bus I2C, TWI với chân SDA SCL, cạnh chân AREF + TWI: Chân A4 chân SDA chân A5 chân SCL Hỗ trợ giao tiếp TWI với thư viện hỗ trợ Wire Library Hình I.3: Minh họa chân đầu vào/ra Intel Galileo + SPI mặc định 4MHz, lập trình lên đến 25MHz Galileo khơng làm SPI slave mà SPI master, hoạt động slave phải thông qua kết nối USB client + Giao tiếp UART cấu hình tốc độ baud, giao tiếp thơng qua chân (RX) 1(TX) + ICSP: chân mạch, phần cứng header cắm vào - Chân Vin: sử dụng nguồn bên ngồi cung cấp cho Galileo thơng qua chân - Chân output 5V: cung cấp nguồn bên ngồi qua cổng USB Dòng tối đa cung cấp cho ngoại vi 800mA - Chân output 3,3V: Cung cấp 3,3V qua điều chỉnh mạch, dòng tối đa cung cấp cho ngoại vi 800mA - Chân GND chân nối đất, sử dụng với mục đích tạo mạch kín cấp nguồn cho ngoại vi - IOREF: Các chân IOREF Galileo cho phép shield đính kèm với cấu hình thích ứng với điện áp cung cấp board Điện áp chân IOREF điều khiển jumper 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 sử dụng board Galileo Việc cung cấp điện áp tham chiều từ bên ngồi khơng hỗ trợ cho Galileo, mặc định điện áp tham chiều Galileo 5V để đo điện áp đầu vào từ Analog Input Ngoài board hỗ trợ khối chức thể nhiệm vụ mở rộng sau: - Kết nối Ethernet 10/100 - Khe cắm PCI Express đầy đủ, với tính 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 trình biên dịch IDE ( Integrated Development Environment ) Chúng ta truy cập vào trang web http://arduino.cc/en/Main/Software tải chương trình Arduino IDE phù hợp với hệ điều hành máy bao gồm Windown, Mac OS hay Linux Đối với Windown có cài đặt (.exe) Zip, Zip cần giải nén 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) Arduino ứng dụng đa tảng viết Java.Nó thiết kế để dành cho nhà phát triển ngườ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 trình biên tập mã nguồn (code editor) với chức đánh dấu cú pháp, tự động kiểm tra phù hợp dấu ngoặc tự động canh lề, biên dịch (complie) tải (upload) chương trình lên bo Một chương trình mã nguồn viết cho Arduino gọi 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 viết C C++ Arduino IDE kèm với thư viện phần mềm gọi "Wiring", từ project Wiring gốc, giúp thao tác input/output dễ dàng Người dùng cần định nghĩa hàm để tạo chương trình vòng thực thi (cyclic executive) chạy Arduino IDE nơi để soạn thảo chương trình, kiểm tra lỗi nạp chương trình cho Arduino Giao diện gồm có vùng rõ ràng - Vùng Toolbar có chứa phím lệnh kiểm tra chương trình, nạp chương trình, lưu, mở hay tạo chương trình Hình II.2: Minh họa vùng ToolBar giao diện Arduino IDE ( Integrated Development Environment ) Các nút chức có nhiệm vụ sau - Kiểm tra chương trình viết có cú pháp hay khơng- Verify Sketch Biên dịch chương trình nạp vào board Arduino- Complie and upload sketch to arduino - Tạo sketch mới- New Sketch - Mở sketch lưu trước đó- Open Sketch - Lưu chương trình lại- Save Sketch Mở hình hiển thị Serial Monitor sử dụng cài Sketch có lệnh in hình hay gửi ký tự thông qua chuẩn RS232 - Open Serial Monitor - Current tab: Sketch mở tại, đồng thời có nhiều tab tương ứng với nhiều sketch tab - Tab menu: Vào menu để chọn dẫn Ngoài ra, Tool menu ta quan tâm mục mạch cổng nối tiếp mục Board Ở việc lựa chọn bo mạch cho phù hợp với loại bo mà sử dụng đóng vai trò quan trọng Nếu sử dụng loại bo mạch khác phải chọn loại bo mạch, chọn sai nạp chương trình vào chip bị báo lỗi 10 3.2 Hình ảnh điều khiển chụp từ hình PC ( Personal Computer ) Hình 3: Giao diện chương trình điều khiển động chiều động bước 3.3 Kết thực thực tế nhận xét 3.3.1 Kết thực Khi điều khiển phần mềm Arduino Intel Galileo Visual Studio mạch giao tiếp với cổng COM ổn định có kết với lý thuyết Mạch điều khiển động điện chiều động bước quay theo chiều thuận, nghịch hay dừng lại theo yêu cầu 3.3.2 Nhận xét Khi điều khiển Kit Arduino Galileo phải có code tương ứng với Visual Studio đạt yêu cầu đặt Mạch điều khiển động điện chiều động bước hoạt động tốt 45 3.4 Hai đoạn code ứng với hai chương trình viết Arduino Integrated Development Environment hay Visual Studio 3.4.1 Code Arduino Intel Galileo Gen int chieuST=3; // khai báo chân int chieuDC=3; String dk; int tocdo = 180; int delaytime = 10; void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(3,OUTPUT); pinMode(5,OUTPUT); Serial.begin(9600); // khai báo cổng Serial tốc độ truyền 9600 baus } void DC(int tocdo, int chieuDC){ if(chieuDC==1){ //quay thận động DC digitalWrite(3, LOW); analogWrite(5,tocdo); } if(chieuDC==2){ //quay ngược đong DC 46 digitalWrite(5, LOW); analogWrite(3,tocdo); } if(chieuDC==3){ //tắt động DC digitalWrite(5, LOW); digitalWrite(3, LOW); } } void ST(int chieuST, int delaytime){ if(chieuST==1){ // Steep quay thuận digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); 47 } if(chieuST==2){ // Steep quay ngược digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); delay(delaytime); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); } if(chieuST==3){ // Tắt steep digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(delaytime); } } void loop() { dk = Serial.readString(); 48 if(dk=="dcqt"){ //quay thận DC chieuDC=1; tocdo=180; } if(dk=="dcqn"){ //quay ngược DC chieuDC=2; tocdo=180; } if(dk=="ttdc"){ //tăng tốc DC if(tocdo20){ tocdo=tocdo-15; } } if(dk=="dct"){ //tắt DC chieuDC=3; } if(dk=="stqt"){ //quay thuận ST chieuST=1; 49 delaytime=10; } if(dk=="stqn"){ //quay ngược ST chieuST=2; delaytime=10; } if(dk=="stt"){ //tắt ST chieuST=3; } if(dk=="gst"){ // giảm ST if(delaytime2 ){ delaytime=delaytime-2; } } DC(tocdo,chieuDC); ST(chieuST,delaytime);} 50 3.4.2 Code Visual Studio Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Button1.Text = "ON" Then SerialPort1.PortName = ComboBox1.Text Button1.Text = "OFF" SerialPort1.Open() Me.Text = "Đã Kết nối " ElseIf Button1.Text = "OFF" Then Button1.Text = "ON" SerialPort1.Close() Me.Text = "Ngắt Kết Nối" End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SerialPort1.Write("1") End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click SerialPort1.Write("2") 51 End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click SerialPort1.Write("0") End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click SerialPort1.Write("3") End Sub Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click SerialPort1.Write("4") End Sub Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click SerialPort1.Write("5") End Sub End Class 52 BÀI 04: GIAO TIẾP GIỮA CẢM BIẾN ĐÓ NHIỆT ĐỘ - ĐỘ ẨM VÀ MÁY TÍNH 4.1 Lưu đồ thuật tốn điều khiển 4.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 biến Đoc liệu từ cảm biến Đo nhiệt độ: Voltage = reading*5.0/1024.0, Giá trị = votage*100.0 Đo độ ẩm: percent = map ( value,0,4095,100,0 ) Gữi giá trị trung bình qua cổng COM Sai Tắt nguồn Đúng Kết thúc 53 4.1.2 Bằng phần mềm Visual Studio Bắt đầu Khai báo cổng COM Kiểm tra kết nối cổng chọn cổng Sai Đúng Tạo kết nối Hiển thi nhiêt đô độ ẩm trung bình giao diện Kiểm tra nút tắt ngắt kết nối Sai Đúng Kết thúc 54 4.2 Hình ảnh cửa sổ điều khiển chụp từ hình PC ( Personal Computer ) Hình 4: Giao diện chương trình đo nhiệt độ 4.3 Kết thực thực tế nhận xét 4.3.1 Kết thực thực tế Khi điều khiển phần mềm Arduino Intel Galileo Visual Studio mạch giao tiếp với cổng COM ổn định có kết với lý thuyết Mạch điều khiển đo nhiệt độ độ ẩm thông qua cảm biến sử dụng Kit Arduino Intel Galileo 2.Viết code đo nhiệt độ độ ẩm Arduino Intel Galileo 2, hoàn thành chương trình đo nhiệt độ độ ẩm Visual Studio 4.3.2 Nhận xét Mạch điều khiển đo nhiệt độ độ ẩm có giá trị thay đổi ảnh hưởng môi trường 55 Nhiệt độ độ ẩm thay đổi liên tục cần phải tính để đưa nhiệt độ độ ẩm xác khoảng 4.4 Hai đoạn code ứng với hai chương trình viết Arduino Integrated Development Environment hay Visual Studio 4.4.1 Code Arduino Intel Galileo Gen float nhiet_do;// khai báo biến nhiệt độ void setup() // khởi tạo vòng { Serial.begin(9600); // khai báo cổng Serial tốc độ truyền 9600 } void loop() // vòng lặp { nhiet_do=analogRead(A0); // gán biến nhiệt độ tín hiệu tương tự chân A0 nhiet_do=(nhiet_do*5.0*100.0)/1024.0; // đổi giá trị điện nhiệt độ Serial.print("Nhiet (doC): "); Serial.print(nhiet_do); // Hiển thị hình Serial.println(","); int value = analogRead(A1); //khai báo biến độ ẩm vào từ chân A1 int percent = map(value, 0,1023,100,0); Serial.print("Do am (%): "); // hiển thị đổ ẩm hình Serial.println(percent); delay(2000); } 56 4.4.2 Code Visual Studio Public Class Form1 Private Sub Button1_Click(ByVal sender System.EventArgs) Handles Button1.Click As System.Object, ByVal e As If Button1.Text = "Kết Nối" Then SerialPort1.PortName = ComboBox1.Text Button1.Text = "OFF" SerialPort1.Open() Me.Text = "Đã Kết nối " Button1.Text = "Ngắt Kết Nối" ElseIf Button1.Text = "Ngắt Kết Nối" Then Button1.Text = "ON" SerialPort1.Close() Me.Text = "Ngắt Kết Nối" Button1.Text = "Kết Nối" End If End Sub Private Sub data(ByVal sender As System.Object, ByVal e As System.EventArgs) If Button1.Text = "Ngắt Kết Nối" Then lb.Text = hienthi Else lb.Text = "" End If End Sub Public hienthi As String Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 57 hienthi = SerialPort1.ReadLine() Me.Invoke(New EventHandler(AddressOf data)) End Sub End Class KẾT LUẬN Bài báo cáo soạn thảo mức draft, chưa phải bái báo cáo hoàn thiện Tuy nhiên, báo cáo dùng để soạn báo cáo nhóm để hình thành báo cáo có thống cấu trúc, format… tiện lợi cho việc tổng hợp báo cáo sau 58 TÀI LIỆU THAM KHẢO 1.Intel® Galileo Board Getting Started Guide https://communities.intel.com/docs/DOC22204 Intel® Galileo Software Release Notes https://communities.intel.com/docs/DOC21837 Galileo Schematic https://communities.intel.com/docs/DOC-21822 Galileo Reference Design https://communities.intel.com/docs/DOC-21824 59