1 Arduino绘图机器人开源分享-德赢Vwin官网 网
×

Arduino绘图机器人开源分享

消耗积分:2 | 格式:zip | 大小:0.05 MB | 2023-06-25

卢表镜

分享资料个

描述

海朋友们,经过大约 6 个月的长期差距,我带来了一个新项目。直到Cute Drawing Buddy V1,SCARA Robot - Arduino完成,我计划再开发一个绘图机器人,主要目的是覆盖大空间进行绘图。所以固定的机械臂做不到,所以我计划一个能够在平面上绘图的机器人。这是版本 1,它可以绘制任何比例的所有矢量绘图(因为这里使用的步进器非常便宜)。在本教程中,我们不仅看到构造,而且非常详细地深入研究它是如何绘制的我在单独的页面中列出了耗材,以便我能够单独添加图像。

您可以使用此机器人绘制非常大的图像。孩子们拼搭和玩耍非常有趣。

注意:- 对于那些拥有机器人并想要绘图代码的人,直接转到第 9 步。您可以在该页面中看到带有图像的详细计算。

第 1 步:所需材料

就像我以前在这里的项目一样,除了控制器电机和轮子之外,大部分的东西都是从垃圾中使用的。

所需材料

1) 带 uln2003 驱动器的 28byj-48 步进电机 - 2 号

2) Arduino Nano - 1 号。

3) 塔式伺服 sg90 - 1No.

4) HC-05蓝牙模块。

5) 步进电机轮子 - 2 个

6) 脚轮 - 2Nos.

7) 素描笔

8) 螺丝和螺母。

9) 电容器 470 微法拉。

除了上面所有的垃圾

9) 胶合板 12 厘米 X 12 厘米。

10) 铝料送废片。

11) 光盘盒。

12) 旧塑料齿轮。

使用的软件

1)阿杜伊诺集成开发环境。

2) 视觉工作室 10。

使用的工具

1)钻孔机。

2)焊接离子。

3) 钢锯片。

4) 螺丝刀。

 

第 3 步:底盘构造和车轮固定

图片是不言自明的,我仍然叙述一些话

1) 它是一个非常小的机器人,半径只有 6 厘米(直径 12 厘米)。首先在纸上画出圆圈,标记轮子的部分并剪下纸。

2)将纸放在胶合板上并画出底盘的轮廓。因为我没有木材切割机,所以我用相等的空间钻出外线并移除多余的部分。

3)用刀雕刻侧面并打磨。

4) 现在用钢锯将方形铝进料管切割成 L 形。

5) 在 L 形进料上标记孔以安装步进电机。再次打孔并切割铝片(这需要更多时间,因为重量轻的铝在用手工作时非常坚硬)。

6) 现在用螺丝和螺母将 L 形铝材安装到游戏木底座上。现在将步进电机拧入底盘。

7) 制作脚轮底座,并与底盘固定。

8) 在底盘正确的中心打一个 10mm 的孔,以备将来使用。

注意:- 步骤非常简单,但都希望尺寸和位置正确,即使是很小的毫米变化也会在图纸中产生很大的变化。

第 4 步:电路图

以上是电路图

1)使用Arduino TX和RX与HC05蓝牙通信。请记住,当程序上传时 HC05 必须删除,否则我们无法上传程序。

2) 步进电机的用户数字引脚 (2,3,4,5) 和 (6,7,8,9)。通过 ULN2003 驱动器将引脚连接到步进电机。

3) 将伺服电机连接到数字引脚 10。

4) 步进电机和伺服电机分开供电。我用的是5V 2.1A输出的移动电源。

5) Arduino 的 9V 电池和 HC05 模块的 Arduino 5V 电源。

6) 在舵机电源上并联一个470微法的电容,防止舵机闪变。

第 5 步:电路完成

我制作了一个类似电路的屏蔽罩,所有电路都是用母头和公头连接器引脚手工焊接的。连接线也是自己做的。不要忘记放两个不同的电源,因为我需要 3 天才能找到问题。将所有电源 gnd 连接到 arduino gnd。

第 6 步:完成机器人

1)将电路与底盘连接,我用一个旧的CD盒做了一个三角底座,一侧固定电路,另一侧固定电机驱动器。

2) 现在使用 Arduino Bluetooth RC Car 应用程序来测试机器人。

3) 将移动电源连接到 Arduino 电源。Arduino、蓝牙和 Steppers 只有移动电源就足够了。

上面给出了检查机器人的 Arduino 程序

检查.ino

 

第 7 步:笔向上向下机制

1)经过大量更改后,我通过快速更换笔完成了上面的笔上下机制。

2) 我使用连杆上下拉杆来上下提起笔。

3)在素描笔上使用旧齿轮作为重量和提升机构。

第 8 步:完成机器人

修理电池和移动电源 我切下旧的身体喷雾瓶并将其永久固定。现在基础工作已完成,步进电机驱动的机器人已准备就绪。

第 9 步:机器人数学

一步一步在图中详细说明。

1) 程序的主要部分是计算机器人要朝哪个方向转动的旋转度和它要移动的距离。每当机器人位于图表的中心时,我们都有当前位置和想要移动的位置。所以每个点都有一个 X,Y 位置,我们有机器人面对的当前度数。开始时机器人面向 0 度,它有 359 度可以旋转并朝那个方向移动。

2) 因此,根据当前位置和要移动的位置,按照步骤 2 找到宽度 (a) 和高度 (b),并形成一个直角三角形。即使这些值是负数,也要让它成为绝对值。使用 Hypotenuse 公式找到 Hyp。

3) 使用 Hyp 和 B(对边)的三角公式求度数。将弧度转换为度数。

4) 现在我们有了想要移动的距离的 hyp 并且我们有了点所在的度数。只有在旋转后它才会移动。计算 Bot 旋转角度用户步骤 5。

5) 第 5 步有很多逻辑,因为机器人在任何一侧都有点。因此根据当前位置和下一个位置点位置计算旋转角度。

6)根据内存中的机器人当前角度,按照第四步找到旋转角度和方向。现在根据 Hyp 数的计算和移动步骤向左或向右旋转。现在将新点作为当前点并获取下一个点并再次转到步骤 1

一次又一次地重复这些步骤,直到程序完成。

第 10 步:VB.net 2010 程序

1)在Designer View中我们有两个Tab控件。一个通过蓝牙与 Bot 连接。另一个是绘图窗口。

2) 用鼠标或手画出图纸的空白处,我们就可以保存并打开图纸。

3) 点击左侧的绘图按钮,将图片框中的图像绘制到地板或纸上。

4) 上一张幻灯片的第 5 步程序在前两张图片中。

5) 一旦绘制被按下一个点并且计算笔状态并找到旋转角度和行进距离,它被发送到机器人。一旦机器人到达该点,它就会回复并根据发送点发送下一个点,图像将显示在屏幕上。一旦到达终点。家庭旋转的最后位置并指向机器人。

6) 下载本页面的应用程序,解压并安装最新的.net框架并运行。

注意:- 首先,我使用逗号分隔符创建一个命令,并尝试使用 substr 拆分字符串,但在 arduino 中,如果长度很高,则字符串函数永远不会工作。所以一步步送分。

MyBot.zip

 

第 11 步:Arduino 程序 - 计算脉冲数

当前机器人工作

1) 所以现在如果两个步进电机都以相反的方向旋转,则机器人会向前或向后移动。对于步进电机 28byj-48,我们需要 4096 个脉冲才能旋转一整圈。

2) 如果同向左转或右转。计算步进器想要旋转一整圈的度数,并将其除以 360 以找到 1 度的旋转或从底盘中心找到车轮的中心并找到其周长将其除以车轮周长。现在有了这个结果,将 4096 乘以完整旋转所需的脉冲数。对于我的车轮和底盘,结果是 5742 脉冲并将其除以 360,1 度旋转为 15.95 脉冲。

第 12 步:Arduino 程序

在上一页中,计算了学位的步长。旋转方向、度数、移动距离由VB.net程序计算并通过蓝牙发送。一旦接收到起始字符为“&”且结束字符为“$”的数据,则子字符串将拆分并通过旋转电机和伺服系统来执行命令。完成后,它会向笔记本电脑回复“@”符号。

我的机器人矢量.ino

 

第 13 步:MyBot 准备就绪

我们有很多不同颜色的草图,可以轻松更改颜色,无需上传即可绘制您自己的图纸。计划在机器人中进行大量升级。

更多精彩........朋友们别忘了评论和鼓励。


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

评论(0)
发评论

下载排行榜

全部0条评论

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

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"//www.hzfubeitong.com/m/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="https://m.elecfans.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:'Arduino绘图机器人开源分享',//标题 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.hzfubeitong.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);