×

Arduino机器人Ludos开源

消耗积分:0 | 格式:zip | 大小:0.51 MB | 2022-10-24

王璐

分享资料个

描述

该项目由 JLCPCB - 印刷电路板厂赞助。

介绍

每个决定使用 Arduino 进入机器人世界的人都面临着巨大的挑战。

这些挑战之一是从一些简单的应用程序开始,并且您可以在学习课程中看到在实践中工作的东西。

这样,可以以实际的方式学习并更快地吸收知识。

正是出于这个原因,我们决定开发 ArduinoRobot Ludos。

poYBAGNVj7qAfTDbAAF1s77IcMM638.png
图 1 - Ludos 机器人结构
 

接下来,我们将介绍 Arduino 机器人 Ludos 及其结构细节。

该设计将使用PLA 材料的Ender 3 S1 打印机进行开发。

pYYBAGNVj7yAcqv7AAA81kP0iBo035.png
 

 

这是Creality开发的新模型。它能够打印不同的材料,并且在打印过程中具有出色的打印质量、准确性和运动稳定性。

查看新型 Ender 3 S1 打印机的其他功能。

poYBAGNVj76AZS5uAAAyhfauks4958.png
 

 

接下来,我们将看到电子电路的操作。

什么是 Arduino Ludos 机器人?

创建它的目的是让您是初学者或教师,并且没有易于使用的机器人,可以使用简单的机器人套件,具有多种功能,并帮助您使您的课程更具教学性和实用性。

此外,他建议:

  • 促进与机器人组件的第一次接触;
  • 让它成为一个简单而有创意的应用程序。

所有这些都将有助于组装您的第一个机器人,并允许您和您的学生将其各种资源与 Arduino 一起使用。

pYYBAGNVj8GAH5v-AAE2xcxcmjo695.png
图 2 - Ludos 机器人的资源。
 

正如您在图 2 中看到的,Robot Ludos 具有立方体的形状。它允许您使用 Arduino 或其他控制板来创建您的项目。

此外,它的结构中还有以下组件:

  • 01 x 按钮;
  • 01×16×2液晶屏;
  • 02 个红色 LED;
  • 01 x 超声波传感器。

除了这些组件之外,您还可以利用内部空间并利用其他几个模块和传感器来开发其他项目。

我们的目标是让您使用此工具包构建不同类型的项目和体验。它的零件少,易于组装,并且在单个机器人中具有多种功能。

以下是不同视角下 Ludos 机器人的完整视图。

poYBAGNVj8SAWJeBAADE0peQEQY353.png
图 3 - Robot Ludos 的不同视图。
 

现在,我们将使用 Robot Ludos 开发一个项目。我们将使用 Robot Ludos 开发超声波尺。如果您想访问完整的 Arduino Robot Ludos 文档并下载您的文档,请访问此 Arduino Robot Ludos 文档。

使用机器人 Ludos 开发超声波尺

对于这个项目,我们将使用 Robot Ludos 的 3 个资源:按钮、超声波传感器和 16x2 LCD 显示屏。

下面我们将介绍将要开发的项目。

使用 Arduino 机器人 Ludos 开发超声波标尺。每次按下按钮时,机器人必须使用超声波传感器计算距离,并将其值显示在 16x2 LCD 显示屏上。

对于这个项目,我们将使用下面介绍的 JLCPCB Arduino 兼容印刷电路板。

pYYBAGNVj8aAPp3jAACIows0H18469.png
图 4 - 用于控制 Ludos 机器人的 Arduino 独立印刷电路板。
 

您可以通过以下链接在第一个订单中以 2 美元的价格为您的项目获取Arduino JLCPCB兼容 PCB:赢得我的 Arduino 兼容 PCB。

访问链接并下载 JLCPCB Arduino 兼容印刷电路板的 Gerber 文件。

下面,我们展示了该项目的完整电子原理图。

poYBAGNVj8mAZ4dXAALTOzIZID4250.jpg
图 4 - 该项目的电子电路。
 

现在,我们将展示这个项目的完整代码。

#include  //Biblioteca I2C do LCD 16x2
#include  //Biblioteca de Comunicacao I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Configurando o endereco do LCD 16x2 para 0x27

#define botao 3
#define echoPin 9
#define trigPin 8

long tempo = 0;
int distancia = 0;
bool BotaoCabeca = 0, estado = 0;

void setup()
{
    pinMode(botao, INPUT);
    pinMode(echoPin, INPUT);
    pinMode(trigPin, OUTPUT);
    
    Wire.begin(); //Inicializacao da Comunicacao I2C
    
    lcd.init(); //Inicializacao do LCD
    
    lcd.backlight();
    lcd.setCursor(2,0);
    lcd.print("Oi, eu sou o");
    lcd.setCursor(3,1);
    lcd.print("Robo Ludos!");
    
    delay(2000);
}

void loop()
{
  
  BotaoCabeca = digitalRead(botao);

  if(BotaoCabeca == 1 && estado == 0)
  {
    
      lcd.clear();
  
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
  
      tempo = pulseIn(echoPin, HIGH);
      distancia = tempo * (0.034/2);
  
      if(distancia <= 65)
      {
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      }
    
      if(distancia > 65)
      {
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      lcd.print("");
      }
  
      lcd.setCursor(0,0);
      lcd.print("Distancia:");
      lcd.setCursor(0,1);
      lcd.print(distancia);
      lcd.setCursor(3,1);
      lcd.print("cm");
      
      estado = 1;
      
  }

  if(BotaoCabeca == 0 && estado == 1)
  {
  estado = 0;
  }

}

在 Arduino 机器人代码的第一部分,我们做了库的声明、名称定义和变量的声明。

#include  //Biblioteca I2C do LCD 16x2
#include  //Biblioteca de Comunicacao I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Configurando o endereco do LCD 16x2 para 0x27

#define botao 3
#define echoPin 9
#define trigPin 8

long tempo = 0;
int distancia = 0;
bool BotaoCabeca = 0, estado = 0;

在此之后,我们将进入 void setup 函数。

void setup()
{
    pinMode(botao, INPUT);
    pinMode(echoPin, INPUT);
    pinMode(trigPin, OUTPUT);
    
    Wire.begin(); //Inicializacao da Comunicacao I2C
    
    lcd.init(); //Inicializacao do LCD
    
    lcd.backlight();
    lcd.setCursor(2,0);
    lcd.print("Oi, eu sou o");
    lcd.setCursor(3,1);
    lcd.print("Robo Ludos!");
    
    delay(2000);
}

首先,按钮引脚和传感器引脚配置为数字输入和输出。之后,我们进行 Wire 和 LCD 初始化,并在 Arduino 机器人 Ludos 的 LCD 上打印消息:葡萄牙语“你好,我是 Ludos 机器人”,持续 2 秒。

之后会进入 void loop 函数,等待用户在 Arduino 机器人 Ludos 中按下按钮的那一刻。

void loop()
{
  
  BotaoCabeca = digitalRead(botao);

  if(BotaoCabeca == 1 && estado == 0)
  {
    
      lcd.clear();
  
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
  
      tempo = pulseIn(echoPin, HIGH);
      distancia = tempo * (0.034/2);
  
      if(distancia <= 65)
      {
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      }
    
      if(distancia > 65)
      {
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      lcd.print("");
      }
  
      lcd.setCursor(0,0);
      lcd.print("Distancia:");
      lcd.setCursor(0,1);
      lcd.print(distancia);
      lcd.setCursor(3,1);
      lcd.print("cm");
      
      estado = 1;
      
  }

  if(BotaoCabeca == 0 && estado == 1)
  {
  estado = 0;
  }

}

最初,我们阅读了 Arduino 机器人 Ludos 上的按钮。

BotaoCabeca = digitalRead(botao);

在下面的条件中,条件检查按钮是否被按下并且之前被禁用。

if(BotaoCabeca == 1 && estado == 0)

如果这是真的,系统将触发超声波传感器并测量 Arduino 机器人 ludos 与您面前的某个物体之间的距离。

lcd.clear();
  
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
  
tempo = pulseIn(echoPin, HIGH);

行程结束后,系统会将 echo pin 以高逻辑电平通过的时间存储在tempo 变量中。

tempo = pulseIn(echoPin, HIGH);

通过计算出的时间和声音在空气中传播的速度为 340 m/s,我们可以使用平均速度公式计算距离。

distancia = tempo * (0.034/2);

从上面的等式中,我们得到了 Arduino 机器人 Ludos 和物体之间的计算距离。

poYBAGNVj8yAS7J4AAHOYsct620298.png
图 5 - Arduino 机器人 Ludos。
 

然后系统检查距离是否大于或小于 65。如果该值更大,则 LED 将亮起。否则,LED 将关闭。

在下图中,我们展示了 Arduino 机器人 Ludos,显示了 59 厘米的距离值并且 LED 熄灭。

您是否看到使用 Arduino Robot Ludos 开发项目是多么有趣?

如前所述,您可以从 Arduino 机器人 Ludos 的装配结构中创建其他项目和想法。

现在,如果您想访问完整的 Arduino Robot Ludos 文档并下载您的文档,请访问此 Arduino Robot Ludos 文档。

结论与致谢

我们感谢 JLCPCB 公司为我们提供印刷电路板以开发 Arduino 机器人 Ludos 项目的支持和合作。

如果您想以 2 美元的价格购买 5 张卡,请访问此链接,并使用折扣券在首次购买时获得 2 美元的折扣。


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

评论(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:'Arduino机器人Ludos开源',//标题 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);