<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

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

本文引用地址:http://dyxdggzs.com/article/201803/377380.htm

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

1、軟件架構

在開(kāi)始前,我們來(lái)復習一下第一期文章中提到的軟件架構圖。

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

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

2、通信協(xié)議

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

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

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

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

二、單片機選擇

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

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

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

三、運動(dòng)控制簡(jiǎn)析

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

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

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

四、其余硬件部分程序

1、藍牙模塊

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

2、音頻播放模塊

  主控單片機通過(guò)模擬人按壓獨立按鍵產(chǎn)生一個(gè)脈沖信號控制藍牙音頻模塊,實(shí)現切換歌曲、調節音量、播放與暫停的功能。

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

  pinMode(2,OUTPUT);

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

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

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

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

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

3、七彩LED控制

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

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

4、觸摸功能

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

  中斷設置代碼如下:

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

  //Enable中斷管腳, 中斷服務(wù)程序為onChange(), 監視引腳變化

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

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

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

6、SD卡模塊

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

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

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

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

參考資料

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

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





關(guān)鍵詞: EDA設計 小π DIY

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>