两周前,我写了一篇关于 mBot Ranger套件。这是我第一次’我一直在玩Makeblock工具包,这给我留下了深刻的印象。优质的组件,还有更多扩展空间,等等。您可以在 mBot Ranger评论。在这篇文章中,我’继续我在mBot Ranger上的经验,并与您分享了如何破解mBot Ranger套件以使用超声波传感器自动工作的方法。
经过30分钟的工作,我将mBot套件的所有硬件组件组装到了一个漂亮的机器人储物箱中。我非常高兴,至少直到进入软件方面为止。该套件可通过PC或使用应用程序进行编程。很快我发现我的文档存在一些问题,并且智能手机的软件版本不是最新的,因为该套件没有’当时已被释放。关于该软件的平板电脑版本,我不知道’没有平板电脑。 (是的,我不’t want a tablet!)
幸运的是,我知道机器人的大脑是基于Arduino Mega 2560的Me Auriga砖。作为Arduino风扇,我知道该怎么做。
计划是在库中搜索并找到使用Arduino草图控制机器人电机的引脚。经过几分钟的研究,我找到了控制两个直流电动机所需的引脚。使用超声波传感器要容易得多。我使用Makeblock库读取距离。
想法是对机器人油箱进行编程以检测障碍物,当传感器检测到一个或多个障碍物时,机器人会右转直到传感器不再检测到任何障碍物。
这是Arduino草图,也是我使用mBot Ranger套件的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | / ** * @文件 mBot Ranger自主模式 * @作者 IntoRobotics.com * @版本 V1.1 * @日期 2016/05/13 * @说明 此文件是mBot Ranger套件的示例代码 * / #包括"MeAuriga.h" #包括<SoftwareSerial.h> 超声波传感器 超感测器(PORT_7); //超声波模块 整型 distanceLimit=50; //我们要ping的最大距离(以厘米为单位)。 整型 最大功率=255; 整型 半Pwm=200; 整型 转Pwm=150; 整型 d=500; 整型 frontDistance; //左马达 const 整型 pwmMotor1 = 11; const 整型 inMotor1_1 = 49; const 整型 inMotor1_2 = 48; //向右行驶 const 整型 pwmMotor2 = 10; const 整型 inMotor2_1 = 47; const 整型 inMotor2_2 = 46; 虚空 设定() { 序列号.开始(9600); pinMode(pwmMotor1,输出值); //我们必须将PWM引脚设置为输出 pinMode(inMotor1_1,输出值); //逻辑引脚也设置为输出 pinMode(inMotor1_2,输出值); pinMode(pwmMotor2,输出值); //我们必须将PWM引脚设置为输出 pinMode(inMotor2_1,输出值); //逻辑引脚也设置为输出 pinMode(inMotor2_2,输出值); } 虚空 循环() { GetFrontDistance(); //以厘米为单位获取超声波距离 如果(frontDistance>=distanceLimit){ 全速模式(); //机器人处于全速模式 } 其他 { 减缓速度(); //降低机器人的速度 停止(); //停止机器人 做 { 右转(); 延迟(200); //等待传感器稳定 GetFrontDistance(); //以厘米为单位获取超声波距离 } 而(frontDistance<distanceLimit); } } 整型 GetFrontDistance(){ frontDistance=超感测器.距离Cm(); 序列号.打印(“前距(以厘米为单位)是:”); //用于调试 序列号.打印(frontDistance); 返回 frontDistance; } 虚空 全速模式(){ digitalWrite(inMotor1_1, 高); digitalWrite(inMotor1_2, 低); AnalogWrite(pwmMotor1,最大功率); digitalWrite(inMotor2_1, 低); digitalWrite(inMotor2_2, 高); AnalogWrite(pwmMotor2,最大功率); 序列号.打印(“全速模式”); //用于调试 } 虚空 减缓速度(){ digitalWrite(inMotor1_1, 高); digitalWrite(inMotor1_2, 低); AnalogWrite(pwmMotor1,半Pwm);//通过PWM设置速度 digitalWrite(inMotor2_1, 低); digitalWrite(inMotor2_2, 高); AnalogWrite(pwmMotor2,半Pwm);//通过PWM设置速度 序列号.打印(“降低速度”); //用于调试 延迟(d); } 虚空 停止(){ AnalogWrite(pwmMotor1, 0); AnalogWrite(pwmMotor2, 0); 序列号.打印(“停止”); 延迟(d); } 虚空 右转(){ digitalWrite(inMotor1_1, 高); digitalWrite(inMotor1_2, 低); AnalogWrite(pwmMotor1,转Pwm);//通过PWM设置速度 digitalWrite(inMotor2_1, 高); digitalWrite(inMotor2_2, 低); AnalogWrite(pwmMotor2,转Pwm);//通过PWM设置速度 序列号.打印(“向右转机器人”); //用于调试 } |
Makeblock mBot Ranger套件自主模式
嗨!
我已经阅读了您的博客,对此印象深刻。我正在尝试使用mBot Ranger做类似的事情。您能和我分享一下您如何找出使用Arduino草图控制机器人电机的引脚吗?
亲切的问候。
你好
一切都在代码中,而不是布线中。
嗨!
感谢您的及时答复。我想我可能不太清楚我的问题。以下是代码片段:
//左马达
const 整型 pwmMotor1 = 11;
const 整型 inMotor1_1 = 49;
const 整型 inMotor1_2 = 48;
//向右行驶
const 整型 pwmMotor2 = 10;
const 整型 inMotor2_1 = 47;
const 整型 inMotor2_2 = 46;
在此代码片段中,您正在初始化引脚。我的问题是:您如何确定电机与MeAuriga板上的哪个引脚相连?
我希望我现在更有意义。再一次谢谢你。
你好
好吧,现在我明白了这个问题-
我看了看图书馆。在这里,您可以找到有关引脚等的更多详细信息。
我已经在文章中写道:“计划是在库中搜索并找到使用Arduino草图控制机器人电机的引脚。”
嗨!
我运行了这段代码,但遇到了最奇怪的问题。我想问一下您,因为您在使用mBot Ranger和arduino方面有丰富的经验。当我将此代码上传到Auriga开发板并且该bot仍旧保存在计算机上时,它一直在正常运行。但是,当我取下电缆时,一旦超声波传感器感应到墙壁,电动机就会稍微移动然后停止并继续执行此操作。关闭并重新打开mBot没什么区别。我也更换了电池,但问题仍然存在。你能告诉我我做错了吗?
亲切的问候
你好
我也有这个问题,但我使用新电池解决了。经过几次充电/放电循环后,电池容量下降。
你好,
I’我只是想让我的马达在mBot游侠上移动。一世’通过读取固件,可以成功地从传感器读取内容。但是,我’我被电机卡住了:我’我尝试了很多事情–包括上面的例子–但可惜-没有任何动作。
该代码执行正常,没有错误。我认为引脚号可能不适合我的电路板。您如何找到主板的引脚?当我查看mBot的固件代码时,会看到SLOT_1和SLOT_2之类的东西,而不是硬编码的数字。
关于如何确保我的针脚正确的任何想法吗?
你好,
请查看库。您可以在此处找到有关引脚的详细信息。
//github.com/Makeblock-official/Makeblock-Libraries
你好
您能更准确地告诉我我在图书馆中寻找什么吗?我应该在哪里找到这些别针? (一世’是arduino的新手,所有与它有关的东西’在Google上关于mBots(Ranger)的混乱。
首先,我尝试使用MakeBlock中的库通过Arduino IDE对机器人进行编程。但是我可以’设法使用motor.run()启动电动机。我尝试对电动机进行各种地址处理(MeDCMotor名称(9)或MeDCMotor名称(Slot_1)或MeDCMotor名称(M1)等),但没有任何效果。我真的认为’这与电机的地址处理有关,因为我的代码可以完美地编译。但是您的方法有效,’是我的机器人上唯一可用的代码。
另外,我尝试了与互联网不同的示例,这些示例也使用这些库,但这些都没有用。它’在Google上寻找答案很费劲,因为80%的结果与mBlock应用程序有关,而不与Arduino IDE有关。
Multumesc!
嗨,伊曼纽尔,
“您能更准确地告诉我我在图书馆中寻找什么吗?我应该在哪里找到这些别针?” –首先,您必须知道您使用哪种类型的板’re using – Auriga, MegaPi,…?
根据要从Arduino IDE控制的内容(传感器,电机),您必须在以下文件中找到合适的引脚: //github.com/Makeblock-official/Makeblock-Libraries/tree/master/makeblock/src
通常,引脚号位于文件的开头。
“I really think there’这与电机的地址处理有关,因为我的代码可以完美地编译。但是您的方法有效,’是我的机器人上唯一可用的代码。” –很可能你不知道’t控制正确的引脚。
铜胎-
你好,我们又见面了!这将是一个更长的消息,但是如果您不愿意,可以忽略它,我将完全理解。我没有’甚至期望我回答第一个,因为它’一个2岁的职位。
太好了,我’我有一个Auriga板。您的代码正在运行。我还在底部的/meauriga.h中找到了相同的引脚,但是如果我必须搜索其他引脚(未像meauriga.h中明确指定),我想我会迷路的。
我浏览了图书馆的书面代码,’t yet figured why it’不能使用其库和功能,而且板子类型不起作用’确实很重要,因为每种类型的电路板都使用相同的MeDCmotor文件。也许我’尝试用另一个构造函数调用meDCmotor’我给引脚指定了参数,但是我看到它们在参数列表中只有1个引脚作为方向,据我所知,每个电机我需要2个引脚。最好的决定是坚持您的方法。
关键是我们有一个学校项目,我选择了mbot Ranger。作为首要任务,我们的老师说要对机器人进行如下控制循环:我给他设定速度,如果机器人开始上坡或下坡,则必须保持相同的速度。
在我看来,编码器和电机是分开的两部分,所以我的方法是这样的:我为电机设置了一个速度,如果从编码器读取的速度低于设置为电机的速度,则说明机器人是攀爬,我需要提高速度。 (就像我在电动机上施加5伏特的电压一样,它以5 m / s的速度运行,但是如果我继续以5伏特的功率供电,并且速度降低,那一定是因为’攀爬或其他障碍)。
无论如何。我发现我可以’真的做到了。我不’认为我什至可以同时设置和读取编码器,因为我使用并设置了引脚作为输出。我还注意到在库中的getSpeed()函数中,它没有’t实际上是从硬件读取的,但它是从我先前设置的值读取的)。
我应该使用内置陀螺仪吗?一世’m afraid that I’会解决与电动机相同的问题,也许我赢了’无法正确找到和配置引脚。一世’当我再次使用机器人时,请立即尝试一下(大学大楼内只有少数几个用途)。
Multumesc din nou。允许终极裁判,哈哈! O zi faina!
你好
好吧,您想用PWM和编码器控制机器人。我没有’不要这样尝试,说实话,我没有’不知道该怎么做。也许您必须尝试与制造商联系以使您可以访问代码。
附注:达卡·德·波阿朱塔(Daca Te Pot Ajuta),古拉·德拉奥利坎德(cari mare drag oricand)!
问候,
德拉戈斯
我需要mblock代码,以便可以通过我的移动应用或遥控器进行控制,以将其直接左右移动
我正在建立一个由我的移动应用程序控制的相扑机器人
它具有超声波传感器,线路跟随器和蓝牙。
它具有四个马达端口1具有右前马达端口2具有左前马达,而part3具有右后马达,端口4具有左后马达
我发现在大多数情况下,mbot文档不佳甚至根本不存在,令人难以置信的是,每个支持此类信息的请求都只是将我指向了源代码,而该源代码几乎为零文档,因此我开始为Ranger创建此文档。 :
//docs.google.com/document/d/1EpMWJo9pP2J_pstzXA-XHK8t00Z70SCZYwZ_Kl7VLuw/
它基于另一个mbot用户创建的此文档以及其他在线资源(但MakeBlock很少)。希望它会帮助别人。