如果说Helllo World是所有编程者牙牙学语的第一课,那么Blink(闪烁)和GoGo(跑起来)应该就是硬件编程和机器人编程的第一课,这就是产品名字的来历。本套入门教程共十篇,基于专为STEM教育(科学、技术、工程、数学)而设计的Blinkgogo车型机器人进行讲解。Blinkgogo mixly 米思奇Arduino 蓝牙小车 ←点击了解Blinkgogo
产品拆箱后,我们接下来需要将U盘里的东西拷贝到电脑上,然后打开Mixly或者Arduino进行编程。Mixly(米思齐)是一款基于Arduino的图形化编程软件。用户可以通过拼接积木块的方式来编写程序。按照产品附带的上手手册一即可使用范例程序,并下载完成后,你就可以开始尝试深入了解以便编写自己的程序了。
首先,我们需要先让小车动起来
如果我们想让电机前进,我们该怎么操作呢?
我们先从硬件线路看起,从Blink的底盘部可以看到:
从背面看,motor A为右侧电机,motor B为左侧电机
右侧电机由端口5、10控制
左侧电机由端口6、11控制
端口10、11与电机负向相连接
当端口5、6的电压高于端口10、11时,形成上图所示方向电流,左、右电机正转,Blinkgogo前进。反之,左、右电机倒转,Blinkgogo后。,电压相同时,无电流形成,左、右电机停转,Blinkgogo停止
那现在,假设我们想让Blink
全速向前前进2秒
再向后后退2秒
最后停止
在编程界面中,我们需要调用
"输入/输出"模块中的"数字输出"模块
和“控制”模块中的"延迟"模块来实现电机的运转
向前前进:
使用"数字输出"模块
设置端口5为高电平,端口10为低电平(右电机正转)
使用"数字输出"模块
设置端口6为高电平,端口11为低电平(左电机正转)
使用"延迟"模块
延迟2000毫秒(即持续2秒钟)
向后后退:
使用"数字输出"模块
设置端口5为低电平,端口10为高电平(右电机倒转)
使用"数字输出"模块
设置端口6为低电平,端口11为高电平(左电机倒转)
使用"延迟"模块
延迟2000毫秒(即持续2秒钟)
停止:
使用"数字输出"模块
设置端口5、6、10、11全为低电平(A、B电机停止)
现在进阶一下
如果我们想让Blink以特定速度前行或后退
我们该怎么做?
即,更改一下之前的任务:
现在我们想让Blink
以60%的速度向前前进2秒
再以60%的速度向后后退2秒
最后停止
我们需要调用"输入/输出"模块中的
"模拟输出"模块
来实现电机的调速
设置电机两极中一侧为低电平
一侧为特定的电压值
便可以实现给电机设定速度
电压值的数值设置通过“模拟输出”实现
模拟输出的数值范围为0~255
模拟输出赋值为255即为全速
我们需要60%的速度
则需要将另一端口赋值为60%*255=153。
向前前进:
使用"数字输出"模块,设置端口10为低电平
使用"模拟输出"模块,设置端口5为153
(右电机以60%速度正转)
使用"数字输出"模块,设置端口11为低电平
使用"模拟输出"模块,设置端口6为153
(左电机以60%速度正转)
使用"延迟"模块,延迟2000毫秒
(即持续2秒钟)
向后后退:
使用"数字输出"模块,设置端口5为低电平
使用"模拟输出"模块,设置端口10为153
(右电机以60%速度倒转)
使用"数字输出"模块,设置端口6为低电平
使用"模拟输出"模块,设置端口11为153
(左电机以60%速度倒转)
使用"延迟"模块,延迟2000毫秒
(即持续2秒钟)
停止:
使用"数字输出"模块
设置端口5、6、10、11全为低电平(A、B电机停止)
最后,我们来讲一下转向
Blink不像我们日常开的汽车有方向盘
可以通过调整转向盘转向
在Blink中,需要用左右电机的速度差来转向
如果右电机速度大于左电机速度,Blink会向左转
左电机速度大于右电机速度,Blink向右转
转弯半径的大小也由速度差的大小决定
要注意,如一侧电机设置为后退
在计算速度差的时候,速度值以负数计算哦
关于Blink转向的探究
就留给大家课后去探索
我们将在下一节,演示不同情景的转向。
附:Arduino源代码
void setup() { /* 11 10 | | |M| |M| | | 6 5 */ pinMode(5, OUTPUT); pinMode(10, OUTPUT); pinMode(6, OUTPUT); pinMode(11, OUTPUT); } void loop() { //前进 //5→10 digitalWrite(5,HIGH); digitalWrite(10,LOW); //6→11 digitalWrite(6,HIGH); digitalWrite(11,LOW); delay(2000); //后退 //10→5 digitalWrite(5,LOW); digitalWrite(10,HIGH); //11→6 digitalWrite(6,LOW); digitalWrite(11,HIGH); delay(2000); //停止 digitalWrite(5,LOW); digitalWrite(10,LOW); digitalWrite(6,LOW); digitalWrite(11,LOW); delay(2000); //前进 //5→10 digitalWrite(10,LOW); analogWrite(5,153); //6→11 digitalWrite(11,LOW); analogWrite(6,153); delay(2000); //后退 //10→5 digitalWrite(5,LOW); analogWrite(10,153); //11→6 digitalWrite(6,LOW); analogWrite(11,153); delay(2000); //停止 digitalWrite(5,LOW); digitalWrite(10,LOW); digitalWrite(6,LOW); digitalWrite(11,LOW); delay(2000); }