Arduino智能避障小车避障程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Arduino智能避障小车避障程序

首先建立一个名为modulecar.ino的主程序。 // modulecar.ino,玩转智能小车主程序

#include //导入舵机库

#include //导入NwePing库

// 对照系统配线方案依次指定各I/O

const int ENA = 3 ; //左电机PWM

const int IN1 = 4 ; //左电机正

const int IN2 = 5 ; //左电机负

const int ENB = 6 ; //右电机PWM

const int IN3 = 7 ; //右电机正

const int IN4 = 8 ; //右电机负

const int trigger = 9 ; //定义超声波传感器发射脚为D9 const int echo = 10 ; //定义传感器接收脚为D10 const int max_read = 300; //设定传感器最大探测距离。 int no_good = 35; //*设定35cm警戒距离。

int read_ahead; //实际距离读数。

Servo sensorStation; //设定传感器平台。

NewPing sensor(trigger, echo, max_read); //设定传感器引脚和最大读数//系统初始化

void setup()

{

Serial.begin(9600); //启用串行监视器可以给调试带来极大便利

sensorStation.attach(11); //把D11分配给舵机

pinMode(ENA, OUTPUT); //依次设定各I/O属性

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(ENB, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

pinMode(trigger, OUTPUT);

pinMode(echo, INPUT);

sensorStation.write(90); //舵机复位至90?

delay(6000); //上电等待6s后进入主循环

}

//主程序

void loop()

{

read_ahead = readDistance(); //调用readDistance()函数读出前方距离Serial.println("AHEAD:");

Serial.println(read_ahead); //串行监视器显示机器人前方距离

if (read_ahead < no_good) //如果前方距离小于警戒值

{

fastStop(); //就令机器人紧急刹车

waTch(); //然后左右查看,分析得出最佳路线

goForward(); //*此处调用看似多余,但可以确保机器人高速运转下动作的连贯性

}

else goForward(); //否则就一直向前行驶

}

主程序用到了两个库,Servo库是IDE自带的,NwePing库是第三方库,需要

下载安装。

接下来建立一个名为move.ino的标签。

//move.ino,机动模块。

//刹车

void fastStop()

{

Serial.println("STOP"); //串行监视器显示机器人状态为STOP(停止)

//左电机急停(注:L298N和L293D均带有刹车功能,在使能成立的条件下,同

时向两相写入高电平可令电机急停,详见芯片手册)

digitalWrite(ENA, HIGH);

digitalWrite(IN1, HIGH);

digitalWrite(IN2, HIGH);

//右电机急停

digitalWrite(ENB, HIGH);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, HIGH); }

//前进

void goForward()

{

Serial.println("FORWARD"); //串行监视器显示机器人状态为FORWARD(前进) //左电机逆时针旋转

analogWrite(ENA,106); //左电机PWM,可微调这个数值使小车左右两侧车轮转速相等,右电机同理

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

//右电机顺时针旋转

analogWrite(ENB,118);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

}

//原地左转

void turnLeft()

{

Serial.println("LEFT"); //串行监视器显示机器人状态为LEFT(向左转) //左电机正转

analogWrite(ENA,106);

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

//右电机正转

analogWrite(ENB,59); //*微调这个数值,使转弯时内侧车轮起主导作用。相当于让小车向后

打一把轮再拐弯。右转同理

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

delay (205); //*延迟,数值以毫秒为单位,调节此值可使机器人动作连贯

相关文档
最新文档