freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于mf09的智能清潔機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn)(編輯修改稿)

2025-02-14 14:41 本頁面
 

【文章內(nèi)容簡介】 在液晶顯示器中,加以按鍵的輔助可以進(jìn)行對程序的選擇,USB的連接,系統(tǒng)的復(fù)位,EEPROM的編輯,AI的測試功能,~: 系統(tǒng)復(fù)位 程序選擇 連接USB 參數(shù)調(diào)節(jié) 聲控啟動我們知道振動產(chǎn)生聲音,而振動可以通過電子元件如麥克風(fēng)等轉(zhuǎn)化為電壓信號,而一個(gè)復(fù)雜的信號可以通過傅里葉變換等價(jià)為不同頻率的正弦信號的疊加,而這些頻率就組成了其音頻的頻譜。智能吸塵機(jī)器人上的麥克風(fēng)(microphone)是能夠識別聲音聲強(qiáng)大小的聲音傳感器,在運(yùn)行機(jī)器人的時(shí)候,可以通過聲控的方式進(jìn)行啟動。在本課題中,是采用聲控的方式啟動智能吸塵機(jī)器人,感聲元件麥克風(fēng)可以通過AI口進(jìn)行讀取聲音強(qiáng)度的大小,如下面的代碼所示,如果聲音強(qiáng)度大于30分貝,就跳出循環(huán),進(jìn)行啟動。 resettime()。 // 聲音啟動 while(1){ if((AI(0) = 30)||seconds ()8){ //聲音強(qiáng)度大于30或者延時(shí)8秒 break。 } } 第4章 吸塵機(jī)器人的軟件設(shè)計(jì)智能吸塵機(jī)器人通過對MF09滅火機(jī)器人的整體改裝,在硬件方面已經(jīng)符合競賽項(xiàng)目的要求,可是,好的硬件分析與設(shè)計(jì),還是不能完成整體的功能實(shí)現(xiàn)。軟件與硬件要分別合理實(shí)現(xiàn),才可以發(fā)揮基于MF09滅火機(jī)器人的最佳功能效果。因此,本章通過對智能機(jī)器人主要的模塊功能代碼編寫,以良好的代碼契合硬件的設(shè)計(jì),以達(dá)到對項(xiàng)目的高效控制。 軟件設(shè)計(jì)概況 全程軟件流程圖智能吸塵機(jī)器人在場地中的運(yùn)行,通過紅外線測距傳感器檢測到墻壁和墻壁旁邊的障礙物,通過控制器控制電機(jī)進(jìn)行相應(yīng)的轉(zhuǎn)動,避開障礙物,然后通過地面灰度傳感器檢測判斷是否到達(dá)二樓,如果到達(dá)則繼續(xù)檢測光線的強(qiáng)弱,以防機(jī)器人從二樓跌落,從而進(jìn)行二樓的面積遍布,下到一樓繼續(xù)遍歷剩下的面積并回到起點(diǎn)。: 軟件流程圖對于總體的軟件設(shè)計(jì),都是基于硬件的固定狀態(tài)下,如果有一個(gè)紅外線測距傳感器(PSD)或者一個(gè)灰度傳感器出現(xiàn)了問題,那么整個(gè)過程都會受到影響,有可能碰到墻壁,也有可能碰到障礙物致使沒有矯正。比賽時(shí)有賽前調(diào)試,防微杜漸。 全程函數(shù)定義對于整個(gè)項(xiàng)目全程,主要分為三個(gè)部分,第一個(gè)部分為智能吸塵機(jī)器人在第一層樓中進(jìn)行地面的清潔,即對地面的面積覆蓋;void firstFloor_Running()。 第二個(gè)部分是智能吸塵機(jī)器人對于二樓的地面清潔;void secondFloor_Running()。第三個(gè)部分是智能吸塵機(jī)器人對于回家時(shí)候進(jìn)行對地面的清潔;void goHome_Running()。通過三個(gè)函數(shù)體的實(shí)現(xiàn),完成了智能吸塵機(jī)器人遍歷面積的設(shè)計(jì)方案,以下將對詳細(xì)的函數(shù)設(shè)計(jì)進(jìn)行講解,主要介紹MF09機(jī)器人底層驅(qū)動的支持以及對實(shí)現(xiàn)調(diào)試,矯正,檢測函數(shù)的編寫。 驅(qū)動支持在進(jìn)行編寫實(shí)現(xiàn)函數(shù)的時(shí)候,基于微控制器STR911FAM44的MF09滅火機(jī)器人的底層的驅(qū)動都封裝在了函數(shù)庫中,因此,在進(jìn)行設(shè)計(jì)代碼時(shí),無需改動底層驅(qū)動,只需要對實(shí)現(xiàn)的功能進(jìn)行編寫即可,較好的體現(xiàn)了軟件的可重用性。 硬件初始化初始化微處理器STR911FAM44的各種硬件資源:void InitArmRobot(void)。void InitArmRobot(void) { ifdef DEBUG debug()。 endif /*Configure PLL as clock source @100MHZ*/ MCLK_Config (PLL_100)。 //MCLK_Config (PLL_96)。 //MCLK_Config (PLL_66)。 //MCLK_Config (PLL_48)。 //MCLK_Config (OSC_Clock)。 /*初始化GPIO2*/ /* Enable GPIO9 clock */ SCU_APBPeriphClockConfig(__GPIO2 , ENABLE)。 /* GPIO Configuration */ /*,,*/ GPIO_DeInit(GPIO2)。 = GPIO_PinOutput。 = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3 | GPIO_Pin_2。 = GPIO_OutputAlt1。 = GPIO_Type_PushPull 。 GPIO_Init (GPIO2, amp。GPIO_InitStructure2)。 /*初始化GPIO5*/ /*,,*/ SCU_APBPeriphClockConfig(__GPIO5 , ENABLE)。 GPIO_DeInit(GPIO5)。 = GPIO_PinOutput。 = GPIO_Pin_All。 = GPIO_OutputAlt1。 = GPIO_Type_PushPull 。 GPIO_Init (GPIO5, amp。GPIO_InitStructure5)。 /*初始化GPIO6*/ /*,*/ SCU_APBPeriphClockConfig(__GPIO6 , ENABLE)。 GPIO_DeInit(GPIO6)。 = GPIO_PinInput。 = GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7。 = GPIO_InputAlt1。 = GPIO_Type_PushPull 。 GPIO_Init (GPIO6, amp。GPIO_InitStructure6)。 /**/ = GPIO_PinOutput。 = GPIO_Pin_1。 = GPIO_OutputAlt1。 = GPIO_Type_PushPull 。 GPIO_Init (GPIO6, amp。GPIO_InitStructure6out)。 //復(fù)位avr芯片 AVR_INIT()。 //AD采樣初始化 AD_INIT()。 //FLASH_INIT()。 //串口初始化 UART_INIT()。 //電機(jī)驅(qū)動PWM初始化 PWM_INIT()。 //實(shí)時(shí)時(shí)鐘初始化 RealTime_INTT()。 //I2C總初始化 InitI2C(I2CFEC)。 InitLCD()。 SetMoto_PWMConfig(1000,90)。 SetMoto_PowerConfig(0,)。 SetMoto_PowerConfig(1,)。 SetMoto_PowerConfig(2,)。 SetMoto_PowerConfig(3,)。 SetPrintf2VLCD(0)。//printf語句將打印到緩沖區(qū)還是直接到屏幕,0直接屏幕,1到緩沖區(qū) //跳轉(zhuǎn)到用戶主函數(shù) //main()。 Printf(\t)。}對所有硬件初始化之后,就相當(dāng)于打開了所有硬件的開關(guān),這個(gè)時(shí)候就可以通過對相應(yīng)的硬件編寫相應(yīng)的操縱函數(shù)。 電機(jī)的操縱函數(shù)設(shè)置電機(jī)全局功率, 任何電機(jī)功率參數(shù)的設(shè)定都會乘以該函數(shù)設(shè)定值,取得最終的設(shè)定功率;void SetMoto_PowerConfig(unsigned char channel,float SpeedRatio)。設(shè)置電機(jī)全局PWM參數(shù)。為了適應(yīng)不同類型的驅(qū)動器,可以設(shè)置全局PWM設(shè)備產(chǎn)生需要的PWM頻率和最大PWM占空比(最大電機(jī)功率);void SetMoto_PWMConfig(unsigned int PWMFEQ,unsigned char UpperSpeed)。啟動電機(jī);void SetMoto(int channel,int speed)。使用電機(jī)MOTO_0和MOTO_1,驅(qū)動機(jī)器人運(yùn)動;void Drive(signed char iVL, signed char iVR)。同時(shí)設(shè)置四路電機(jī)參數(shù);void SetMotor(unsigned long iMask, signed char iV0, signed char iV1, signed char iV2, signed char iV3)。四路電機(jī)全部停止運(yùn)行;void Stop(void)。停止所選通道電機(jī)。void StopMoto(unsigned char channel)。通過以上的函數(shù)實(shí)現(xiàn),可以很好的控制電機(jī)的運(yùn)動,轉(zhuǎn)彎,行進(jìn)以及停止。 全局參數(shù)存儲智能吸塵機(jī)器人中含有512 字節(jié)的全局參數(shù)保存器(EEPROM 非易失性存儲器)。該存儲器在復(fù)位,斷電等情況下仍然可保證其數(shù)據(jù)不丟失。程序可以應(yīng)用此存儲器將參數(shù)(例如:傳感器閥值,變量)任意保存和讀取。用戶的策略程序中參數(shù)調(diào)節(jié)將不再需要PC 的參與。大大提高調(diào)節(jié)參數(shù)的效率和準(zhǔn)確度。在調(diào)試機(jī)器人的時(shí)候,這個(gè)性能極大的方便了調(diào)節(jié)參數(shù)值的效率,在程序中,用到了三個(gè)全局參數(shù)的設(shè)計(jì),分別是:速度因子,用于計(jì)算實(shí)際走的時(shí)間,值越大走得越少(摩擦力?。?摩擦力大:40);int SPEED_FECTOR = 。角度因子,用于計(jì)算實(shí)際轉(zhuǎn)的角度,值越大轉(zhuǎn)得越少(摩擦力?。?摩擦力大:120);int ANGLE_FECTOR = 128。地面灰度設(shè)置。int GROUND_BRIGHT = 45。全局參數(shù)的設(shè)置,確實(shí)提高了改變參數(shù)的效率,節(jié)省了很多的時(shí)間去完成其他的工作,在程序中通過int EE(unsigned int uiAddress)函數(shù)完成對全局參數(shù)的使用,具體的使用方法如下所示:SPEED_FECTOR = EE(0)。 //速度因子外部調(diào)節(jié)ANGLE_FECTOR = EE(1)。 //角度因子外部調(diào)節(jié)GROUND_BRIGHT = EE(2)。 //地面灰度外部調(diào)節(jié)所以,一個(gè)好的項(xiàng)目的實(shí)現(xiàn),參數(shù)的設(shè)定一定是所有參賽者繁瑣的問題,而有此功能的支持,不僅解決了參數(shù)設(shè)置的難題,更加提高了軟件的健壯性,如果說遺憾的是,就是在一開始時(shí)就要好好設(shè)計(jì)軟件的參數(shù)個(gè)數(shù),而本程序設(shè)計(jì)初始缺乏對硬件功能的了解,所以在以后僅僅設(shè)置了三個(gè)全局參數(shù),在以后的設(shè)計(jì)中參數(shù)設(shè)定是參賽者要慎重考慮及必須要實(shí)現(xiàn)的。 模擬口通道信息采集如果細(xì)心的人就會發(fā)現(xiàn),在項(xiàng)目中所有的傳感器都是通過AI口進(jìn)行對采集的信號量進(jìn)行轉(zhuǎn)換的,所以模擬口在本課題中尤為重要,所以,其實(shí)現(xiàn)的函數(shù)驅(qū)動也相當(dāng)重要,畢竟要有大的誤差,所有的行進(jìn)過程就像瞎子走路一樣,失去了方向,下面就來對模擬口的函數(shù)實(shí)現(xiàn)具體闡述。在函數(shù)庫中有一個(gè)函數(shù)int AI(unsigned char iCh)是讀取模擬口通道的輸入。iCh為通道號。返回0~1023,函數(shù)的具體實(shí)現(xiàn)如下所示:int AI(unsigned char iCh){ if(iCh8) { return ANALOG(iCh)。 } else { return ANALOG_I2C(iCh)。 }}其中的int ANALOG(u8 channel)函數(shù)實(shí)現(xiàn)如下所示:int ANALOG(u8 channel){ static int oldchannel =0。 int Conversion_Value。 if(oldchannel == channel) { Conversion_Value = ADC_GetConversionValue(channel)。 oldchannel = channel。 } else { // Select the channel to be converted ADCCR amp。= 0xFE3F。 ADCCR |= channel 0x6。 while(ADC_GetFlagStatus(ADC_FLAG_ECV) == RESET)。 Conversion_Va
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1