Arduino
UNO學習452.電機擴充板L293D
硬體準備
UNO
電機擴充板L293D
DC直流馬達
5線或4線步進馬達
伺服舵機馬達
電源器7V~12V1A
(電池電力可能不足)
Arduino輸出約只300mA左右,接電機超過需求則需另接外接電源,
此板搭配L293D及74HC595N晶片,腳位可直接插上UNO板,
無法單獨使用,像積木一樣和UNO堆疊插上,程式在UNO,電機在擴充板上,
可控制4個直流馬達或2個5線步進馬達,同時控制2個伺服舵機,
並可透過PWM控制直流馬達轉速,馬達電力超過0.5A,務必搭配外部電源使用↓
使用前需先下載安裝外部程式庫,以下擇一載點,
https://github.com/adafruit/Adafruit-Motor-Shield-library
https://github.com/adafruit/AccelStepper
解壓後將整個目錄放在Arduino目錄libraries之中,原始參考,
https://learn.adafruit.com/adafruit-motor-shield/library-install
預設位置為C:\Program Files\Arduino\libraries\AF_Motor↓
安裝後再開啟執行Arduino軟體,在範例中會多一個AFMotor,但在此不使用範例,
先將空迴圈上傳至UNO板上,以確認COM連線是正常的,↓
確認軟體後將UNO板移除連線,來安裝硬體電機擴充板到UNO板合體,
就像積木一樣往上堆疊,確認各接腳連接後安裝一個DC馬達到M3,
接座有5個口,中央為共GND,由於要控制馬達正反轉,故不安接GND,
共有M1/M2/M3/M4等的4組DC馬達接口,完成後與電腦連線,並接上外部電源↓
上傳以下程式後可開啟監控視窗,說明接腳座M3,頻率可設定為64K,8K,2K,1K,
PWM視馬達而定,約150~255控制轉速,讓馬達正轉2秒停2秒,再反轉2秒停2秒,
同時發送訊息到監控視窗↓
#include
<AFMotor.h>
AF_DCMotor
motor(3, MOTOR12_8KHZ); //接腳座及頻率
void
setup() {
Serial.begin(9600);
Serial.println("Motor test!");
motor.setSpeed(200); //可調轉速約150~到255
}
void
loop() {
Serial.print("tick---");
motor.run(FORWARD); //正轉
delay(2000);
Serial.println("stop");
motor.run(RELEASE); //停止
delay(2000);
Serial.print("tock---");
motor.run(BACKWARD); //反轉
delay(2000);
Serial.println("stop");
motor.run(RELEASE); //停止
delay(2000);
}
可試著調整到各M1~M4接口及轉速,或連結減速馬達裝上輪子,製成小車,
原文參考https://learn.adafruit.com/adafruit-motor-shield/using-dc-motors
輸出口M1~M4同時也是步進馬達的接口,5Pin*2組如圖,↓
建議先移除電腦連線,再接馬達後,以下為28BYJ-48步進馬達規格,步腳5.625度角,齒輪減速比63.68395:1,計算一圈360度/5.625=64,再64*64齒比=4096步,
注意原本馬達的排線位置為配合程式庫,故有做跳線注意安裝順序,
紅色接+5V,原橘粉為一組,黃藍為一組,擴充板上的GND為空↓
在上傳程式時建議先將空迴圈上傳至UNO板上,並確認AFMotor.h外掛已安裝,
下例為4096步轉一圈後再反轉,上傳程式後可開啟監控視窗,以了解轉動情形↓
#include
<AFMotor.h>
AF_Stepper
motor(48, 2); //48步馬達接第2組接口
void
setup() {
Serial.begin(9600);
Serial.println("Stepper test!");
motor.setSpeed(300); //轉速
}
void
loop() {
Serial.println("Interleave
FORWARD");
motor.step(4096, FORWARD, INTERLEAVE); //正轉4096為360度一圈
delay(500);
Serial.println("Interleave
BACKWARD");
motor.step(4096, BACKWARD, INTERLEAVE); //反轉4096為360度一圈
delay(500);
}
試著安裝到Stepper1接口,並控制旋轉角度,注意轉速不要太快以至馬達無轉動,
原文參考https://learn.adafruit.com/adafruit-motor-shield/using-stepper-motors
輸出口SERVO_1/SERVO_2,為伺服馬達3線接口,如圖,↓
此接口較簡單,正負連結電力,SER1_S腳位與Arduino的~D10短路相通,
SER2_S腳位與Arduino的~D9短路相通,此2腳位有~PWM記號,
使用上和接在UNO板上的方式是一樣的,在ArduBlock也有對應的積木塊,
伺服馬達大多不轉360度,就讓馬達由0轉到180度,再轉回到0度位置,
可自行調整角度以了解伺服馬達的控制方式↓
#include
<Servo.h>
Servo
servo_pin_10;
void
setup()
{
servo_pin_10.attach(10);
}
void
loop()
{
servo_pin_10.write( 0 );
delay( 1000 );
servo_pin_10.write( 180 );
delay( 1000 );
}