Mixly(米思齐)是一款图形化编程软件。用户可以通过拼接积木块的方式来编写程序。目前为止,Mixly已经支持Arduino,micropython,python等编程语言。
本套教程基于专为STEM教育(科学、技术、工程、数学)而设计的Blinkgogo车型机器人进行讲解。Blinkgogo mixly 米思奇Arduino 蓝牙小车 ←点击了解Blinkgogo
首先,我们需要先让小车动起来
如果我们想让电机前进,我们该怎么操作呢?
我们先从硬件线路看起,从Blink的底盘部可以看到:
motor A为右侧电机,motor B为左侧电机
右侧电机由端口5、10控制
左侧电机由端口6、11控制
在这套硬件中
端口5、6与电机正极相连接
端口10、11与电机负极相连接
当端口5、6的电压高于端口10、11时
形成正向电流
左、右电机正转,Blink前进
反之,形成反向电流
左、右电机倒转,Blink后退
电压相同时,无电流形成
左、右电机停转,Blink停止
那现在,假设我们想让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转向的探究
就留给大家课后去探索
我们将在下一节课,演示不同情景的转向。
附:
C语言源代码
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);
}