<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 【學(xué)霸帶節(jié)奏】教你DIY跳舞機(jī)器人之“軟件部分”(連載中)

          【學(xué)霸帶節(jié)奏】教你DIY跳舞機(jī)器人之“軟件部分”(連載中)

          作者:郭曉宇 時(shí)間:2018-03-26 來源:電子產(chǎn)品世界 收藏

          通過上周介紹的機(jī)器人硬件電路部分和3D打印部分,你是否已經(jīng)打造出一款屬于自己的機(jī)器人?這周小編將要給大家介紹機(jī)器人的軟件部分,讓屬于你自己的小π動(dòng)起來。

          本文引用地址:http://www.ex-cimer.com/article/201803/377380.htm

          一、軟件架構(gòu)與通信協(xié)議

          1、軟件架構(gòu)

          在開始前,我們來復(fù)習(xí)一下第一期文章中提到的軟件架構(gòu)圖。

          首先介紹一下軟件的架構(gòu),小π機(jī)器人的軟件部分主要包含手機(jī)APP程序、上位機(jī)程序、主控單片機(jī)程序和從機(jī)程序構(gòu)成。本周主要講解主控單片機(jī)程序和從機(jī)程序,下周將講解手機(jī)APP程序和上位機(jī)程序。小π機(jī)器人的軟件架構(gòu)圖如下圖所示:

          主控單片機(jī)收到數(shù)據(jù)以后先判斷是動(dòng)作指令還是其他指令。如果是動(dòng)作指令,直接將指令發(fā)給動(dòng)作控制單片機(jī),動(dòng)作控制單片機(jī)調(diào)用不同的數(shù)組,輸出不同的PWM,使舵機(jī)的轉(zhuǎn)過不同角度,從而實(shí)現(xiàn)各種不同動(dòng)作。如果是其他指令,比如三色RGB燈的控制,解析出三色的數(shù)據(jù),輸出不同電壓,實(shí)現(xiàn)臉部變色功能。比如喇叭,可以播放SD卡中的音樂。

          2、通信協(xié)議

          為了方便手機(jī)與單片機(jī)之間、上位機(jī)與單片機(jī)之間、主機(jī)與從機(jī)之間的通信,我們定義了屬于自己的通信協(xié)議。

          通信協(xié)議的基本格式為<指令,參數(shù)>。

          例如動(dòng)作指令<FW,5>。其中,“<”代表指令開始;指令“FW”是英文向前forward的縮寫,代表向前的命令;英文“,”把命令和參數(shù)分隔開;參數(shù)“5”代表指令FW的參數(shù)為5;“>”代表指令結(jié)束。這句話的意思就是向前走5步。其它動(dòng)作指令也是類似的。

          燈光顏色選擇指令由三條指令構(gòu)成,分別為<R,R的參數(shù)>,<G,G的參數(shù)>和<B,B的參數(shù)>。眾所周知,紅、綠、藍(lán)是光的三原色,通過控制紅、綠、藍(lán)的比例,就可以實(shí)現(xiàn)任意顏色的輸出。R、G、B是英文紅色red、綠色green、藍(lán)色blue的首字母,分別代表紅色、綠色和藍(lán)色。R、G、B的參數(shù)變化范圍為0-255,這樣就可以變化出1600多萬種顏色。

          二、單片機(jī)選擇

          為了方便大家編寫單片機(jī)的程序,我們采用的是完全開源的Arduino系列單片機(jī)。Arduino由一個(gè)歐洲開發(fā)團(tuán)隊(duì)于2005年冬季為藝術(shù)生開發(fā),所以比較簡單,容易上手。Arduino由硬件(各種型號(hào)的Arduino板)和軟件(Arduino IDE)組成。下圖為常用的幾款A(yù)rduino。

          Arduino IDE可以在Windows、Macintosh OSX、Linux三大主流操作系統(tǒng)上運(yùn)行。Arduino語言基于wiring語言開發(fā),是對(duì) avr-gcc庫的二次封裝,不需要太多的單片機(jī)基礎(chǔ)、編程基礎(chǔ),簡單學(xué)習(xí)后,人人都可以快速的進(jìn)行開發(fā)。Arduino的硬件原理圖、電路圖、IDE軟件及核心庫文件都是開源的,在開源協(xié)議范圍內(nèi)里可以任意修改原始設(shè)計(jì)及相應(yīng)代碼。

          總之,Arduino具有跨平臺(tái)、開發(fā)簡單、開源的優(yōu)點(diǎn),所以我們采用的Arduino系列單片機(jī)。

          三、運(yùn)動(dòng)控制簡析

          小π機(jī)器人有4個(gè)自由度,換句話說,小π機(jī)器人的運(yùn)動(dòng)主要是通過控制4個(gè)舵機(jī)來實(shí)現(xiàn)的。4個(gè)舵機(jī)在一定時(shí)間內(nèi)依次轉(zhuǎn)動(dòng)不同的角度,再通過一定的排列組合,就可以實(shí)現(xiàn)前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)、后退等簡易動(dòng)作和搖頭、抬腳、晃腿、彈跳等復(fù)雜的動(dòng)作。

          舵機(jī)的輸入線共有三條,紅色中間,是電源線,一邊黑色的是地線。舵機(jī)的控制信號(hào)為周期是20ms的脈寬調(diào)制(PWM)信號(hào),其中脈沖寬度從0.5ms-2.5ms,相對(duì)應(yīng)舵盤的位置為0-180度,呈線性變化。也就是說,給它提供一定的脈寬,它的輸出軸就會(huì)保持在一個(gè)相對(duì)應(yīng)的角度上,無論外界轉(zhuǎn)矩怎樣改變,直到給它提供一個(gè)另外寬度的脈沖信號(hào),它才會(huì)改變輸出角度到新的對(duì)應(yīng)的位置上。舵機(jī)內(nèi)部有一個(gè)基準(zhǔn)電路,產(chǎn)生周期20ms,寬度1.5ms的基準(zhǔn)信號(hào),有一個(gè)比較器,將外加信號(hào)與基準(zhǔn)信號(hào)相比較,判斷出方向和大小,從而產(chǎn)生電機(jī)的轉(zhuǎn)動(dòng)信號(hào)。

          由于一次改變PWM占空比太多,舵機(jī)轉(zhuǎn)動(dòng)速度過快、轉(zhuǎn)動(dòng)角度太大,會(huì)造成動(dòng)作不協(xié)調(diào)、也不美觀,而且運(yùn)動(dòng)過快容易造成小π機(jī)器人的不平衡。所以要控制小π機(jī)器人做一個(gè)特定的動(dòng)作,只能分多次控制舵機(jī)的角度,每次只轉(zhuǎn)動(dòng)一點(diǎn)角度,延時(shí)一定時(shí)間后再次改變舵機(jī)的角度,這個(gè)延遲時(shí)間一般為幾個(gè)毫秒,這樣就可以使舵機(jī)比較平緩的轉(zhuǎn)動(dòng)相應(yīng)的角度。

          四、其余硬件部分程序

          1、藍(lán)牙模塊

             藍(lán)牙模塊使用的是HC-06,負(fù)責(zé)與手機(jī)之間進(jìn)行通信。單片機(jī)與藍(lán)牙模塊之間的通信采用的是串口通信。波特率設(shè)置為115200,設(shè)置代碼為Serial.begin(115200)。發(fā)送<FW,5>命令代碼為Serial.println(”<FW,5>”)。

          2、音頻播放模塊

            主控單片機(jī)通過模擬人按壓獨(dú)立按鍵產(chǎn)生一個(gè)脈沖信號(hào)控制藍(lán)牙音頻模塊,實(shí)現(xiàn)切換歌曲、調(diào)節(jié)音量、播放與暫停的功能。

            例如,定義播放/暫停鍵為2號(hào)端口,初始化代碼為:

            pinMode(2,OUTPUT);

            產(chǎn)生一個(gè)脈沖信號(hào)代碼為:

            digitalWrite(2,HIGH);//2號(hào)端口置為高電平

            delay(200);//延時(shí)200毫秒

            digitalWrite(2,LOW); //2號(hào)端口置為低電平

            delay(1000);//延時(shí)1秒

          3、七彩LED控制

            主控單片機(jī)產(chǎn)生三個(gè)不同PWM信號(hào)實(shí)現(xiàn)對(duì)七彩LED的控制,最終達(dá)到燈光秀的效果。

          PWM信號(hào)是數(shù)字方波,其中頻率是恒定的,但信號(hào)接通時(shí)間的一小部分(占空比)可以在0和100%之間變化。

          4、觸摸功能

            三根觸須使用的是金屬材料,人摸觸須時(shí),由于端口電平的改變觸發(fā)中斷,執(zhí)行相應(yīng)的操作。

            中斷設(shè)置代碼如下:

            pinMode( pinInterrupt, INPUT);//設(shè)置管腳為輸入

            //Enable中斷管腳, 中斷服務(wù)程序?yàn)閛nChange(), 監(jiān)視引腳變化

            attachInterrupt(digitalPinToInterrupt(pinInterrupt),onChange,CHANGE);

          5、語音互動(dòng)功能

            將語音以數(shù)組的形式存到SD卡中,每次進(jìn)行語音互動(dòng)時(shí),提取相應(yīng)的數(shù)據(jù),產(chǎn)生音頻輸出信號(hào),經(jīng)過濾波后通過喇叭播放相應(yīng)的語音。

          6、SD卡模塊

            SD卡模塊讀寫可以采用SPI模式或者SDIO模式讀寫數(shù)據(jù)。

             SD庫允許讀取和寫入SD卡,例如在Arduino以太網(wǎng)盾上。該庫支持標(biāo)準(zhǔn)SD卡和SDHC卡上的FAT16和FAT32文件系統(tǒng)。它使用簡短的8.3名稱作為文件。傳遞給SD庫函數(shù)的文件名可以包含用正斜杠分隔的路徑,例如“directory / filename.txt”。由于工作目錄始終是SD卡的根目錄,因此無論是否包含前導(dǎo)斜杠(例如,“/file.txt”等同于“file.txt”),名稱都是指同一個(gè)文件。從版本1.0開始,該庫支持打開多個(gè)文件。

             微控制器和SD卡之間的通信使用SPI,它發(fā)生在數(shù)字引腳11,12和13(在大多數(shù)Arduino板上)或50,51和52(Arduino Mega)上。另外,必須使用另一個(gè)引腳來選擇SD卡。這可以是硬件SS引腳 - 引腳10(在大多數(shù)Arduino板上)或引腳53(在Mega上) - 或調(diào)用SD.begin()時(shí)指定的另一個(gè)引腳。 請(qǐng)注意,即使您不使用硬件SS引腳,也必須將其保留為輸出或SD庫不起作用。

             這些模塊的代碼都比較簡單、網(wǎng)上也有大量的例程。需要什么程序,大家自由組合就好了。

          參考資料

          PMW:https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

          SD卡:https://www.arduino.cc/en/Reference/SD





          關(guān)鍵詞: EDA設(shè)計(jì) 小π DIY

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();