×

带有Arduino、乐高和3D打印部件的DIY双足机器人

消耗积分:0 | 格式:zip | 大小:0.20 MB | 2023-06-27

欲望都市

分享资料个

描述

介绍

多年来,制造能够模仿人类行走的双足机器人一直是科学家、制造商和发明家关注的焦点。事实上,双足机器人是具有提供运动的铰接腿机构的移动机器人。与轮式机器人相比,它们可以上楼并越过障碍物,尽管速度较慢。由于关节数量多且在行走过程中保持稳定性,构建仿人双足机器人一直很困难。如果你没有正向、逆向运动学和控制工程的学术知识,那绝对没有问题。在本教程中,我们将使用乐高组件、Arduino 板和一些现成的电气组件制作一个有趣且易于构建的双足机器人(图 A)。这些说明是按照您可以在家中制作的方式准备的。

图 A - 双足机器人的一般视图

在这个项目中,双足机器人使用了一种有趣的机械机构,该机构仅使用一个直流齿轮电机模拟人类行走。结果非常有趣。

在本教程中,我们将使用 Lego Technic 零件制作 Biped 机器人的身体结构和腿部机构。然后,一个直流齿轮电机将通过锥齿轮和正齿轮系驱动支腿机构(图 B)。

 
pYYBAGOlEquAdZwbAAFyoSvS888696.jpg
图 B – 车身结构、电子设备和齿轮电机的组合
 

在下一步中,我们将添加一个 Arduino Nano 作为 Biped 的大脑。Arduino Nano 使用小型强大的微处理器,使其适用于轻量和小型项目(图 C)。

 
poYBAGNVnkOAEIfHAAJ6Xu0KBTE831.jpg
图 C - Arduino Nano 板
 

各种现成的电机、传感器和屏蔽可以轻松连接到 Arduino 板。此功能使我们能够使用 Biped 执行各种任务。例如,您可以通过对 Arduino 板进行编程来告诉 Biped 来回移动和跳舞。

材料

 
poYBAGOlEriAX98oAAIZLOyufbk790.jpg
图 D – 电子和机电元件
 
  • 1x TT 齿轮马达
  • 1x 3D 打印齿轮电机外壳
  • 1x 面包板,迷你尺寸
  • 1x Arduino Nano
  • 1x Neo Pixel LED 环
  • 1 个电源插孔
  • 1x 3D 打印乐高兼容联轴器
  • 1x L298N 迷你电机驱动器
  • 1 个按钮
  • 1x M3 x 30 机械螺丝
  • 2x M3 x 25 机械螺丝
  • 公对公跳线
 
pYYBAGOlEr2AJgdVAAHM-TFKqKE653.jpg
图 E - Lego Technic 组件
 
  • 框架,5x7 模块
  • 双锥齿轮,36齿
  • 锥齿轮,12 齿
  • 梁,9 模块
  • 梁,5 模块
  • 梁,3 模块
  • 角梁,3x5 模块
  • 衬套,1 个模块
  • 车轴,8 模块
  • 角块 2, 180°
  • 双十字块,3模块
  • 带十字孔的横梁,2 模块
  • 带挡块的轴,4 模块
  • 梁,3 模块
  • 车轴,2 模块
  • 带摩擦/轴的连接销,2 模块
  • 带轴的连接器销,2 个模块
  • 管,2 模块
  • 带衬套的连接器销钉,3 个模块
  • 带摩擦的连接器销,3 模块
  • 带摩擦力的连接销,2 模块
  • 带轴孔的轴连接器
  • 角块 1, 0°

机械零件的组装

让我们开始组装 Biped 的身体结构和腿部机构。

 
pYYBAGOlEsGACAYTAAFY0yIsKdU299.jpg
图 F - 四连杆机构和平行四边形机构
 
 

3D打印零件

Lego Technic 组件仅与 LEGO 齿轮马达匹配。为了将动力从现成的齿轮电机的轴传输到乐高齿轮或车轴,我们需要打印齿轮电机的外壳和联轴器。外壳将用作齿轮电机和乐高技术梁之间的接口或适配器。联轴器将齿轮电机轴连接到乐高技术轴。这些 3D 打印部件称为乐高兼容外壳(图 G 和图 H)。我们还创建了正面背面机器人的身体覆盖物。后盖看起来像氧气胶囊,保护电子部分。前盖的作用类似于盔甲(图一)。请下载 3D 文件并使用您的 3D 打印机打印电机外壳、乐高兼容联轴器和盖子,或使用附近的创客空间中的那些。

 
poYBAGOlEsiASo_BAAECImYH1Us821.jpg
图 G - 3D 打印乐高兼容电机外壳
 
 
pYYBAGOlEsyAZrkWAAENxQ-pKMQ258.jpg
图 H - LEGO 兼容齿轮电机的一般视图
 
 
poYBAGOlEtCAYNWjAAFKU8AjYl8365.jpg
图 I - 3D 打印的前后车身盖
 

确保正确实现图 J 中所示的威廉希尔官方网站 原理图,这样您就不会最终损坏您的 Arduino 板和电机驱动器。

 

 
poYBAGOlEtyADGlMAAET6sHMZxg962.jpg
图 J - 威廉希尔官方网站 示意图
 
 

编程

您可以拿起乐高积木,让您的想象力发挥无限。当然,编码也是您可以享受很多乐趣并最具创造力的部分。您可以转到 Arduino IDE 并编写自己的代码来告诉 Biped 做什么。但是现在,让我们从这段代码开始。

#include 
#define PIXELSPIN A1 // Which pin on the Arduino is connected to the NeoPixels?
#define NUMPIXELS 8  // How many NeoPixels are attached to the Arduino?
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
#define M1 A4
#define M12 A5
#define button A3
int buttonNew;
int buttonOld = 1;
int Motorstate = 0;
void setup() {
// Initialize Arduino pins to outputs
pinMode(M1, OUTPUT);
pinMode(M12, OUTPUT);
pinMode(button, INPUT_PULLUP);
// This initializes the NeoPixel library.
pixels.begin();
for (int i = 0; i < 9; i++) {
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255.
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
// This sends the updated pixel color to the hardware.
pixels.show();
}
}
void loop() {
buttonNew = digitalRead(button);
if (buttonOld == 0 && buttonNew == 1) {
if (Motorstate == 0)
{
// bright blue color.
pixels.setPixelColor(1, pixels.Color(0, 0, 250));
pixels.setPixelColor(2, pixels.Color(0, 0, 250));
pixels.setPixelColor(3, pixels.Color(0, 0, 250));
pixels.setPixelColor(5, pixels.Color(0, 0, 250));
pixels.setPixelColor(6, pixels.Color(0, 0, 250));
pixels.setPixelColor(7, pixels.Color(0, 0, 250));
pixels.show();
// Motor run.
digitalWrite(M1, HIGH);
digitalWrite(M12, LOW);
delay(1000);
digitalWrite(M12, HIGH);
digitalWrite(M1, LOW);
delay(1000);
Motorstate = 1;
} else {
for (int i = 1 ; i < 8 ; i++)
{
pixels.setPixelColor(1, pixels.Color(0, 0, 0)); // Neopixel off.
pixels.show();
}
// Motor stop.
digitalWrite(M1, HIGH);
digitalWrite(M12, HIGH);
Motorstate = 0;
}
}
buttonOld = buttonNew;
}

运行你的 Biped

 

请通过下面的评论告诉我们您对本教程的看法。您的反馈将帮助我们改进未来的工作。


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

评论(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.obk20.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、乐高和3D打印部件的DIY双足机器人',//标题 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.obk20.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);