Arduino超声波智能避障小车+舵机 完整代码

您所在的位置:网站首页 智能车超声波避障原理是什么呢 Arduino超声波智能避障小车+舵机 完整代码

Arduino超声波智能避障小车+舵机 完整代码

2024-07-11 13:31| 来源: 网络整理| 查看: 265

//============================================================================= //arduino超声波智能避障小车源码(含舵机) //  本实验控制速度的pwm值和延时均有调节,自己视实际情况调节。 //============================================================================= #include //申明1602液晶的函数库 //申明1602液晶的引脚所连接的Arduino数字端口,8线或4线数据模式,任选其一 LiquidCrystal lcd(11,2,3,4,7,8); //4数据口模式连线声明,

//LCD的接口:各个引脚连接的I/O口编号,格式为 // LiquidCrystal(rs, enable, d4, d5, d6, d7) // LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) // LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) // LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)

 

int Echo = A0;  // Echo回声脚(P2.0) int Trig =A1;  //  Trig 触发脚(P2.1)

int F_Distance = 0; int L_Distance = 0; int R_Distance = 0;

int L_motor_back=5;     //左电机后退(IN1) int L_motor_go=6;         //左电机前进(IN2)

int R_motor_go=9;      // 右电机前进(IN3) int R_motor_back=10;    // 右电机后退(IN4)

int servopin=12;//设置舵机驱动脚到数字口12 int angle;//定义角度变量 int pulsewidth;//定义脉宽变量 int val;

void setup() {   Serial.begin(9600);     // 初始化串口   //初始化电机驱动IO为输出方式   pinMode(L_motor_go,OUTPUT); // PIN 5 (PWM)   pinMode(L_motor_back,OUTPUT); // PIN 6 (PWM)   pinMode(R_motor_go,OUTPUT);// PIN 9 (PWM)    pinMode(R_motor_back,OUTPUT);// PIN 10 (PWM)

  //初始化超声波引脚   pinMode(Echo, INPUT);    // 定义超声波输入脚   pinMode(Trig, OUTPUT);   // 定义超声波输出脚   lcd.begin(16,2);      //初始化1602液晶工作                       模式   //定义1602液晶显示范围为2行16列字符     pinMode(servopin,OUTPUT);//设定舵机接口为输出接口 } //=======================智能小车的基本动作=========================  void run()     // 前进 {   analogWrite(R_motor_go,200);//右电机前进,PWM比例0~255调速,左右轮差异略增减   analogWrite(R_motor_back,0);   analogWrite(L_motor_go,200);// 左电机前进,PWM比例0~255调速,左右轮差异略增减   analogWrite(L_motor_back,0); }

void brake()         //刹车,停车 {   digitalWrite(R_motor_go,LOW);   digitalWrite(R_motor_back,LOW);   digitalWrite(L_motor_go,LOW);   digitalWrite(L_motor_back,LOW); }

void left()         //左转(左轮不动,右轮前进) {   analogWrite(R_motor_go,200); //右电机前进,PWM比例0~255调速   analogWrite(R_motor_back,0);   digitalWrite(L_motor_go,LOW);   //左轮不动   digitalWrite(L_motor_back,LOW); }

void spin_left()         //左转(左轮后退,右轮前进) {   analogWrite(R_motor_go,200); //右电机前进,PWM比例0~255调速   analogWrite(R_motor_back,0);

  analogWrite(L_motor_go,0);    analogWrite(L_motor_back,200);//左轮后退PWM比例0~255调速 }

void right()        //右转(右轮不动,左轮前进) {   digitalWrite(R_motor_go,LOW);   //右电机不动   digitalWrite(R_motor_back,LOW);

  analogWrite(L_motor_go,200);    analogWrite(L_motor_back,0);//左电机前进,PWM比例0~255调速   } 

void spin_right()        //右转(右轮后退,左轮前进) {   analogWrite(R_motor_go,0);    analogWrite(R_motor_back,200);//右电机后退,PWM比例0~255调速

  analogWrite(L_motor_go,200); //左电机前进,PWM比例0~255调速   analogWrite(L_motor_back,0); }

void back()          //后退 {   analogWrite(R_motor_go,0);   analogWrite(R_motor_back,150);//右轮后退,PWM比例0~255调速

  analogWrite(L_motor_go,0);   analogWrite(L_motor_back,150);//左轮后退,PWM比例0~255调速 } //==========================================================

float Distance_test()   // 量出前方距离  {   digitalWrite(Trig, LOW);   // 给触发脚低电平2μs   delayMicroseconds(2);   digitalWrite(Trig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs   delayMicroseconds(10);   digitalWrite(Trig, LOW);    // 持续给触发脚低电   float Fdistance = pulseIn(Echo, HIGH);  // 读取高电平时间(单位:微秒)   Fdistance= Fdistance/58;       //为什么除以58等于厘米,  Y米=(X秒*344)/2   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58   //Serial.print("Distance:");      //输出距离(单位:厘米)   //Serial.println(Fdistance);         //显示距离   //Distance = Fdistance;   return Fdistance; }  

void Distance_display(int Distance)//显示距离 {   if((2



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3