如何制作自己的机器人

查看原文

Device Plus 编辑团队

2016 年 5 月 23 日

如何使用带有 Arduino 部件和传感器的步进电机在 2 个轮子上制作自己的机器人:

一旦您了解了使用步进电机的基础知识,您就可以创建一些有趣的项目,甚至可以制作自己的机器人。这一次,我将尝试使用步进电机构建一个 2 轮机器人。

在上一篇文章中,使用 Arduino 控制电机 - 使用伺服电机进行转向制作遥控车,我们制作了遥控车,其中普通电机提供前进/后退运动,伺服电机控制转向。

在这个 2 轮机器人中,向前/向后移动和转动可以通过并排放置的两个电机来完成。您经常会看到使用这种 2 轴距作为运动源的机器人。我要制作具有这种多功能性的东西。

用这个电子构造配方制作你自己的机器人

大约时间:90 分钟
所需零件

  • Arduino UNO R3
  • 42mm步进电机12V x2
  • L6470 步进电机驱动器套件
  • L6470/42x34mm 步进电机螺丝组(日文版)
  • 5mm 通用安装座(一套 2 个)
  • 006P 9V电池座

两轮机器人的设计

图 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

我将在这篇文章中回顾如何通过编程来控制步进电机。从以下特性可以看出,与普通电机和伺服电机相比,步进电机的独特之处在于能够控制旋转。

此外,您在实际控制电机时按顺序向电机发送 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。

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

图 4 – 它整齐地安装在面包板上

图 5 – 轮子牢固地安装在轴上,因此不会打滑

安装完所有部件后,我们终于可以打开电源并尝试驱动它。

有用!在视频中,步进电机连接了一个 12V 适配器。当我连接 9V 电池时,它们有点太重了,我注意到步进电机没有足够的扭矩。在这种情况下,如果它太重,就像我之前描述的那样,您可以更换电机本身,减轻重量,或者进一步改进电源以使稳定运行成为可能。

结论

这一次,我们使用步进电机在两个轮子上制作您自己的机器人。移动发生在代码中。当你制作自己的机器人时,你可以添加其他东西,比如在每一侧安装光传感器,制作一个朝着最亮的光移动的机器人,或者一个朝着声音移动的机器人,甚至是一个可以由智能手机驱动的机器人通过之前介绍的 ESP- WROOM -02使用 WIFI 通信。各种应用都是可能的。我可能会尝试在后续帖子中介绍一些改进。

下一次,我想我会制作一个使用磁传感器或其他很酷的东西的设备。

如何制作自己的机器人相关推荐

  1. Blender+Substance Painter全流程制作真实的机器人学习教程

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:44节课(10h 52m) |大小解压后:9.9 G ...

  2. python微信聊天机器人_python实战项目,使用itchat模块制作微信聊天机器人

    前言 对于咱们热爱折腾的青年来说,经常会有很多好玩的新奇创意想法,可是,有时候就缺少一个接口,实现交互.比如说,咱们博客的 python实战项目,有些的确比较好玩,但是似乎只能在电脑上跑跑程序,怎么运 ...

  3. python开发rpa_几步教你用 Python 制作一个 RPA 机器人!

    原标题:几步教你用 Python 制作一个 RPA 机器人! 作者 | 阿文 出品 | CSDN(ID:CSDNnews) 头图 | CSDN下载自东方IC 繁琐且重复的工作 在我们日常的工作中,有很 ...

  4. 乐高制作的写字机器人夹笔机构,可快速装卸更换

    乐高制作的写字机器人夹笔机构,可快速装卸更换整个夹笔器,调整落笔高度,更换钢笔. 注意,钢笔或签字笔必须要有橡胶套,否则会打滑.

  5. 自己制作智能语音机器人(基于jetson nano)

    1 简介 如上图,主要采用jetson上编写python代码实现,支持离线语音唤醒.在线语音识别.大模型智能文档.在线语音合成. 所需硬件如下: jetson nano:linux 科大讯飞麦克风硬件 ...

  6. 使用 ChatterBot 库制作一个聊天机器人

    作者 | 周萝卜 来源 | 萝卜大杂烩 我们学习一些如何使用 ChatterBot 库在 Python 中创建聊天机器人,该库实现了各种机器学习算法来生成响应对话,还是挺不错的 1什么是聊天机器人 聊 ...

  7. 只需2小时,成本不到7块,你我皆可制作的3D机器人

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 机器人的骨架能像昆虫那般灵活.健壮吗?这个问题一直困扰着研究人员. 以往,要么制作工艺太过复杂,耗的时间长:要么就是材料设备台太过于昂贵, ...

  8. 好想学python机器人_【Python成长之路】从零学GUI -- 制作智能聊天机器人

    [写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...

  9. 【Python成长之路】从零学GUI -- 制作智能聊天机器人

    [写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...

最新文章

  1. JavaScript基础(三)流程控制
  2. Linux数据报文接收发送总结7
  3. 程序员职场须知:公司如何衡量程序员的价值?别以为是经常加班!
  4. 关于group by的用法 原理
  5. 怎么用python打开csv文件_使用Python从CSV文件读取数据
  6. 如何使用extern在源文件之间共享变量?
  7. java创作2019-7-19日报管理系统
  8. 《Java 8 实战》 学习笔记一(行为参数化)
  9. 数据可视化—随机漫步
  10. 如何求复数的模用计算机,Excel怎么计算复数? Excel对复数进行加减乘除指数对数模的教程...
  11. 网站在移动端访问时偶尔不能加载页面,http访问被劫持
  12. 计算机网络:小明在家打开一个网址过程细致版(DNS缓存、DNS查询、TCP/IP协议、ARP协议、HTML渲染)
  13. 网站建设凸显效果的配色原则
  14. 网盘修复版新增qq支付仿城通网盘115网盘源码下载
  15. 如何改域的NETBIOS名?
  16. EFCore之执行原生SQL语句
  17. Linux 基础入门 09
  18. 宇视NVR录像机,录像下载过程中,查询录像搜索列别里面为空
  19. Spring Boot 注解大全
  20. orleans remote call error

热门文章

  1. 使用Visual Studio 2010调试断点不起作用的问题解决办法
  2. 程序员的算法趣题Q56: 鬼脚图中的横线(思路2)
  3. web自动化测试理论之selenium八大定位 -(2)
  4. 速普创新将人工智能引入孵化器产业
  5. ak科技工具箱移除苹果ID
  6. 笔记本显示网络电缆被拔出怎么解决_如何解决系统显示网络电缆被拔出的问题...
  7. C++程序设计基础,数组实验(题干信息:某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超30人参加考试,具体问题在下面)
  8. 校招选择题汇总【图形推理(3)】含答案解析
  9. 使用Redux-Toolkit,由“object is not extensible”引发的思考及解决方案
  10. 大数据是新的富矿 数据分析成为掘金关键