http://www.geekfan.net/9507/
本文由 極客范 - Boyd Wang 翻譯自 Adafruit.com。歡迎加入極客翻譯小組,同我們一道翻譯與分享。轉載請參見文章末尾處的要求。
概覽
這節課我們來學習如何使用Python來控制一個伺服馬達。
伺服馬達受不同長度的脈沖控制。這需要相當准確的定時。樹莓派上有一針能通過硬件產生脈沖,而不需要依靠操作系統。Occidentalis系統有一個界面可以使用這一針來控制伺服馬達。
你需要的:
- 1個樹莓派
- 1個擴展板和1條26針的IDC電纜
- 1把公對公的跳線
- 1塊小型面包板
- 1個伺服馬達
- Adafruit Occidentalis 0.2或之後版本的操作系統發行版
- 5號或7號電池座及4節電池
伺服馬達
伺服馬達的狀態由脈沖的長度控制。伺服馬達預期每20毫秒接受一次脈沖。如果脈沖的高電平持續1毫秒,那麼伺服馬達不會轉動,如果是1.5毫秒,那它將會轉過90度,如果高電平持續2毫秒,那它將會轉動180度。
伺服馬達的終點位置可能不同,許多伺服馬達只能轉動大約170度。你也可以購買能」連續」旋轉360度的伺服馬達。
PWM與伺服馬達核心模塊(The PWM and Servo Kernel Module)
Adafruit與Sean Cross一起編寫了一個核心模塊被包含在了Occidentalis發行版裡。更多的細節請參照這篇教程。如果你想在Raspbian或者其他發行版上使用這個模塊,參考這裡來把模塊安裝到你的環境裡。
這個模塊被稱為PWM與伺服馬達(PWM and Servo)因為在控制伺服馬達的同時該模塊可以產生PWM(Pulse Width Modulation,脈沖寬度調制)信號,(與額外電源配合)可被用於控制馬達的功率或燈光亮度。這節課我們不會使用PWM。
PWM與伺服馬達模塊使用一種文件類型的接口,你可以通過讀取和寫入特殊的文件來控制輸出針腳和伺服馬達的行為。這使得使用Python或者其他語言來編寫該接口十分容易。
用於驅動伺服馬達的所涉及到的文件列在下方。所有文件可以在樹莓派的/sys/class/rpi-pwm/pwm0/目錄下找到。
文件 – 描述
active – 1為激活,0為未激活。你可以通過讀取它來查找輸出針是否被激活,或者通過改寫控制它的激活或未激活。
delayed – 如果設置為1,你對其他文件的改動不會起作用直到你使用上面的active來激活輸出針。
mode – 改寫文件來設置針腳是pwm,servo(伺服馬達)還是audio(音頻)。顯然這裡我們要設置為servo。注意這些針也會被小派的音頻輸出使用,所以你不能在使用聲音的同時控制一個伺服馬達。
servo_max – 改寫這個文件來設置伺服馬達的最大角度。我們把它設置為180這樣我們就可以很容易的把伺服馬達置成0到180度之間的位置了。
servo – 改寫這個文件將會設置伺服馬達的脈沖長度到一個與servo_max有關的值。比如我們把它設置為90,servo_max的值為180,那伺服馬達會保持在中間位置。
硬件
在小派上只有一個針腳能夠產生這樣的脈沖(GPIO 18針)。它將與伺服馬達的控制針腳相連。伺服馬達的電源由外接電池控制,因為使用小派的電源可能會在伺服馬達開始轉動的瞬間產生巨大的電流,導致小派崩潰。伺服馬達需要4.8-6V的直流電來驅動馬達,但是信號的邏輯電平(脈沖輸出)可以是3.3V,所以可以直接把信號線直接連到GPIO的輸出針上。
小派擴展板用於連接樹莓派和面包板,如果你之前沒有使用過擴展板,你可以參考這個系列教程的第四節。
伺服馬達通常有一個三針的插座。紅色和棕色用於供電(紅色為正極)並且第三針黃色或橘黃色的用於控制信號。要把插座連接到面包板上,你需要使用公對公的跳線。
軟件
這個項目不需要安裝任何Python庫。
下面列出的程序使伺服馬達前後擺動:
為了寫文件方便,我寫了一個工具方法叫做」set」。第一個參數是要被寫入的文件名(屬性名),第二個參數是要被寫入的值。
在程序的開始部分寫入了幾個文件來關閉delay模式,設置mode為』servo』,設置伺服馬達的最大角度為180度最後把輸出針設置為激活狀態。
一個叫做delay_period的變量用於存儲伺服馬達每一步的間隔秒數。
while循環會一直進行直到按下CTRL+C終止。在while循環中有兩個相似的for循環,第一個從0到180度遞增旋轉角度,第二個剛好相反,從180到0度遞減。
要安裝個軟件,使用SSH連接到小派上然後輸入下面的命令:
粘貼上面的代碼然後使用CTRL+X然後按一下Y保存。
然後在SSH窗口裡輸入下面的命令來使程序運行:
然後伺服馬達就開始轉動啦。
測試&配置
如果你想讓馬達轉快一些,嘗試改變delay_period到一個更小的值,例如0.001,如果想慢一些,把它增大到0.1.
如果你想控制多個伺服馬達,像Adafruit I2C 16 channel servo / pwm controller裡一樣。你可以通過這篇教程來進行了解。
原文鏈接: Adafruit.com 翻譯: 極客范 - Boyd Wang
譯文鏈接: http://www.geekfan.net/9507/
[ 轉載請保留原文出處、譯者和譯文鏈接。 ]