王剛
摘要:近年來隨著計算機技術,移動信息以及物聯網技術的不斷發展,移動互聯網的成熟運用,物聯網為我們的生活帶來了很大的方便,越來越多的應用場合中需要嵌入式系統進行無線傳輸。本文研究了Arduino系統利用無線串口實現雙機多通道數據傳輸的方法,實現了數據傳輸時的同步與校驗。
關鍵詞: Arduino串口多通道 數據傳輸
中圖分類號:TN923 文獻標識碼:A 文章編號:1007-9416(2016)06-0000-00
1 需求概述
Arduino是當前最流行的開源電子平臺之一,易于上手節約學習成本,縮短了開發周期,從日常生活中的智能小裝置到3D打印機,Arduino讓人們發現很多以前只有專業人員才能進入的領域普通愛好者也是可以涉足的。
在一個五軸機械臂項目中,需要使用5個電位器對機械臂的相應關節進行遙控,一般通用的采用PPM控制方式的模型遙控器只有兩個十字搖桿,在數量上以及操作方式上都無法滿足需求,因此筆者用兩個Arduino實現了多通道控制信號的發送與接收。
2 Arduino的串口通信
在單片機的實際應用中,串口通信非常普遍,只需少量幾根線就能和其他串口設備通訊。 Arduino是通過USB轉成TTL串口下載程序的,數字接口D0和D1就是TTL串口中的RX和TX。Arduino中提供了十余個串口相關函數,使用Serial.begin()指定傳輸時的波特率即可,例如Serial.begin(9600),表示速率為9600bit/s,收發雙方的速率要保持一致。在程序中,使用Serial.print() 函數可以從串口輸出我們需要的變量或者字符串信息(以ASCII文本方式),利用IDE中的串口監視器,開發者可以查看單片機輸出的信息,這也是調試程序的主要手段之一。此外,還有一個Serial.write()方法,不同于print方法,此方法是把二進制數據輸出到串口。
3 收發實現
以5通道遙控為例,筆者設計的收發同步與校驗方案如下:發射端的Arduino每組發送7個數據,第1個為同步起始標記(255,即8個二進制1),然后是5個控制信號(s1~s5),每個信號用于操作指定關節的舵機,此外還需要一個校驗數據,本文采用了較簡單的校驗方式,把5路信號值相加作為校驗數據一并發送出去。本項目中采用的是數據發送方式,Serial.write()方法發送的數據只能有1個字節,也就是0-255之間的整數。如果s1到s5累加得到的數據超過255,系統會舍棄高位部分,只發送低位的字節。
因為串口接收的數據只有1個字節,所以計算校驗數據時需要把s1到s5的和強制類型轉換為byte類型,這樣才可以和接收到的校驗數據serv[6]做比較,在接收端的串口監視器中可以看到,每一秒都會接收到一組數據,和發送方傳出的數據完全一致,收發功能順利實現。
圖1所示,Arduino中的串口傳輸非常簡單方便,我們可以看到在程序中沒有任何涉及藍牙或者其他無線串口模塊的特殊命令,本文中筆者使用的是基于SI4432芯片的無線串口透傳模塊,只需要兩個配置相同的模塊分別接在收發兩端的Arduino上即可(模塊和Arduino的RX和TX接口交叉連接),如果使用藍牙模塊,其電路接法與程序都不需要變化,只需要提前使用AT命令給2個藍牙模塊進行主從配對即可。
因為Arduino程序上傳也是通過串口實現的,為了避免沖突,在更新程序時需要先把串口設備的RX/TX線斷開,否則無法上傳程序。
參考文獻
[1]趙志,著.Arduino開發實戰指南[M].機械工業出版社,2015.
[2]陳呂洲,著.Arduino程序設計基礎[M].北京航天航空出版社,2014.