从开源硬件到开源机器人应该怎样上手-教程一

如果说Helllo World是所有编程者牙牙学语的第一课,那么Blink(闪烁)和GoGo(跑起来)应该就是硬件编程和机器人编程的第一课,这就是产品名字的来历。本套入门教程共十篇,基于专为STEM教育(科学、技术、工程、数学)而设计的Blinkgogo车型机器人进行讲解。Blinkgogo mixly 米思奇Arduino 蓝牙小车  ←点击了解Blinkgogo

 

产品拆箱后,我们接下来需要将U盘里的东西拷贝到电脑上,然后打开Mixly或者Arduino进行编程。Mixly(米思齐)是一款基于Arduino的图形化编程软件。用户可以通过拼接积木块的方式来编写程序。按照产品附带的上手手册一即可使用范例程序,并下载完成后,你就可以开始尝试深入了解以便编写自己的程序了。

首先,我们需要先让小车动起来

如果我们想让电机前进,我们该怎么操作呢?

我们先从硬件线路看起,从Blink的底盘部可以看到:

从背面看,motor A为右侧电机,motor B为左侧电机

右侧电机由端口5、10控制

左侧电机由端口6、11控制

端口5、6与电机正向相连接

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

 

打赏

发表评论