在本章中,我們將使用Arduino板(UNO)連接不同類型的電機(jī),并向你展示如何連接電機(jī)并從電路板上驅(qū)動(dòng)它。
有三種不同類型的電機(jī):
直流電機(jī)(DC—Direct Current motor)是最常見(jiàn)的電機(jī)類型。直流電動(dòng)機(jī)通常只有兩個(gè)引線,一個(gè)正極和一個(gè)負(fù)極。如果將這兩根引線直接連接到電池,電機(jī)將旋轉(zhuǎn)。如果切換引線,電機(jī)將以相反的方向旋轉(zhuǎn)。
警告 - 不要直接從Arduino板引腳驅(qū)動(dòng)電機(jī)。這可能會(huì)損壞電路板。使用驅(qū)動(dòng)電路或IC。
我們將本章分為三個(gè)部分:
你將需要以下組件:
按照電路圖進(jìn)行連接,如下圖所示。
進(jìn)行連接時(shí),請(qǐng)采取以下預(yù)防措施:
首先,確保晶體管以正確的方式連接。如圖所示,晶體管的扁平面應(yīng)該面向Arduino板。
其次,根據(jù)圖像中所示的排列,二極管的條紋端應(yīng)朝向+5V電源線。
int motorPin = 3; void setup() { } void loop() { digitalWrite(motorPin, HIGH); }
晶體管就像一個(gè)開(kāi)關(guān),控制電機(jī)的功率。Arduino引腳3用于打開(kāi)和關(guān)閉晶體管,并在草圖中命名為“motorPin”。
當(dāng)Arduino引腳3變?yōu)楦唠娖綍r(shí),電機(jī)將全速旋轉(zhuǎn)。
以下是連接到Arduino板的直流電機(jī)的原理圖。
int motorPin = 9; void setup() { pinMode(motorPin, OUTPUT); Serial.begin(9600); while (! Serial); Serial.println("Speed 0 to 255"); } void loop() { if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed <= 255) { analogWrite(motorPin, speed); } } }
晶體管就像一個(gè)開(kāi)關(guān),控制電機(jī)的功率。Arduino引腳3用于打開(kāi)和關(guān)閉晶體管,并在草圖中命名為“motorPin”。
當(dāng)程序啟動(dòng)時(shí),它會(huì)提示你提供值以控制電機(jī)的速度。你需要在串口監(jiān)視器中輸入介于0和255之間的值。
在“l(fā)oop”函數(shù)中,命令“Serial.parseInt”用于讀取在串口監(jiān)視器中作為文本輸入的數(shù)字,并將其轉(zhuǎn)換為“int”。你可以在此處輸入任何數(shù)字。如果數(shù)字在0到255之間,下一行中的“if”語(yǔ)句只使用此數(shù)字進(jìn)行模擬寫入。
直流電機(jī)將根據(jù)通過(guò)串口接收的值(0到250)以不同的速度旋轉(zhuǎn)。
為了控制直流電機(jī)的旋轉(zhuǎn)方向,無(wú)需互換引線,可以使用稱為H橋的電路。H橋是可以雙向驅(qū)動(dòng)電機(jī)的電子電路。H橋用于許多不同的應(yīng)用中。最常見(jiàn)的應(yīng)用之一是控制機(jī)器人中的電機(jī)。它被稱為H橋,是因?yàn)樗褂盟膫€(gè)晶體管連接,使示意圖看起來(lái)像一個(gè)“H”。
我們將在這里使用L298 H橋 IC。L298可以控制直流電機(jī)和步進(jìn)電機(jī)的速度和方向,并可以同時(shí)控制兩個(gè)電機(jī)。每個(gè)電機(jī)的額定電流為2A。然而,在這些電流下,你將需要使用散熱片。
你將需要以下組件:
以下是Arduino Uno板的直流電機(jī)接口示意圖。
上圖顯示了如何連接L298 IC控制兩個(gè)電機(jī)。每個(gè)電機(jī)有三個(gè)輸入引腳,Motor1的Input1(IN1),Input2(IN2)和Enable1(EN1);Motor2的Input3,Input4和Enable2。
由于在這個(gè)例子中我們只控制一個(gè)電機(jī),因此我們將把Arduino連接到L298 IC的IN1(引腳5),IN2(引腳7)和Enable1(引腳6)。引腳5和7是數(shù)字的,即ON或OFF輸入,而引腳6需要脈沖寬度調(diào)制(PWM)信號(hào)來(lái)控制電機(jī)速度。
下表顯示了電機(jī)根據(jù)IN1和IN2的數(shù)字值轉(zhuǎn)動(dòng)的方向。
IN1 | IN2 | 電機(jī)行為 |
---|---|---|
制動(dòng) | ||
1 | 向前 | |
1 | 向后 | |
1 | 1 | 制動(dòng) |
IC L298的引腳IN1連接到Arduino的引腳8,而IN2連接到引腳9。Arduino的這兩個(gè)數(shù)字引腳控制電機(jī)的方向。IC的EN A引腳連接到Arduino的PWM引腳2。這將控制電機(jī)的速度。
為了設(shè)置Arduino引腳8和9的值,我們使用了digitalWrite()函數(shù),而設(shè)置引腳2的值,我們必須使用analogWrite()函數(shù)。
const int pwm = 2 ; //initializing pin 2 as pwm const int in_1 = 8 ; const int in_2 = 9 ; //For providing logic to L298 IC to choose the direction of the DC motor void setup() { pinMode(pwm,OUTPUT) ; //we have to set PWM pin as output pinMode(in_1,OUTPUT) ; //Logic pins are also set as output pinMode(in_2,OUTPUT) ; } void loop() { //For Clock wise motion , in_1 = High , in_2 = Low digitalWrite(in_1,HIGH) ; digitalWrite(in_2,LOW) ; analogWrite(pwm,255) ; /* setting pwm of the motor to 255 we can change the speed of rotation by changing pwm input but we are only using arduino so we are using highest value to driver the motor */ //Clockwise for 3 secs delay(3000) ; //For brake digitalWrite(in_1,HIGH) ; digitalWrite(in_2,HIGH) ; delay(1000) ; //For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH digitalWrite(in_1,LOW) ; digitalWrite(in_2,HIGH) ; delay(3000) ; //For brake digitalWrite(in_1,HIGH) ; digitalWrite(in_2,HIGH) ; delay(1000) ; }
電機(jī)首先在順時(shí)針(CW)方向運(yùn)行3秒,然后逆時(shí)針(CCW)運(yùn)行3秒。
更多建議: