MATLAB是用于算法開(kāi)發(fā)、數據可視化、數據分析以及數值計算的高級技術(shù)計算語(yǔ)言和交互式環(huán)境。而Arduino開(kāi)發(fā)板是一種越來(lái)越受到歡迎的開(kāi)源硬件。 一個(gè)是什么都能算的軟件,一個(gè)是最火爆的開(kāi)源硬件,兩者結合能碰撞出什么樣的火花呢?筆者以Matlab軟件研究如何控制Arduino,將從Matlab制作Arduino的GUI界面和simulink應用出發(fā),探索如何使用Matlab連接和控制Arduino。 Matlab與Arduino聯(lián)合應用——GUI界面 首先介紹如何安裝配置一個(gè)基于Matlab的GUI界面,能夠實(shí)現對Arduino IO口的操作。 下圖所示為matlab中Arduino相關(guān)程序的下載界面 下載后為壓縮文件,解壓縮為Arduino IO的文件夾,打開(kāi)Matlab(筆者為2012版本),將當前工作目錄至于A(yíng)rduino IO文件夾下。 打開(kāi)Matlab的GUIDE 安裝下面方法,拖放兩個(gè)按鈕,按鈕的顯示文字可以通過(guò)雙擊后,在屬性頁(yè)下的“string”一欄下面修改,我們用兩只按鈕分別控制直流電機的轉動(dòng) 至此,我們已經(jīng)完成必要的程序的燒寫(xiě)和界面的初步編寫(xiě),下面將繼續介紹如何添加按鈕的響應函數,實(shí)現上位機的控制功能。 我們利用Matlab已經(jīng)初步設計了一個(gè)GUI界面,下面將添加必要的響應函數,演示時(shí)間的控制功能。 下圖展示如何從GUIDE進(jìn)入按鈕的編輯界面,在這里我們將添加對Arduino相應的IO口或者串口的操作。 下面是基本的操作函數實(shí)例匯總 a = arduino('COM9') 設置引腳為輸入或者輸出 a.pinMode(4,'input'); a.pinMode(13,'output'); 讀寫(xiě)引腳的狀態(tài) a.digitalRead(4) a.digitalWrite(13,0) 模擬量輸入或者輸出操作 a.analogRead(5) a.analogWrite(9, 155) 串口操作 a.serial % get serial port a.flush; % flushes PC's input buffer a.roundTrip(42) % sends 42 to the arduino and back 本例中若使用按鈕“Right-Motor”點(diǎn)擊實(shí)現IO口8置為高電平,驅動(dòng)直流電機全速轉動(dòng),則添加 global a; a=arduino('COM7'); a.pinMode(8,'output'); 在按鈕“Right-Motor”的響應函數中添加代碼段 global a; a.digitalWrite(8,(get(hObject,'Value'))) Arduino端準備 想要arduino端的控制,還需要向Arduino中燒寫(xiě)已經(jīng)下載的pde文件,其位置位于加壓縮后的Arduino IO文件夾下的pde文件中。通過(guò)usb線(xiàn)纜將Arduino uno與電腦連接,點(diǎn)擊GUI中添加的按鈕,即可實(shí)現遠端控制功能。 我們介紹了,在Matlab中建立一個(gè)Arduino GUI的過(guò)程。下面將繼續介紹如何在A(yíng)rduino端進(jìn)行軟件準備。 軟件調試可以在A(yíng)rduino連接至電腦端就可以進(jìn)行。 下面將作者自己在其中遇到或者大家可能會(huì )遇到的問(wèn)題一一總結如下: (1)已經(jīng)編寫(xiě)完成的Matlab程序已經(jīng)綁定了通信口COM8,執行Matlab程序出現如下提示 Error using arduino (line 83) Could not open port: COM8 Error in Arduinomatlab>Arduinomatlab_OpeningFcn (line 60) a=arduino('COM8'); 首先保證你的開(kāi)發(fā)板已經(jīng)連接至PC機,而且通過(guò)設備管理器查看端口是否與程序中設置的相同。 (2)在保證上述已經(jīng)完成的情況下,依然提示出錯 Error using arduino (line 54) Port COM8 already used by MATLAB 這很可能是你中間斷開(kāi)了Arduino的連線(xiàn)或者重新編譯了程序,你需要在Matlab中執行 delete(instrfind({'Port'},{'COM8'})) 然后重新連接即可。 (3)Arduino連接至PC端,但是不能燒寫(xiě)上期Blogger中的pde文件,這時(shí)候要排除IDE編譯環(huán)境中可能存在的問(wèn)題 1 下載最新的IDE環(huán)境(http://arduino.cc/en/Main/Software#toc2) 2 安裝手動(dòng)方式更新驅動(dòng) 3 注意更改軟件中TOOLs下面的“Board”和“serial port”選項,按照自己所使用Arduino進(jìn)行修改。 下面將介紹如何配置硬件外圍電路,來(lái)為實(shí)驗做最后準備。 為Arduino UNO開(kāi)發(fā)板連接外圍電路,包括直流電機、led燈等外圍器件。 使用到的元器件 下圖是Arduino與直流電機的接口電路。 我們再分析各部分功能 1 開(kāi)關(guān) 2 直流電機 3 二極管 4 MOSFE管 5 電機驅動(dòng)電源(9V) 由于A(yíng)rduino的最大驅動(dòng)電流是40mA,遠遠小于電機驅動(dòng)所需的電流。這里我們使用一個(gè)MOSFET(當然可以使用三極管代替),來(lái)使Arduion的小電流來(lái)控制電機的通斷 而電機屬于電感性負載,在啟停階段可能會(huì )由于電感存在產(chǎn)生一個(gè)很大反向電壓,可能會(huì )損害我們的MOSFET,這里使用一個(gè)二極管來(lái)使電流沿著(zhù)一個(gè)方向流動(dòng),從而保證電機對其余電路的影響。 9V電源為電機轉動(dòng)供電,當我們直接將其連接至直流電機兩側時(shí),會(huì )發(fā)現電機將會(huì )全速轉動(dòng)。 在實(shí)驗中,我們手上只有一個(gè)直流電機,所以另外一只的控制我們使用led燈來(lái)模擬,注意要接上一只220歐的電阻進(jìn)行限流。 在完成基本的軟件和硬件的準備工作后,我們現在進(jìn)入最終的測試階段。 操作順序: 1 將Arduino通過(guò)usb 線(xiàn)纜連接至PC 2 打開(kāi)Matab,將當前文件夾設為我們從matlab官網(wǎng)下載的并解壓縮的Arduino IO 3 雙擊打開(kāi)Arduinomatlab.fig,彈出控制界面 4 點(diǎn)擊按鈕觀(guān)察電機的轉動(dòng),如果在Matlab提示出錯信息,請嘗試下面解決方法 5 執行“clear”清除變量;執行“ delete(instrfind({'Port'},{'COM8'}))”,并重新拔掉再插上線(xiàn)纜以創(chuàng )建新的通信連接,重復操作步驟1。 |