摘要:本文介绍用ESP32的GPIO控制智能小车朝各个方向运动
在前面已经实现了用ESP32开发板控制单个车轮正反向旋转。接下来就是同时控制4个轮子转动,让整个智能小车动起来了。
说干就干,第一步还是初始化8个GPIO引脚,将这8个引脚的初始状态都设置为低电平。配置好了以后,如下图所示:
在实现4轮同时运动之前,现根据我前面的接线表格,看一下各个引脚的状态与车轮转动方向的关系,然后根据这个关系,就可以轻松的控制车轮的转动方向了。
车轮 | GPIO状态组合 | 车轮转动方向 | |
左前轮 | P26 | P27 | |
高 | 低 | 向前 | |
低 | 高 | 向后 | |
左后轮 | P32 | P33 | |
高 | 低 | 向前 | |
低 | 高 | 向后 | |
右前轮 | P25 | P23 | |
高 | 低 | 向后 | |
低 | 高 | 向前 | |
右后轮 | P22 | P21 | |
高 | 低 | 向后 | |
低 | 高 | 向前 |
如果你使用的GPIO引脚与我的不一致,或者接线方法不同,那么最好也按照我这个表格列一下你的各个轮子前后运动的控制状态是怎样的。有了这张表,将为你后边的开发带来极大的方便。
接下来是实现小车向前走3秒,然后再停下来的动作。之前一个轮子转动的控制我们已经学会了,控制4个轮子向前走,就是将这四个轮子向前走的GPIO引脚都设置成高电平,让四个轮子同时转起来就可以了。3秒之后,再将这几个引脚恢复到低电平,小车就停下来了。通过上面的表格可以查询出来,如果需要4个轮子向前运动,那么需要将P26、P32、P23和P21这几个GPIO设置为高电平,设置好后如下图所示。
设置好之后,就可以编译、上传了,看看你的小车是不是可以向前走3秒、停3秒,再向前走3秒、停3秒……了吧。这一系列动作所对应的源代码如下,相信不需要我的解释,你也能看懂了。
void setup(){ ??pinMode(26, OUTPUT); ??pinMode(27, OUTPUT); ??pinMode(32, OUTPUT); ??pinMode(33, OUTPUT); ??pinMode(25, OUTPUT); ??pinMode(23, OUTPUT); ??pinMode(22, OUTPUT); ??pinMode(21, OUTPUT); ??digitalWrite(26,LOW); ??digitalWrite(27,LOW); ??digitalWrite(32,LOW); ??digitalWrite(33,LOW); ??digitalWrite(25,LOW); ??digitalWrite(23,LOW); ??digitalWrite(22,LOW); ??digitalWrite(21,LOW); } void loop(){ ??digitalWrite(26,HIGH); ??digitalWrite(32,HIGH); ??digitalWrite(23,HIGH); ??digitalWrite(21,HIGH); ??delay(3000); ??digitalWrite(26,LOW); ??digitalWrite(32,LOW); ??digitalWrite(23,LOW); ??digitalWrite(21,LOW); ??delay(3000); } |
在前面讲解麦克纳姆论的时候,已经列举了一些麦克纳姆轮实现小车不同运动的方式。接下来我再给大家详细的总结一下车轮转动方向与小车运动方向的关系,需要说明的是,要确保运动的车轮是等速的,才可能实现表中的运动模式。
左前轮 | 右前轮 | 左后轮 | 右后轮 | 小车运动方向 |
向前 | 向前 | 向前 | 向前 | 正前方 |
向后 | 向后 | 向后 | 向后 | 正后方 |
向后 | 向前 | 向前 | 向后 | 正左方 |
向前 | 向后 | 向后 | 向前 | 正右方 |
向前 | 向后 | 向前 | 向后 | 原地掉头(右) |
向后 | 向前 | 向后 | 向前 | 原地掉头(左) |
向前 | 停止 | 停止 | 向前 | 右前方 |
向后 | 停止 | 停止 | 向后 | 左后方 |
停止 | 向前 | 向前 | 停止 | 左前方 |
停止 | 向后 | 向后 | 停止 | 右后方 |
向前 | 停止 | 向前 | 停止 | 向前右转1 |
停止 | 向前 | 停止 | 向前 | 向前左转1 |
向后 | 停止 | 向后 | 停止 | 向右后转1 |
停止 | 向后 | 停止 | 向后 | 向左后转1 |
向前 | 向后 | 停止 | 停止 | 向前右转2 |
向后 | 向前 | 停止 | 停止 | 向前左转2 |
停止 | 停止 | 向后 | 向前 | 向右后转2 |
停止 | 停止 | 向前 | 向后 | 向左后转2 |
大家可以看到表中有两个向前右转,这两个的区别就是转动的圆心不同,一个圆心在右后车轮,一个圆心在后轴的中心位置。大家可以尝试一些,看看能不能感受到这细微的差别。
好了,有了这张表,相信大家可以很快的实现麦克纳姆轮小车的各种运动了。
估计大家在实验的过程中,已经发现,使用Mixly的图形拖拽的模式进行开发确实很简单,很容易上手掌握。但在开发的时候,却又是非常复杂的,一个简单的动作就需要拖拽好多次的控件来实现,而且有很多类似的功能要设置很多次。这是有Mixly的开发方式决定的,这种图形化的开发方式,就决定了,它不能实现特别复杂的业务逻辑,对函数、循环等基本功能的支持也非常的有限。因此,下一步我们会逐渐的转向使用代码进行复杂功能的开发,而Mixly可以用于实现简单功能的验证,Mixly对单一简单功能的使用,还是很方便的。所以,我们会穿插使用2种开发方法,逐步引导大家转向面向代码的开发。