首页 > 其他分享 >Arduino小车自动避障

Arduino小车自动避障

时间:2024-07-15 21:51:21浏览次数:17  
标签:避障 Arduino 小车 void HIGH LOW digitalWrite Serial pinMode

#include<Servo.h> //引用库
//因为很多子函数要用这个变量,所以把servo定义称全局变量,作用域是整个代码文件
Servo myServo;

//前进
void Forward(){
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
}
//后退
void BackOff(){
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
}
//左转
void TurnLeft(){
  //小车左转(左轮后退)
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  //小车左转(右轮前进)
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
}
//右转
void TurnRight(){
  //小车右转(右轮后退)
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  //小车右转(左轮前进)
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
}

//停止
void Stop(){
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
}

//获取距离
long getLen(){
  //发送一个10us的信号给超声波
  digitalWrite(9,LOW);
  delayMicroseconds(2);
  digitalWrite(9,HIGH);
  delayMicroseconds(10);
  digitalWrite(9,LOW);//超声波内部开始震荡,准备发送波
  long time;
  long length;
  //关注Echo高电平维持的时间,代表超声波发送到返回的时间
  time = pulseIn(8,HIGH);
  //距离= 时间(us) * 速度(340m/s)=》 微秒 * 厘米 / 往返 2
  // 微秒转秒;米转厘米;=》(time/1000000) * (340*100) / 2
  length = time * 0.017000;
  return length;
}

void Init(){
  //put your setup code here, to run once:
  //串口初始化
  //配置2,3口为输出引脚(左轮初始化)
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  //配置4,5口为输出引脚(右轮初始化)
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  //Trig接9,通过9发送一个触发信号给超声波
  pinMode(9,OUTPUT);
  //Echo接8,通过读取8高电平维持的实践,确认超声波哦在空气中传播的时间
  pinMode(8,INPUT);
  //pinMode(LED_BUILTIN,OUTPUT);
  //监听串口
  Serial.begin(9600);
  //把舵机黄色信号线插在ardino的引脚10
  myServo.attach(10);
}


void setup() {
  // put your setup code here, to run once:
  Init();
}

void loop() {
  // put your main code here, to run repeatedly:
  long centerLen;
  long leftLen;
  long rightLen;
  myServo.write(100);//居中
  delay(500);
  centerLen = getLen();
  Serial.print("中间的距离是:");
  Serial.println(centerLen);
  //检测到前方有障碍物
  if(centerLen < 50){
    Stop();
    //右边摇头确认距离
    myServo.write(30);//右边
    delay(500);
    rightLen = getLen();
    Serial.print("右边的距离是:");
    Serial.println(rightLen);

    //左边摇头确认距离
    myServo.write(170);//左边
    delay(500);
    leftLen = getLen();
    Serial.print("左边边的距离是:");
    Serial.println(leftLen);

    //回正
    myServo.write(100);//居中
    delay(500);
    //左边大于右边往左边走
    if(leftLen > rightLen){
      TurnLeft();
      Serial.println("左转");
      delay(100);
      Stop();
    }else{
      TurnRight();
      Serial.println("右转");
      delay(100);
      Stop();
    }

  }else{//前方无障碍物,前进
    Forward();
  }

}

 

标签:避障,Arduino,小车,void,HIGH,LOW,digitalWrite,Serial,pinMode
From: https://www.cnblogs.com/dzw159/p/18304063

相关文章

  • 1.4让小车跑起来
    引言咱们已经完成了对电机函数库的构建!那么我们开始在嘉立创EDA上打一个亚克力板来安装我们的电机与轮胎。打印面板首先我估摸着板子大概就13*20cm左右,所以我先画板子为敬了!去官网查一下我们买的轮子大小,给板子两边留下轮子的位置。轮子直径6.33cm,所以我们挖出一个略大与......
  • 1.3.2小车跑起来
    引言上节课我们进行了对电机的初始化,今天我们开始构建电机的使用函数。电机代码产生速度对于小车来说,所有函数都是服务于让小车按照我们的要求移动,所以我们在初始化完就需要写出一个使小车动手起来的函数。这个函数最好可以给小车的两个电机配速,达到我们变速的要求!!!先理一......
  • 智能小车开源样例运行
    环境准备前置条件按照官方指导文档完成CANN包安装CANN版本需要>=5.0.4.alpha001(本教程使用5.04alpha005)软件准备源码包:samples:CANNSamples(gitee.com)模型:cplusplus/contrib/Ascbot/README_CN.md·Ascend/samples-Gitee.com建议下载模型,权重和配置文件后本地使......
  • 51小车红外循迹及蓝牙代码
     main.c#include<REGX52.H>#include"time.h"#include"motordriver.h"#include"MoveState.h"#include"follow.h"#include"lanya.h"externunsignedintPWMR;externunsignedintPWML;unsignedi......
  • 小车轮子测试(I2C)
    I2C总线是PHILIPS公司推出的一种在电子通信控制领域常用的串行通信总线,是一种简单、双向通信、二线制、同步的串行总线,具有连接线少、控制简单、通信速率高等优点。端口检测cd/devlsI2C读写操作使用i2cdetect命令检测i2c总线i2cdetect-l如果红色部分出现unknown,则大......
  • 【花雕学编程】Arduino FOC 之双足无刷电机位置闭环控制
    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用ArduinoIDE(集成开发环境)来编写、......
  • 已解决——ROS2开发环境搭建,亚博智能小车
    在实现多机通讯时,官方教程讲的很模糊,具体细节实现主机(ROS2小车),从机(自己的电脑上的Ubuntu系统)首先打开两个terminal,左边的负责连接小车,右边的负责实现从机的接受话题主机terminal输入[email protected]进入后再输入./run_docker.sh然后就进入小车的docker了然后输入sud......
  • 1.3.1小车跑起来
    引言查看前文方式:订阅我的设计自己的STM32智能小车我i们一起完成了选购与接线,但是在上节课中我们还需要A1117芯片!咱们之后再整理。今天我们开始学习构建代码库。(Keil5)寄语很多人喜欢使用CubeMX来生成初始化配置,但是我想说的是,自己构建初始化时你需要去库中自己寻找,自己寻......
  • 松灵机器人scout mini小车 自主导航(3)——建图导航仿真
    松灵机器人Scoutmini小车建图导航仿真在之前的文章中,我们已经介绍了如何在gazebo和rviz对scoutmini小车进行仿真,并且测试了添加自定义的传感器,在本文章中将进一步介绍如何利用scoutmini小车在仿真环境中建图和导航。仓库链接:https://gitee.com/agent-explorer/robotics/tr......
  • 基于安卓手机蓝牙控制的智能小车设计论文,带源程序
    设计(论文)题目:基于安卓手机蓝牙控制的智能小车设计随着物联网的兴起,Android手机以其独有的开放性优势正在为我们提供更多优质便捷的技术成果。本课题研究的是基于安卓手机蓝牙控制的智能小车设计,基于手机平台,借助于蓝牙技术,设计和实现了一种无线遥控小车新的解决方案。设计以......