使用樹梅派控制sg90電機

2021-09-25 10:40:03 字數 2566 閱讀 8974

舵機的乙個作用是用於充當機械手臂的關節或者機械爪的閉合,控制四驅車的轉向等。上好旋臂後,它的活動示意圖如下:

(網路,侵刪!)。可以看到他有一些基本運動規則:

我們主觀感覺舵機基本沒有延遲的執行我們的命令,但是其實並非如此。舵機會將時間分為一段段的,比如20ms,在這個時間內,使用者傳送乙個指令他接受並執行。這是,使用細小的離散來對世界的連續性進行模擬。絕對的連續是做不到的。

在這個週期內,使用者傳送乙份特定時長的脈衝,舵機根據脈衝的時長來旋轉特定的位置。對於sg90舵機來說,脈衝為0.5ms, 旋轉到0度位置,脈衝為1.5ms時旋轉到90度位置,2.5ms時旋轉到180度位置。如果想讓舵機從0度位置依次轉到,45度,90度,135, 180度,然後再依次轉回來,傳送0.5, 1.0, 1.5, 2.0, 2.5, 2.0, 1.5, 1.0, 0.5的脈衝即可,如上圖所示。

不管當前,在旋臂在什麼位置,想讓舵機轉到0度位置,只要輸入0.5ms的脈衝即可,想要轉到其他位置也是同樣道理。

由於gpio每個針腳限制3ma的電流,全部針腳電流和限制在100ma,所以,不要接大電流的舵機,否則會燒壞樹梅派。樹梅派3b+可以接sg90舵機。

另外,最好在關閉電源的情況下進行接線拔線,因為插拔瞬間有可能電流增大等情況,燒壞樹莓派。

sg90電機是乙個小電機,可以直接接在樹莓派3b上。電機三個導線,橙色為訊號線,也是我們需要變成控制的那根,紅色正級黑色負極(紅色正級,黑色負極,好像很多電器都是這樣的,想想萬用表,電壓表、電流錶都是如此)。電源使用樹梅派的5v電源即可,樹莓派的gnd就是電源負極。橙色線接在任意編號的針腳上, 我這裡使用的是bcm模式下的25號pin。下面上**,具體的**解釋也在**中:

# -*- coding:utf-8 -*- 

# 這句是解決python2中,py檔案中中文字元問題

from rpi import gpio # 引入gpio庫

import time

# 先不要看這個函式,先看下邊的程式

# 將角度位置轉化為對應的pwm_value

defto_dutycycle

(angle)

:"""

這個函式為start()和changedutycycle()提供值,這兩個函式的輸入非常相似,值的範圍都是0.--100.。

為了得到這個值,先求輸入角度angle所對應的脈衝長度即,

length = angle * 1.0 / 180. * (2.5 - 0.5) + 0.5

然後,這個長度除以週期長度再乘100,即可獲得dutycycle

dutycycle = lenght / 20. * 100.

"""length = angle *

1.0/

180.*(

2.5-

0.5)

+0.5

dutycycle = lenght /20.

*100

.return dutycycle

try:

# 1. 樹梅派3b 的針腳有兩種編碼方式,這裡使用bcm,所以一定先制定編碼方式

gpio.setmode(gpio.bcm)

# 2. 設定25號pin作為輸出針腳,用於控制舵機

gpio.setup(

25, gpio.out)

# 3. 進一步將25號pin設定為pwm模式輸出,輸出頻率為50hz,所以第二個引數是hz

# 這時候,pwm的週期的時長是20ms了,即 1s / 50 = 20ms

pwm_sg90 = gpio.pwm(25,

50)# 4. 一開始,通過傳送乙個脈衝,通知舵機旋到對應的位置。引數dutycycle規定了脈衝的時常。(之所以叫dutycycle,是因為官方文件中,說這個引數叫做dutycycle)

# dutycycle 值範圍為0.---100., 它表示脈衝長度與週期時長的百分比。即dutycycle=脈衝時長/週期時長 × 100.

# 此時要求旋到0度位置

pwm_sg90.start(to_dutycycle(angle=0)

)# 5. 程式暫停1s,等待舵機將旋臂旋到0度位置。其實沒必要等待1s,大概最多需要0.3ms。

time.sleep(1)

# 將for angle in[0

,180,0

,90,0

,120,90

]: dutycycle = to_dutycycle(angle)

pwm.changedutycycle(dutycycle)

time.sleep(1)

finally

:# 最後這一步很關鍵

# 意思是釋放25號針腳的資源,使其他的程式可以使用這個針腳

# 另外不釋放資源,還有一些安全隱患,所以一定要釋放資源

# finally的作用是:當程式中途遇到錯誤的時候,不會立刻結束程式,而會向下執行,保證了cleanup一定會執行到。

gpio.cleanup(

)

了解樹梅派

很早就聽說過它的大名了,前兩天終於有了自己的第一台樹梅派3b 小電腦。第一次接觸樹梅派是上半年四月份,當時做乙個簡版的無人駕駛小車,打算用樹梅派3b,由於物體識別模型有些複雜,又不會優化,識別一幀影象就要幾秒就放棄了這個方案。當時3b 太搶手沒買到,現在從新認識一下。其他型號對比 官方系統我知道的有...

樹梅派 3 使用筆記

最近給樹梅派買了乙個酷炫的小風扇,測試效果確實不錯,1.2ghz 64位四核armv8 cpu 不再像以前一樣那麼熱了。問題 許久未開機後,重新開機,其餘軟體和terminal 均正常,只有 chromium 不能正常顯示,只有視窗邊框,內容是桌面。解決 sudo apt get update su...

樹梅派 安裝chrome Chromium

貌似最新版2016 9 23版本的系統,已經自帶chromium瀏覽器了,如果你不想重新安裝系統,可以按照本文的方法來安裝。網上的教程大部分已經失效,apt get install chromium命令無效,因為這瀏覽器已經改名字了,用以下命令安裝 apt get update 更新一下先 apt ...