Arduino案例实操 -- 智能巡防小车图形化巡线小车编程

Posted GenCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino案例实操 -- 智能巡防小车图形化巡线小车编程相关的知识,希望对你有一定的参考价值。

巡防小车的巡线功能同时可以用图形化编程软件来实现。博主这里用的图形化编程软件是KRobot。

3.1 编程环境配置

3.1.1 下载编程软件

Krobot软件可以到百度(www.baidu.com)搜索“Krobot下载”,在搜索结果中选中第2个链接,下拉页面找到下载地址,选中任意一个链接进行下载。
在这里插入图片描述

Krobot下载后的软件安装包如下图2所示,目前的停更版本为V0.8.5。
在这里插入图片描述

3.1.2 安装编程软件

双击安装包准备安装软件,在弹出的“许可证协议”界面选择“我同意”,将会进入下一步选项。
在这里插入图片描述
下一步是选择软件安装路径,默认是装在C盘,可以自定义路径安装,不会影响软件操作,选择“安装”。
在这里插入图片描述

显示Krobot软件的安装进度,以及创建一些必要的文件等。
在这里插入图片描述
完成安装,点击“完成”退出安装向导,界面中的“运行KRobot”选项前面复选框是打√的,所以退出安装向导后会直接运行Krobot。
在这里插入图片描述
如果能正确打开Krobot(啃萝卜)软件,说明安装过程没出现什么问题,在下次想打开软件时,只需要双击电脑桌面生成的“KRobot”快捷方式。对软件界面中的电路板是不是有点印象呢
在这里插入图片描述

3.2 Krobot(啃萝卜)编程软件

3.2.1 硬件接线

打开Krobot软件首先看到的是硬件接线界面,除了基本菜单栏之外,基本分外左右两个部分。左边的是标准模块列表,Arduino控制器所能用到的外接设备在这个列表基本都齐了,模块主要分为3类,(1)传感:即设备输入类,如按键;(2)执行:即设备输出类,如LED灯;(3)通信:即通讯设备,如串口。(所有模块详细介绍见附录)
在这里插入图片描述
右边是接线界面,首先我们看左上角的一个下拉菜单,点开后能看到下拉菜单中包含了几款常用的Arduino控制器:Arduino UNO、Arduino Leonardo、Arduino Nano和Arduino Mega 2560,默认是选择Arduino UNO。当我们选择其他Arduino控制器的时候,可以发现位于中间的小板子也跟着改变成所选Arduino控制器的模样,给人感觉很友善。
在这里插入图片描述
在这里插入图片描述

3.2.2 图形模块

接下来单击软件界面右上角“编程”图标,切换到图形编程界面。如下图所示。
在这里插入图片描述
图形编程界面,往后给Arduino控制器编写程序/固件的界面。主要分为左右的模块选取列表、模块编程区。
在这里插入图片描述
模块选取列表:位于界面左侧,模块类别细分为模块类、数据类、变量类、函数类、控制类、运算类、代码类、时间类:
(1)模块类:存放配置引脚功能的模块,如配置引脚的数字量、模拟量等;
(2)数据类:给引脚/模块赋值数字量(高电平、低电平),添加文本等操作;
(3)变量类:新建变量,变量赋值,设置变量类型,新建变量数组,变量数组调用等操作;
(4)函数类:新建自定义函数,自定义函数调用,设置函数返回值等;
(5)控制类:逻辑模块调用类,如操作循环次数控制,如果…那么,否则如果…那么,否则那么…等;
(6)运算类:数据判断类,判断两个变量/数据大小、最大值,逻辑运算等;
(7)代码类:可以为自己编写的模块做代码注释,或是自定义输入自己的代码等;
(8)时间类:可以控制每个操作之间停留的时间间隔的模块,做延时操作用。
每个模块类所展示出来的都是基本模块,在这些模块右上角还有一个不起眼的“高级”图标,单击“高级”图标可以看到该类中更加丰富的图形模块。如果在基础模块中找不到你想要的控制模块时,试试进入高级模块中看看。图13所示为控制类的基础模块和高级模块。(所有图形模块详细使用见附录)
在这里插入图片描述
模块编程区:位于界面右侧,划分为3项内容:
(1)全局变量、函数:上面提到的变量类的新建变量,以及函数类的新建函数等操作,就是在这一项里面完成的。全局变量,即初始化一次,就可以在所有函数中调用和重新赋值,如果只能在单个函数中使用的,称为局部变量;
(2)Setup:Setup实质上是一个初始化函数Setup(),作用在于Arduino控制器上电之后的板载设备初始化,如初始化内存后可以运行固件,初始化系统时钟等;在本书中我们只需对引脚I/O(Input/Output)做初始化配置就足够了,系统资源已经默认配置好了;Setup函数的内容在电路板上电过后只做一遍,在按下电路板复位按键时,会重新执行一遍Setup函数;
(3)Loop:循环函数Loop(),将Arduino控制器上电后需要重复运行的操作放在这里,在Arduino控制器运行过一次Setup函数后,就会一直做Loop函数里面的事情,而且是无限循环;比如要实现蜂鸣器2秒鸣叫一次,只需要在Loop函数中加
入蜂鸣器鸣叫模块和2秒的延时模块,即可以实现所要的效果。因为是无限循环,所以在Loop函数中加入模块需要慎重。
在这里插入图片描述

3.3 巡线小车图形化编程

3.3.1 硬件模块连接

打开Krobot软件,在模块连接界面默认控制器是Arduino UNO,拖动左侧模块列表,分别找到舵机模块、串口模块和软串口模块(连接OpenMV串口),接线引脚如下表所示。

模块引脚Arduino引脚
舵机模块Pin3
串口模块Pin Serial
软串口模块(RX)Pin9
软串口模块(TX)Pin10

按照引脚连接表进行模块连接,如下图所示。
在这里插入图片描述

3.3.2 图形化编程

通过点击右上角“编程”选项进入图形化编程界面,左侧为图形化指令模块,右侧则为图形化指令模块的逻辑编程区:全局变量、函数定义区、setup编程区、loop编程区。

在这里插入图片描述
选择左侧“变量”类指令的高级指令,在全局变量区分别定义文本变量Angle_str为空文本,定义整数变量Angle_value初始值为0,定义布尔变量RunOrder为False;变量赋值的指令模块可以“数据”类指令中找到,再单击输入框进行变量赋值。
在这里插入图片描述
在全局变量、函数区定义全局函数,作为使小车前进的驱动函数,在“函数”类指令中可找到函数定义模块,从“模块”类中添加相关引脚数字量及模拟量设置,引脚的赋值指令可在“数据”类中找到,从“时间”类中添加延时指令,如下图中的配置。
在这里插入图片描述

在setup编程区中,进行小车电机相关控制引脚的模式设置,设置串口和软串口的串口波特率,设置舵机(小车车头转向)的初始角度值。
在这里插入图片描述
在loop编程区中检测软串口数据接收,当接收到软串口数据时,使用“控制”类循环指令进行软串口数据完整获取,定义整数型变量SoftRead_int赋值为软串口接收的数据,再对变量SoftRead_int做出判断,不为结束符时将变量SoftRead_int转换成字符型变量SoftRead_char,再进行字符串赋值。
在这里插入图片描述
当判断软串口数据位结束符时,调用小车前进的全局函数RunForward,定义整型(int)变量Angle_int并赋值为软串口字符串数据转为整型数据,通过串口将变量Angle_int值进行串口打印,同时计算角度值赋值给舵机引脚进行舵机旋转角控制,其中字符串转换整数部分使用“代码”类指令直接进行代码编写。
在这里插入图片描述

3.3.3 巡线小车源码说明

进行图形编程后,可直接在Krobot中看到图形编程指令对应的实现代码,在编程界面点击右上角的“显示/隐藏源码”,即可看到对应代码。
在这里插入图片描述
巡线小车源码与图形指令的内容一样对应,下面对源码做简单说明。

#include <Servo.h>						//添加舵机头文件
#include <SoftwareSerial.h>				//添加软串口相关函数头文件
 
SoftwareSerial serial2_0(9, 10);		//定义软串口引脚,Pin9(rx),Pin10(tx)
Servo servo_0;							//创建舵机对象

//新建全局变量
String Angle_str = "";					
int Angle_value = 0;
bool RunOrder = false;

//控制小车前进的函数
void RunForward() {
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    analogWrite(6, 150);
    digitalWrite(2, HIGH);
    digitalWrite(4, LOW);
    analogWrite(5, 150);
    delay(100);
    analogWrite(6, 60);
    analogWrite(5, 60);
}

//setup函数
void setup() {
    Serial.begin(9600);
    serial2_0.begin(9600);
    servo_0.attach(3);				//初始化舵机连接引脚为Pin3
    pinMode(2, OUTPUT);				//设置小车电机引脚为输出模式
    pinMode(4, OUTPUT);				//设置小车电机引脚为输出模式
    pinMode(7, OUTPUT);				//设置小车电机引脚为输出模式
    pinMode(8, OUTPUT);				//设置小车电机引脚为输出模式
    Serial.begin(115200);			//设置串口波特率115200
    serial2_0.begin(115200);			//设置软串口波特率115200
    servo_0.write(90);				//为舵机写入初始化角度 -- 90度
}

//loop函数
void loop() {
//软串口数据监测
    if (serial2_0.available()) {
//串口数据获取
        while (serial2_0.available()) {
            int SoftRead_int = serial2_0.read();			//新建变量赋值串口数据
  //判断是否收到完整数据
            if (SoftRead_int == '\\n') {
 			 //当小车目前未静止状态时,驱动小车前进行驶
                if (RunOrder == false) {
                    RunForward();
                    RunOrder = true;
                }
                int Angle_int;								//定义整型数据
                Angle_int = Angle_str.toInt();			//将字符串数据转换成整型数据并赋值
                Serial.print("Angle Value is : ");		//串口数据打印
                Angle_value = (90 + (int)(Angle_int / 2));	//计算舵机需要转动的角度
                Serial.println(Angle_value);				//串口打印舵机转动角度值
                servo_0.write(Angle_value);				//将新角度写入舵机引脚控制小车转向
                Angle_str = "";							//字符串清空
            } else {
                char SoftRead_char = SoftRead_int;		//将串口整型数据转换成字符型数据
                Angle_str = (Angle_str + SoftRead_char);	//字符串赋值
            }
        }
    }
}

编写完成程序后,单击编程区上方的“上传”图标,保存案例路径,把程序通过USB线上核心板的MCU中。当软件能检测到有多个端口时,打开电脑设备管理器,确定串口芯片CH340的连接端口,如图所示。选择Arduino控制器的端口,确定程序上传,程序上传成功后,会有窗口提示上传完成。
在这里插入图片描述

程序编译完成后,选择上传串口,上传固件。
在这里插入图片描述
然后可以用小车去测试巡线功能了。

以上是关于Arduino案例实操 -- 智能巡防小车图形化巡线小车编程的主要内容,如果未能解决你的问题,请参考以下文章

Arduino案例实操 -- 智能巡防小车小车APP功能扩展

Arduino案例实操 -- 智能巡防小车火焰检测功能扩展

Arduino智能小车--只是随便一搞

智能小车-Arduino IDE使用说明

Arduino智能小车--仅仅是随便一搞

智能小车34:arduino与arm的汇编程序开发