当前位置:网站首页>如何制作自己的機器人
如何制作自己的機器人
2022-07-06 00:24:00 【acktomas】
如何制作自己的機器人
2016 年 5 月 23 日
如何使用帶有 Arduino 部件和傳感器的步進電機在 2 個輪子上制作自己的機器人:
一旦您了解了使用步進電機的基礎知識,您就可以創建一些有趣的項目,甚至可以制作自己的機器人。這一次,我將嘗試使用步進電機構建一個 2 輪機器人。
在上一篇文章中,使用 Arduino 控制電機 - 使用伺服電機進行轉向制作遙控車,我們制作了遙控車,其中普通電機提供前進/後退運動,伺服電機控制轉向。
在這個 2 輪機器人中,向前/向後移動和轉動可以通過並排放置的兩個電機來完成。您經常會看到使用這種 2 軸距作為運動源的機器人。我要制作具有這種多功能性的東西。
用這個電子構造配方制作你自己的機器人
大約時間:90 分鐘
所需零件
兩輪機器人的設計
圖 1 – 為 2 輪機器人建模
首先,您需要考慮 2 輪機器人的完整設計。如果有 2 個電機,則可以用簡單的設計制作一個 2 輪機器人。2 個同向轉動的電機提供向前/向後運動,反向轉動提供轉動能力。這一點,即使用兩個電機可以很容易地實現基本運動控制,在許多領域都采用了這一點。讓我們測量步進電機和其他要使用的部件的尺寸,並制作一個與該尺寸相匹配的機身。
圖 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 部分)
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 從 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 設置時,請根據數據錶和手册中記錄的規格設置所需的元素。
當您查看數據錶的內容時,您將看到下面的命令地址錶。這次因為我們使用的是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。
圖 3 – 使用 Arduino Pro Mini,非常完美!
圖 4 – 它整齊地安裝在面包板上
圖 5 – 輪子牢固地安裝在軸上,因此不會打滑
安裝完所有部件後,我們終於可以打開電源並嘗試驅動它。
有用!在視頻中,步進電機連接了一個 12V 適配器。當我連接 9V 電池時,它們有點太重了,我注意到步進電機沒有足够的扭矩。在這種情况下,如果它太重,就像我之前描述的那樣,您可以更換電機本身,减輕重量,或者進一步改進電源以使穩定運行成為可能。
結論
這一次,我們使用步進電機在兩個輪子上制作您自己的機器人。移動發生在代碼中。當你制作自己的機器人時,你可以添加其他東西,比如在每一側安裝光傳感器,制作一個朝著最亮的光移動的機器人,或者一個朝著聲音移動的機器人,甚至是一個可以由智能手機驅動的機器人通過之前介紹的 ESP- WROOM -02使用 WIFI 通信。各種應用都是可能的。我可能會嘗試在後續帖子中介紹一些改進。
下一次,我想我會制作一個使用磁傳感器或其他很酷的東西的設備。
边栏推荐
- Room cannot create an SQLite connection to verify the queries
- Anconda download + add Tsinghua +tensorflow installation +no module named 'tensorflow' +kernelrestart: restart failed, kernel restart failed
- MySQL之函数
- 权限问题:source .bash_profile permission denied
- Uniapp development, packaged as H5 and deployed to the server
- [Chongqing Guangdong education] Chongqing Engineering Vocational and Technical College
- 建立时间和保持时间的模型分析
- Gavin teacher's perception of transformer live class - rasa project actual combat e-commerce retail customer service intelligent business dialogue robot system behavior analysis and project summary (4
- Single source shortest path exercise (I)
- 电机的简介
猜你喜欢
建立时间和保持时间的模型分析
FFMPEG关键结构体——AVFrame
认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)
N1 # if you work on a metauniverse product [metauniverse · interdisciplinary] Season 2 S2
Spark AQE
Introduction of motor
Ffmpeg learning - core module
NSSA area where OSPF is configured for Huawei equipment
如何利用Flutter框架开发运行小程序
Determinant learning notes (I)
随机推荐
The global and Chinese markets of dial indicator calipers 2022-2028: Research Report on technology, participants, trends, market size and share
MDK debug时设置数据实时更新
LeetCode 6004. Get operands of 0
PHP determines whether an array contains the value of another array
7.5模拟赛总结
Atcoder beginer contest 254 [VP record]
Room cannot create an SQLite connection to verify the queries
Leetcode Fibonacci sequence
【线上小工具】开发过程中会用到的线上小工具合集
Intranet Security Learning (V) -- domain horizontal: SPN & RDP & Cobalt strike
There is no network after configuring the agent by capturing packets with Fiddler mobile phones
[QT] QT uses qjson to generate JSON files and save them
OpenCV经典100题
FFT learning notes (I think it is detailed)
7.5 decorator
Power query data format conversion, Split Merge extraction, delete duplicates, delete errors, transpose and reverse, perspective and reverse perspective
如何制作自己的机器人
Pointer - character pointer
Codeforces round 804 (Div. 2) [competition record]
[Online gadgets] a collection of online gadgets that will be used in the development process