[Arduino範例] ULN2003驅動板+28BYJ-48步進馬達
幾乎所有的Arduino學習套件裡,都會有"ULN2003+28BYJ-48步進馬達"這樣的組合,什麼是步進馬達(Stepper motor)?簡單來說,就是這個馬達可以依我們的指示,精準的旋轉一定的角度,最常被運用在3D列印機之類的設備上。
但是要搞定它們並沒想像中簡單,因為Arduino內建的函式庫,對這樣的組合並不友善,所以要花點功夫才能解決。
測試了多款第三方函式庫後,總算找到一個最好用的函式庫:Unistep2,就算初學者也能快速上手!
Unistep2從程式管理員就能安裝。
接線很簡單,ULN2003和28BYJ-48之間的線是快速接頭,插上去就行了,不會接錯。ULN2003和Arduino Uno之間接了4條線,我們這邊就選Uno的Pin8、9、10、11,分別接到ULN2003的IN1、IN2、IN3、IN4。
28BYJ48的步進角度是5.625度,馬達減速比是1:64,意思就是給28BYJ48發送一個脈衝訊號,電機旋轉(5.625/64)度,而馬達旋轉一圈是360度,需要360/(5.635/64)=4096個脈衝信號,也就是說轉一圈總共是4096個step。
#include <Unistep2.h>
Unistep2 stepper(8, 9, 10, 11, 4096, 1000);// IN1, IN2, IN3, IN4, 總step數, 每步的延遲(in micros)
void setup()
{
}
void loop()
{
stepper.run(); //步進機啟動
if ( stepper.stepsToGo() == 0 ){ // 如果stepsToGo=0,表示步進馬達已轉完應走的step了
delay(500);
stepper.move(4096); //正轉一圈
//stepper.move(-4096); //負數就是反轉,反轉一圈
}
}
程式很簡單,用move(step)就能前進多少個step,要轉一圈就填4096,若是要反轉,就加上負數符號。
經由stepsToGo()可以得知馬達還有多少個step要走,如果是0,表示它的前一個動作已完成,這樣我們就能再下指令了。
Unistep2函式庫真的超好用的!而且,它還能控制2個,甚至以上的步進馬達,大家可以試試!