




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目二通過GPIO實(shí)現(xiàn)傳送帶運(yùn)行創(chuàng)靈實(shí)驗(yàn)平臺(tái)學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)任務(wù)二職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)了解控制傳送帶的原理;學(xué)習(xí)設(shè)置傳送帶擋速實(shí)驗(yàn);掌握編寫Python腳本實(shí)現(xiàn)不同擋位控制傳送帶運(yùn)動(dòng)。掌握SysfsGPIO庫的使用方法;掌握不同擋速調(diào)用傳送帶;掌握傳送帶模塊的封裝。職業(yè)能力目標(biāo)01實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)內(nèi)容職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)
此任務(wù)要求同學(xué)們了解控制傳送帶的原理,學(xué)習(xí)設(shè)置傳送帶擋速實(shí)驗(yàn),并掌握編寫Python腳本實(shí)現(xiàn)不同擋位控制傳送帶運(yùn)動(dòng)。在完成該實(shí)驗(yàn)后,能獨(dú)立使用傳送帶,并對(duì)自己學(xué)習(xí)進(jìn)行拓展,思考如何聯(lián)合機(jī)械臂與傳送帶一起使用。任務(wù)描述任務(wù)要求掌握SysfsGPIO庫的使用方法,能夠成功調(diào)用對(duì)應(yīng)的庫及其相應(yīng)的函數(shù);完成不同擋速調(diào)用傳送帶的實(shí)驗(yàn),成功設(shè)置傳送帶加速運(yùn)行;完成傳送帶模塊的封裝相應(yīng)代碼的編寫,并在實(shí)驗(yàn)結(jié)束后能夠獨(dú)立完成動(dòng)手練習(xí)、動(dòng)手實(shí)驗(yàn)等任務(wù)。任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)任務(wù)分析思考一下,傳送帶啟動(dòng)控制的具體流程是什么樣的?我們?cè)撊绾伟床襟E完成實(shí)驗(yàn)。根據(jù)自己的了解,我們要如何去應(yīng)用傳送帶知識(shí)?我們要如何通過python編寫腳本控制傳送帶?任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱創(chuàng)靈實(shí)驗(yàn)平臺(tái)任務(wù)名稱學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用6個(gè)計(jì)劃步驟來完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
4
5
6
通過上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實(shí)施計(jì)劃吧!任務(wù)分析與計(jì)劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)封裝函數(shù)204知識(shí)儲(chǔ)備文件描述符1文件描述符04
內(nèi)核【kernel】利用文件描述符【filedescriptor】來訪問文件。文件描述符是非負(fù)整數(shù)。打開現(xiàn)存文件或新建文件時(shí),內(nèi)核會(huì)返回一個(gè)文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。思考一下,我們生活中有用到文件描述符嗎?05任務(wù)實(shí)施封裝函數(shù)2文件描述符13封裝函數(shù)04
函數(shù)封裝是一種函數(shù)的功能,它把一個(gè)程序員寫的一個(gè)或者多個(gè)功能通過函數(shù)、類的方式封裝起來,對(duì)外只提供一個(gè)簡(jiǎn)單的函數(shù)接口。當(dāng)程序員在寫程序的過程中需要執(zhí)行同樣的操作時(shí),程序員(調(diào)用者)不需要寫同樣的函數(shù)來調(diào)用,直接可以從函數(shù)庫里面調(diào)用。程序員也可以從網(wǎng)絡(luò)上下載的功能函數(shù),然后封裝到編譯器的庫函數(shù)中,當(dāng)需要執(zhí)行這一功能的函數(shù)時(shí),直接調(diào)用即可。而程序員不必知道函數(shù)內(nèi)部如何實(shí)現(xiàn)的,只需要知道這個(gè)函數(shù)或者類提供什么功能。04思考一下,我們要怎么樣去使用封裝函數(shù)?封裝函數(shù)下面為c語言函數(shù)封裝的例子:func1(.....){..........}func2(......){..........}func3(.....){}04思考一下,我們要怎么樣去使用GPIO?封裝函數(shù)下面為累加求和的函數(shù):職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)05任務(wù)實(shí)施設(shè)置PWM驅(qū)動(dòng)2傳送帶運(yùn)行原理、實(shí)驗(yàn)預(yù)覽1編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)3學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)任務(wù)二傳送帶實(shí)驗(yàn)流程圖:任務(wù)二實(shí)驗(yàn)預(yù)覽(詳細(xì)實(shí)驗(yàn)請(qǐng)參考第二章中任務(wù)一部分)我們?cè)撊ト绾瓮瓿蓪?shí)驗(yàn)?zāi)兀?.運(yùn)行主函數(shù):if__name__=="__main__":belt=Belt()print("啟動(dòng)傳送帶")time.sleep(1)
#傳送帶正向belt.turn_forward_dir()print("傳送帶正向")time.sleep(1)belt.belt_move()#正常速度運(yùn)行print("正常速度運(yùn)行")time.sleep(3)#傳送帶運(yùn)動(dòng)時(shí)長(zhǎng)
belt.belt_fast_move()#加速運(yùn)行print("加速運(yùn)行")time.sleep(3)#傳送帶運(yùn)動(dòng)時(shí)長(zhǎng)belt.belt_stop()#停止運(yùn)行time.sleep(1)#方向反轉(zhuǎn)belt.turn_reverse_dir()print("傳送帶反向")time.sleep(1)belt.belt_move()#正常速度運(yùn)行print("正常速度運(yùn)行")time.sleep(3)#傳送帶運(yùn)動(dòng)時(shí)長(zhǎng)
belt.belt_fast_move()#加速運(yùn)行print("加速運(yùn)行")time.sleep(3)#傳送帶運(yùn)動(dòng)時(shí)長(zhǎng)belt.belt_stop()#停止運(yùn)行time.sleep(1)學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)任務(wù)二實(shí)驗(yàn)預(yù)覽(詳細(xì)實(shí)驗(yàn)請(qǐng)參考第二章中任務(wù)一部分)SysfsGPIO控制傳送帶運(yùn)動(dòng)
如需加深了解,可自行查看[GPIO4源碼](./python_gpio4.py)
步驟一:導(dǎo)入相關(guān)的庫
【os】:處理文件和目錄
【gpio4】:通用輸入/輸出端口學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)importosfromgpio4importSysfsGPIOimporttime任務(wù)二實(shí)驗(yàn)預(yù)覽(詳細(xì)實(shí)驗(yàn)請(qǐng)參考第二章中任務(wù)一部分)SysfsGPIO控制傳送帶運(yùn)動(dòng)
步驟二:設(shè)置傳送帶默認(rèn)正向運(yùn)動(dòng)
【gpio4】:控制開發(fā)板GPIO學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)動(dòng)手練習(xí)1傳送帶GPIO接口編號(hào)為【33】可通過查詢開發(fā)板接口文擋。通過SysfsGPIO類創(chuàng)建pin對(duì)象,用于將GPIO連接到用戶空間。1.在<1>處,請(qǐng)用【SysfsGPIO】類創(chuàng)建接口編號(hào)【33】的控制接口,創(chuàng)建【pin】對(duì)象#定義開發(fā)板的GPIO接口dir_gpio=33pin=<1>填寫完成后執(zhí)行以下代碼,輸出結(jié)果類似為【<gpio33unexportedat-0x7ffffff8083fd17e>】,則說明填寫正確。print(pin)任務(wù)二實(shí)驗(yàn)預(yù)覽(詳細(xì)實(shí)驗(yàn)請(qǐng)參考第二章中任務(wù)一部分)學(xué)習(xí)編寫Python腳本實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng)pin.export=True:將上面創(chuàng)建的對(duì)象【pin】中編號(hào)【33】寫入【export】文件,請(qǐng)求接口,創(chuàng)建一個(gè)【gpio33】節(jié)點(diǎn)。【pin.direction=out】:表示GPIO信號(hào)方向?yàn)檩敵龇较颉緋in.value=1】:表示傳送帶運(yùn)行方向?yàn)檎D(zhuǎn)方向【time.sleep(0.1)】:睡眠`0.1秒`,是用于防止代碼執(zhí)行速度過快且設(shè)備還未響應(yīng)而導(dǎo)致的一些錯(cuò)誤?!緋in.export=False】:將編號(hào)【33】寫入【unexport】文件,刪除【gpio33】節(jié)點(diǎn),退出GPIO連接。pin.export=Truepin.direction='out'#傳送帶正轉(zhuǎn)pin.value=1time.sleep(0.1)
pin.export=False05任務(wù)實(shí)施213傳送帶運(yùn)行原理、實(shí)驗(yàn)預(yù)覽設(shè)置PWM驅(qū)動(dòng)編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)
接下來我們要設(shè)置PWM驅(qū)動(dòng),我們要怎么去使用PWM驅(qū)動(dòng)呢?設(shè)置PWM驅(qū)動(dòng)05步驟一:調(diào)出PWM0接口【os.path.exists(path)】:用于判斷路徑path是否存在,若存在返回True,不存在返回False。1.path如果寫成絕對(duì)路徑的形式,則直接判斷絕對(duì)路徑path是否存在;2.path如果寫成相對(duì)路徑的形式,則從當(dāng)前目錄為起點(diǎn),檢查相對(duì)路徑path是否存在。ifnotos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):os.system('echo0>/sys/class/pwm/pwmchip0/export')pin.export=False代碼注釋:判斷pwm0接口是否存在。若不存在,則請(qǐng)求接口。設(shè)置PWM驅(qū)動(dòng)05步驟二:PWM驅(qū)動(dòng)屬性設(shè)置【os.popen(command[,mode[,bufsize]])】:用于從一個(gè)命令打開一個(gè)管道。參數(shù)說明:(1).command:使用的命令。(2).mode:模式權(quán)限可以是【r】(默認(rèn))或【w】。(3).bufsize:指明了文件需要的緩沖大?。?意味著無緩沖;1意味著行緩沖;其它正值表示使用參數(shù)大小的緩沖(大概值,以字節(jié)為單位)。負(fù)的bufsize意味著使用系統(tǒng)的默認(rèn)值,一般來說,對(duì)于tty設(shè)備,它是行緩沖;對(duì)于其它文件,它是全緩沖。如果沒有改參數(shù),使用系統(tǒng)的默認(rèn)值。返回值:返回一個(gè)文件描述符號(hào)為fd的打開的文件對(duì)象period=1000000#設(shè)置頻率需要轉(zhuǎn)換為設(shè)置寄存器周期值duty=50#占空比duty需要轉(zhuǎn)換為設(shè)置寄存器占空比值reverse='normal'#輸出是否反向enable=0#PWM是否使能1:使能0:不使能
ifos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):ifduty>100orduty<0:#占空比設(shè)置范圍在0-100print("dutyseterror,setduty100%")duty=100duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')
設(shè)置PWM驅(qū)動(dòng)05duty_value=duty_cycle.read()#獲取開發(fā)板中占空比的值period1=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/period')period_value=period1.read()#獲取開發(fā)板中周期的值ifint(duty_value)>int(period_value):#當(dāng)前的duty_value大于了要設(shè)置的周期period值,先設(shè)置duty_cycleduty_cmd='echo'+str(int((period*duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)else:period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)duty_cmd='echo'+str(int((period*duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)reverse_cmd='echo'+reverse+'>/sys/class/pwm/pwmchip0/pwm0/polarity'os.system(reverse_cmd)stop_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(stop_cmd)設(shè)置PWM驅(qū)動(dòng)05動(dòng)手練習(xí)1:關(guān)閉針腳休眠針腳休眠接口編號(hào)為【42】可通過查詢開發(fā)板接口文擋。
通過【SysfsGPIO】類創(chuàng)建【pin】對(duì)象,用于將GPIO連接到用戶空間。1.在<1>處,實(shí)例化一個(gè)連接操作接口【SysfsGPIO】類為對(duì)象【sleep_pin】,接口編號(hào)為【42】。2.在<2>處,將【sleep_pin.export】賦值為【True】,用于激活端口。3.在<3>處,將【sleep_pin.direction】控制【gpio】的輸出方向?yàn)椤緊ut】。4.在<4>處,將【sleep_pin.value】賦值為【0】,關(guān)閉休眠模式。5.在<5>處,將【sleep_pin.export】賦值為【False】,用于關(guān)閉端口。<1><2><3>#關(guān)閉休眠模式<4><5>設(shè)置PWM驅(qū)動(dòng)05動(dòng)手練習(xí)2:停止傳送帶并設(shè)置針腳休眠在完成傳送帶停止實(shí)驗(yàn)前,我們要先將將PWM設(shè)置為使能狀態(tài),啟動(dòng)傳送帶運(yùn)動(dòng)。enable=1start_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(start_cmd)設(shè)置PWM驅(qū)動(dòng)05動(dòng)手練習(xí)2:停止傳送帶并設(shè)置針腳休眠1.在<1>處,將0賦值給變量【enable】。2.在<2>處,定義字符串【'echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'】,用于停止傳送帶運(yùn)動(dòng)。3.在<3>處,將【sleep_pin.value】賦值為【1】,打開休眠模式。#停止傳送帶<1>start_cmd=<2>os.system(start_cmd)#設(shè)置針腳休眠sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'<3>#打開休眠模式sleep_pin.export=False05任務(wù)實(shí)施213傳送帶運(yùn)行原理、實(shí)驗(yàn)預(yù)覽設(shè)置PWM驅(qū)動(dòng)編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)實(shí)驗(yàn)教學(xué)分析我們要怎么設(shè)置傳送帶加速運(yùn)行、減速運(yùn)行?在生活中,給傳送帶設(shè)置擋位有什么作用?編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05通過上面的思考,你是否對(duì)本任務(wù)要完成的任務(wù)有所了解?讓我們一起來學(xué)習(xí)如何編寫Python腳本控制傳送帶不同擋位下運(yùn)行吧!編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05編寫傳送帶基礎(chǔ)類:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05步驟一:編寫傳送帶控制類基本功能繼承【object】對(duì)象,使用【__init__】在實(shí)例化時(shí),傳入?yún)?shù)定義變量,便于初始化/設(shè)置一些屬性值。定義【Belt】類中函數(shù),函數(shù)需要傳入【self】參數(shù),【self】參數(shù)指的是類實(shí)例對(duì)象本身(注意:不是類本身)。例如:【def__init__(self):】定義傳送帶Belt類屬性:self.step、self.period、self.duty、self.reverse、self.enable。使用【self.turn_forward_dir()】和【self.init_set_pwm()】定義傳送帶正轉(zhuǎn)方向并且因?yàn)椤緎elf.enable=0】不啟動(dòng)傳送帶。classBelt(object):def__init__(self):try:self.step=3#中速擋位self.period=1100000#設(shè)置頻率需要轉(zhuǎn)換為設(shè)置寄存器周期值self.duty=50#占空比duty需要轉(zhuǎn)換為設(shè)置寄存器占空比值self.reverse='normal'#輸出是否反向self.enable=0#PWM是否使能1:使能0:不使能self.turn_forward_dir()#默認(rèn)方向:正向self.init_set_pwm()
編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05
exceptExceptionase:print(e)#打印所有異常到屏幕
definit_set_pwm(self):ifnotos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):#osos.system('echo0>/sys/class/pwm/pwmchip0/export')ifos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):ifself.duty>100orself.duty<0:print("dutyseterror,setduty100%")self.duty=100duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')duty_value=duty_cycle.read()period1=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/period')period_value=period1.read()ifint(duty_value)>int(period_value):#當(dāng)前的duty_value大于了要設(shè)置的周期period值,先設(shè)置duty_cycleduty_cmd='echo'+str(int((self.period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)period_cmd='echo'+str(self.period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)
編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05else:period_cmd='echo'+str(self.period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)duty_cmd='echo'+str(int((self.period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)reverse_cmd='echo'+self.reverse+'>/sys/class/pwm/pwmchip0/pwm0/polarity'os.system(reverse_cmd)stop_cmd='echo'+str(self.enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(stop_cmd)
#設(shè)置針腳休眠sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'<3>#打開休眠模式sleep_pin.export=False封裝函數(shù)——設(shè)置針腳休眠:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05
通過【SysfsGPIO】實(shí)例化編號(hào)【42】的對(duì)象賦值給【sleep_pin】,設(shè)置針腳屬性【export】、【direction】、【value】,完成針腳休眠設(shè)置。defset_sleep_mode(self,enable):"""設(shè)置針腳休眠:return:"""sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'ifenable==1:sleep_pin.value=1#打開休眠模式else:sleep_pin.value=0#關(guān)閉休眠模式time.sleep(0.1)sleep_pin.export=False值
封裝函數(shù)——傳送帶正轉(zhuǎn):編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05
仿照上一節(jié)封裝函數(shù)——設(shè)置針腳休眠,通過SysfsGPIO實(shí)例化編號(hào)33的對(duì)象賦值給pin,設(shè)置針腳屬性export、direction、value,完成傳送帶正轉(zhuǎn)設(shè)置。defturn_reverse_dir(self):"""傳送帶反轉(zhuǎn):paramcommand::return:"""pin=SysfsGPIO(33)pin.export=Truepin.direction='out'pin.value=0time.sleep(0.1)pin.export=False
封裝函數(shù)——擋速計(jì)算:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)051.首先判斷設(shè)置的擋位是否大于最大值,或者小于最小值。若是,則將擋位重新賦值為最大值或最小值;2.然后進(jìn)行周期值換算。defconvert_fre(self,step):"""擋速計(jì)算:paramstep:擋位:return:返回?fù)跛?""
ifstep<PWM_STEP_MIN:#判斷擋速是否小于最小值step=PWM_STEP_MINelifstep>PWM_STEP_MAX:#判斷擋速是否大于最大值step=PWM_STEP_MAXself.period=(1500-step*PWM_STEP_VALUE)*1000#擋位換算成擋速returnself.period
封裝函數(shù)——設(shè)置傳送帶擋速:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05
讀取當(dāng)前【duty_value】值,若大于要設(shè)置的周期【period】值,先設(shè)置【duty_cycle】,防止設(shè)置報(bào)錯(cuò)。defset_belt_reg(self,period,enable):"""設(shè)置傳送帶擋速:paramperiod:周期:paramenable:PWM輸出是否使能:return:None"""duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')duty_value=duty_cycle.read()ifint(duty_value)>period:#當(dāng)前的duty_value大于了要設(shè)置的周期period值,先設(shè)置duty_cycleduty_cmd='echo'+str(int((period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)
封裝函數(shù)——設(shè)置傳送帶擋速:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05
讀取當(dāng)前【duty_value】值,若大于要設(shè)置的周期【period】值,先設(shè)置【duty_cycle】,防止設(shè)置報(bào)錯(cuò)。else:period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)duty_cmd='echo'+str(int((period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)stop_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(stop_cmd)封裝函數(shù)——傳送帶正常運(yùn)行:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05步驟:1.關(guān)閉針腳休眠2.定義【3】擋位為正常運(yùn)行擋速3.定義【PWM】為使能狀態(tài)4.調(diào)用函數(shù)進(jìn)行擋位換算5.調(diào)用函數(shù)設(shè)置傳送帶擋速并啟動(dòng)傳送帶defbelt_move(self):"""傳送帶正常運(yùn)行:return:"""self.set_sleep_mode(0)self.step=3self.enable=1self.period=self.convert_fre(self.step)#擋位換算self.set_belt_reg(self.period,self.enable)#設(shè)置傳送帶擋速pass封裝函數(shù)——傳送帶加速運(yùn)行:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05
仿照上一節(jié)封裝函數(shù)——傳送帶正常運(yùn)行,將【self.step】擋位變量設(shè)置為6,使得傳送帶加速運(yùn)行。defbelt_fast_move(self):"""傳送帶加速運(yùn)行擋位6:paramcommand::return:None"""self.set_sleep_mode(0)self.enable=1#PWM使能self.step=6#擋位6self.period=self.convert_fre(self.step)#擋位換算self.set_belt_reg(self.period,self.enable)#設(shè)置傳送帶擋速pass封裝函數(shù)——傳送帶自定義擋位:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)05仿照上一節(jié)封裝函數(shù)——傳送帶正常運(yùn)行:1.函數(shù)增加一個(gè)擋位參數(shù),用于自定義擋位設(shè)置。2.將傳入的參數(shù)【step】賦值給【self.step】擋位變量,使得能夠調(diào)用該函數(shù)進(jìn)行自定義擋位設(shè)置。defbelt_set_move_step(self,step):"""傳送帶設(shè)置擋位0~6自定義:paramcommand:step擋位:return:"""self.set_sleep_mode(0)self.enable=1#PWM使能self.step=step#自定義擋位self.period=self.convert_fre(self.step)#換算成對(duì)應(yīng)的擋位self.set_belt_reg(self.period,self.enable)#設(shè)置傳送帶擋速pass封裝函數(shù)——傳送帶停止:編寫Python腳本實(shí)現(xiàn)傳送帶不同擋位運(yùn)動(dòng)051.定義PWM為終止使能狀態(tài)。2.傳入【set_belt_reg】函數(shù)中,停止傳送帶。3.調(diào)用設(shè)置針腳休眠函數(shù),打開針腳休眠。避免傳送帶在不工作的狀態(tài)下,一直消耗電流產(chǎn)生熱量,使得電機(jī)發(fā)熱。defbelt_stop(self):"""傳送帶停止:paramcommand::return:"""self.enable=0self.set_belt_reg(self.period,self.enable)#設(shè)置傳送帶擋速self.set_sleep_mode(1)動(dòng)手練習(xí):運(yùn)行傳送帶,并設(shè)置傳送帶正反轉(zhuǎn)、加減速05調(diào)用.【編寫Python腳本實(shí)現(xiàn)傳送帶不同檔位的運(yùn)動(dòng)封裝好的傳送帶基礎(chǔ)類】,通過調(diào)用【Belt】類來實(shí)現(xiàn)控制傳送帶運(yùn)動(dòng),按照以下要求完成實(shí)驗(yàn):1.在<1>處實(shí)例化一個(gè)【Belt】類對(duì)象為【belt】2.在<2>處使用對(duì)象belt調(diào)用類中函數(shù)【turn_reverse_dir()】,設(shè)置傳送帶運(yùn)動(dòng)方向?yàn)榉聪颉?.在<3>處使用對(duì)象belt調(diào)用類中函數(shù)【belt_move()】,設(shè)置傳送帶以正常的速度運(yùn)行。4.在<4>處使用對(duì)象belt調(diào)用類中函數(shù)【belt_fast_move()】,設(shè)置傳送帶加速運(yùn)行。5.在<5>處使用對(duì)象belt調(diào)用類中函數(shù)【belt_set_move_step()】,設(shè)置以擋速為【2】運(yùn)行傳送帶。6.在<6>處使用對(duì)象belt調(diào)用類中函數(shù)【belt_stop()】,設(shè)置傳送帶停止運(yùn)行。<1>#創(chuàng)建對(duì)象print("啟動(dòng)傳送帶")time.sleep(1)<2>#傳送帶正向print("傳送帶正向")time.sleep(2)動(dòng)手練習(xí):運(yùn)行傳送帶,并設(shè)置傳送帶正反轉(zhuǎn)、加減速05<3>#正常速度運(yùn)行print("正常速度運(yùn)行")time.sleep(3)#傳送帶運(yùn)動(dòng)時(shí)長(zhǎng)<4>#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省揚(yáng)州市廣陵區(qū)樹人校2024-2025學(xué)年初三押題信息卷化學(xué)試題(三)含解析
- 2025屆達(dá)州市重點(diǎn)中學(xué)全國(guó)高三沖刺考(四)全國(guó)I卷歷史試題試卷含解析
- 長(zhǎng)春金融高等??茖W(xué)?!犊茖W(xué)計(jì)算可視化》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州民航職業(yè)技術(shù)學(xué)院《高級(jí)機(jī)器學(xué)習(xí)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆南省洛陽市偃師縣重點(diǎn)名校初三下學(xué)期九月月考英語試題含答案
- 遼寧稅務(wù)高等專科學(xué)?!度斯竦匚鬯幚砑夹g(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年云南省保山市高三英語試題二模試卷含解析
- 長(zhǎng)沙南方職業(yè)學(xué)院《凝聚態(tài)物理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海東地區(qū)民和回族土族自治縣2025年五年級(jí)數(shù)學(xué)第二學(xué)期期末考試試題含答案
- DB15T 3588-2024黃河灌區(qū)智慧農(nóng)業(yè)物聯(lián)網(wǎng)設(shè)備通信規(guī)約
- 新教材高中歷史必修中外歷史綱要上全冊(cè)教學(xué)課件
- 公共部門人力資源管理概論課件
- 六年級(jí)下冊(cè)科學(xué)第一單元質(zhì)量檢測(cè)卷粵教版(含答案)
- 【計(jì)算機(jī)應(yīng)用基礎(chǔ)試題】韓山師范大學(xué)2022年練習(xí)題匯總(附答案解析)
- 2022年江蘇對(duì)口單招市場(chǎng)營(yíng)銷試卷剖析
- 愛愛醫(yī)資源-生理學(xué)-122排卵、黃體形成與月經(jīng)周期
- 科技小巨人工程驗(yàn)收培訓(xùn)
- 大班繪本教案《月亮冰激凌》
- 火力發(fā)電廠運(yùn)煤設(shè)計(jì)規(guī)程
- 01-第一章--粉末的制取霧化法
- 3D打印學(xué)習(xí)教案
評(píng)論
0/150
提交評(píng)論