L298N 直流电机驱动模块与 Arduino
L298N 直流電機驅(qū)動模塊與 Arduino
原文地址
L298N 電機驅(qū)動器可以控制兩個直流電機的速度和旋轉(zhuǎn)方向。
此外,它還可以控制雙極步進(jìn)電機,例如NEMA 17。如果您想了解更多信息,請查看本教程。
L298N電機驅(qū)動器和Arduino控制步進(jìn)電機:Control Stepper Motor with L298N Motor Driver & Arduino (lastminuteengineers.com)
控制直流電機
只有當(dāng)我們可以控制直流電機的速度和旋轉(zhuǎn)方向時,我們才能完全控制它。
- PWM – 控制速度
- H橋 – 控制車輪方向
讓我們進(jìn)一步了解這些技術(shù)。
直流電機的速度可以通過改變其輸入電壓來控制。實現(xiàn)此目的的一種廣泛使用的技術(shù)是脈寬調(diào)制(PWM)。
PWM是一種通過發(fā)送一系列ON-OFF脈沖來調(diào)整輸入電壓平均值的技術(shù)。該平均電壓與脈沖的寬度成正比,稱為占空比。
占空比越高,施加到直流電機的平均電壓就越高,從而導(dǎo)致電機速度增加。占空比越短,施加到直流電機的平均電壓越低,導(dǎo)致電機速度降低。
下圖顯示了具有各種占空比和平均電壓的PWM技術(shù)。
脈寬調(diào)制(PWM)技術(shù)
H橋 – 控制車輪方向
直流電機的旋轉(zhuǎn)方向可以通過改變其輸入電壓的極性來控制。實現(xiàn)此目的的一種廣泛使用的技術(shù)是使用 H 橋。
H橋電路由四個排列成H形的開關(guān)組成,電機位于中心。
同時關(guān)閉兩個特定開關(guān)可反轉(zhuǎn)施加到電機的電壓的極性。這會導(dǎo)致電機旋轉(zhuǎn)方向發(fā)生變化。
以下動畫顯示了 H 橋電路的工作原理。
H橋工作
L298N 電機驅(qū)動芯片
模塊的中心是一個大的黑色芯片,帶有一個厚實的散熱器 - L298N。
L298N芯片包含兩個標(biāo)準(zhǔn)H橋,能夠驅(qū)動一對直流電機,非常適合構(gòu)建兩輪機器人平臺。
L298N 電機驅(qū)動器的電源范圍為 5V 至 35V,每通道能夠提供 2A 的連續(xù)電流,因此它與我們的大多數(shù)直流電機配合得很好。
技術(shù)規(guī)格
以下是規(guī)格:
| 電機輸出電壓(推薦) | 7V – 12V |
| 邏輯輸入電壓 | 5V – 7V |
| 每通道連續(xù)電流 | 2一 |
| 最大功耗 | 25 |
有關(guān)更多詳細(xì)信息,請參閱下面的數(shù)據(jù)表。
L298N 數(shù)據(jù)表
L298N 電機驅(qū)動器模塊引腳排列
L298N 模塊有 11 個引腳,允許它與外界通信。引腳排列如下:
電源引腳
L298N 電機驅(qū)動器模塊從 3 針 間距3.5mm螺絲端子接收電源。
L298N 電機驅(qū)動器有兩個輸入電源引腳:VS 和 VSS。
VS引腳為 IC 的內(nèi)部 H 橋供電,該橋驅(qū)動電機。該引腳接受 5V 至 12V 的輸入電壓。
VSS用于為 L298N IC 內(nèi)的邏輯電路供電,范圍為 5V 至 7V。
接地是公共接地引腳。
輸出引腳
L298N電機驅(qū)動器的輸出通道,輸出 1 和輸出 2用于電機 A 和輸出 3 和輸出 4對于電機 B,用兩個 3.5mm 間距的螺絲端子斷開到模塊的邊緣。您可以將兩個 5-12V 直流電機連接到這些端子。
模塊上的每個通道可為直流電機提供高達(dá) 2A 的電流。然而,提供給電機的電流量取決于電機電源的容量。
方向控制引腳
方向控制引腳允許您控制電機是向前還是向后旋轉(zhuǎn)。這些引腳實際上控制著L298N芯片內(nèi)H橋電路的開關(guān)。
該模塊有兩個方向控制引腳。這IN1 和 IN2銷控制電機A的旋轉(zhuǎn)方向;而IN3 和 IN4控制電機B的旋轉(zhuǎn)方向。
電機的旋轉(zhuǎn)方向可以通過對這些輸入施加邏輯高電平(5V)或邏輯低電平(接地)來控制。下圖顯示了各種組合及其結(jié)果。
| 低(0) | 低(0) | 電機關(guān)閉 |
| 高(1) | 低(0) | 向前 |
| 低(0) | 高(1) | 向后 |
| 高(1) | 高(1) | 電機關(guān)閉 |
速度控制引腳
速度控制引腳ENA和ENB用于打開/關(guān)閉電機并控制其速度。
將這些引腳拉高會導(dǎo)致電機旋轉(zhuǎn),而將它們拉低將停止它們。通過脈寬調(diào)制(PWM),可以控制電機的速度。
該模塊通常在這些引腳上帶有跳線。當(dāng)此跳線就位時,電機全速旋轉(zhuǎn)。如果要以編程方式控制電機的速度,請卸下跳線并將它們連接到Arduino的PWM引腳。
板載 5V 穩(wěn)壓器和跳線
該模塊包括一個 78M05 5V 穩(wěn)壓器,可通過跳線使能或禁用。
當(dāng)此跳線就位時,5V穩(wěn)壓器使能,邏輯電源(VSS)從電機電源(VS)派生。在這種情況下,5V輸入端子充當(dāng)輸出引腳,提供5V 0.5A電流。您可以使用它為 Arduino 或其他需要 5V 電源的電路供電。
當(dāng)跳線被移除時,5V穩(wěn)壓器被禁用,我們必須通過VSS引腳單獨提供5V。
警告:
如果電機電源小于 12V,則可以將跳線保持在原位。如果大于12V,則必須拆下跳線,以防止損壞板載5V穩(wěn)壓器。
此外,當(dāng)跳線就位時,請勿同時為 VSS 和 VS 引腳供電。
L298N的壓降
L298N 的壓降約為 2V。這是因為內(nèi)部開關(guān)晶體管在正向偏置時的壓降約為1V,并且由于H橋需要電流通過兩個晶體管,因此總壓降為2V。
因此,如果將 12V 連接到電機電源端子,電機將接收大約 10V。這意味著 12V 直流電機永遠(yuǎn)不會全速旋轉(zhuǎn)。
為了使電機以最大速度運行,電機電源的電壓應(yīng)略高于電機的實際電壓要求(+2V)。
考慮到2V的壓降,如果使用5V電機,則需要在電機電源端子提供7V。如果您有 12V 電機,那么您的電機電源電壓應(yīng)為 14V。
這種過大的壓降會導(dǎo)致熱量耗散。這就是為什么基于 L298N 的電機驅(qū)動器需要一個大散熱器的原因。
將 L298N 電機驅(qū)動器模塊連接到 Arduino
現(xiàn)在我們已經(jīng)了解了有關(guān)該模塊的所有信息,我們可以開始將其連接到我們的Arduino!
讓我們從連接電機電源開始。在我們的實驗中,我們使用直流變速箱電機,也稱為“TT”電機,常見于兩輪驅(qū)動機器人中。它們的額定電壓為 3 至 12V。因此,我們將外部 12V 電源連接到 VS 端子。由于L298N的壓降約為2V,因此電機將接收10V并以略低的RPM旋轉(zhuǎn)。不過沒關(guān)系。
接下來,我們需要為 L298N 的邏輯電路提供5V。我們將使用板載 5V 穩(wěn)壓器從電機電源吸收 5V,因此請將 5V-EN 跳線固定到位。
現(xiàn)在,將 L298N 模塊的輸入和使能引腳(ENA、IN1、IN2、IN3、IN4 和 ENB)連接到六個 Arduino 數(shù)字輸出引腳(9、8、7、5、4 和 3)。請注意,Arduino 輸出引腳 9 和 3 均支持 PWM。
最后,將一個電機連接到端子 A(OUT1 和 OUT2),另一個連接到端子 B(OUT3 和 OUT4)。您可以更換電機的連接。從技術(shù)上講,沒有正確或錯誤的方法。
Arduino示例代碼
下面的代碼將向您展示如何使用 L298N 電機驅(qū)動器控制直流電機的速度和旋轉(zhuǎn)方向,并可作為更多實際實驗和項目的基礎(chǔ)。
代碼將電機沿一個方向移動一圈,然后沿相反方向移動。還涉及一些加速和減速。
加速或減速電機時,您可能會聽到它發(fā)出嗡嗡聲,尤其是在較低的 PWM 值下。這是正常的;沒有什么可擔(dān)心的。發(fā)生這種情況是因為直流電機需要最低的電壓才能運行。
// Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int in3 = 5; int in4 = 4;void setup() {// Set all the motor control pins to outputspinMode(enA, OUTPUT);pinMode(enB, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);// Turn off motors - Initial statedigitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW); }void loop() {directionControl();delay(1000);speedControl();delay(1000); }// This function lets you control spinning direction of motors void directionControl() {// Set motors to maximum speed// For PWM maximum possible values are 0 to 255analogWrite(enA, 255);analogWrite(enB, 255);// Turn on motor A & BdigitalWrite(in1, HIGH);digitalWrite(in2, LOW);digitalWrite(in3, HIGH);digitalWrite(in4, LOW);delay(2000);// Now change motor directionsdigitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);delay(2000);// Turn off motorsdigitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW); }// This function lets you control speed of the motors void speedControl() {// Turn on motorsdigitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);// Accelerate from zero to maximum speedfor (int i = 0; i < 256; i++) {analogWrite(enA, i);analogWrite(enB, i);delay(20);}// Decelerate from maximum speed to zerofor (int i = 255; i >= 0; --i) {analogWrite(enA, i);analogWrite(enB, i);delay(20);}// Now turn off motorsdigitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW); }代碼說明:
Arduino代碼相當(dāng)簡單。它不需要任何庫即可工作。代碼首先聲明連接到 L298N 控制引腳的 Arduino 引腳。
// Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int in3 = 5; int in4 = 4;在代碼的設(shè)置部分,所有電機控制引腳(包括方向和速度控制引腳)都配置為數(shù)字輸出。方向控制引腳被拉低以最初禁用兩個電機。
void setup() {// Set all the motor control pins to outputspinMode(enA, OUTPUT);pinMode(enB, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);// Turn off motors - Initial statedigitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW); }在代碼的循環(huán)部分,我們調(diào)用兩個用戶定義的函數(shù),延遲一秒。
void loop() {directionControl();delay(1000);speedControl();delay(1000); }這些函數(shù)是:
-
directionControl()– 此功能使兩個電機全速旋轉(zhuǎn)兩秒鐘。然后,它反轉(zhuǎn)電機的旋轉(zhuǎn)方向并旋轉(zhuǎn)兩秒鐘。最后,它停止電機。
void directionControl() {// Set motors to maximum speed// For PWM maximum possible values are 0 to 255analogWrite(enA, 255);analogWrite(enB, 255);// Turn on motor A & BdigitalWrite(in1, HIGH);digitalWrite(in2, LOW);digitalWrite(in3, HIGH);digitalWrite(in4, LOW);delay(2000);// Now change motor directionsdigitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);delay(2000);// Turn off motorsdigitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW); } -
speedControl()– 此函數(shù)使用 analogWrite() 函數(shù)生成 PWM 信號,該信號將兩個電機從零加速到最大速度,然后再將它們減速回零。最后,它停止電機。
void speedControl() {// Turn on motorsdigitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);// Accelerate from zero to maximum speedfor (int i = 0; i < 256; i++) {analogWrite(enA, i);analogWrite(enB, i);delay(20);}// Decelerate from maximum speed to zerofor (int i = 255; i >= 0; --i) {analogWrite(enA, i);analogWrite(enB, i);delay(20);}// Now turn off motorsdigitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW); }
藍(lán)牙控制機器人項目描述:
使用 L298N 電機驅(qū)動程序和 Android 手機應(yīng)用程序制作 Arduino 藍(lán)牙控制機器人汽車。
藍(lán)牙 Arduino
藍(lán)牙模塊的 VCC 與 5 V連接.
地線,與Arduino的接地相連。
TX線,與Arduino的引腳2連接。
Rx 線,與 Arduino 的引腳編號 3 連接。
#include <SoftwareSerial.h> SoftwareSerial Blue(2, 3);int ena = 5; int enb = 6;int in1 = 8; int in2 = 9; int in3 = 10; int in4 = 11; long int data; long int command1 = 92; // forward long int command2 = 79; // left long int command3 = 71; // right long int command4 = 91; // Reverse long int command5 = 10; // stopchar state = 0;void setup() {Serial.begin(9600);Blue.begin(9600);pinMode(ena, OUTPUT);pinMode(enb, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);analogWrite(ena, 255);analogWrite(enb, 255);delay(1000); }void loop() {while (Blue.available() == 0);if (Blue.available() > 0) {data = Blue.parseInt();}delay(100);//Serial.print(data);if (data == command1) // Forward{digitalWrite(in1, HIGH);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);//delay(100);}if (data == command2) // left{digitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);delay(100);}if (data == command3) // Right{digitalWrite(in1, HIGH);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW);delay(100);}if (data == command4) // Reverse{digitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, HIGH);digitalWrite(in4, LOW);delay(100);}if (data == command5) // Stop{digitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW);// delay(100);} }使用L298N電機驅(qū)動器的Arduino避障機器人
作者:Paul Vertor in CircuitsArduino
原文
簡介:
在我們開始之前,您是否想過是為您的項目選擇 Arduino 電機擴展板還是 L298N 電機驅(qū)動器?我個人更喜歡 L298N 電機驅(qū)動器,因為可以使用更多 Arduino 的引腳為我們的機器人添加更多功能!
1. 何時使用 Arduino 電機擴展板 L293D?
優(yōu)勢
首先,我們可以在機器人底盤上節(jié)省一些空間,而且與 L298N 電機驅(qū)動器相比,使用電機擴展板時用于接線的跳線要少得多。
其次,我們還可以使用 Adafruit 電機擴展板庫通過軟件設(shè)置電機速度并定義最大速度。
最后,Arduino和電機可以使用單個直流電源,之后擴展板將處理其余部分,以確保您的伺服和電機正常運行。
弊端
將引腳接頭焊接到擴展板層上需要一些焊接技巧。此外,該擴展板使用 Arduino 計時器進(jìn)行伺服操作,這可能會導(dǎo)致“AFMotor.h”(即 Adafruit Motor Shield)庫和其他庫之間的計時器沖突。最后但并非最不重要的一點是,一旦電流超過 1A,你可能希望在電機驅(qū)動器上安裝一個散熱器,否則會出現(xiàn)熱故障,可能會燒壞芯片。
規(guī)格
您可以在此處查看有關(guān)擴展板規(guī)格的更多信息。
2. 何時使用L298N電機驅(qū)動器?
優(yōu)勢
它只需要一些接線 - 無需焊接。雖然這個模塊沒有預(yù)先構(gòu)建的庫,但可以使用Arduino的PWM(脈寬調(diào)制)引腳和一些簡單的代碼行來設(shè)置電機的速度。
這里對燒壞芯片的擔(dān)憂要少得多,因為模塊上的每個通道都可以向直流電機提供高達(dá) 2A 的電流,再加上一個大塊的散熱器可以保護(hù)模塊免受可能的熱故障的影響(順便說一下,散熱器使驅(qū)動器看起來更酷)。
由于我們可以使用所有Arduino的引腳(在電機擴展板上,可以使用的引腳數(shù)量減少了一半以上),因此有更多的引腳可用于更多功能!
弊
Arduino和電機驅(qū)動器分開放置將在機器人底盤上占用更多空間。電源和接地連接也可能需要額外的面包板。此外,在大多數(shù)情況下,Arduino和電機需要兩個獨立的直流電源。
如果電池電源無法提供恒定功率,您還可能會遇到一些奇怪的伺服操作,從而導(dǎo)致 Arduino 重置問題并導(dǎo)致伺服抖動或不工作。但不要擔(dān)心 - 稍后我將介紹一種解決此問題的簡單方法!
規(guī)格
以下是 lastminuteengineers.com 的規(guī)范:
“L298N 電機驅(qū)動器 IC 實際上有兩個輸入電源引腳:”Vss“和”Vs”。
從Vs引腳,H橋獲得驅(qū)動電機的電源,可以是5至35V。Vss用于驅(qū)動5至7V的邏輯電路。他們共用一個’GND’。
在此處查看有關(guān)如何使用電機驅(qū)動器的更多信息。
第 1 步:
步驟 2:準(zhǔn)備組件和工具
對于此項目,您將需要:
將組件安裝在機器人底盤上有許多選擇,包括使用熱膠、雙面膠帶或螺釘。
以下是您可能需要的一些額外工具:
- 熱膠槍
- 剪刀
- 一把螺絲刀
- 萬用表(如果您想精確測量電池的電壓 - 我稍后會談到這一點)
- 焊料、烙鐵和傳統(tǒng)海綿
- 18650 3.7 V 鋰離子電池充電器(長期使用需要)
上面提到的焊接工具只是焊接的最低要求。可以在此處查看焊接的基本工具和材料以及如何焊接。
第 3 步:將跳線焊接到每個電機的端子 A&B
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WxcPt8RT-1678264694735)(null)]
3-6 V DC TT 電機上有兩個端子。從現(xiàn)在開始,讓我們稱它們?yōu)榻K端 A 和 B。棘手的是,每個端子可以是A或B,具體取決于您將電機放置在機器人底盤上的方式。但規(guī)則很簡單:將電機連接到機箱后,無論頂部的哪個端子是A,下面的另一個端子都是B.識別電機側(cè)是A還是B是一個重要的過程,它將確保將電機的電線正確連接到L298N電機驅(qū)動器, 確保它將機器人的輪子沿所需方向旋轉(zhuǎn)(向前方向或向后方向)。
現(xiàn)在,您只需要記住項目中兩個電機的每個電機的端子 A 在哪里以及端子 B 的位置。
第 4 步:組裝機器人的零件
在連接所有組件之前,我們將固定底盤上的每個組件以形成機器人的形狀。
由于我在頂面使用了空間有限的單層底盤,因此已經(jīng)放入了兩個帶輪子的電機,腳輪,電池座和伺服器固定在底面上。超聲波傳感器連接到傳感器支架上,然后擰到伺服電機上。此外,Arduino Uno 板和電機驅(qū)動器模塊放置在機器人的尾部,而面包板和 9 V 電池放置在機器人的中間。在這些組件中,電池座最后安裝,以避免重疊在用于將組件連接到頂部的螺釘上。此外,請注意,在這個階段,我們還沒有對18650個細(xì)胞做任何事情。我建議我們把這些留在那里,直到你對如何照顧好它們有一些想法。
第 5 步:將所有內(nèi)容連接起來
現(xiàn)在我們已經(jīng)邁出了重要的一步。這些連接允許您的Arduino與機器人中的其他組件進(jìn)行通信。照片說明中寫的注釋可能會對您有所幫助。
電機與電機驅(qū)動器的導(dǎo)線
如果看一下L298N電機驅(qū)動器原理圖,可以看出有四個輸出端子,包括OUT1、OUT2、OUT3和OUT4,分別以逆時針方向安裝在模塊上,用于為電機提供電流。
還記得本開頭提到的電機端子 A 和 B 嗎?現(xiàn)在是時候?qū)㈦姍C 1(左電機)的 A 線連接到 OUT3,將 B 線連接到 OUT4,將電機 2 的 A 線(右電機)連接到 OUT1,最后將 B 線連接到 OUT2。
就我而言,紫色是左側(cè)電機的 A 線的顏色,而藍(lán)色是同一電機的 B 線的顏色,反之亦然(藍(lán)色表示 A,紫色表示 B)。
將 Arduino 5 V 和 GND 引腳連接到試驗板
這些引腳用于在面包板上創(chuàng)建兩條5V和GND的公共共享線路,為機器人內(nèi)的不同組件供電。
為您的電機驅(qū)動器供電
再次查看 L298N 電機驅(qū)動器原理圖。您可以看到有三個端子用于為電機驅(qū)動器供電,包括 VCC、GND 和 5V。電池座的正極和負(fù)極線分別連接到VCC和GND為兩個電機供電,而5V端子則連接到試驗板上的公共5V線路,為模塊的邏輯電路供電。
將電機驅(qū)動器連接到 Arduino 板
同樣從上面的L298N原理圖中,我們可以看到有六個輸入引腳,從左到右分別是ENA,IN1,IN2,IN3,IN4和ENB。由于很可能有跳線代替ENA和ENB,我們只需要將IN1-IN4相應(yīng)地連接到數(shù)字引腳4-7(又名引腳D4-D7)。這些銷用于控制電機向前或向后旋轉(zhuǎn)的方向。具體來說,IN4 向前驅(qū)動左側(cè)電機,IN3 反轉(zhuǎn)該電機,IN2 設(shè)置右側(cè)電機的前進(jìn)方向,IN1 反轉(zhuǎn)。
ENA和ENB上預(yù)裝的跳線基本上會將電機設(shè)置為最大速度。如果您想使用“analogWrite()”功能控制電機的速度,只需移除預(yù)安裝的跳線,然后將 ENA 和 ENB 連接到 Arduino 上可用的 PWM 引腳,并將任何值寫入這些引腳的范圍從 0 到 255。
使用穩(wěn)壓器為伺服提供恒定功率
穩(wěn)壓器有三個引腳,包括輸入、接地和輸出。在這種情況下,它將從Arduino的Vin引腳獲取9 V輸入電壓,并向伺服輸出5 V的恒定功率。穩(wěn)壓器和伺服器都將沉入面包板上的公共接地線。
舵機還有三個引腳,分別是VCC,GND和信號引腳。如您所知,VCC 將連接到穩(wěn)壓器的“輸出”引腳,而信號引腳連接到 Arduino 板上的引腳 D9。請注意,如果向 7805 輸入 5 V,則伺服器將不起作用!因此,如果您使用 USB 電纜為 Arduino 供電,請將伺服器的 VCC 引腳連接到常見的 5 V 線路。
將超聲波傳感器連接到 Arduino Uno
超聲波傳感器有四個引腳,分別是VCC,觸發(fā),回聲和GND。通常的做法是為每個引腳選擇不同的電線顏色。我為VCC選擇了橙色,為觸發(fā)器選擇了紫色,為回聲選擇了灰色,為GND選擇了藍(lán)色。該模塊由公共 5 V 線路供電,并與其他組件吸收到同一接地線路。觸發(fā)引腳連接到Arduino的引腳A0,而Echo引腳連接到引腳A1。
使用 DC 插孔使用 9 V 電池為 Arduino 供電
只需將插孔插入 Arduino 的外部直流端口,然后將 18650 電池放入電池座中,同時打開開關(guān)即可為系統(tǒng)供電。但是堅持住!你的機器人的大腦目前是空的,你需要在其中輸入一些代碼。
第 6 步:將代碼上傳到機器人的大腦
-
在 Arduino IDE 軟件的“菜單”選項卡上,單擊“工具”/“管理庫…”
-
在搜索欄中輸入“NewPing”,然后選擇“安裝”
-
將代碼上傳到您的 Arduino 板
-
通過 USB 電纜將 Arduino 板連接到您的 PC
-
在“菜單”選項卡上,單擊“工具”,然后為“板”選項選擇“Arduino Uno”
-
單擊“驗證”符號(看起來像“勾號”)以編譯代碼
-
單擊“√”符號旁邊的“上傳”符號,將一些邏輯上傳到機器人的大腦
附件
Arduino_FlinchingBot.ino
下載
#include <NewPing.h> #include <Servo.h>#define TRIG_PIN A0 #define ECHO_PIN A1 #define MAX_DISTANCE 400NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);Servo myservo;int distance = 100; int pos = 0;void setup() {//set up motorspinMode(7, OUTPUT); //left motors forwardpinMode(6, OUTPUT); //left motors reversepinMode(5, OUTPUT); //right motors forwardpinMode(4, OUTPUT); //right motors reverse// set up servomyservo.attach(9);myservo.write(90);delay(2000);distance = readPing();delay(60); }void loop() {int distanceR = 0;int distanceL = 0;if (distance <= 50) {moveStop();delay(100);moveBackward();delay(300);moveStop();delay(100);distanceR = lookRight();delay(50);distanceL = lookLeft();delay(50);if (distanceR >= distanceL) {if (distanceR <= 30 && distanceL <= 30) { // if both sides are too narrowfor (int i = 0; i < 2; i++) { // turn aroundturnRight();moveStop();delay(100);}} else {turnRight();moveStop();delay(100);}} else if (distanceR < distanceL) {if (distanceR < 30 && distanceL <= 30) { // if both sides are too narrowfor (int i = 0; i < 2; i++) { // turn aroundturnLeft();moveStop();delay(100);}} else {turnLeft();moveStop();delay(100);}}} else moveForward();distance = readPing();delay(60); }int lookLeft() {for (pos = 90; pos <= 180; pos += 1) { // goes from 90 degrees to 180 degrees// in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(5);}int distance = readPing();delay(60);for (pos = 180; pos >= 90; pos -= 1) { // goes from 180 degrees to 90 degrees// in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(5);}return distance; // return distance on the left side }int lookRight() {for (pos = 90; pos >= 0; pos -= 1) { // goes from 90 degrees to 0 degree// in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(5);}int distance = readPing();delay(60);for (pos = 0; pos <= 90; pos += 1) { // goes from 0 degree to 90 degrees// in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(5);}return distance; // return distance on the right side }int readPing() {int cm = sonar.ping_cm();if (cm == 0) // if the measured distance exceeds the measuring limit of the ultrasonic sensor, by default the sonar.ping_cm() function will return a value of 0{ // Due to the distance of 0 the robot will keep avoiding even when there is nothing in front of itcm = MAX_DISTANCE; // To fix this, we set the distance to the pre-defined MAX_DISTANCE of 400 cm}return cm; }void moveStop() {digitalWrite(7, LOW);digitalWrite(6, LOW);digitalWrite(5, LOW);digitalWrite(4, LOW); }void moveForward() {digitalWrite(7, HIGH);digitalWrite(5, HIGH); }void moveBackward() {digitalWrite(6, HIGH);digitalWrite(4, HIGH); }void turnRight() {digitalWrite(7, HIGH);digitalWrite(4, HIGH);delay(250);digitalWrite(7, HIGH);digitalWrite(5, HIGH); }void turnLeft() {digitalWrite(5, HIGH);digitalWrite(6, HIGH);delay(250);digitalWrite(7, HIGH);digitalWrite(5, HIGH); }第 7 步:照顧好 18650 電池
在將 18650 電池放入電池座為電機供電之前,請務(wù)必事先檢查其剩余電壓,以免意外縮短電池壽命。
那我的意思是什么?如果您想要長期使用的“健康”電池,請盡量不要過度使用或過度充電。例如,始終保持3.2 V至3.9 V的電壓值(盡管大多數(shù)電池可以充電至最大值4.2 V)。為此,您必須經(jīng)常檢查用于為機器人供電的電池的剩余電壓,并在電壓降至 3.2 V 以下后對其進(jìn)行充電。對于我正在使用的電池,通常需要大約兩個小時才能將電池部分充電至大約 3.9 V。部分充電時間可能會因不同類型的 18650 電池而異,因此請注意時間!
如圖所示,我的一個 18650 電池的剩余電壓測量為 3.75 V,所以很好!現(xiàn)在我可以安全地使用它為我的機器人供電。
您可以在此處閱讀有關(guān)如何延長電池壽命的更多信息。
第 8 步:根據(jù)需要修改代碼!
我們快到了!現(xiàn)在我只想提供更多信息,以便您可以自由地個性化機器人的邏輯。
那么機器人是怎么想的呢?如果你看上面的流程圖,可以看出機器人會不斷檢查50厘米的距離內(nèi)是否有物體在它面前。如果什么都沒有,它將繼續(xù)前進(jìn)。否則,它將后退以避免與前面的物體發(fā)生碰撞,然后它會轉(zhuǎn)頭看右側(cè)和左側(cè),以決定它應(yīng)該轉(zhuǎn)向哪個方向(左或右)。例如,如果當(dāng)時右側(cè)有東西擋住,它會向左轉(zhuǎn),反之亦然。但是,如果兩側(cè)都太窄(即兩側(cè)的距離都短于30厘米),它只會簡單地掉頭。轉(zhuǎn)向任何方向后,它將繼續(xù)直行,關(guān)閉動作循環(huán)。
第 9 步:完成!
恭喜你來到這里!讓我們將 18650 電池放入電池座中,打開開關(guān),然后將 9 V 電池直流插孔插入 Arduino 的外部直流端口,然后看著您的機器人開始滾動車輪!
總結(jié)
以上是生活随笔為你收集整理的L298N 直流电机驱动模块与 Arduino的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 睡多多APP安卓版苹果版最新下载地址
- 下一篇: dlib库的安装