




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目二通過GPIO實現傳送帶運行創靈實驗平臺學習編寫Python腳本實現控制傳送帶運動任務二職業能力目標01任務描述與要求02任務分析與計劃03知識儲備04任務實施05任務檢查與評價06任務小結07任務拓展08任務二學習編寫Python腳本實現控制傳送帶運動了解控制傳送帶的原理;學習設置傳送帶擋速實驗;掌握編寫Python腳本實現不同擋位控制傳送帶運動。掌握SysfsGPIO庫的使用方法;掌握不同擋速調用傳送帶;掌握傳送帶模塊的封裝。職業能力目標01實驗目的實驗內容職業能力目標01任務描述與要求02任務分析與計劃03知識儲備04任務實施05任務檢查與評價06任務小結07任務拓展08任務二學習編寫Python腳本實現控制傳送帶運動
此任務要求同學們了解控制傳送帶的原理,學習設置傳送帶擋速實驗,并掌握編寫Python腳本實現不同擋位控制傳送帶運動。在完成該實驗后,能獨立使用傳送帶,并對自己學習進行拓展,思考如何聯合機械臂與傳送帶一起使用。任務描述任務要求掌握SysfsGPIO庫的使用方法,能夠成功調用對應的庫及其相應的函數;完成不同擋速調用傳送帶的實驗,成功設置傳送帶加速運行;完成傳送帶模塊的封裝相應代碼的編寫,并在實驗結束后能夠獨立完成動手練習、動手實驗等任務。任務描述與要求02職業能力目標01任務描述與要求02任務分析與計劃03知識儲備04任務實施05任務檢查與評價06任務小結07任務拓展08任務二學習編寫Python腳本實現控制傳送帶運動任務分析思考一下,傳送帶啟動控制的具體流程是什么樣的?我們該如何按步驟完成實驗。根據自己的了解,我們要如何去應用傳送帶知識?我們要如何通過python編寫腳本控制傳送帶?任務分析與計劃03任務計劃表項目名稱創靈實驗平臺任務名稱學習編寫Python腳本實現控制傳送帶運動計劃方式自主設計計劃要求請用6個計劃步驟來完整描述出如何完成本次任務序號任務計劃1
2
3
4
5
6
通過上面的思考,你是否對本任務要完成的工作有所了解?讓我們一起來制訂完成本次任務的實施計劃吧!任務分析與計劃03職業能力目標01任務描述與要求02任務分析與計劃03知識儲備04任務實施05任務檢查與評價06任務小結07任務拓展08任務二學習編寫Python腳本實現控制傳送帶運動封裝函數204知識儲備文件描述符1文件描述符04
內核【kernel】利用文件描述符【filedescriptor】來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。思考一下,我們生活中有用到文件描述符嗎?05任務實施封裝函數2文件描述符13封裝函數04
函數封裝是一種函數的功能,它把一個程序員寫的一個或者多個功能通過函數、類的方式封裝起來,對外只提供一個簡單的函數接口。當程序員在寫程序的過程中需要執行同樣的操作時,程序員(調用者)不需要寫同樣的函數來調用,直接可以從函數庫里面調用。程序員也可以從網絡上下載的功能函數,然后封裝到編譯器的庫函數中,當需要執行這一功能的函數時,直接調用即可。而程序員不必知道函數內部如何實現的,只需要知道這個函數或者類提供什么功能。04思考一下,我們要怎么樣去使用封裝函數?封裝函數下面為c語言函數封裝的例子:func1(.....){..........}func2(......){..........}func3(.....){}04思考一下,我們要怎么樣去使用GPIO?封裝函數下面為累加求和的函數:職業能力目標01任務描述與要求02任務分析與計劃03知識儲備04任務實施05任務檢查與評價06任務小結07任務拓展08任務二學習編寫Python腳本實現控制傳送帶運動05任務實施設置PWM驅動2傳送帶運行原理、實驗預覽1編寫Python腳本實現傳送帶不同擋位運動3學習編寫Python腳本實現控制傳送帶運動任務二傳送帶實驗流程圖:任務二實驗預覽(詳細實驗請參考第二章中任務一部分)我們該去如何完成實驗呢?1.運行主函數:if__name__=="__main__":belt=Belt()print("啟動傳送帶")time.sleep(1)
#傳送帶正向belt.turn_forward_dir()print("傳送帶正向")time.sleep(1)belt.belt_move()#正常速度運行print("正常速度運行")time.sleep(3)#傳送帶運動時長
belt.belt_fast_move()#加速運行print("加速運行")time.sleep(3)#傳送帶運動時長belt.belt_stop()#停止運行time.sleep(1)#方向反轉belt.turn_reverse_dir()print("傳送帶反向")time.sleep(1)belt.belt_move()#正常速度運行print("正常速度運行")time.sleep(3)#傳送帶運動時長
belt.belt_fast_move()#加速運行print("加速運行")time.sleep(3)#傳送帶運動時長belt.belt_stop()#停止運行time.sleep(1)學習編寫Python腳本實現控制傳送帶運動任務二實驗預覽(詳細實驗請參考第二章中任務一部分)SysfsGPIO控制傳送帶運動
如需加深了解,可自行查看[GPIO4源碼](./python_gpio4.py)
步驟一:導入相關的庫
【os】:處理文件和目錄
【gpio4】:通用輸入/輸出端口學習編寫Python腳本實現控制傳送帶運動importosfromgpio4importSysfsGPIOimporttime任務二實驗預覽(詳細實驗請參考第二章中任務一部分)SysfsGPIO控制傳送帶運動
步驟二:設置傳送帶默認正向運動
【gpio4】:控制開發板GPIO學習編寫Python腳本實現控制傳送帶運動動手練習1傳送帶GPIO接口編號為【33】可通過查詢開發板接口文擋。通過SysfsGPIO類創建pin對象,用于將GPIO連接到用戶空間。1.在<1>處,請用【SysfsGPIO】類創建接口編號【33】的控制接口,創建【pin】對象#定義開發板的GPIO接口dir_gpio=33pin=<1>填寫完成后執行以下代碼,輸出結果類似為【<gpio33unexportedat-0x7ffffff8083fd17e>】,則說明填寫正確。print(pin)任務二實驗預覽(詳細實驗請參考第二章中任務一部分)學習編寫Python腳本實現控制傳送帶運動pin.export=True:將上面創建的對象【pin】中編號【33】寫入【export】文件,請求接口,創建一個【gpio33】節點。【pin.direction=out】:表示GPIO信號方向為輸出方向【pin.value=1】:表示傳送帶運行方向為正轉方向【time.sleep(0.1)】:睡眠`0.1秒`,是用于防止代碼執行速度過快且設備還未響應而導致的一些錯誤。【pin.export=False】:將編號【33】寫入【unexport】文件,刪除【gpio33】節點,退出GPIO連接。pin.export=Truepin.direction='out'#傳送帶正轉pin.value=1time.sleep(0.1)
pin.export=False05任務實施213傳送帶運行原理、實驗預覽設置PWM驅動編寫Python腳本實現傳送帶不同擋位運動
接下來我們要設置PWM驅動,我們要怎么去使用PWM驅動呢?設置PWM驅動05步驟一:調出PWM0接口【os.path.exists(path)】:用于判斷路徑path是否存在,若存在返回True,不存在返回False。1.path如果寫成絕對路徑的形式,則直接判斷絕對路徑path是否存在;2.path如果寫成相對路徑的形式,則從當前目錄為起點,檢查相對路徑path是否存在。ifnotos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):os.system('echo0>/sys/class/pwm/pwmchip0/export')pin.export=False代碼注釋:判斷pwm0接口是否存在。若不存在,則請求接口。設置PWM驅動05步驟二:PWM驅動屬性設置【os.popen(command[,mode[,bufsize]])】:用于從一個命令打開一個管道。參數說明:(1).command:使用的命令。(2).mode:模式權限可以是【r】(默認)或【w】。(3).bufsize:指明了文件需要的緩沖大小:0意味著無緩沖;1意味著行緩沖;其它正值表示使用參數大小的緩沖(大概值,以字節為單位)。負的bufsize意味著使用系統的默認值,一般來說,對于tty設備,它是行緩沖;對于其它文件,它是全緩沖。如果沒有改參數,使用系統的默認值。返回值:返回一個文件描述符號為fd的打開的文件對象period=1000000#設置頻率需要轉換為設置寄存器周期值duty=50#占空比duty需要轉換為設置寄存器占空比值reverse='normal'#輸出是否反向enable=0#PWM是否使能1:使能0:不使能
ifos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):ifduty>100orduty<0:#占空比設置范圍在0-100print("dutyseterror,setduty100%")duty=100duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')
設置PWM驅動05duty_value=duty_cycle.read()#獲取開發板中占空比的值period1=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/period')period_value=period1.read()#獲取開發板中周期的值ifint(duty_value)>int(period_value):#當前的duty_value大于了要設置的周期period值,先設置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)設置PWM驅動05動手練習1:關閉針腳休眠針腳休眠接口編號為【42】可通過查詢開發板接口文擋。
通過【SysfsGPIO】類創建【pin】對象,用于將GPIO連接到用戶空間。1.在<1>處,實例化一個連接操作接口【SysfsGPIO】類為對象【sleep_pin】,接口編號為【42】。2.在<2>處,將【sleep_pin.export】賦值為【True】,用于激活端口。3.在<3>處,將【sleep_pin.direction】控制【gpio】的輸出方向為【out】。4.在<4>處,將【sleep_pin.value】賦值為【0】,關閉休眠模式。5.在<5>處,將【sleep_pin.export】賦值為【False】,用于關閉端口。<1><2><3>#關閉休眠模式<4><5>設置PWM驅動05動手練習2:停止傳送帶并設置針腳休眠在完成傳送帶停止實驗前,我們要先將將PWM設置為使能狀態,啟動傳送帶運動。enable=1start_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(start_cmd)設置PWM驅動05動手練習2:停止傳送帶并設置針腳休眠1.在<1>處,將0賦值給變量【enable】。2.在<2>處,定義字符串【'echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'】,用于停止傳送帶運動。3.在<3>處,將【sleep_pin.value】賦值為【1】,打開休眠模式。#停止傳送帶<1>start_cmd=<2>os.system(start_cmd)#設置針腳休眠sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'<3>#打開休眠模式sleep_pin.export=False05任務實施213傳送帶運行原理、實驗預覽設置PWM驅動編寫Python腳本實現傳送帶不同擋位運動實驗教學分析我們要怎么設置傳送帶加速運行、減速運行?在生活中,給傳送帶設置擋位有什么作用?編寫Python腳本實現傳送帶不同擋位運動05通過上面的思考,你是否對本任務要完成的任務有所了解?讓我們一起來學習如何編寫Python腳本控制傳送帶不同擋位下運行吧!編寫Python腳本實現傳送帶不同擋位運動05編寫傳送帶基礎類:編寫Python腳本實現傳送帶不同擋位運動05步驟一:編寫傳送帶控制類基本功能繼承【object】對象,使用【__init__】在實例化時,傳入參數定義變量,便于初始化/設置一些屬性值。定義【Belt】類中函數,函數需要傳入【self】參數,【self】參數指的是類實例對象本身(注意:不是類本身)。例如:【def__init__(self):】定義傳送帶Belt類屬性:self.step、self.period、self.duty、self.reverse、self.enable。使用【self.turn_forward_dir()】和【self.init_set_pwm()】定義傳送帶正轉方向并且因為【self.enable=0】不啟動傳送帶。classBelt(object):def__init__(self):try:self.step=3#中速擋位self.period=1100000#設置頻率需要轉換為設置寄存器周期值self.duty=50#占空比duty需要轉換為設置寄存器占空比值self.reverse='normal'#輸出是否反向self.enable=0#PWM是否使能1:使能0:不使能self.turn_forward_dir()#默認方向:正向self.init_set_pwm()
編寫Python腳本實現傳送帶不同擋位運動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):#當前的duty_value大于了要設置的周期period值,先設置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腳本實現傳送帶不同擋位運動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)
#設置針腳休眠sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'<3>#打開休眠模式sleep_pin.export=False封裝函數——設置針腳休眠:編寫Python腳本實現傳送帶不同擋位運動05
通過【SysfsGPIO】實例化編號【42】的對象賦值給【sleep_pin】,設置針腳屬性【export】、【direction】、【value】,完成針腳休眠設置。defset_sleep_mode(self,enable):"""設置針腳休眠:return:"""sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'ifenable==1:sleep_pin.value=1#打開休眠模式else:sleep_pin.value=0#關閉休眠模式time.sleep(0.1)sleep_pin.export=False值
封裝函數——傳送帶正轉:編寫Python腳本實現傳送帶不同擋位運動05
仿照上一節封裝函數——設置針腳休眠,通過SysfsGPIO實例化編號33的對象賦值給pin,設置針腳屬性export、direction、value,完成傳送帶正轉設置。defturn_reverse_dir(self):"""傳送帶反轉:paramcommand::return:"""pin=SysfsGPIO(33)pin.export=Truepin.direction='out'pin.value=0time.sleep(0.1)pin.export=False
封裝函數——擋速計算:編寫Python腳本實現傳送帶不同擋位運動051.首先判斷設置的擋位是否大于最大值,或者小于最小值。若是,則將擋位重新賦值為最大值或最小值;2.然后進行周期值換算。defconvert_fre(self,step):"""擋速計算:paramstep:擋位:return:返回擋速"""
ifstep<PWM_STEP_MIN:#判斷擋速是否小于最小值step=PWM_STEP_MINelifstep>PWM_STEP_MAX:#判斷擋速是否大于最大值step=PWM_STEP_MAXself.period=(1500-step*PWM_STEP_VALUE)*1000#擋位換算成擋速returnself.period
封裝函數——設置傳送帶擋速:編寫Python腳本實現傳送帶不同擋位運動05
讀取當前【duty_value】值,若大于要設置的周期【period】值,先設置【duty_cycle】,防止設置報錯。defset_belt_reg(self,period,enable):"""設置傳送帶擋速: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:#當前的duty_value大于了要設置的周期period值,先設置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)
封裝函數——設置傳送帶擋速:編寫Python腳本實現傳送帶不同擋位運動05
讀取當前【duty_value】值,若大于要設置的周期【period】值,先設置【duty_cycle】,防止設置報錯。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)封裝函數——傳送帶正常運行:編寫Python腳本實現傳送帶不同擋位運動05步驟:1.關閉針腳休眠2.定義【3】擋位為正常運行擋速3.定義【PWM】為使能狀態4.調用函數進行擋位換算5.調用函數設置傳送帶擋速并啟動傳送帶defbelt_move(self):"""傳送帶正常運行: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)#設置傳送帶擋速pass封裝函數——傳送帶加速運行:編寫Python腳本實現傳送帶不同擋位運動05
仿照上一節封裝函數——傳送帶正常運行,將【self.step】擋位變量設置為6,使得傳送帶加速運行。defbelt_fast_move(self):"""傳送帶加速運行擋位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)#設置傳送帶擋速pass封裝函數——傳送帶自定義擋位:編寫Python腳本實現傳送帶不同擋位運動05仿照上一節封裝函數——傳送帶正常運行:1.函數增加一個擋位參數,用于自定義擋位設置。2.將傳入的參數【step】賦值給【self.step】擋位變量,使得能夠調用該函數進行自定義擋位設置。defbelt_set_move_step(self,step):"""傳送帶設置擋位0~6自定義:paramcommand:step擋位:return:"""self.set_sleep_mode(0)self.enable=1#PWM使能self.step=step#自定義擋位self.period=self.convert_fre(self.step)#換算成對應的擋位self.set_belt_reg(self.period,self.enable)#設置傳送帶擋速pass封裝函數——傳送帶停止:編寫Python腳本實現傳送帶不同擋位運動051.定義PWM為終止使能狀態。2.傳入【set_belt_reg】函數中,停止傳送帶。3.調用設置針腳休眠函數,打開針腳休眠。避免傳送帶在不工作的狀態下,一直消耗電流產生熱量,使得電機發熱。defbelt_stop(self):"""傳送帶停止:paramcommand::return:"""self.enable=0self.set_belt_reg(self.period,self.enable)#設置傳送帶擋速self.set_sleep_mode(1)動手練習:運行傳送帶,并設置傳送帶正反轉、加減速05調用.【編寫Python腳本實現傳送帶不同檔位的運動封裝好的傳送帶基礎類】,通過調用【Belt】類來實現控制傳送帶運動,按照以下要求完成實驗:1.在<1>處實例化一個【Belt】類對象為【belt】2.在<2>處使用對象belt調用類中函數【turn_reverse_dir()】,設置傳送帶運動方向為反向。3.在<3>處使用對象belt調用類中函數【belt_move()】,設置傳送帶以正常的速度運行。4.在<4>處使用對象belt調用類中函數【belt_fast_move()】,設置傳送帶加速運行。5.在<5>處使用對象belt調用類中函數【belt_set_move_step()】,設置以擋速為【2】運行傳送帶。6.在<6>處使用對象belt調用類中函數【belt_stop()】,設置傳送帶停止運行。<1>#創建對象print("啟動傳送帶")time.sleep(1)<2>#傳送帶正向print("傳送帶正向")time.sleep(2)動手練習:運行傳送帶,并設置傳送帶正反轉、加減速05<3>#正常速度運行print("正常速度運行")time.sleep(3)#傳送帶運動時長<4>#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動控制系統【直流】課設指導書-野瑩瑩要點
- 設備費用核算管理
- 財務會計綜合考試試卷 (一)
- 2024年中考押題預測卷02(武漢卷)-道德與法治(考試版)A3
- 2024-2025學年下學期高一生物滬科版期末必刷常考題之有性生殖中的遺傳信息傳遞
- 建筑施工特種作業-高處作業吊籃安裝拆卸工真題庫-1
- 山東社區招聘題目及答案
- 剖切面的種類與剖切方法2
- 2023-2024學年山東省青島市膠州市高二下學期期末學業水平檢測數學試題(解析版)
- 2023-2024學年湖北省新高考聯考協作體高二下學期7月期末考試數學試題(解析版)
- 2024年銀行考試-銀行間本幣市場交易員資格考試近5年真題集錦(頻考類試題)帶答案
- 審計應知應會知識題庫及答案(共341題)
- PC工法樁專項施工方案-
- 藝術與科學理論基礎智慧樹知到答案2024年北京交通大學
- 2024年金華市中考數學試卷
- DB13(J) 8457-2022 海綿城市雨水控制與利用工程設計規范
- 人教版五年級上冊小數乘除法豎式計算題200道及答案
- 部編版(2024)一年級語文上冊識字3《口耳目手足》精美課件
- 班級管理案例與應用智慧樹知到期末考試答案章節答案2024年哈爾濱師范大學
- CJ/T 43-2005 水處理用濾料
- 尼曼-半導體物理與器件第十章
評論
0/150
提交評論