Arduino案例实操 -- 智能巡防小车Arduino IDE巡线小车编程
Posted GenCoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino案例实操 -- 智能巡防小车Arduino IDE巡线小车编程相关的知识,希望对你有一定的参考价值。
三、Arduino IDE巡线小车编程
3.1 Arduino开发环境
开发环境即Arduino项目的编程环境 – Arduino IDE,Arduino集成开发环境(IDE)是一个在计算机上运行的软件,可供开发者编写、编译以及上传程序至Arduino开发板。其界面友好,语法简单,可以很方便的上传程序,使得Arduino项目开发变得非常便捷。
Arduino IDE在网上有很多资源提供下载,初学者可以自行从GitHub或者Arduino官网下载,这里提供从Arduino官网下载IDE的两种方式:
下载免安装ZIP包
进入Arduino官网 IDE下载页面(https://www.arduino.cc/en/Main/Software?setlang=en),英文网页看不懂的可以切换中文显示。
切到至中文界面,页面大标题显示Arduino IDE当前的最新版本,点击右侧的链接能直接下载最新版IDE的免安装版压缩包。
不想下载最新版本的话,可以选择过去的老版本(版本号)进行下载。
下载的免安装压缩包,解压后可以直接看到整个IDE的目录,双击Arduino.exe可以直接打开IDE编辑器。
下载IDE安装包
选择Windows安装包进行IDE安装包下载,运行安装包, I Agree进入下一步。
)
默认安装配置,Next进入下一步。
选择软件安装路径(可自定义路径),Install。
等待进度安装,完成后关闭安装向导,close关闭安装程序。
安装包安装的Arduino IDE目录比免安装的目录多了一个IDE卸载程序(uninstall),其他的没什么不同。
运行Arduino IDE,非常干净简介的编程界面。
3.2 Arduino IDE
此处参考 Arduino成长日记2 - Arduino编程基础 中的 Arduino软件(IDE)
小节
3.3 Blink项目实例
以IDE内置的Blink闪烁灯案例上传至Mega2560控制器,熟悉利用IDE进行软件开发的流程。
打开内置案例
打开菜单栏“文件 → 示例 → 01.Basics → Blink”,打开IDE内置案例。
内置案例为13号数字引脚LED灯闪烁。
进行程序上传
在菜单栏“工具 → 开发板 ”选择Arduino UNO开发板。
在菜单栏“工具 → 端口 ”选择UNO开发板连接端口(可在设备管理器找到CH340的对应端口)。
进行程序上传,观察状态栏的上传状态信息。
等待程序上传成功,观察实验效果。
3.4 巡线小车编程
配置好Arduino IDE环境,确认可以正常编译程序及上传后,开始编写巡线程序。
在IDE界面中直接进行项目代码编写。
添加小车车头舵机及OpenMV软串口所使用到的头文件。
#include <Servo.h>
#include "SoftwareSerial.h"
定义软串口引脚(软串口不固定引脚,可用户自定义引脚),创建舵机类对象。
//rx:9 tx:10
SoftwareSerial SoftSerial(9,10);
//创建舵机类对象
Servo AngleServo;
定义小车电机引脚,及PWM控制引脚。
//定义引脚
int Left_motor_go = 8; //左电机前进 AIN1
int Left_motor_back = 7; //左电机后退 AIN2
int Right_motor_go = 2; //右电机前进 BIN1
int Right_motor_back = 4; //右电机后退 BIN2
int Left_motor_pwm = 6; //左电机控速 PWMA
int Right_motor_pwm = 5; //右电机控速 PWMB
编写小车前进函数。
void RunForward()
{
//左电机前进
digitalWrite(Left_motor_go, HIGH); //左电机前进使能
digitalWrite(Left_motor_back, LOW); //左电机后退禁止
analogWrite(Left_motor_pwm, 120); //PWM比例0-255调速,左右轮差异略增减
//右电机前进
digitalWrite(Right_motor_go, HIGH); //右电机前进使能
digitalWrite(Right_motor_back, LOW); //右电机后退禁止
analogWrite(Right_motor_pwm, 120); //PWM比例0-255调速,左右轮差异略增减
delay(50);
analogWrite(Left_motor_pwm, 50);
analogWrite(Right_motor_pwm, 50);
}
编写小车后退函数。
void Run_Backoff()
{
//左电机后退
digitalWrite(Left_motor_go, LOW); //左电机前进禁止
digitalWrite(Left_motor_back, HIGH); //左电机后退使能
analogWrite(Left_motor_pwm, 120); //PWM比例0-255调速,左右轮差异略增减
//右电机后退
digitalWrite(Right_motor_go, LOW); //右电机前进禁止
digitalWrite(Right_motor_back, HIGH); //右电机后退使能
analogWrite(Right_motor_pwm, 120); //PWM比例0-255调速,左右轮差异略增减
delay(50);
analogWrite(Left_motor_pwm, 50);
analogWrite(Right_motor_pwm, 50);
}
编写小车电机停转函数。
void CarStop()
{
//左电机静止
digitalWrite(Left_motor_go, LOW); //左电机前进使能
digitalWrite(Left_motor_back, LOW); //左电机后退禁止
analogWrite(Left_motor_pwm, 0); //PWM比例0-255调速,左右轮差异略增减
//右电机静止
digitalWrite(Right_motor_go, LOW); //右电机前进使能
digitalWrite(Right_motor_back, LOW); //右电机后退禁止
analogWrite(Right_motor_pwm, 0); //PWM比例0-255调速,左右轮差异略增减
}
小车的车头由舵机连杆控制转向,编写舵机角度控制函数来控制小车转向。
void CarTurn(short angle)
{
AngleServo.write(angle);
}
创建相关变量,编写小车巡线程序,通过转换软串口来自OpenMV的角度值数据,进行小车车头转向控制。
String str = ""; //字符串变量,接收OpenMV发送过来的角度字符串
int AngleValue = 0; //车头转动角度值变量
bool RunOrder = false; //小车行走状态标志位
//小车巡线函数
void OpenMV_LinePatrol()
{
if(SoftSerial.available()){
// statement
if(RunOrder == false){
RunOrder = true;
RunForward();
}
while(SoftSerial.available())
{
int inReceive = SoftSerial.read();
if(inReceive == '\\n'){
int value = str.toInt();
AngleValue = 90 + round(value/2); //黑线坐标坐标转换成舵机转动角度计算
CarTurn(AngleValue);
str = "";
}
else str += (char)inReceive;
}
}
}
编写Arduino的setup函数内容,主要作用为初始化舵机引脚,初始化串口及配置串口波特率,配置电机引脚等操作。
void setup()
{
//初始化角度舵机
AngleServo.attach(3);
AngleServo.write(90);
//初始化串口参数
SoftSerial.begin(115200);
SoftSerial.listen();
//初始化电机驱动IO口为输出方式
pinMode(Left_motor_go, OUTPUT);
pinMode(Left_motor_back, OUTPUT);
pinMode(Right_motor_go, OUTPUT);
pinMode(Right_motor_back, OUTPUT);
delay(50);
}
Loop函数编程,循环调用小车巡线函数。
//loop函数
void loop()
{
OpenMV_LinePatrol(); //OpenMV巡线函数
}
有争议的一点可能是舵机转换角度的计算,因为读者所用车体不一定和博主的一样,所以读者的小车角度计算需要根据实际测试的效果进行微调。
以上是关于Arduino案例实操 -- 智能巡防小车Arduino IDE巡线小车编程的主要内容,如果未能解决你的问题,请参考以下文章