0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用Parallax激光传感器制作Arduino激光机器人—第1部分

goodmbby 来源:DevicePlus 作者:DevicePlus 2023-02-24 15:24 次阅读

这篇文章来源于DevicePlus.com英语网站的翻译稿。pYYBAGPzFXCAB8IMAADMtWzXzUA558.jpg

试想一下,您刚搬到一个新地方,需要尽快添置家具,但是手头没有卷尺可以进行测量。那么,这款Parallax激光Arduino机器人就会派上用场!

我们在之前的文章《如何制作自己的机器人》 和《如何制作自己的机器人(第2部分)》中描述了如何利用Arduino UNO R3从零开始搭建属于自己的机器人。在本文中,我们将进一步增加机器人的功能:让它能够动起来并且添加激光测距(LRF)功能,以使该设备能够检测物体并测量距离。

激光传感器会帮我们获得更准确、更可靠的数据。该Arduino机器人的移动方式为自主移动模式。它在移动的过程中能够检测到障碍物并主动避开。

该机器人的设计目标如下:

向前、向后移动;向左和向右旋转90度;向左和向右旋转45度。

基于最佳路径,通过向不同方向移动避开障碍物。

测量各个方向(前方、左右90度、左右45度)的距离。

基于可用的最长距离,确定朝哪个方向前进(向前、向后、向左或向右)。

传感器安装在伺服上,以便机器人可以左右平移以进行多次测量。测量的距离将显示在一块小型OLED显示屏上。我们将使用步进电机实现平稳、安静的运行。

我们会一步一步地讨论该Arduino机器人的构建过程。第一步是如何安装底盘、电机和Arduino/电机开发板。然后,我们利用一个小程序来测试电机,以确保系统连接和软件安装都准确无误。然后,在下一篇文章中,我们会逐步添加其余设备,并且每一步都通过程序来测试安装和连接是否正确。通过这种按部就班的方法能够让我们更方便地解决制作过程中遇到的任何问题。

硬件

制作该机器人所需的硬件请参见以下硬件明细,这些零部件在许多电商处都可以买到(明细中给出了部分地址)。

Arduino Uno rev 3 (www.adafruit.com/products/50)

适用于Arduino的Adafruit步进电机开发套件 (www.adafruit.com/products/1438)

步进电机(www.adafruit.com/products/324)

底盘、螺丝和尾轮 Parallax.com

车轮、橡胶轮胎和轮毂 Makeblock.com

伺服装置和安装套件(www.parallax.com/product/570-28015)

Parallax激光测距仪(www.parallax.com/product/28044)

OLED显示屏(www.seeedstudio.com/Grove-OLED-Display-1.12”-p-824.html)

红色包装纸/盒(https://www.seeedstudio.com/Grove-Red-Wrapper-1*2(4-PCS-pack)-p-2585.html

聚合物电池3型(11.1V)和连接器(https://www.hobbyking.com/hobbyking/store/__18203)

195 x 195 x 3mm亚克力板(https://www.jaycar.com.au/clear-acrylic-sheet/p/HM9509)

软件

Arduino IDE

Adafruit Motor Shield Library

LCD Display9696 Library.zip

工具

圆锉

Dremel 电动工具

电烙铁

迷你钢锯

安装电机、轮子和亚克力底座

Parallax底盘由高强度铝制成。该部件是专门为伺服系统而不是步进电机设计的,因此我们需要做一些修改。

首先,要将电机安装到机箱上,我们得在机箱的两侧开口。请用Dremel电动工具按照电机的安装尺寸精确切割机箱。

我们使用的步进电机型号为NEMA 17,其分辨率为200步/转。其供电规格为12V 350mA。

要将电机装入底盘内,我们需要尺寸为6.5cm x 4.5cm的亚克力板,如图1所示。请用钢锯将亚克力板切割成所需尺寸,然后用Dremel电动工具钻孔。用M2x10mm的螺钉将电机装在亚克力安装板上,两个电机需要8颗螺钉。然后,将制作完毕的亚克力板和电机安装到底盘内。

poYBAGPzFXGARJqmAAB1iq6hxDM598.jpg

图1.将步进电机安装在6.5×4.5cm亚克力板上

要固定Arduino和OLED显示屏,我们需要切割一块15cmx8cm的亚克力底座(图2)。请用4个垫片和螺丝安装亚克力底座,然后用附带的销钉安装尾轮。

pYYBAGPzFXOAIASMAABXQtvGApQ003.jpg

图2.机箱、尾轮和15×8亚克力板底座

poYBAGPzFXSAJY-rAAC4HG5dEQs866.jpg

图3.轮子和轴连接器

pYYBAGPzFXaAcd6bAACMrXC2ve8505.jpg

图4.安装在底盘上的步进电机和尾轮

我们需要用图3中所示的轴连接器安装轮子。但是,我们必须做一个小修改。轴孔的直径为4mm,而步进电机轴的直径为5mm。因此,我们需要将连接器的孔扩大到5mm。请使用圆锉或Dremel工具扩孔。扩孔时一定要小心操作!

pYYBAGPzFXiANBnFAAB0c3gmIB8564.jpg

图5.安装在底盘上的亚克力底座

请将电机线缆从顶部的孔穿出,然后用双面胶带将电池粘在机箱下方。对于该项目来说,锂聚合物电池是理想解决方案。其供电规格为11.1V 800mAh〜1000mAh,这使得系统续航可超过1小时,而且还可以充电。但是该电池需要专门的充电器。如果您是航空模型或遥控车爱好者,那么您肯定知道这种电池。我们也可以用6或8节AA电池(9-12V)代替。

poYBAGPzFXmALH96AACsKz5fIsQ786.jpg

图6.用双面胶将电池粘在底盘上

将电机电缆连至电机开发板

Adafruit 电机开发板规格 – Adafruit

与Arduino高分辨率专用计时器相连的两个5V Hobby伺服器接口

4个H桥:搭载TB6612芯片组,每个桥可提供1.2A电流(峰值为3A,持续20ms),具有热关断保护功能,以及内部反冲保护二极管。可为电机提供4.5VDC至13.5VDC供电

可连接最多4个双向直流电机,具有单独8位速度选择功能。

可连接最多2个单线圈、双线圈、交叉步进或微步进电机(单极或双极)。

经测试与Arduino UNO、Leonardo、ADK/Mega R3、Diecimila和Duemilanove兼容。兼容Due,配有3.3v逻辑跳线。兼容Mega/ADK R2及更早版本,具有2个跳线。

5v3.3v逻辑电平(跳线可配置)。

该电机开发板能同时运行2个步进电机和2个伺服器。该步进电机开发板的一个很大优势在于它不占用任何Arduino引脚,因为它通过I2C连接。唯一需要引脚的是伺服器。我们只需按照说明连接电机电缆即可。

要了解步进电机的基本知识及其与Arduino UNO R3的连接,请参考《Arduino与零件和传感器——步进电机第1部分》。

poYBAGPzFXuAKH6EAACoL_GDGtQ556.jpg

图7.将电机连至电机开发板

poYBAGPzFXyAC_8XAAC4fzS2WIg319.jpg

图8.亚克力底座上的Arduino和电机开发板

现在,我们只需要根据下图安装轮子和电池接头即可。

pYYBAGPzFX6AR57QAAEOAAIuq0Y561.jpg

图9.步进电机电缆连至电机开发板

安装软件并上传代码

现在,我们可以运行第一段代码了!首先,我们需要从Arduino网站下载并安装Arduino IDE,从Adafruit网站上下载并安装电机开发板库。安装成功后,请将以下源代码复制到Arduino中。

//*******************************************************************************************************************************************

#include 

#include 

#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield();

Adafruit_StepperMotor *myMotor1 = AFMS.getStepper(200, 1);

Adafruit_StepperMotor *myMotor2 = AFMS.getStepper(200, 2);

void setup()

{  Serial.begin(9600);           // set up Serial library at 9600 bps

 Serial.println("Stepper test!");

 AFMS.begin();  // create with the default frequency 1.6KHz  

 myMotor1->setSpeed(100);  // 100 rpm   

 myMotor2->setSpeed(100);  // 100 rpm   

 }

void loop()

{

Motor(50,3);                    // turn Left for 50 steps

delay(1000);

Motor(100,4);                   // turn Right for 100 steps

delay(1000);

Motor(50,3);                    // turn Left for 50 steps (back to original position)

delay(1000);

Motor(400,1);                   // move Forward for 400 steps

delay(1000);

Motor(400,2);                   // move Backward for 400 steps

delay(1000);

}

//******************************************* *************************************

void Motor(int x,int y)

{   int i = 0;

 for ( i; (i < x); i ++)

 { if (y == 1)   // move forward

{ myMotor1->step(1, FORWARD, SINGLE);

 myMotor2->step(1, BACKWARD, SINGLE);}

  if (y == 2)   // move backward

 {myMotor1->step(1, BACKWARD, SINGLE);

 myMotor2->step(1, FORWARD, SINGLE);}

 if (y == 3)    // move left

  { myMotor1->step(1, FORWARD, SINGLE);

 myMotor2->step(1, FORWARD, SINGLE);}

 if (y == 4)    // move right

  { myMotor1->step(1, BACKWARD, SINGLE);

 myMotor2->step(1, BACKWARD, SINGLE);}}

}

//********************************************************************************************************************************************

这段代码非常简单。其目的是让机器人能够向左旋转90度以及向右旋转90度。该程序还能让机器人返回到起始位置:向前移动400步,然后向后移动回到起始位置。在程序循环中,我们运行Motor函数,该函数具有2个参数。第一个参数表明电机必须旋转多少步,第二个参数表明电机移动方向(向前、向后、向左和向右)。

程序运行后,该Arduino机器人应该会像上述视频显示的那样移动。

在下一篇文章中,我们将继续添加其他系统部件,比如伺服器和激光测距仪(LRF),并编写一个程序,让机器人能够自主移动。因此,敬请关注我的下一篇文章!

pYYBAGPzFWyADVB1AAAGS83r-qY435.jpg

Purnomo Nuhalim

来自墨尔本的Purnomo是一名退休人员,也是电子发烧友。目前,他正使用Arduino和Raspberry Pi从事各种开放式硬件项目的研发。除了电子学,他还对航空建模和天文学充满热情。

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    28266

    浏览量

    206719
  • OLED
    +关注

    关注

    119

    文章

    6184

    浏览量

    223917
  • 激光传感器
    +关注

    关注

    2

    文章

    151

    浏览量

    21381
  • Arduino
    +关注

    关注

    187

    文章

    6465

    浏览量

    186727
收藏 人收藏

    评论

    相关推荐

    机器人设计与实现》——低成本DIY机器人,一本机器人制作的经典入门书

    基础、机器人本体、电子控制设备、传感器与导航和机器人电源系统等。《机器人设计与实现》是按照搭积木的方法指导机器人爱好者如何设计、
    发表于 08-01 18:21

    智能机器人对于传感器的需求

    `  智能机器人的外部传感器大致可分为力学传感器,触觉传感器,接近传感器,视觉传感器,滑觉
    发表于 01-20 14:56

    请教利用树莓派制作六足机器人的问题

    本人新手,最近在准备制作一个六足机器人,如果利用舵机控制+遥控手柄套件的话,可以很容易就实现简单的功能。为了能让六足机器人实现更加复杂的功
    发表于 11-10 15:33

    自律型机器人制作入门.基于Arduino

    [size=0.83em]自律型机器人制作入门.基于Arduino.jpg(101.91 KB, 下载次数: 0)下载附件[color=rgb(153, 153, 153) !important
    发表于 06-23 11:18

    用于机器人或无人机的低成本激光导航传感器设计

    摘要——许多室内机器人或无人机系统,使用激光测距传感器作为他们的主要导航传感器,用来画图、定位和避障。这种系统的成本和耗电都是个问题,这对于低成本高效率的场合而言,是个障碍。本文,描述
    发表于 06-21 10:08

    机器人产品传感器越多,就越能有效避障?

      激光雷达作为自动驾驶和机器人等领域中的重要传感器,一直扮演着“眼睛”的角色,360°扫描周围环境,构建厘米级别高精度地图,为后续避障导航做辅助。  但如果仅使用激光雷达作为唯一的避
    发表于 08-27 15:44

    机器人传感器的类别和应用原理

    一般机器人系统由机械手、环境、任务和控制四个互相作用的部分组成。我们称一般安装在机器人机械手上的传感器为内
    发表于 11-08 15:55

    博智慧达激光焊缝跟踪成功与金红鹰机器人完成通讯

    相机和激光焊缝跟踪传感器及其控制装置等。博智慧达的智能激光焊缝跟踪系统可以和各种焊接机器人通讯,从而提高焊接质量。焊缝跟踪:激光焊缝跟踪系统
    发表于 04-13 10:30

    激光焊缝跟踪传感器协助川崎机器人对汽车车架焊接寻位引导纠偏

    激光焊缝跟踪传感器协助川崎机器人对汽车车架焊接寻位引导纠偏机器人在焊接车架过程中由于工装夹具及来料位置不准会出现与原先机器人的示教位置产生偏
    发表于 12-02 09:37

    LDS激光测距传感器

    比较全的传感器产品介绍 激光测距传感器获取距离信息。当激光投射到障碍物上时,会在传感器里形成光斑。同时,图像
    发表于 09-14 07:44

    机器人传感器分类方法

    一般机器人系统由机械手、环境、任务和控制四个互相作用的部分组成。我们称一般安装在机器人机械手上的传感器为内
    发表于 09-16 08:45

    使用Arduino和PAJ7620手势传感器制作手势控制机器人

    使用Arduino和PAJ7620手势传感器制作手势控制机器人,简单程序即可实现。小小的传感器可以识别各种手势。它采用内置的空间
    发表于 09-27 06:17

    光纤激光机器人切割焊接技术

    光纤激光机器人切割焊接技术 1 系统的特点   激光机器人切割焊接系统是在上海团结普瑞玛激光设备有限公司承接的国家863重点研究
    发表于 04-30 10:35 2719次阅读

    利用Parallax激光传感器制作Arduino激光机器人2部分

    2部分中,我们将添加机器人工作所需的其他系统部件,比如伺服激光测距仪(LRF),并编写一个程序,让
    的头像 发表于 02-24 09:43 994次阅读
    <b class='flag-5'>利用</b><b class='flag-5'>Parallax</b><b class='flag-5'>激光</b><b class='flag-5'>传感器</b><b class='flag-5'>制作</b><b class='flag-5'>Arduino</b><b class='flag-5'>激光机器人</b>—<b class='flag-5'>第</b>2<b class='flag-5'>部分</b>

    什么是激光机器人激光机器人具有哪些特点?

    激光机器人是指搭载激光器机器人利用激光器所输出的高能量激光束进行各种加工或处理操作。
    发表于 06-05 09:08 746次阅读