×

Wifi控制的FPV Rover机器人(带有Arduino和ESP8266)

消耗积分:2 | 格式:zip | 大小:1.79 MB | 2022-11-18

417804

分享资料个

描述

本教程展示了如何使用连接到 ESP8266 Wi-fi 模块和两个步进电机的 Arduino Uno 通过 Wi-Fi 网络设计遥控两轮机器人漫游车。机器人可以通过普通的互联网浏览器使用 HTML 设计的界面进行控制。Android 智能手机用于将视频和音频从机器人广播到操作员的控制界面。

网上有很多不同形状、尺寸和价格的机器人套件。但是,根据您的应用,它们都不适合,而且您可能会发现它们对于您的实验来说太贵了。或者,也许您只是想制作您的机械结构而不是购买完整的。本教程还展示了如何为您自己的机器人项目设计和构建一个低成本的亚克力框架,对于那些没有的人来说,只使用普通工具访问那些昂贵的 3D 打印机或激光切割机。提出了一个简单的机器人平台。

本指南可能会被调整以更改其形状或控制界面。它适用于我的其他机器人项目(“Robô da Alegria”),

[警告:部分照片已过时,因为设计进一步改进。但是,这里提出的想法仍然有效。]

第 1 步:工具

构建此原型需要以下工具:

  • 手锯(对亚克力板进行初始切割)
  • 螺丝刀(用于放置螺栓和螺母)
  • 尺子(用于尺寸测量)
  • 美工刀(用于切割亚克力板)
  • 钻孔机(为螺栓钻孔)
  • 砂纸(平滑粗糙边缘)

第二步:机械结构和材料

要构建定制机器人,首先您必须设计机械结构。这可能很容易,具体取决于您的应用程序,或者充满了细节和限制。您可能需要在 3D CAD 软件中进行设计,或者仅以 2D 形式绘制,具体取决于模型的复杂性。

如果您不想构建自己的机械结构,也可以在线购买完整的结构。网上有很多机器人套件。在这种情况下,您可能会跳到第 6 步。

在本教程中,设计了一个低成本的亚克力框架,用于连接电机和其他组件。本教程中介绍的结构是使用 123D Design CAD 软件进行 3D 设计的。随后使用 Draftsight 软件将每个部件转换为 2D。

使用了以下材料:

  • 2mm亚克力板
  • 42x19mm 橡胶胎面轮胎 (x2)
  • 49x20x32mm钢球万向轮(x1)
  • M2 x 10mm 螺栓 (x12)
  • M2 x 1,5mm 螺母 (x12)
  • M3 x 10mm 螺栓 (x8)
  • M3 x 1,5mm 螺母 (x8)
  • 5/32" x 1" 螺栓 (x3)
  • 5/32" 螺母 (x6)
  • 手持自拍杆夹
  • 3 x 3 cm 铝制支架 (x4)

基础结构的搭建分为以下几个步骤:

  • 根据二维图纸中的尺寸切割亚克力底座;
  • 在二维图中所示位置钻孔;
  • 根据 3D 图纸用螺栓和螺母安装组件。

不幸的是,步进电机轴的直径大于轮子上的孔。所以你可能需要使用胶水来耦合这些组件。在本教程中,我在电机轴和车轮之间临时搭建了一个木质联轴器。

第 3 步:切割结构

首先,您需要将模型的尺寸转移到亚克力板上。使用普通打印机在不干胶纸上打印 2D 绘图,然后将纸张切割成合适的尺寸,然后将遮罩贴在丙烯酸表面。

您可以使用手锯根据您的尺寸切割亚克力或使用下面描述的断裂技术。

用一把美工刀,在尺子或天平的帮助下,将亚克力切割成直线。您不需要一直切割整个纸张,只需对其进行评分以创建一些轨道,稍后将在其中切割该作品。

将亚克力放在平坦的表面上,用一些夹子将其固定到位并施加一些压力,直到板材分成两半。重复此过程,直到完成所有切割。之后,您可以使用砂纸打磨粗糙的边缘。

第 4 步:钻孔底座

用钻孔机在 2D 图中所示的位置(在掩模中标明)钻孔。

亚克力相对容易钻孔。因此,如果您不处理钻孔机,您可以使用锋利的工具(例如美工刀)手动钻孔。您也可以使用它来扩大小孔以适应螺栓尺寸。

取下面具,你的基地就准备好了。

第 5 步:组装结构

 
 
 
 
poYBAGN17JGAId85AABg6gn32A8658.jpg
 
1 / 4
 

根据图像用螺栓和螺母安装组件,您的结构将准备就绪。

M3 螺栓用于安装步进电机,而 5/32" 螺栓用于安装前轮和智能手机夹。

现在休息一下,开始在下面的步骤中组装电路......

第 6 步:电子产品

您需要以下电子元件:

  • 1 kohm 电阻 (x2)
  • 10 kohm 电阻 (x1)
  • 一些跳线
  • 一台计算机(用于编译和上传 Arduino 代码)
  • USB电缆

您不需要特定的工具来组装电路。所有组件都可以在您最喜欢的电子商务商店中在线找到。该电路由连接到 Arduino 的 USB 端口的移动电源供电。

根据原理图连接所有组件。您需要一些跳线来连接 ESP-8266 模块和步进电机。您可以使用 protoshield(用于更紧凑的电路)、普通面包板或设计您自己的 Arduino shield。将 USB 电缆插入 Arduino Uno 板并继续下一步。

第 7 步:Arduino 代码

安装最新的 Arduino IDE。在这个项目中 stepper.h 库用于控制步进电机。与 ESP-8266 模块通信不需要额外的库。请检查您的 ESP8266 的波特率并在代码中正确设置。

下载 Arduino 代码 (stepperRobot.ino) 并将 XXXXX 替换为您的 wifi 路由器 SSID,将 YYYYY 替换为路由器密码。将 Arduino 板连接到您的计算机 USB 端口并上传代码。

 

第 8 步:Android 网络摄像机

 
poYBAGN17JaAa7kAAAC1qtSqkww797.jpg
 

使用 Android 智能手机将视频和音频从机器人广播到控制界面。您可以在 Google Play 商店 上找到该应用。

安装它并进入下一步。

第 9 步:将电路放入机器人中

 
 
 
 
poYBAGN17JqAfw5XAACg-HGkwgw581.jpg
 
1 / 3
 

如图所示,使用一些 M1 螺栓将电路安装在机器人顶部。

之后,使用双面胶带将您的移动电源粘在机器人背面(因为以后很容易移除),然后将智能手机放入夹子中。

第十步:基于Web的控制界面

 
poYBAGN17JyAdfTTAABwvx1f29E541.jpg
 

为控制机器人设计了一个 html 界面。

下载 interface.rar 并将所有文件解压缩到给定文件夹。然后在 Firefox 上打开它。

在该界面中使用文本框表单来输入 ESP 模块和视频/音频服务器的 IP 地址(来自 Android IP 网络摄像头应用程序)。

有一个测试但是,这将使机器人旋转,直到收到另一个命令。键盘方向键用于向前或向后移动机器人,以及向左或向右旋转。

 

第 11 步:使用

 

当 Arduino 重新启动时,它会尝试自动连接您的 wi-fi 网络。使用串行监视器检查连接是否成功,并获取路由器分配给 ESP-8266 的 IP。在 Internet 浏览器 (Firefox) 中打开 html 文件并在文本框中告知该 IP 地址。

您还可以使用其他方法来找出路由器分配给设备的 IP 地址。

断开 Arduino Uno 与计算机的连接并将其连接到移动电源。等待它再次连接。

在连接到机器人的智能手机中启动 IP Webcam 应用程序。在您的控制界面上输入视频/音频 IP 并连接到服务器,您就可以开始使用了。您可能需要降低应用程序中视频的分辨率,以减少传输过程中的延迟。

单击并按住键盘上的箭头按钮以旋转机器人或向前/向后移动机器人,并享受探索环境的乐趣。


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

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Wifi控制的FPV Rover机器人(带有Arduino和ESP8266)',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);