不会编程也可以玩转Arduino?Mixly(米思齐)图形化编程系列教程

乔海腾 创元素 2020年05月08日 12:54

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); }