当前位置:网站首页>如何制作自己的機器人

如何制作自己的機器人

2022-07-06 00:24:00 acktomas

如何制作自己的機器人

查看原文

Device Plus 編輯團隊

2016 年 5 月 23 日

制作自己的機器人

如何使用帶有 Arduino 部件和傳感器的步進電機在 2 個輪子上制作自己的機器人:

一旦您了解了使用步進電機的基礎知識,您就可以創建一些有趣的項目,甚至可以制作自己的機器人。這一次,我將嘗試使用步進電機構建一個 2 輪機器人。

在上一篇文章中,使用 Arduino 控制電機 - 使用伺服電機進行轉向制作遙控車,我們制作了遙控車,其中普通電機提供前進/後退運動,伺服電機控制轉向。

在這個 2 輪機器人中,向前/向後移動和轉動可以通過並排放置的兩個電機來完成。您經常會看到使用這種 2 軸距作為運動源的機器人。我要制作具有這種多功能性的東西。

用這個電子構造配方制作你自己的機器人

大約時間:90 分鐘
所需零件

兩輪機器人的設計

制作自己的機器人

圖 1 – 為 2 輪機器人建模

首先,您需要考慮 2 輪機器人的完整設計。如果有 2 個電機,則可以用簡單的設計制作一個 2 輪機器人。2 個同向轉動的電機提供向前/向後運動,反向轉動提供轉動能力。這一點,即使用兩個電機可以很容易地實現基本運動控制,在許多領域都采用了這一點。讓我們測量步進電機和其他要使用的部件的尺寸,並制作一個與該尺寸相匹配的機身。

我使用的 3D 打印機的零件可以在這裏找到

圖 1 使用免費的建模軟件“123d design”,展示了我對 2 輪機器人身體的簡單設計的想法。我正在考慮使用一塊圓形木頭作為底座,並將步進電機、Arduino 和電池連接到它上面。因為兩輪機器人最終可能會向前或向後翻倒,所以我將在板的背面安裝一個小滾珠脚輪作為支撐。

要確定車輪的尺寸,請將步進電機放在圖 1 所示的圓形木塊上,然後測量距地板的高度。到那個高度,加上脚輪浮動一點點+ 2-3mm時的高度,你就得到了輪子的直徑。

制作自己的機器人

圖1 3D打印機生產的圓板和輪子

制作自己的機器人

圖2 支撐球脚輪

此外,我模擬了將步進電機鎖定到板上的部分。步進電機的軸側有四個 4mm 螺絲孔,所以我制作了一個零件,可以用它們將圓板鎖定到步進電機上。

制作自己的機器人

圖2 將步進電機固定在圓板上的部分

制作自己的機器人

圖3 3D打印機打印出來的零件

一旦 3D 打印機生產出零件,我就安裝了步進電機並確認了尺寸。它非常適合。

制作自己的機器人

圖 4 – 零件組裝

將驅動器連接到步進電機。

由於所有部件都安裝在直徑為 12 厘米的板上,因此我們需要盡可能謹慎地使用空間。由於步進電機驅動器L6470的板子和螺絲孔比特置和尺寸與步進電機錶面的相同,我可以將驅動器擰到步進電機的背面。通過這樣做,我可以節省一點空間。

制作自己的機器人

圖 5 – 暫時卸下螺絲並安裝驅動板。

制作自己的機器人

圖 6 – 步進電機背面的驅動板

使用 Arduino 驅動兩個步進電機的電路

以前,我們只驅動一臺步進電機。這一次,我們需要驅動兩個步進電機。使用稱為菊花鏈的方法,L6470 可以控制多個步進電機。

菊花鏈是一種 布線方案,其中多個設備按順序或以環形方式連接在一起。 除了完整的單回路之外,包含內部回路的系統不能稱為菊花鏈。

與 L6470 進行菊花鏈所需的電路如下所示。由於電線較多,接線時請注意不要弄錯。

制作自己的機器人

圖 3 – 連接兩個步進電機的電路

與電路只有一個時的不同之處在於,第一和第二步進電機現在有一個連接它們的部件。用 L6470 數據錶確認後,第一個步進電機連接到 SDO,第二個步進電機連接到 SDI。通過這部分發送和接收數據。

制作自己的機器人

圖 4 – L6470 示意圖

結論

電路接線完成後,我想說是時候開始編程部分了,但由於處理多個步進電機的程序可能有點複雜,退一步了解更多關於步進電機編程的知識可能是明智的。如果一切順利,兩個步進電機將像下面的視頻一樣同步。

如何制作自己的機器人(第 2 部分)

查看原文

Device Plus 編輯團隊

2016 年 5 月 24 日

制作自己的機器人

如何在 2 個輪子上制作自己的機器人,使用帶有 Arduino 部件和傳感器的步進電機……第 2 部分

在第 1 部分中,我們使用庫驅動步進電機。這一次,我們將更詳細地研究步進電機編程並學習如何控制它,處理步進電機時遇到的問題,以及一些解决方案。

電子建築配方

大約時間:90m
所需零件

步進電機評論

制作自己的機器人

圖 1 – 步進電機和 L6470

我將在這篇文章中回顧如何通過編程來控制步進電機。從以下特性可以看出,與普通電機和伺服電機相比,步進電機的獨特之處在於能够控制旋轉。

  • 電機:通電時旋轉
  • 伺服電機:對應一個信號在0到N度範圍內旋轉
  • 步進電機:可不受信號限制地控制

此外,您在實際控制電機時按順序向電機發送 PWM 信號。也就是說,如果將 Arduino 直接連接到步進電機,控制會很困難。所以通常,對於像 Arduino 這樣的微控制器,您會希望通過電機驅動器來控制步進電機,這使得各種類型的控制成為可能。(有關處理普通電機驅動器的信息,請參閱#12。

這次使用的 L6470 步進電機驅動器既便宜又具有板載控制/振蕩器電路,用於檢測步進電機、DSP 和通信 I/F 的過電流。從根本上說,當您嘗試控制電機的轉數或功率或需要精確運動時,您需要選擇具有如下功能和能力的電機驅動器來完成您的電路。

[制作自己的機器人](http://www.rohm.com/web/global/search/parametric/-/search/Stepping Motor)

[步進電機驅動器目錄 – ROHM](http://www.rohm.com/web/global/search/parametric/-/search/Stepping Motor)

因為我想要一個易於使用且價格便宜的產品,所以我使用的是 L6470。但是,上次和之前的時間,當我試圖驅動步進電機時,我預計它會旋轉。相反,我只有噪音和振動,但軸沒有轉動。我想知道我是否做了什麼讓它變得奇怪?

步進電機“失步”現象

在使用步進電機時,您經常會遇到失步。簡而言之,失步就是步進電機的實際運動跟不上旋轉控制信號,電機驅動器預期的旋轉比特置與實際步進電機比特置失准,從而導致同步性丟失和電機不轉。

跳出的原因多種多樣。如下所述驅動步進電機通常會導致它。

  • 突然加速或减速步進電機
    • 突然加减速的時機帶來了信號與電機不同步的可能。在這些情况下,首先逐漸加速/减速會消除這種可能性。
  • 扭矩不足
    • 如果電機沒有足够的扭矩(轉動功率),可能會發生失步。在這種情况下,您必須切換到具有所需扭矩的電機。
  • 驅動電壓低/不穩定
    • 如果驅動電壓低/不穩定,這可能會導致失步。L6470 規格要求 8V-45V,但在 8V 下運行時要小心。
  • 振動的影響
    • 如果對電機施加振動,可能會導致失步。

一般來說,出現失步時,上述原因都有可能,但扭矩不足導致的突然加速或超速是最常見的原因。因此,如果您的步進電機出現故障,這些原因值得調查。

另外意法半導體有賣L6470的,有詳細的說明,大家也可以參考一下。

L6470 產品說明

對步進電機進行編程

現在,讓我們深入研究這篇文章的主題,步進電機編程。為了通過 L6470 從 Arduino 控制步進電機,您必須對 l6470 進行編程以發送控制信號。電路如下。

制作自己的機器人

圖 1 – 連接 Arduino、L6470 和步進電機的電路

步進電機控制程序流程

下面是步進電機程序。我們現在將細讀這個程序的流程。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687#include <Arduino.h>#include <SPI.h> //(1) Import for SPI transmission //(2) Define the stepper motor pin#define PIN_SPI_MOSI 11#define PIN_SPI_MISO 12#define PIN_SPI_SCK 13#define PIN_SPI_SS 10 void setup(){ delay(1000); Serial.begin(9600); //(3) Initialize the stepper motor pin pinMode(PIN_SPI_MOSI, OUTPUT); pinMode(PIN_SPI_MISO, INPUT); pinMode(PIN_SPI_SCK, OUTPUT); pinMode(PIN_SPI_SS, OUTPUT); digitalWrite(PIN_SPI_SS, HIGH); //(4) SPI signal to commence SPI transmission SPI.begin(); SPI.setDataMode(SPI_MODE3);// When SCK is high, send/receive data, when idle, set pin to HIGH SPI.setBitOrder(MSBFIRST);// Transmission from MSB //(5) L6470 settings L6470_setup();} //**********************************************//(6) SPI transmission method//void L6470_send(unsigned char value){ digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(value); // Send control signal via SPI transmission digitalWrite(PIN_SPI_SS, HIGH); } //// (7) L6470 setup//void L6470_setup(){ // Device settings L6470_send(0x00); L6470_send(0x00); L6470_send(0x00); L6470_send(0x00); L6470_send(0xc0); //Set maximum revolution speed L6470_send(0x07);//register address L6470_send(0x20);//value(10bit),default 0x41 //Voltage setting when motor is idle L6470_send(0x09);//register address L6470_send(0xFF);//value(8bit),default 0x29 //Voltage setting when motor rotating at constant speed L6470_send(0x0a);//register address L6470_send(0xFF);//value(8bit),default 0x29 //Voltage setting when accelerating L6470_send(0x0b);//register address L6470_send(0xFF);//value(8bit),default 0x29 //Voltage setting when decelerating L6470_send(0x0c);//register address L6470_send(0xFF);//value(8bit),default 0x29 //full step, half step,1/4,1/8,…,1/128 step setting L6470_send(0x16);//register address L6470_send(0x00);//value(8bit} //// (8)Main process - loop()//**********************************************void loop(){ //360 degrees - Turn one complete revolution L6470_send(0x50);// Run(DIR,SPD),0x51:Forward,0x50:Reverse L6470_send(0x00); L6470_send(0x20);// Rotation speed settings L6470_send(0x00); delay(1604);// Turn 1 time every 1604ms L6470_send(0xB8);// Hard stop}

控制信號——關於 SPI 傳輸

首先,L6470 和 Arduino 之間的控制信號交換通過調用 SPI 傳輸(串行外設接口)的方法進行。這種 SPI 傳輸用於在 Arduinos 和 IC 芯片等微控制器之間交換信號。

在程序第二行(1)的“#include SPI.h”錶達式中,我准備在Arduino上使用SPI傳輸。使用庫時,請記住這些“#include <***.h>”錶達式一直存在。

接下來,在(2)中,我設置了 L6470 使用的引脚。在這裏,您可以看到書面的 MOSI 和 MISO。這些是 SPI 傳輸使用的基本信號線。

在 SPI 傳輸中,信號線由以下 3 個基本元素構成(使用 SS 信號時為 4 個元素)。每條信號線都有特定的時鐘(SCK)、輸出信號(MOSI:Master Out Slave In)和輸入信號(MISO:Master In Slave Out)。實際傳輸時,通信安排為 Arduino 輸出標准時鐘信號 (SCK),然後與 L6470 一起使用 In 和 Out(MISO 和 MOSI)連接來回傳輸數據。

  • SCK——串行時鐘
  • MISO – 主進從出
  • MOSI – 主出從入
  • SS – 從機選擇

在 (3) 中,設置使用的信號線的引脚模式。接下來,在(4)中,設置要使用的SPI傳輸模式。正在連接的設備確定模式。

一旦 SPI 傳輸准備完成,在 (5) 中,我們終於可以使用 SPI 傳輸並開始 L6470 設置。實際發送SPI傳輸信號的部分是(6) L6470_send()函數的寫法。

在進行 L6470 設置時,請根據數據錶和手册中記錄的規格設置所需的元素。

L6470 數據錶

當您查看數據錶的內容時,您將看到下面的命令地址錶。這次因為我們使用的是12026電機,所以通過SPI傳輸將錶中記錄的寄存器地址發送到初始化L6470。

作為如何在編程中使用錶格的示例:

123//Highest revolution speed settingL6470_send(0x07);//register addressL6470_send(0x20);//value(10bit),default0x41

以上是代碼。如果我們在“最高轉速”功能行的錶格中查看,地址為“0x07”,長度為“10”比特,初始值為“0x20”(以12026模式為例)。通過 SPI 傳輸發送錶中的值,您可以進行各種設置。

制作自己的機器人桌

錶 1 L6470 數據錶。

初始化完成後,在 (8) 主過程中找到實際驅動步進電機的命令。您可以再次看到數據錶中記錄的各種命令。

  • 旋轉指令
    0x51(正轉)、0x50(反轉)
  • 停止(軟)命令 0xB0

在該示例中,發送正向或反向旋轉命令,然後是 20 比特旋轉速度命令,然後是延遲(1604)。這使它在這段時間內轉動。如果改變這個轉速值,它可以加速或减速。

這是使用Arduino通過L6470驅動步進電機時的流程。另外,與此相對應,通過改變一些連接方式,可以像上次介紹的那樣控制多臺步進電機。

讓我們試著駕駛一個兩輪機器人

現在我們了解了步進電機的編程功能流程,讓我們完成 2 輪機器人。我在上一篇文章中使用 3D 打印機完成了輪子和車身的打印,現在將在車身上安裝必要的部件,這樣您就可以完全制作自己的機器人了。

制作自己的機器人

圖 2 – 制作您自己的機器人所需的所有部件都安裝在身體上

安裝了 Arduino、面包板和用於步進電機(2 個串聯)的 9V 電池後,幾乎沒有剩餘空間了……哎呀。
因此,我沒有使用 Arduino UNO,而是嘗試將其更換為 Arduino Pro Mini。

使用 Arduino Pro Mini 制作自己的機器人

圖 3 – 使用 Arduino Pro Mini,非常完美!

制作自己的機器人

圖 4 – 它整齊地安裝在面包板上

制作自己的機器人

圖 5 – 輪子牢固地安裝在軸上,因此不會打滑

安裝完所有部件後,我們終於可以打開電源並嘗試驅動它。

有用!在視頻中,步進電機連接了一個 12V 適配器。當我連接 9V 電池時,它們有點太重了,我注意到步進電機沒有足够的扭矩。在這種情况下,如果它太重,就像我之前描述的那樣,您可以更換電機本身,减輕重量,或者進一步改進電源以使穩定運行成為可能。

結論

這一次,我們使用步進電機在兩個輪子上制作您自己的機器人。移動發生在代碼中。當你制作自己的機器人時,你可以添加其他東西,比如在每一側安裝光傳感器,制作一個朝著最亮的光移動的機器人,或者一個朝著聲音移動的機器人,甚至是一個可以由智能手機驅動的機器人通過之前介紹的 ESP- WROOM -02使用 WIFI 通信。各種應用都是可能的。我可能會嘗試在後續帖子中介紹一些改進。

下一次,我想我會制作一個使用磁傳感器或其他很酷的東西的設備。

原网站

版权声明
本文为[acktomas]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060022589722.html