# 机器人基础--点亮一盏灯

想一想你如何让你房间里的灯闪烁起来?只需要不断地打开和关闭开关对吗?如果想让灯闪烁一整个下午呢?我们今天要学习,用程序自动不断地控制开关!

# 情景分析

  1. 灯一般有两根线,一根接电池的正极,一根接电池的负极,灯就会亮起来。在其中一根线中间加入一个开关,通过开关控制线路通或者不通,就可以控制灯的亮和灭。

  2. 机器人的控制器上有一个LED灯已经预布置好了线路,并且将开关连接到芯片的13号端口上。只需要控制该端口输出高电平,开关就会打开,LED灯就会亮起来。输出低电平,开关就会关闭,LED灯就会熄灭。13号端口是一个数字端口,数字端口许多种工作模式,现在我们需要用到其中一种:输出模式。在输出模式中,端口只能输出高电平,或者低电平,也必须是这两种中的一种。配置为输出模式之后,我们要不停地切换这个端口的电平,过一会儿高电平,再过一会儿低电平。

  3. 配置端口工作模式的指令是pinMode(pin,mode)pin表示要设置的端口,mode表示模式,对于输出模式,应该填入OUTPUT。对应积木

  4. 设置数字端口电平的指令是digitalWrite(pin,value),其中value可以选择LOW或者HIGH,代表低电平或者高电平,也可以用数字0来表示低电平,其他数字表示高电平。对应积木

  5. 使用指令delay(ms)可以让程序暂停,ms为暂停多长时间(毫秒)。对应积木

# 流程解析

  1. 控制器开机后,使用pinMode(13,OUTPUT)指令来配置13号端口为输出模式。
  2. 使用digitalWrite(13,HIGH)指令来设置13号端口输出高电平,LED灯亮。
  3. 使用delay(1000)指令来暂停1000毫秒(1秒钟),来维持LED灯亮的时间。
  4. 使用digitalWrite(13,LOW)指令来设置13号端口输出低电平,LED灯灭,同样要暂停来维持。
  5. loop循环结束,后会再次进入loop重复执行步骤2到步骤4。
uml diagram

# 参考程序

  • oseppBlock IDE 程序

  • Arduino IDE 程序
void setup() {
    pinMode(13, OUTPUT);  //配置13号端口为输出模式
}

void loop() {
    digitalWrite(13, HIGH);  //设置端口输出高电平
    delay(1000);             //灯亮后,等待1秒钟(1秒钟等于1000毫秒)
    digitalWrite(13, LOW);   //设置端口输出低电平
    delay(1000);             //同样,灯灭后也等待1秒钟
}
1
2
3
4
5
6
7
8
9
10

# 运行结果

注意:让机器人悬空,马达有可能会意外转动(上传成功前,控制器会运行之前上传的程序)
接通电源,上传程序后,LED灯开始闪烁,交替地亮1秒钟,灭1秒钟。

# 课程解读

  1. 如果将暂停的时间改为500,100,1,最后去掉暂停指令,会看到什么现象?

    在程序中,如果没有暂停指令,那么loop函数执行的速度非常快。我们看到LED灯似乎没有熄灭,但是亮度降低了,我们会在下面的章节中介绍这种情况。1毫秒(将1秒钟分成1000份)对于控制器来说是很长的时间。经过用仪器测量,如果去掉暂停指令,1秒钟led灯闪烁约147100次。

  2. 数字端口可以用来输出高电平(相当于接到电池的正极)或者低电平(相当于接到电池的负极)。
  3. 控制器的端口能提供的电流很小,通常需要连接到电子开关,或者驱动模块来发挥作用。
  4. 在我们的控制器中,数字端口配置为输出模式后,就必须是高电平或者低电平。
  5. 代码中“//”后面的文字是注释,执行时会忽略掉。

# 拓展知识

  1. Arduino是一款便捷灵活、方便上手的开源电子原型平台。其中最常用的是Arduino UNO R3。我们的控制器UnoMax正是基于这个硬件专为机器人开发的控制板,在完全兼容Arduino Uno的基础上,拓展出芯片的端口和安装孔,方便传感器的连接和机器人组装。
    UnoMax与UnoR3一样,具有14个通用的数字端口

    • 配置为输出模式,能够控制端口输出高电平或者低电平。
    • 配置为输入模式,能够读取到端口上的电平(是高电平或者低电平)
    • 其中6个可以配置为PWM,可以非常高的速度反转电平
    • 8个模拟输入端口(其中6个可以作为数字端口使用)
    • 可以读取端口上的电压值,将从0V到电源电压表示为从0到1023的数字
  2. 什么是机器人?机器人是一种自动化的机器,能够依靠自身的感知,动力和控制能力完成某种任务。感知能力通常来源于传感器,动力通常为马达、舵机、气缸等,控制能力来源于控制器,它是机器人的大脑。

# oseppBlock操作视频

# ArduinoIDE操作视频