platinumwebsite.topplatinumwebsite.top/word.docx  · web view环境监测小车研究报告...

41
环环环环环环环环环环 ——环环 XBEE 环环环环 环环环| 环环环环 | 2018·10·20

Upload: others

Post on 02-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

环境监测小车研究报告——采用 XBEE 无线控制

相博今| 研究报告 | 2018·10·20

Page 2: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

目录一、研究背景.................................................................................................2

主要内容.................................................................................................2

单片机....................................................................................................2

ARDUINO.............................................................................................3

辅助资料.................................................................................................3

二、研究准备.................................................................................................5

主要内容.................................................................................................5

项目部件.................................................................................................5

开发设备&环境........................................................................................6

研究目的.................................................................................................6

三、研究过程(代码原理分析)........................................................................7

主要内容.................................................................................................7

管脚说明.................................................................................................7

移动机构(手动方向控制与自动避障)........................................................7

手动方向控制.....................................................................................7

自动避障...........................................................................................9

模拟量检测............................................................................................11

表情与声音系统......................................................................................15

表情面板.........................................................................................16

声音系统.........................................................................................19

XBee 无线远程控制................................................................................20

图像识别系统.........................................................................................22

四、应用及优点............................................................................................22

第 1 页

Page 3: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

应用范围...............................................................................................22

优点及创新点.........................................................................................22

五、单片机前景............................................................................................23

附录 代码总览..............................................................................................24

主要内容...............................................................................................24

机器小车部分.........................................................................................24

控制面板部分.........................................................................................36

图像识别部分.........................................................................................39

一、研究背景主要内容

− 单片机的定义− Arduino 的定义− Arduino 辅助资料

单片机单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 CPU、随机存储器 RAM、只读存储器 ROM、多种I/O 口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪 80 年代,由当时的 4 位、8 位单片机,发展到现在的 300M 的高速单片机。此次,我们以当下较为热门的单片机 Arduino 为例,深入开发研究单片机的作用,挖掘其潜在价值。ARDUINO

Arduino 是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino 板)和软件(Arduino IDE)。由一个欧洲开发团队于 2005 年冬季开发。其

第 2 页

Page 4: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

成员包括 Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis 和 Nicholas Zambetti 等。它构建于开放原始码 simple I/O 介面版,并且具有使用类似 Java、C 语言的Processing/Wiring 开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的 Arduino 电路板;另外一个则是 Arduino IDE,你的计算机中的程序开发环境。你只要在 IDE 中编写程序代码,将程序上传到 Arduino 电路板后,程序便会告诉Arduino 电路板要做些什么了。Arduino 能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过 Arduino 的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino 的编程是通过 Arduino编程语言 (基于 Wiring)和 Arduino 开发环境(基于 Processing)来实现的。基于 Arduino 的项目,可以只包含 Arduino,也可以包含 Arduino 和其他一些在 PC 上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。辅助资料下面是 Arduino官网对Arduino 开发板的一些介绍:Arduino is an open-source electronics platform based on easy-to-use hardware and software. Arduino boards are able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output - activating a motor, turning on an LED, publishing something online. You can tell your board what to do by sending a set of instructions to the microcontroller on the board. To do so you use the Arduino programming language (based on Wiring), and the Arduino Software (IDE), based on Processing.

Over the years Arduino has been the brain of thousands of projects, from everyday objects to complex scientific instruments. A worldwide community of makers - students, hobbyists, artists, programmers, and professionals - has gathered around this open-source platform, their contributions have added up to an incredible amount of accessible knowledge that can be of great help to novices and experts alike.

Arduino was born at the Ivrea Interaction Design Institute as an easy tool for fast prototyping, aimed at students without a background in electronics and programming. As soon as it reached a wider community, the Arduino board started changing to adapt to new needs and challenges, differentiating its offer from simple 8-bit boards to products for IoT applications, wearable, 3D printing, and embedded environments. All Arduino boards are completely open-source, empowering users to build them independently and eventually adapt them to their particular needs. The software, too, is open-source, and it is growing through the contributions of users worldwide.

第 3 页

Page 5: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

Arduino UNO引脚图:

二、研究准备主要内容

− 项目部件的准备− 开发设备和开发环境− 研究的主要目的

项目部件 DFROBOT Romeo BLE 多合一控制器*1

XBEE PRO S2C 63mW 无线网络模块*2

XBee USB 适配器*1

IO 传感器扩展板*1

URM37 V4.0 超声波测距模块*1

第 4 页

Page 6: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

URM 超声波模块支架*1

Devastator 履带机器人移动平台*1

DSS-P05 5.1Kg 机器人专用舵机*2

全方位蜂巢云台*1

云台舵机支架套件*1

数字触摸开关*1

UART MP3 语音模块*1

无源音箱小喇叭 (8Ω3W)*1

数字蓝色 LED 发光模块*1

模拟 LM35 线性温度传感器*1

模拟环境光线传感器*1

模拟声音传感器*1

水分传感器*1

I2C 8×16 RGB LED 点阵表情板*1

Pixy 2 代 CMUcam5 开源图像识别传感器*1

Arduino UNO rev.3 开发板*1

输入扩展板*1

充电宝*1

电池座*2

电池若干 计算机 1 台

开发设备&环境主板:华硕 PRIME B350M-A

CPU:AMD Ryzen 3 1300X

GPU:AMD Radeon RX 560 Series

第 5 页

Page 7: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

操作系统:Windows 10 Professional Version 1803

集成开发环境:Arduino IDE 1.8.7 (Windows Store 1.8.15.0)、Visual Studio Community 2017 ver15.8.7

研究目的此次研究开发的主要目的在于探索单片机在生活中的实际应用,具体分为以下三个问题:1. 单片机在生活中的应用价值2. 如何制作一个基于 Arduino 开发板的简单环境监测装置(重点)3. 单片机的发展前景

三、研究过程(代码原理分析)主要内容此次我们开发了一台环境监测小车,以此作为主要研究对象,探究单片机在生活中的应用以及制作简易单片机装置的方法。管脚说明开发板的 0、1 管口用于 XBee 的无线通信,采用串口通信,以对小车发送指令与接收信息;2、3 管口用于 URM37 测距模块,采用 PWM 电平触发模式,以得到避障模式时需要的障碍物距离参数;4、5、6、7 管口分别是左右电机的方向和使能控制管口;8 管口用于触摸感应;9、10 管口用于控制两个舵机;11、12 管口模拟了一个软串口,用于与声音模块进行通信;13 管口对开发板板载 LED 开放,我另外并联了一个蓝色 LED装在小车上,用于返回响应信息;A0~A3 模拟管脚分别安装了 LM35 模拟线性温度传感器、模拟环境光线传感器、模拟声音传感器、水分传感器模块。

第 6 页

Page 8: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

LED 点阵表情面板走的是 IIC 总线,Pixy 2 图像识别传感器走的是 ICSP。移动机构(手动方向控制与自动避障)用到的硬件:Romeo 开发板自带的电机驱动板、双路直流电机、XBee 无线数传、URM37 V4.0 超声波测距模块。手动方向控制通过 XBee 在两台单片机之间建立连接,Arduino UNO 上的输入扩展板得到方向信息后,由 XBee映射到小车开发板上,使小车上的电机驱动板输出电机运行信息。代码如下:#define motor1Direction 4//Declare two motor direction controlling pins.#define motor2Direction 7#define motor1Power 5//Declare two motor power controlling pins.#define motor2Power 6bool walking = false; //Declare a walking value to judge whether the robot is walking or not.这里定义了左右电机的方向和使能控制管口,walking变量用于判断小车电机是否在运行。void stopMotor(void) {  digitalWrite(motor1Power, LOW);  digitalWrite(motor2Power, LOW);}

void goAhead(byte left, byte right) {  digitalWrite(motor1Direction, HIGH);  digitalWrite(motor2Direction, HIGH);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}

void retreat(byte left, byte right) {  digitalWrite(motor1Direction, LOW);  digitalWrite(motor2Direction, LOW);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}

void turnLeft(byte left, byte right) {  digitalWrite(motor1Direction, LOW);  digitalWrite(motor2Direction, HIGH);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);

第 7 页

Page 9: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

}

void turnRight(byte left, byte right) {  digitalWrite(motor1Direction, HIGH);  digitalWrite(motor2Direction, LOW);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}整合了管口控制方案的几个函数。 int pin;  for (pin = 4; pin < 8; pin++) {    pinMode(pin, OUTPUT);  }这里的代码在 setup函数里,用于开放左右电机的方向和使能控制管口。     case '0':        stopMotor();        walking = false;        break;      case '1':        walking = true;        goAhead(255, 255);        break;      case '2':        walking = true;        retreat(255, 255);        break;      case '3':        walking = true;        turnLeft(255, 255);        break;      case '4':        walking = true;        turnRight(255, 255);        break;这里的代码在 loop函数中的 switch 语句里,用于对XBee传来的指令做出响应。同时对walking变量进行操作。自动避障当无人控制时,小车上的超声波测距模块能够返回前方障碍物的距离信息,当障碍物太近时,开发板控制电机驱动板驱动电机后退并转向。代码如下:

第 8 页

Page 10: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

byte randomDirection;//Declare a random direction value for random avoidance direction.这里定义了一个保存随机方向的变量。#define distanceSensorTriq 2//Declare a distance sensor triq pin to send measurement request.#define distanceSensorEcho 3//Declare a distance sensor echo pin to receive measurement value.unsigned int distance;//Declare a distance value to save distance measurement value.这里定义了URM37 测距模块的两个 IO 管口和用于保存距离值的变量。void avoidance(boolean avoidanceDirection) {  while (!Serial.available()) {    distance = getDistance();    if (distance > 20 && distance < 50) {      if (avoidanceDirection) turnLeft(255, 255);      else turnRight(255, 255);      emoticonPanel.display(3, BLUE);      delay(1000);    }    else if (distance != 0 && distance < 20) {      retreat(255, 255);      emoticonPanel.display(0, BLUE);    }    else {      goAhead(255, 255);      emoticonPanel.display(8, BLUE);    }    delay(50);  }}整合了管口控制方案的避障函数。unsigned int getDistance(void) {  digitalWrite(distanceSensorTriq, LOW);  digitalWrite(distanceSensorTriq, HIGH);  return pulseIn(distanceSensorEcho, LOW, 50000) / 50;}getDistance函数用于获取URM37 测距模块返回的距离参数。 randomSeed(analogRead(5)); // randomize using noise from analog pin 5.这里的代码在 setup函数里,用于获取一个随机方向。 pinMode(distanceSensorTriq, OUTPUT);

第 9 页

Page 11: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

 digitalWrite(distanceSensorTriq, HIGH);  pinMode(distanceSensorEcho, INPUT);同样在 setup函数中,用于开放 URM37 测距模块的两个 IO 管口。     case '5':        walking = true;        randomDirection = random(2);        if (randomDirection == 0) {          avoidance(false);        }        else {          avoidance(true);        }        break;这里的代码在 loop函数中的 switch 语句里,用于对XBee传来的指令做出响应。同时对walking变量进行操作。模拟量检测用到的硬件:XBee 无线数传、LM35 模拟线性温度传感器、模拟环境光线传感器、模拟声音传感器、水分传感器模块。当电机不工作时,小车会不断检测各种模拟量并返回给表情面板和计算机(若已连接)。遥控杆或计算机发送的评估请求通过 XBee传输到小车开发板,开发板判断当前值的大小并给予反馈。代码如下:#include <Metro.h> //Include Metro library.调用 Metro 计时库。#define distanceSensorTriq 2//Declare a distance sensor triq pin to send measurement request.#define distanceSensorEcho 3//Declare a distance sensor echo pin to receive measurement value.unsigned int distance;//Declare a distance value to save distance measurement value.#define temperatureSensorPin A0#define lightSensorPin A1#define soundSensorPin A2#define steamSensorPin A3int temperature;int light;int sound;int steam;各传感器的管脚声明和用于保存传感器数值的变量的定义。

第 10 页

Page 12: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

Metro sensorMetro = Metro(1000);使用 Metro库,每 1000ms触发一次。unsigned int getDistance(void) {  digitalWrite(distanceSensorTriq, LOW);  digitalWrite(distanceSensorTriq, HIGH);  return pulseIn(distanceSensorEcho, LOW, 50000) / 50;}上面已经提到过,用于获取距离参数。 pinMode(distanceSensorTriq, OUTPUT);  digitalWrite(distanceSensorTriq, HIGH);  pinMode(distanceSensorEcho, INPUT);同样已经提过,URM37 测距模块管口初始化。     case 'A':        if (emoticonPanelState != '0')emoticonPanelState--;        else emoticonPanelState = '5';        break;      case 'B':        if (emoticonPanelState != '5')emoticonPanelState++;        else emoticonPanelState = '0';        break;在 loop函数中的 switch 语句里,用于修改表情面板当前显示值。     case 'Y':        switch (emoticonPanelState) {          case '2':            if (temperature > 30) {              specifyTrack(0x11);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else if (temperature < 10) {              specifyTrack(0x12);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }

第 11 页

Page 13: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

           else {              specifyTrack(0x13);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;          case '3':            if (light > 500) {              specifyTrack(0x14);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else {              specifyTrack(0x15);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;          case '4':            if (sound > 100) {              specifyTrack(0x16);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else {              specifyTrack(0x17);              emoticonPanel.display(8, BLUE);              upServo.write(120);

第 12 页

Page 14: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

             delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;          case '5':            if (steam > 100) {              specifyTrack(0x18);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else {              specifyTrack(0x19);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;        }同样在 loop函数中的 switch 语句里,用于对当前模拟量大小的判断与反馈。   if (sensorMetro.check()) {      unsigned int preDistance = getDistance();      if (preDistance != 0)distance = preDistance;      delay(10);      temperature = analogRead(temperatureSensorPin) * 5 / 10.24;      delay(10);      light = analogRead(lightSensorPin);      delay(10);      sound = analogRead(soundSensorPin);      delay(10);      steam = analogRead(steamSensorPin);      delay(10);      Serial.print("Sensor infomation   ");      Serial.print("Distance:");      Serial.print(distance);      Serial.print("cm   ");

第 13 页

Page 15: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

     delay(10);      Serial.print("Temperature:");      Serial.print(temperature);      Serial.print("C   ");      delay(10);      Serial.print("Light:");      Serial.print(light);      delay(10);      Serial.print("   Sound:");      Serial.print(sound);      delay(10);      Serial.print("   Steam:");      Serial.println(steam);      delay(10);    }在 loop函数中,每隔 1000ms触发一次模拟量测量,将值通过串口输出。表情与声音系统用到的硬件:I2C 8×16 RGB LED 点阵表情板、UART MP3 语音模块、无源音箱。表情面板在不同的运行状态下,表情面板会发出各种表情,指示小车目前的状态;在检测模拟量的时候,表情面板还可以同步输出模拟量的值,使用者无需使用计算机便能直接读出信息。

第 14 页

Page 16: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

第 15 页

Page 17: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

第 16 页

Page 18: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

代码如下:#include <Wire.h>//Using IIC bus.#include <DFRobot_RGBPanel.h>//A side load library for emoticon panel.调用表情面板专有的 DFRobot_RGBPanel库,该库基于 Wire库。DFRobot_RGBPanel emoticonPanel;//Declare emoticon panel namespace.char emoticonPanelState = '0'; //Declare a state value for panel display.创建 emotionPanel对象,定义表情面板当前显示值变量。 emoticonPanel.scroll(Left); emoticonPanel.print("Welcome", BLUE); emoticonPanel.scroll(None);在 setup函数中,开机滚动显示“Welcome”字样。其他表情面板的使用散落在代码各个角落,这里不一一列举,更多信息请翻阅附录。声音系统同样是辅助输出的功能。开机时声音系统会播放启动铃声,当输出模拟量时会对模拟量进行一个评估并通过声音系统输出。

第 17 页

Page 19: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

代码如下:#include <SoftwareSerial.h>//Need another serial for voice module.因开发板原生串口管脚被XBee占用,所以要模拟一个软串口给UART MP3 语音模块。SoftwareSerial voiceModule(11, 12);//Set up a software serial for voice module.unsigned char previousTrack[4] = {0xAA, 0x05, 0x00, 0xAF};//Declare previous track command.unsigned char nextTrack[4] = {0xAA, 0x06, 0x00, 0xB0};//Declare next track command.将软串口分配给声音模块,同时定义“上一曲”、“下一曲”命令的数组常量。void specifyTrack(unsigned char Track) {  unsigned char specifiedTrack[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3};  voiceModule.write(specifiedTrack, 6);}一个选择音频的函数。void volumeAdjustment(unsigned char volume) {  unsigned char volumeLevel[5] = {0xAA, 0x13, 0x01, volume, volume + 0xBE};  voiceModule.write(volumeLevel, 5);}调整音量的函数,先计算某个音量对应的命令数组,然后发送给声音模块。 voiceModule.begin(9600);  volumeAdjustment(0x1E);在 setup函数中,开放声音模块软串口并给予初始音量值。 specifyTrack(0x1A);同样是在 setup函数中,播放开机 BGM。像表情面板一样,声音系统的使用也散落在各个角落,这里同样不列举,请查询附录获取详细信息。

XBEE 无线远程控制用到的硬件:XBEE PRO S2C 63mW 无线网络模块 *2

无线通信采用了Digi国际的 XBee 模块,这在国内都是少有的。XBee 是 Digi国际的一套完善的 ZigBee物联网通信解决方案,同时也是 Arduino官方推荐的无线通信方案,但是在国内 XBee因难以配对和使用、没有好的教师和完善的教程、价格极其高

第 18 页

Page 20: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

昂等诸多弊端,没有被广大国内创客所使用。相反,简单易用、价格低廉的蓝牙、Wi-Fi、APC220 无线数传等无线通信设备则受到了国内创客的青睐。然而,简单的无线通信终究会在性能方面败北。就拿我们使用的 XBee Pro S2C 来说,它有着室内 90米、室外 3200米的超远传输距离、UART1Mb/s、SPI5Mb/s极高速率和-40~85℃工业级别的工作温度。这是其他无线设备根本无法比拟的。

第 19 页

Page 21: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

代码如下: Serial.begin(9600);

第 20 页

Page 22: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

将开发板的串口开放给XBee。由于 XBee 的输入是控制量,因此每个需要人为操作或数据输出的地方都有 XBee 代码的身影。与其说是 XBee 代码,不如说是直接操作串口的代码,因为 XBee 与单片机串口无缝连接。详细信息请翻阅附录,有 Serial关键字的地方都是在使用 XBee 无线数传。图像识别系统用到的硬件:Pixy 2 图像识别传感器。Pixy 是一款在全球极受欢迎的开源视觉传感器(图像识别传感器),这款 Pixy2 是该系列的第二代版本。它能够让图像识别变得更容易,支持多物体识别,具有强大的多色彩颜色识别及色块追踪能力(最高支持 7 种颜色),就像它的前身一样,Pixy2 只需按下一个按钮即可识别并记忆你教授的物体。同时,新版本增加线路追踪和小型条形码识别功能,较上一版本的 Pixy反应更快,体型更小,功能更强。Pixy 系列是联合Charmed实验室和卡内基-梅隆大学共同推出的图像识别系统。Pixy2 自带处理器,并搭载着一个图像传感器 CMUcam5,它通过其处理器内部的算法,以颜色为中心来处理图像数据,选择性地过滤无用信息,从而得到有效信息——这样一来 Pixy2 只需将已经处理过的特定颜色物体的数据发送给与之连接的微型控制器(例如Arduino)即可,而不必向控制器输入所有原始视觉信息,处理后得到的数据更精确有效。详细代码请翻阅附录“代码总览”中的“图像识别部分”。

四、应用及优点应用范围该装置可完全适应室内外环境监测,完全支持室内移动,部分支持室外环境的移动。可以在诸如“家庭环境监测”、“农场环境监测”等诸多领域得到应用。优点及创新点此装置与市面上的环境监测装置相比,有如下优点:1. 装有履带移动装置,可以进行移动监测;2. XBee 工业级数传设备,确保数据传输精度(且目前国内技术缺乏);3. 全部采用开源硬件,控制代码全部自制,定制性、可重写性高;4. 自制遥控杆,无需计算机帮助,直接控制小车;

第 21 页

Page 23: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

5. 原创表情与声音系统,将拟人化融入环境监测中,模拟量状态更直观;6. 内置显示面板与计算机显示双输出。

五、单片机前景单片机的市场潜力十分巨大,而且将来依然会越来越大。人们很少听说过单片机,殊不知单片机已经进入千家万户,融入到每个人的日常生活中去了。电子门锁、数字闹钟、电动牙刷、电动剃须刀,这些都是单片机在生活中的实际应用。大的方面来讲,用于公共场合的火灾控制系统、烟雾报警器,用于医疗装置的植入式心律转复除颤器、胃窥镜,这些设备中都有单片机的身影。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,从某种意义上来说,手机也算一种算力高、智能化、多功能的多输入多输出单片机。未来,单片机会朝着更低功耗、更高性能、更大容量的方向发展。单片机是物联网的基础,只有单片机将物品的模拟信号与电子信号相互转化,物联网技术才能真正控制各种物品,对其进行信息交换和通信。随着物联网技术的深入发展,单片机有望进入更多的物品当中去,为构建一个物物相连、物物相息的世界提供一种强有力的方式。参考资料:https://baike.baidu.com/item/%E5%8D%95%E7%89%87%E6%9C%BA/102396?fr=aladdin

https://baike.baidu.com/item/Arduino/9362389?fr=aladdin

https://www.arduino.cc/en/Guide/Introduction

http://forum.arduino.cc/index.php/topic,146315.0.html

http://www.dfrobot.com.cn/goods-1794.html

更多相关信息请访问网址:https://www.arduino.cc/

https://www.asus.com.cn/Motherboards/PRIME-B350M-A/

https://www.amd.com/zh-hans/products/cpu/amd-ryzen-3-1300x

https://gaming.radeon.com/en/rx500/rx-560/

https://www.microsoft.com/zh-cn/windows/

第 22 页

Page 24: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

也可以访问我的博客:http://www.platinumwebsite.top/

附录 代码总览主要内容

− 机器小车代码− 控制面板代码− 图像识别代码

机器小车部分/*****{robot}*****/

/*This sketch is for robot running.*//*For more information,click here:http://www.platinumwebsite.top/ */

/*  Check Table  0:stopMotor  1:goAhead  2:retreat  3:turnLeft  4:turnRight  5:avoidance  6:servoUp  7:servoDown  8:servoLeft  9:servoRight  A:prevSensor  B:nextSensor  X:introduction  Y:judge*/

#include <Servo.h>//Using servo.#include <Wire.h>//Using IIC bus.#include <Metro.h> //Include Metro library.#include <SoftwareSerial.h>//Need another serial for voice module.#include <DFRobot_RGBPanel.h>//A side load library for emoticon panel.

第 23 页

Page 25: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

/***<servoDeclare>***/Servo upServo;//Declare two servos.Servo downServo;#define upServoPin 9//Declare two servo pins.#define downServoPin 10int upServoValue = 90;//Declare and assign two initial servo degree value.int downServoValue = 90;/***[servoDeclare]***/

/***<motorDeclare>***/#define motor1Direction 4//Declare two motor direction controlling pins.#define motor2Direction 7#define motor1Power 5//Declare two motor power controlling pins.#define motor2Power 6byte randomDirection;//Declare a random direction value for random avoidance direction.bool walking = false; //Declare a walking value to judge whether the robot is walking or not./***[motorDeclare]***/

/***<distanceSensorDeclare>***/#define distanceSensorTriq 2//Declare a distance sensor triq pin to send measurement request.#define distanceSensorEcho 3//Declare a distance sensor echo pin to receive measurement value.unsigned int distance;//Declare a distance value to save distance measurement value./***[distanceSensorDeclare]***/

/***<otherSensorsDeclare>***/#define temperatureSensorPin A0#define lightSensorPin A1#define soundSensorPin A2#define steamSensorPin A3int temperature;int light;int sound;int steam;/***[otherSensorsDeclare]***/

/***<sensorDelayTimeDeclare>**/Metro sensorMetro = Metro(1000);/***[sensorDelayTimeDeclare]**/

/***<voiceModuleDeclare>***/

第 24 页

Page 26: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

SoftwareSerial voiceModule(11, 12);//Set up a software serial for voice module.unsigned char previousTrack[4] = {0xAA, 0x05, 0x00, 0xAF};//Declare previous track command.unsigned char nextTrack[4] = {0xAA, 0x06, 0x00, 0xB0};//Declare next track command./***[voiceModuleDeclare]***/

/***<emoticonPanelDeclare>***/DFRobot_RGBPanel emoticonPanel;//Declare emoticon panel namespace.char emoticonPanelState = '0'; //Declare a state value for panel display./***[emoticonPanelDeclare]***/

/***<touchPadDeclare>***/#define touchPadPin 8boolean previousTouchPadSwitchState;/***[touchPadDeclare]***/

/***<ledDeclare>***/#define ledPin 13/***[ledDeclare]***/

/***<servoFunction>***/void upServoAction(boolean upServoDirection) {//To control up servo.  /*     Parameter Description       upServoDirection:         true:Up         false:Down  */  while (!Serial.available()) {    if (upServoDirection) {      upServoValue += 2;//2 degree per 50 millisecond.      if (upServoValue > 120)upServoValue = 120;//Maximum degree.      upServo.write(upServoValue);      delay(50);    }    else {      upServoValue -= 2;//2 degree per 50 millisecond.      if (upServoValue < 80)upServoValue = 80;//Minimal degree.      upServo.write(upServoValue);      delay(50);    }  }}

第 25 页

Page 27: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

void downServoAction(boolean downServoDirection) {//To control down servo.  /*    Parameter Description      downServoDirection:        true:Turn left        false:Turn right  */  while (!Serial.available()) {    if (downServoDirection) {      downServoValue += 2;//2 degree per 50 millisecond.      if (downServoValue > 178)downServoValue = 178;//Maximum degree.      downServo.write(downServoValue);      delay(50);    }    else {      downServoValue -= 2;//2 degree per 50 millisecond.      if (downServoValue < 0)downServoValue = 0;//Minimal degree.      downServo.write(downServoValue);      delay(50);    }  }}/***[servoFunction]***/

/***<motorFunction>***/void stopMotor(void) {  digitalWrite(motor1Power, LOW);  digitalWrite(motor2Power, LOW);}

void goAhead(byte left, byte right) {  digitalWrite(motor1Direction, HIGH);  digitalWrite(motor2Direction, HIGH);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}

void retreat(byte left, byte right) {  digitalWrite(motor1Direction, LOW);  digitalWrite(motor2Direction, LOW);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}

void turnLeft(byte left, byte right) {

第 26 页

Page 28: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

 digitalWrite(motor1Direction, LOW);  digitalWrite(motor2Direction, HIGH);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}

void turnRight(byte left, byte right) {  digitalWrite(motor1Direction, HIGH);  digitalWrite(motor2Direction, LOW);  analogWrite(motor1Power, left);  analogWrite(motor2Power, right);}

void avoidance(boolean avoidanceDirection) {  while (!Serial.available()) {    distance = getDistance();    if (distance > 20 && distance < 50) {      if (avoidanceDirection) turnLeft(255, 255);      else turnRight(255, 255);      emoticonPanel.display(3, BLUE);      delay(1000);    }    else if (distance != 0 && distance < 20) {      retreat(255, 255);      emoticonPanel.display(0, BLUE);    }    else {      goAhead(255, 255);      emoticonPanel.display(8, BLUE);    }    delay(50);  }}/***[motorFunction]***/

/***<distanceSensorFunction>***/unsigned int getDistance(void) {  digitalWrite(distanceSensorTriq, LOW);  digitalWrite(distanceSensorTriq, HIGH);  return pulseIn(distanceSensorEcho, LOW, 50000) / 50;}/***[distanceSensorFunction]***/

/***<voiceModuleFunction>***/void specifyTrack(unsigned char Track) {  unsigned char specifiedTrack[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3};  voiceModule.write(specifiedTrack, 6);

第 27 页

Page 29: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

}

void volumeAdjustment(unsigned char volume) {  unsigned char volumeLevel[5] = {0xAA, 0x13, 0x01, volume, volume + 0xBE};  voiceModule.write(volumeLevel, 5);}/***[voiceModuleFunction]***/

/***<ledFunction>***/void flashLed(byte pin, int flashTime, int delayTime) {  for (int currentTime = 0; currentTime < flashTime; currentTime++) {    digitalWrite(pin, HIGH);    delay(delayTime);    digitalWrite(pin, LOW);    if (currentTime + 1 < flashTime) {      delay(delayTime);    }  }}/***[ledFunction]***/

void setup(void) {  Serial.begin(9600);  randomSeed(analogRead(5)); // randomize using noise from analog pin 5

 /***<servoSetup>***/  upServo.attach(upServoPin);  downServo.attach(downServoPin);  /***[servoSetup]***/

 /***<motorSetup>***/  int pin;  for (pin = 4; pin < 8; pin++) {    pinMode(pin, OUTPUT);  }  /***[motorSetup]***/

 /***<distanceSensorSetup>***/  pinMode(distanceSensorTriq, OUTPUT);  digitalWrite(distanceSensorTriq, HIGH);  pinMode(distanceSensorEcho, INPUT);  /***[distanceSensorSetup]***/

 /***<voiceModuleSetup>***/  voiceModule.begin(9600);

第 28 页

Page 30: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

 volumeAdjustment(0x1E);  /***[voiceModuleSetup]***/

 /***<touchPadSetup>***/  pinMode(touchPadPin, INPUT);  /***[touchPadSetup]***/

 /***<ledSetup>***/  pinMode(ledPin, OUTPUT);  /***[ledSetup]***/

 specifyTrack(0x1A);  emoticonPanel.scroll(Left);  emoticonPanel.print("Welcome", BLUE);  flashLed(ledPin, 6, 500);  emoticonPanel.scroll(None);}

void loop(void) {  if (Serial.available()) {    char command = Serial.read();    Serial.println(command);    switch (command) {      case '0':        stopMotor();        walking = false;        break;      case '1':        walking = true;        goAhead(255, 255);        break;      case '2':        walking = true;        retreat(255, 255);        break;      case '3':        walking = true;        turnLeft(255, 255);        break;      case '4':        walking = true;        turnRight(255, 255);        break;      case '5':        walking = true;        randomDirection = random(2);        if (randomDirection == 0) {          avoidance(false);

第 29 页

Page 31: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

       }        else {          avoidance(true);        }        break;      case '6':        upServoAction(true);        break;      case '7':        upServoAction(false);        break;      case '8':        downServoAction(true);        break;      case '9':        downServoAction(false);        break;      case 'A':        if (emoticonPanelState != '0')emoticonPanelState--;        else emoticonPanelState = '5';        break;      case 'B':        if (emoticonPanelState != '5')emoticonPanelState++;        else emoticonPanelState = '0';        break;      case 'X':        specifyTrack(0x1B);        break;      case 'Y':        switch (emoticonPanelState) {          case '2':            if (temperature > 30) {              specifyTrack(0x11);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else if (temperature < 10) {              specifyTrack(0x12);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);

第 30 页

Page 32: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

             downServo.write(downServoValue);              delay(1000);            }            else {              specifyTrack(0x13);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;          case '3':            if (light > 500) {              specifyTrack(0x14);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else {              specifyTrack(0x15);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;          case '4':            if (sound > 100) {              specifyTrack(0x16);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else {

第 31 页

Page 33: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

             specifyTrack(0x17);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;          case '5':            if (steam > 100) {              specifyTrack(0x18);              emoticonPanel.display(3, BLUE);              downServo.write(60);              delay(500);              downServo.write(120);              delay(500);              downServo.write(downServoValue);              delay(1000);            }            else {              specifyTrack(0x19);              emoticonPanel.display(8, BLUE);              upServo.write(120);              delay(500);              upServo.write(80);              delay(500);              upServo.write(upServoValue);              delay(1000);            }            break;        }    }    emoticonPanel.display(1, BLUE);    flashLed(ledPin, 3, 33);  }

 if (!walking) {    if (sensorMetro.check()) {      unsigned int preDistance = getDistance();      if (preDistance != 0)distance = preDistance;      delay(10);      temperature = analogRead(temperatureSensorPin) * 5 / 10.24;      delay(10);      light = analogRead(lightSensorPin);      delay(10);      sound = analogRead(soundSensorPin);

第 32 页

Page 34: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

     delay(10);      steam = analogRead(steamSensorPin);      delay(10);      Serial.print("Sensor infomation   ");      Serial.print("Distance:");      Serial.print(distance);      Serial.print("cm   ");      delay(10);      Serial.print("Temperature:");      Serial.print(temperature);      Serial.print("C   ");      delay(10);      Serial.print("Light:");      Serial.print(light);      delay(10);      Serial.print("   Sound:");      Serial.print(sound);      delay(10);      Serial.print("   Steam:");      Serial.println(steam);      delay(10);    }

   if (digitalRead(touchPadPin) == HIGH) {      if (previousTouchPadSwitchState == false) {        specifyTrack(0x0B);        emoticonPanel.display(20, BLUE);        flashLed(ledPin, 3, 33);        delay(100);      }    }    else previousTouchPadSwitchState = false;

   switch (emoticonPanelState) {      case '0':        emoticonPanel.display(6, BLUE);        break;      case '1':        emoticonPanel.print(distance, RED);        break;      case '2':        emoticonPanel.print(temperature, GREEN);        break;      case '3':        emoticonPanel.print(light, YELLOW);        break;      case '4':        emoticonPanel.print(sound, PURPLE);

第 33 页

Page 35: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

       break;      case '5':        emoticonPanel.print(steam, CYAN);        break;    }  }

 delay(100);}

控制面板部分#define A A1#define B 12#define X 9#define Y 8#define rockerButton A0#define rockerX A3#define rockerY A2#define led 13char previousDirection;boolean previousASwitchstate;boolean previousBSwitchstate;boolean previousXSwitchstate;boolean previousYSwitchstate;boolean previousRockerButtonSwitchstate;void flashLed(byte pin, int flashTime, int delayTime) {  for (int currentTime = 0; currentTime < flashTime; currentTime++) {    digitalWrite(pin, HIGH);    delay(delayTime);    digitalWrite(pin, LOW);    if (currentTime + 1 < flashTime) {      delay(delayTime);    }  }}void setup() {  pinMode(A, INPUT);  pinMode(B, INPUT);  pinMode(X, INPUT);  pinMode(Y, INPUT);  pinMode(rockerButton, INPUT);  pinMode(rockerX, INPUT);  pinMode(rockerY, INPUT);  Serial.begin(9600);  Serial.write('0');  flashLed(led, 3, 333);}

第 34 页

Page 36: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

void loop() {  int rockerXValue = analogRead(rockerX);  int rockerYValue = analogRead(rockerY);  int ASwitchstate = digitalRead(A);  int BSwitchstate = digitalRead(B);  int XSwitchstate = digitalRead(X);  int YSwitchstate = digitalRead(Y);  int rockerButtonSwitchstate = digitalRead(rockerButton);  if (rockerYValue < 100) {    if (previousDirection != 1) {      Serial.write('1');      previousDirection = 1;    }  }  else if (rockerYValue > 1000) {    if (previousDirection != 2) {      Serial.write('2');      previousDirection = 2;    }  }  else {    if (rockerXValue > 1000) {      if (previousDirection != 3) {        Serial.write('3');        previousDirection = 3;      }    }    else if (rockerXValue < 100) {      if (previousDirection != 4) {        Serial.write('4');        previousDirection = 4;      }    }    else {      if (previousDirection != 0) {        Serial.write('0');        previousDirection = 0;      }    }  }    if (ASwitchstate == LOW) {    if (previousASwitchstate == false) {      Serial.write('A');      previousASwitchstate = true;    }  }  else {    previousASwitchstate = false;

第 35 页

Page 37: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

 }    if (BSwitchstate == LOW) {    if (previousBSwitchstate == false) {      Serial.write('B');      previousBSwitchstate = true;    }  }  else {    previousBSwitchstate = false;  }    if (XSwitchstate == LOW) {    if (previousXSwitchstate == false) {      Serial.write('X');      previousXSwitchstate = true;    }  }  else {    previousXSwitchstate = false;  }    if (YSwitchstate == LOW) {    if (previousYSwitchstate == false) {      Serial.write('Y');      previousYSwitchstate = true;    }  }  else {    previousYSwitchstate = false;  }  if (rockerButtonSwitchstate == LOW) {    if (previousRockerButtonSwitchstate == false) {      Serial.write('5');      previousRockerButtonSwitchstate = true;    }  }  else {    previousRockerButtonSwitchstate = false;  }  delay(50);}

图像识别部分#include<Pixy2.h>#include<Servo.h>//Using servo.#include <DFRobot_RGBPanel.h>//A side load library for emoticon panel.

Pixy2 pixy;

第 36 页

Page 38: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

/***<servoDeclare>***/Servo upServo;//Declare two servos.Servo downServo;#define upServoPin 9//Declare two servo pins.#define downServoPin 10int upServoValue = 90;//Declare and assign two initial servo degree value.int downServoValue = 90;/***[servoDeclare]***/

/***<emoticonPanelDeclare>***/DFRobot_RGBPanel emoticonPanel;//Declare emoticon panel namespace./***[emoticonPanelDeclare]***/

void setup() {  Serial.begin(9600);

 pixy.init();

 /***<servoSetup>***/  upServo.attach(upServoPin);  downServo.attach(downServoPin);  /***[servoSetup]***/}

void loop() {  if (Serial.read() == 'c') {    Serial.print('c');    pixy.setLamp(1, 0);    while (!Serial.available()) {      pixy.ccc.getBlocks();      if (pixy.ccc.numBlocks) {        Serial.print('c');        emoticonPanel.display(8, BLUE);        upServo.write(120);        delay(500);        upServo.write(80);        delay(500);        upServo.write(upServoValue);        delay(1000);      }      emoticonPanel.display(6, BLUE);      delay(10);    }    pixy.setLamp(0, 0);  }  emoticonPanel.display(6, BLUE);

第 37 页

Page 39: platinumwebsite.topplatinumwebsite.top/word.docx  · Web view环境监测小车研究报告 ——采用XBee无线控制. 相博今| 研究报告 | 2018·10·20. 目录. 一、研究背景2

 delay(100);}

第 38 页