RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用無芯直流電機(jī)和nRF24L01構(gòu)建最快Arduino遙控車

科技觀察員 ? 來源:circuitdigest ? 作者:Aswinth Raj ? 2022-08-18 16:50 ? 次閱讀

遙控車玩起來總是很有趣,我個人是這些遙控車的忠實粉絲, 并且已經(jīng)(仍然)廣泛地玩過它們。如今,這些汽車中的大多數(shù)都提供了巨大的扭矩來應(yīng)對崎嶇的地形,但有些東西總是滯后,它的速度??!。。 所以,在這個項目中,我們將 使用 Arduino 構(gòu)建一個完全不同類型的 RC 汽車,主要這輛車的目標(biāo)是達(dá)到最高速度,因此我決定為遙控車試用 無芯直流電機(jī)。這些電機(jī)通常用于無人機(jī),額定轉(zhuǎn)速為 39000 RPM 這應(yīng)該足以滿足我們對速度的渴望。該車將由一塊小型鋰電池供電,并可使用 nRF24L01 射頻模塊進(jìn)行遠(yuǎn)程控制。

遙控車用無芯直流電機(jī)

該項目中使用的無芯直流電機(jī)如下圖所示。您可以輕松找到它們,因為它們廣泛用于迷你無人機(jī)。只需尋找 8520 磁性微型空心杯電機(jī),您就會找到這些。

poYBAGL9_JWALcksAAVbPlJfG4U266.png

現(xiàn)在,將直流電機(jī)用于遙控車存在某些缺點。首先是它們提供非常低的啟動扭矩,因此我們的遙控車應(yīng)該盡可能輕巧。這就是為什么我決定使用 SMD 組件在 PCB 上構(gòu)建整個汽車并盡可能減小電路板尺寸的原因。第二個問題是它的高速,39000 RPM(軸的 RPM)很難處理,所以我們需要在 Arduino 端使用 MOSFET 構(gòu)建的速度控制電路。第三件事是這些電機(jī)將由單個鋰聚合物電池供電,工作電壓在 3.6V 至 4.2V 之間,因此我們必須將電路設(shè)計為在 3.3V 上工作。這就是我們使用3.3V Arduino Pro mini的原因作為我們遙控車的大腦。理清了這些問題,我們來看看搭建這個項目所需要的材料。

所需材料

3.3V Arduino Pro Mini

Arduino納米

NRF24L01 – 2 個

操縱桿模塊

SI2302 MOSFET

1N5819 二極管

無鐵芯 BLDC 電機(jī)

AMS1117-3.3V

鋰聚合物電池

電阻器、電容器

連接線

使用 Arduino 的遙控車射頻操縱桿

如前所述,遙控車將使用射頻操縱桿進(jìn)行遠(yuǎn)程控制。該操縱桿也將使用 Arduino 和 nRF24L01 RF 模塊構(gòu)建,我們還使用操縱桿模塊在所需方向控制我們的 RC。如果您對這兩個模塊完全陌生,您可以考慮閱讀使用 nRF24L01 連接 Arduino和使用 Arduino 連接操縱桿的文章,以了解它們的工作原理以及如何使用它們。要構(gòu)建您的Arduino RF 遠(yuǎn)程操縱桿,您可以按照下面的電路圖進(jìn)行操作。

poYBAGL9_JCAH8BHAAGbistnfBA808.png

RF 操縱桿電路可以使用納米板的 USB 端口供電。nRF24L01 模塊僅在 3.3V 上運行,因此我們在 Arduino 上使用了 3.3V 引腳。我在面包板上構(gòu)建了電路,如下所示,如果需要,您也可以為此創(chuàng)建一個 PCB。

pYYBAGL9_I2AJrikAAUILtkgNYs461.png

RF 操縱桿電路的Arduino 代碼非常簡單,我們必須從操縱桿中讀取 X 值和 Y 值并通過 nRF24L01 將其發(fā)送到 RC 車。該電路的完整程序可以在本頁底部找到。我們不會對此進(jìn)行解釋,因為我們已經(jīng)在上面共享的接口項目鏈接中討論了它。

Arduino RC 汽車電路

我們的遙控 Arduino 汽車的完整電路圖如下所示。電路圖還包括向我們的汽車添加兩個 TCRT5000 IR 模塊的選項。這是為了讓我們的遙控車能夠作為線跟隨機(jī)器人工作,這樣它就可以獨立工作而不受外部控制。但是,為了這個項目,我們不會專注于它,請繼續(xù)關(guān)注另一個項目教程,我們將在其中嘗試構(gòu)建“Fastest Line Follower Robot”。為了便于構(gòu)建,我將兩個電路組合在一個 PCB 上,您可以忽略該項目的 IR 傳感器運算放大器部分。

pYYBAGL9_IiAGqLRAAEWeuxNNt8614.png

遙控車將由連接到終端 P1 的鋰電池供電。AMS117-3.3V用于為我們的 nRF24L01 和我們的專業(yè)迷你板調(diào)節(jié) 3.3V。我們也可以直接在原始引腳上為 Arduino 板供電,但 pro mini 上的板載 3.3V 穩(wěn)壓器將無法為我們的射頻模塊提供足夠的電流,因此我們使用了外部穩(wěn)壓器。

poYBAGL9_IGAGcT1AAbH5KQwmQY545.png

為了驅(qū)動我們的兩個 BLDC 電機(jī),我們使用了兩個 SI2302 MOSFET。確保這些 MOSFET 可由 3.3V 驅(qū)動非常重要。如果您找不到完全相同的部件號,您可以尋找具有以下傳輸特性的等效 MOSFET

pYYBAGL9_H2Ab9p-AAGN-WRl46o503.png

電機(jī)可以消耗高達(dá) 7A 的峰值電流(在負(fù)載下連續(xù)測試為 3A),因此 MOSFET 漏極電流應(yīng)為 7A 或更高,并且應(yīng)在 3.3V 時完全開啟。正如您在此處看到的,我們選擇的 MOSFET 即使在 2.25V 下也可以提供 10A,因此它是一個理想的選擇。

為 Arduino 遙控車制造 PCB

構(gòu)建這個項目的有趣部分是 PCB 開發(fā)。這里的 PCB 不僅形成電路,而且還充當(dāng)我們汽車的底盤,因此我們?yōu)樗O(shè)計了一個看起來像汽車的形狀,并且可以選擇輕松安裝我們的電機(jī)。您也可以嘗試使用上面的電路設(shè)計自己的 PCB,或者您可以使用我的 PCB 設(shè)計,完成后如下所示。

poYBAGL9_HmAEvmcAAQipE_uNAY926.png

如您所見,我設(shè)計的 PCB 可以輕松安裝電池、電機(jī)和其他組件。

組裝印刷電路板

我打開焊條并開始組裝電路板。由于腳印、焊盤、通孔和絲網(wǎng)印刷的形狀和尺寸都非常完美,因此組裝電路板沒有問題。從開箱開始,僅用了 10 分鐘,電路板就準(zhǔn)備好了。

焊接后的幾張電路板圖片 如下所示。

poYBAGL9_HWASLQwAAbg0sGCKIE365.png

3D 打印輪子和電機(jī)支架

正如您在上圖中可能已經(jīng)注意到的那樣,我們需要對機(jī)器人的電機(jī)支架和輪子進(jìn)行 3D 建模。如果您使用了我們上面共享的 PCB Gerber 文件,那么您不妨從這個thingiverse 鏈接下載它來使用 3D 模型。

poYBAGL9_HGAPi2XAAKbgmr5U-Y886.png

我使用 Cura 對我的模型進(jìn)行切片并使用 Tevo Terantuala 打印它們,沒有支撐和 0% 填充以減輕重量。您可以更改適合我們打印機(jī)的設(shè)置。由于電機(jī)旋轉(zhuǎn)得非???,我發(fā)現(xiàn)設(shè)計一個與電機(jī)軸緊密貼合的輪子非常困難。因此,我決定在輪子內(nèi)使用無人機(jī)葉片,如下所示

pYYBAGL9_G6AfnJDAAMT0IzN2C4887.png

我發(fā)現(xiàn)這更可靠和堅固,但是,嘗試不同的車輪設(shè)計,并在評論部分告訴我什么對你有用。

對 Arduino 進(jìn)行編程

該項目的完整程序(Arduino nano 和 pro mini)可以在本頁底部找到。你的RC程序的解釋如下

我們通過包含所需的頭文件來啟動程序。請注意,nRF24l01 模塊需要將庫添加到您的 Arduino IDE,您可以使用此鏈接從 Github 下載 RF24 庫。除此之外,我們已經(jīng)為我們的機(jī)器人定義了最小速度和最大速度。最小和最大范圍分別為 0 到 1024。

#define min_speed 200
#define max_speed 800
#include 
#include "RF24.h"
RF24 myRadio (7, 8);

然后在 setup 函數(shù)中,我們初始化我們的 nRF24L01 模塊。我們使用了 115 個頻段,因為它不擁塞,并且已將模塊設(shè)置為低功耗運行,您也可以使用這些設(shè)置。

無效設(shè)置(){
  串行.開始(9600);
  myRadio.begin();
  myRadio.setChannel(115); //115頻段以上WIFI信號
  myRadio.setPALevel(RF24_PA_MIN); //MIN 功率低范圍
  myRadio.setDataRate(RF24_250KBPS); //最低速度
}

接下來在主循環(huán)函數(shù)中,我們將只執(zhí)行 ReadData 函數(shù),我們將使用該函數(shù)不斷讀取從 Transmitter 操縱桿模塊發(fā)送的值。注意程序中提到的管道地址應(yīng)該和發(fā)射器程序中提到的一樣。我們還打印了我們收到的用于調(diào)試目的的值。成功讀取值后,我們將執(zhí)行 Control Car 功能,根據(jù)從
Rf 模塊接收到的值來控制我們的 RC 汽車。

無效讀取數(shù)據(jù)()
{
  myRadio.openReadingPipe(1, 0xF0F0F0F0AA); //讀取哪個管道,40位地址
  myRadio.startListening(); //停止傳輸并開始接收
  if (myRadio.available())
  {
    而(myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
    Serial.print("\n收到:");
    序列號.println(data.msg);
    收到 = data.msg;
    控制車();
  }
}

在 Control Car 函數(shù)中,我們將使用模擬寫入函數(shù)控制連接到 PWM 引腳的電機(jī)。在我們的發(fā)射器程序中,我們將 Nano 的 A0 和 A1 引腳的模擬值轉(zhuǎn)換為 1 到 10、11 到 20、21 到 30 和 31 到 40,分別用于控制汽車的前進(jìn)、后退、左轉(zhuǎn)和右轉(zhuǎn)。下面的程序用于控制機(jī)器人的前進(jìn)方向

if (received>=1 && received <=10) // 前進(jìn)
  {
    int PWM_Value = map (收到, 1, 10, min_speed, max_speed);
    模擬寫入(R_MR,PWM_Value);
    模擬寫入(L_MR,PWM_Value);
  }

同樣的,我們也可以多寫三個函數(shù)來進(jìn)行反向、左、右控制,如下圖。

    if (received>=11 && received <=20) // 中斷
  {
    int PWM_Value = map (收到, 11, 20, min_speed, max_speed);
    類比寫入(R_MR,0);
    類比寫入(L_MR,0);
  }
    if (received>=21 && received <=30) // 左轉(zhuǎn)
  {
    int PWM_Value = map (收到, 21, 30, min_speed, max_speed);
    模擬寫入(R_MR,PWM_Value);
    類比寫入(L_MR,0);
  }
      if (received>=31 && received <=40) // 右轉(zhuǎn)
  {
    int PWM_Value = map (收到, 31, 40, min_speed, max_speed);
    類比寫入(R_MR,0);
    模擬寫入(L_MR,PWM_Value);
  }

Arduino 遙控車的工作

完成代碼后,將其上傳到您的專業(yè)迷你板上。通過 FTDI 模塊取出電池和電路板進(jìn)行測試。啟動您的代碼,打開串行電池,您應(yīng)該會收到來自發(fā)射器操縱桿模塊的值。連接你的電池,你的電機(jī)也應(yīng)該開始旋轉(zhuǎn)。

poYBAGL9_GWAV4fIAAbCzQmUFMQ965.png

射頻遙控操縱桿


/*將射頻值傳輸?shù)?Arduino 的代碼

*

* 引腳連接

* CE - 7

MISO - 12

MOSI - 11

SCK - 13

CS - 8

A0 - JoyX

A1 - JoyY

*/

#include

#include "RF24.h "

RF24 myRadio (7, 8);

結(jié)構(gòu)包

{

int msg = 0;

};

字節(jié)地址[][6] = {"0"};

typedef struct package 封裝;

包裝資料;

無效設(shè)置()

{

序列.開始(9600);

myRadio.begin();

myRadio.setChannel(115); //115頻段以上WIFI信號

myRadio.setPALevel(RF24_PA_MAX); //MAX power long 憤怒

myRadio.setDataRate(RF24_250KBPS); //最小速度

延遲(500);

Serial.print("遠(yuǎn)程初始化");

}

向前詮釋;

逆向;

int左;

詮釋正確;

無效循環(huán)()

{

int xValue = 模擬讀?。ˋ0);//讀取JoyX值

int yValue = analogRead(A1); //讀取JoyY值

//Serial.print(xValue); 序列號.print(" , "); Serial.println(yValue);

if (xValue>560 && xValue<1000) // 為向上過濾 JoyX

{

forward = map (xValue, 560, 1000, 1, 10); //將 Joyx-up 轉(zhuǎn)換為 0-10

//Serial.print("F="); Serial.println(轉(zhuǎn)發(fā));

data.msg = 轉(zhuǎn)發(fā);寫入數(shù)據(jù)();延遲(50);

}

if (xValue<500 && xValue > 10) // 過濾 JoyX 的 break

{

reverse = map (xValue, 10, 500, 20, 11); //將JoyX-down轉(zhuǎn)換為11-20

//Serial.print("B="); Serial.println(反向);

data.msg = 反向;寫入數(shù)據(jù)();延遲(50);

}

else if (yValue>600 && yValue<1000) // 為右過濾 JoyY

{

right = map (yValue, 600, 1000, 21, 30); //將 JoyY-right 轉(zhuǎn)換為 21-30

//Serial.print("R="); Serial.println(右);

data.msg = 對;寫入數(shù)據(jù)();延遲(50);

}

else if (yValue<450 && yValue > 10) // 過濾 JoyY 為 left

{

left = map (yValue, 10, 450, 40, 31); //將JoyY-left轉(zhuǎn)換為31-40

//Serial.print("

data.msg = 左;寫入數(shù)據(jù)();延遲(50);

}

/* else

{

Serial.println("Rest");

數(shù)據(jù).msg = 0; 寫入數(shù)據(jù)();延遲(50);

}

*/

}

void WriteData()

{

myRadio.stopListening(); //停止接收并開始發(fā)送

myRadio.openWritingPipe(0xF0F0F0F0AA); //在這個 40 位地址上發(fā)送數(shù)據(jù)

myRadio.write(&data, sizeof(data));

//Serial.print("\nSent:");

//Serial.println(data.msg);

延遲(50);

}

void ReadData()

{

myRadio.openReadingPipe(1, 0xF0F0F0F066); // 讀取哪個管道,40 位地址

myRadio.startListening(); //停止傳輸并開始接收

if ( myRadio.available())

{

while (myRadio.available())

{

myRadio.read( &data, sizeof(data) );

}

Serial.print("\n收到:");

序列號.println(data.msg);

}

}





無刷直流電機(jī)


/*CE - 7

MISO - 12

MOSI - 11

SCK - 13

CS - 8

最近用 nano 測試

*/

/*PIN DEFANITIONS*/

#define R_IR 3

#define L_IR 4

#define L_MR 5

#define R_MR 6

#define min_speed 200

#定義 max_speed 800

#include

#include "RF24.h"

RF24 myRadio (7, 8);

結(jié)構(gòu)包

{

int msg;

};

typedef struct package 封裝;

包裝資料;

字節(jié)地址[][6] = {"0"};

無效設(shè)置(){

pinMode(R_IR,輸入);

pinMode(L_IR,輸入);

pinMode(L_MR,輸出);

pinMode(R_MR,輸出);

串行.開始(9600);

myRadio.begin();

myRadio.setChannel(115); //115頻段以上WIFI信號

myRadio.setPALevel(RF24_PA_MIN); //MIN 功率低

范圍 myRadio.setDataRate( RF24_250KBPS ) ; //最低速度

}

int received;

無效循環(huán)(){

讀取數(shù)據(jù)();

}

void Control_Car()

{

if (received>=1 && received <=10) // 向前移動

{

int PWM_Value = map (received, 1, 10, min_speed, max_speed);

模擬寫入(R_MR,PWM_Value);

模擬寫入(L_MR,PWM_Value);

}

if (received>=11 && received <=20) // 中斷

{

int PWM_Value = map (收到, 11, 20, min_speed, max_speed);

類比寫入(R_MR,0);

類比寫入(L_MR,0);

}

if (received>=21 && received <=30) // 右轉(zhuǎn)

{

int PWM_Value = map (received, 21, 30, min_speed, max_speed);

模擬寫入(R_MR,PWM_Value);

類比寫入(L_MR,0);

}

if (received>=31 && received <=40) // 右轉(zhuǎn)

{

int PWM_Value = map (received, 31, 40, min_speed, max_speed);

類比寫入(R_MR,0);

模擬寫入(L_MR,PWM_Value);

}

}

void ReadData()

{

myRadio.openReadingPipe(1, 0xF0F0F0F0AA); //讀取哪個管道,40位地址

myRadio.startListening(); //停止傳輸并開始接收

if ( myRadio.available())

{

while (myRadio.available())

{

myRadio.read( &data, sizeof(data) );

}

Serial.print("\n收到:");

序列號.println(data.msg);

收到 = data.msg;

控制車();

}

else //如果不是來自 RF 的數(shù)據(jù)

{

//analogWrite(R_MR,0);

//analogWrite(L_MR,0);

}

}

void WriteData()

{

myRadio.stopListening(); //停止接收并開始發(fā)送

myRadio.openWritingPipe(0xF0F0F0F066);//在這個 40 位地址上發(fā)送數(shù)據(jù)

myRadio.write(&data, sizeof(data));

Serial.print("\n已發(fā)送:");

序列號.println(data.msg);

延遲(300);

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • nRF24L01
    +關(guān)注

    關(guān)注

    17

    文章

    330

    瀏覽量

    69459
  • 遙控車
    +關(guān)注

    關(guān)注

    9

    文章

    81

    瀏覽量

    23710
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6468

    瀏覽量

    186951
收藏 人收藏

    評論

    相關(guān)推薦

    NRF24L01

    誰有NRF24L01無線模塊收發(fā)程序,51單片機(jī)的,我想做個遙控車 非常感謝
    發(fā)表于 04-17 20:50

    nrf24l01遙控小車

    一個nrf24l01遙控小車 可以當(dāng)做學(xué)習(xí)NRF24L01的學(xué)習(xí)資料哦 我找了很多才找到的
    發(fā)表于 06-17 20:16

    如何使用NRF24L01Arduino控制伺服電機(jī)?

    如何使用NRF24L01Arduino控制伺服電機(jī)
    發(fā)表于 09-29 08:52

    基于NRF24L01Arduino Nano制作遠(yuǎn)程無線工業(yè)溫度監(jiān)測系統(tǒng)

    NRF24LO1 PA+LNA 收發(fā)器模塊來控制RC Jet Plane。我能夠控制 RC 飛機(jī)的上下左右移動。我還能夠控制直流電機(jī)的速度。 所以在本教程中,我將使用小型 NRF24L0
    發(fā)表于 08-03 06:18

    nrf24l01是什么模塊_nrf24l01工作原理

    本文首先闡述了nrf24l01概念,其次介紹了nrf24l01的性能參數(shù),最后介紹了nrf24l01的工作原理。
    發(fā)表于 04-24 08:47 ?2w次閱讀

    nrf24l01發(fā)射功率測試_nrf24l01可以做什么

    本文主要闡述了nrf24l01發(fā)射功率測試步驟及nrf24l01的應(yīng)用領(lǐng)域。
    發(fā)表于 04-24 08:55 ?7546次閱讀

    Arduino直流電機(jī)調(diào)速

    Arduino直流電機(jī)調(diào)速(深圳市核達(dá)中遠(yuǎn)通電源技術(shù)有限公司招聘電話)-基于Arduino直流電機(jī)調(diào)速? ? ? ? ? ? ? ? ? ? ? ??
    發(fā)表于 09-18 16:12 ?61次下載
    <b class='flag-5'>Arduino</b>的<b class='flag-5'>直流電機(jī)</b>調(diào)速

    DIY Arduino nRF24L01遙控

    電子發(fā)燒友網(wǎng)站提供《DIY Arduino nRF24L01遙控器.zip》資料免費下載
    發(fā)表于 07-22 09:49 ?10次下載
    DIY <b class='flag-5'>Arduino</b> <b class='flag-5'>nRF24L01</b><b class='flag-5'>遙控</b>器

    如何在Arduino中使用NRF24L01模塊

    電子發(fā)燒友網(wǎng)站提供《如何在Arduino中使用NRF24L01模塊.zip》資料免費下載
    發(fā)表于 10-19 09:16 ?13次下載
    如何在<b class='flag-5'>Arduino</b>中使用<b class='flag-5'>NRF24L01</b>模塊

    通過連接鋰聚合物電池和小型直流電機(jī)制造遙控車

    電子發(fā)燒友網(wǎng)站提供《通過連接鋰聚合物電池和小型直流電機(jī)制造遙控車.zip》資料免費下載
    發(fā)表于 11-21 10:16 ?0次下載
    通過連接鋰聚合物電池和小型<b class='flag-5'>直流電機(jī)</b>制造<b class='flag-5'>遙控車</b>

    NRF24L01遙控LED開源分享

    電子發(fā)燒友網(wǎng)站提供《NRF24L01遙控LED開源分享.zip》資料免費下載
    發(fā)表于 01-31 14:48 ?1次下載
    <b class='flag-5'>NRF24L01</b><b class='flag-5'>遙控</b>LED開源分享

    直流電機(jī)和有刷直流電機(jī)的區(qū)別

      直流電機(jī)和有刷直流電機(jī)是兩種不同類型的直流電機(jī)
    發(fā)表于 03-17 18:20 ?7941次閱讀

    arduino直流電機(jī)

    這一期我們來學(xué)習(xí)如何控制直流電機(jī)。 需要材料:Arduino UNO 直流電機(jī)——本文以12V額定電機(jī)為例 電機(jī)驅(qū)動——本文以
    發(fā)表于 03-30 13:46 ?3次下載
    <b class='flag-5'>arduino</b><b class='flag-5'>直流電機(jī)</b>

    ros與arduino通信控制直流電機(jī)

    前言:在成功通過arduino開發(fā)板控制直流電機(jī)后,開始嘗試用ros與arduino通信來控制直流電機(jī),為無人小車作準(zhǔn)備 硬件 arduino
    發(fā)表于 03-31 11:45 ?4次下載
    ros與<b class='flag-5'>arduino</b>通信控制<b class='flag-5'>直流電機(jī)</b>

    使用NRF24L01Arduino構(gòu)建無線傳感器網(wǎng)絡(luò)

    電子發(fā)燒友網(wǎng)站提供《使用NRF24L01Arduino構(gòu)建無線傳感器網(wǎng)絡(luò).zip》資料免費下載
    發(fā)表于 06-09 10:07 ?3次下載
    使用<b class='flag-5'>NRF24L01</b>和<b class='flag-5'>Arduino</b><b class='flag-5'>構(gòu)建</b>無線傳感器網(wǎng)絡(luò)
    RM新时代网站-首页