在前面的幾節(jié)的學(xué)習(xí)筆記中,我們學(xué)習(xí)了幾種傳感器及用法,這一節(jié)學(xué)習(xí)筆記帶領(lǐng)大家學(xué)習(xí)舵機(jī)及使用Arduino對(duì)舵機(jī)進(jìn)行控制。
舵機(jī)(英文叫Servo):它由直流電機(jī)、減速齒輪組、傳感器和控制電路組成的一套自動(dòng)控制系統(tǒng)。通過(guò)發(fā)送信號(hào),指定輸出軸旋轉(zhuǎn)角度。舵機(jī)一般而言都有最大旋轉(zhuǎn)角度(比如180度。)與普通直流電機(jī)的區(qū)別主要在,直流電機(jī)是一圈圈轉(zhuǎn)動(dòng)的,舵機(jī)只能在一定角度內(nèi)轉(zhuǎn)動(dòng),不能一圈圈轉(zhuǎn)(數(shù)字舵機(jī)可以在舵機(jī)模式和電機(jī)模式中切換,沒(méi)有這個(gè)問(wèn)題)。普通直流電機(jī)無(wú)法反饋轉(zhuǎn)動(dòng)的角度信息,而舵機(jī)可以。用途也不同,普通直流電機(jī)一般是整圈轉(zhuǎn)動(dòng)做動(dòng)力用,舵機(jī)是控制某物體轉(zhuǎn)動(dòng)一定角度用(比如機(jī)器人的關(guān)節(jié))。【文獻(xiàn)1】如圖1所示為9g舵機(jī)。一般的舵機(jī)接線為三線,VCC、GND和信號(hào)線。
如圖2所示,舵機(jī)主要有以下幾部分組成:齒輪組、直流電機(jī)、電位器、電機(jī)控制板、殼體。其中,齒輪組通過(guò)降低速度以提高扭矩;直流電機(jī)提供舵機(jī)的動(dòng)力;電機(jī)控制板負(fù)責(zé)接收電位器的信號(hào),通過(guò)算法驅(qū)動(dòng)電機(jī);電位器為位置編碼器的作用,作為電機(jī)驅(qū)動(dòng)之后的反饋信號(hào)。【文獻(xiàn)1】
舵機(jī)的控制信號(hào)是脈沖位置調(diào)制(PPM)信號(hào),是一種寬度可調(diào)的周期性方波脈沖信號(hào),周期一般為20ms,當(dāng)方波的脈沖寬度改變時(shí),舵機(jī)轉(zhuǎn)軸的角度發(fā)生變化,角度變化與脈沖寬度的變化成正比。一般舵機(jī)的輸出軸轉(zhuǎn)角與輸入信號(hào)的脈沖寬度之間的關(guān)系可用圖3表示。【文獻(xiàn)2】
首先,我們需要proteus仿真里面添加舵機(jī),在元器件搜索欄中輸入“servo”,并添加至元器件選擇欄中,如圖4所示。并將其中間的管腳接至數(shù)字口9腳,也就是ATmega328P的15管腳,同時(shí)上管腳接至+5V,下管腳接至地端,修改后的Proteus仿真圖如圖5所示。
下面編寫(xiě)Arduino程序,實(shí)現(xiàn)舵機(jī)自動(dòng)旋轉(zhuǎn)180°,并旋轉(zhuǎn)回0°。
Arduino代碼清單:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup()
{
}
void loop()
{
}
調(diào)試與演示