草庐IT

arduino智能跟随小车

大土豆块子 2023-04-10 原文

前言
目前,“机器人"已经成为生活中频繁出现的词汇。本课设所做的智能跟随机器人,属于反馈型移动机器人。
反馈型移动机器人:

  • 可以简单定义为一种对外界信号进行处理反馈最终实现的方式将感知和动作连接在一起的可自移动设备。
  • 它必须具有在一个位置的环物独立完成某些工作的能力。这里的智能更多的是指通过传感器感受外界的变化,通过通过传感器感受外界的变化,最终通过执行器做出反应。

如今中国具有跟随性的产品.主要是有轨机械跟随,用于工厂的各类生产机车的一部分,或是比赛场的有轨跟随拍摄车,并没有实际针对超市、旅馆、飞机场等大众场合,或家庭个人的产品。基于超声波定位及单片机各模块的综合运用,设计了一款能够对特定移动目标进行实时跟踪的智能小车。利用超声波定位技术和跟随性技术可以根据不同场合的跟踪要求设置小车的跟踪距离和跟踪速度等参数,可以实现对移动目标的准确跟踪,帮助携带物品,解放人们双手。


图中充电宝为电源

在智能小车项目中,我们通过控制直流电机的正反转刹车转速来控制小车的行动。

在这台小车中,对直流电机发出的控制指令来自于Arduino主控板,而Arduino主控板的外部输入则来自于超声波传感器、遥控器。本文的自动跟随小车的Arduino主控板外部输入来自于超声波传感器。

超声波传感器


​超声波传感器是利用超声波的特性的传感器。超声波接收到触发信号后,模块自动发出8个40KHZ的方波,同时开始计时并自动监测是否有信号返回,通过记录超声波从开始发送到接收回波间隔,来判断前方障碍物的距离

注:感应角度范围:15°
超声波测距

const int TrigPin = 9;  //超声波触发引脚连接UNO引脚9
const int EchoPin = 2;    //超声波接受引脚连接UNO引脚2

const int leftPin1=8;  //AIN1连接引脚8
const int leftPin2=7;  //AIN2连接引脚7
const int rightPin3=4;  //BIN1连接引脚4
const int rightPin4=3;  //BIN2连接引脚3d
const int leftSpeed=6;  //PWA连接引脚6
const int rightSpeed=5;  //PWB连接引脚5
const int intSpeedPWM=120;  //设置小车运行的初始速度

int dist;
int followDist = 30; // ❶定义反应的距离
int followBalance = 10; // ❷定义范围

void setup() {
  // put your setup code here, to run once:
    pinMode(TrigPin,OUTPUT);
    pinMode(EchoPin,INPUT);
    pinMode(leftPin1,OUTPUT);
    pinMode(leftPin2,OUTPUT);
    pinMode(rightPin3,OUTPUT);
    pinMode(rightPin4,OUTPUT);
}

void loop() {
   followDrive();  // 自动跟随
 }

//******************************
//  功能:跟随模式
//  参数:无
//*******************************
void  followDrive() {  // ❸
    getDistance();  // ❹获取当前的距离
    if ((dist >= followDist - followBalance) && (dist <= followDist + followBalance)) {
      analogWrite(leftSpeed, intSpeedPWM);
      analogWrite(rightSpeed, intSpeedPWM);
      if (dist > followDist) {  // 当两者间的距离大于设定值时,小车前进
        forward();    
      }
    else if (dist < followDist) {  // 当两者间的距离大于设定值时,小车后退
        backward();   
      }
      else {
        pause();   // 小车停止
      }
    }
    else {
      pause();
    }
}


void getDistance() {  // 超声波测距函数
  digitalWrite(TrigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);
  dist = pulseIn(EchoPin, HIGH) / 58.0;
}

//===============
// 前进
//===============
void forward(){
    digitalWrite(leftPin1,1);
    digitalWrite(leftPin2,0);
    digitalWrite(rightPin3,1);
    digitalWrite(rightPin4,0);
}
//===============
// 后退
//===============
void backward(){
    digitalWrite(leftPin1,0);
    digitalWrite(leftPin2,1);
    digitalWrite(rightPin3,0);
    digitalWrite(rightPin4,1);
}
//===============
// 左转
//===============
void turnLeft(){
    digitalWrite(leftPin1,0);
    digitalWrite(leftPin2,0);
    digitalWrite(rightPin3,1);
    digitalWrite(rightPin4,0);
}
//===============
// 右转
//===============
void turnRight(){
    digitalWrite(leftPin1,1);
    digitalWrite(leftPin2,0);
    digitalWrite(rightPin3,0);
    digitalWrite(rightPin4,0);
}
//===============
// 原地左转
//===============
void rotateLeft(){
    digitalWrite(leftPin1,0);
    digitalWrite(leftPin2,1);
    digitalWrite(rightPin3,1);
    digitalWrite(rightPin4,0);
}
//===============
// 原地右转
//===============
void rotateRight(){
    digitalWrite(leftPin1,1);
    digitalWrite(leftPin2,0);
    digitalWrite(rightPin3,0);
    digitalWrite(rightPin4,1);
}
//===============
// 停止
//===============
void pause(){
    digitalWrite(leftPin1,0);
    digitalWrite(leftPin2,0);
    digitalWrite(rightPin3,0);
    digitalWrite(rightPin4,0);
}

系统测试
以手与小车的距离为标准 通过手的移动,来测试小车。
测试超声波模块时,可通过编译器的串口检测器测试。

有关arduino智能跟随小车的更多相关文章

  1. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  2. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  3. ruby - 需要帮助改进 Ruby DSL 以控制 Arduino 控制的饮料分配器(bar monkey) - 2

    我正在用Ruby编写DSL来控制我正在处理的Arduino项目;巴尔迪诺。这是一只酒吧猴子,将由软件控制来提供饮料。Arduino通过串行端口接收命令,告诉Arduino要打开什么泵以及打开多长时间。它目前正在读取一个食谱(见下文)并将其打印出来。串行通信的代码以及我在下面提到的其他一些想法仍然需要改进。这是我的第一个DSL,我正在处理之前的示例,所以它的边缘非常粗糙。任何批评、代码改进(是否有任何关于RubyDSL最佳实践或习语的良好引用?)或任何一般性评论。我目前有DSL的粗略草稿,因此饮料配方如下所示(Githublink):desc"Simpleglassofwater"rec

  4. 基于python的短视频智能推荐/django的影视网站/视频推荐系统 - 2

    摘要本论文主要论述了如何使用Python技术开发一个短视频智能推荐,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述短视频智能推荐的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。 短视频智能推荐的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、热门视频管理、用户上传管理、系统管理,用户:首页、个人中心、用户上传管理、我的收藏管理,前台首页;首页、热门视频、用户上传、公告信息、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所以使得整个短视频智能推荐信

  5. 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32 - 2

    文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室

  6. BigData/Cloud Computing:基于阿里云技术产品的人工智能与大数据/云计算/分布式引擎的综合应用案例目录来理解技术交互流程 - 2

    BigData/CloudComputing:基于阿里云技术产品的人工智能与大数据/云计算/分布式引擎的综合应用案例目录来理解技术交互流程目录一、云计算网站建设:部署与发布网站建设:简单动态网站搭建云服务器管理维护云数据库管理与数据迁移云存储:对象存储管理与安全超大流量网站的负载均衡二、大数据MOOC网站日志分析搭建企业级数据分析平台基于LBS的热点店铺搜索基于机器学习PAI实现精细化营销基于机器学习的客户流失预警分析使用DataV制作实时销售数据可视化大屏使用MaxCompute进行数据质量核查使用Quick BI制作图形化报表使用时间序列分解模型预测商品销量三、云安全云平台使用安全云上服务

  7. 如何从智能合约中删除数据 - 2

    如何从智能合约中删除数据有了以太坊,我们可以创建一个有状态的系统,我们可以从存储在智能联系人中的数据中添加和删除数据。这是一个有状态的系统,我们可以改变智能联系人的状态,但这需要向矿工支付一些费用。但是我们如何删除数据呢?这里有一个智能合约,用于向myArray中添加和移除字符串:pragmasolidity^0.4.18;contractExampleApp{string[]myArray;functionadd(stringx)public{myArray.push(x);}functiondel(stringx)public{for(uintj=0;jadd()函数相当简单,我们基本上只

  8. ruby-on-rails - 如何以智能方式从多维数组中获取 "extract"值? - 2

    我正在使用RubyonRails3.2.2和Ruby1.9.2。给定以下多维数组:[["value1","value1_other"],["value2","value2_other"],["value3","value3_other"]]我想得到(注意:我想只“提取”所有“嵌套”数组的第一个值):["value1","value2","value3"]我怎样才能以聪明的方式做到这一点? 最佳答案 您可以使用Array#collect为外部数组的每个元素执行一个block。要获取第一个元素,请传递一个索引数组的block。arr.c

  9. Web3.0入口-MPC钱包和智能合约钱包 - 2

    目前数字钱包存在的三个问题Web3.0大规模普及,需要解决一些关键问题,包括钱包私钥带来的一个用户体验问题与两个安全问题。1.一个用户体验问题:助记词与私钥难记、难保存,导致用户使用门槛过高2.两个安全问题:助记词和私钥的泄露,导致资产被盗。助记词和私钥的丢失,导致资产丢失。数字钱包为什么只能通过私钥的方式进行验证为什么只能通过私钥的方式进行验证?为了回答这个问题,我们需要了一些背景知识和概念。首先是以太坊上的账户类型。以太坊一共有两种账户:外部账户(EOA)和合约账户(CA)。合约账户就是智能合约,其代码由以太坊虚拟机来运行。外部账户就是我们平常用来发起交易的钱包账户,它之所以被称为“外部“

  10. Solidity,智能合约的学习(1) - 2

    Solidity概述Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)上,Solidity是面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态内的账户行为的程序。BitPen认为,作为Web3的链上玩家,那么能够看懂Solidity代码将会是一项必备的技能,因为大多区块链项目都是在GitHub开源,如果你能看懂甚至编写Solidity代码,那么你在链上项目游玩的技能将大大提升,可以避免很多恶意合约以及有漏洞的Rug项目。开发工具:RemixRemix网址:remix.ethereum.org​​​​​​​Remix作为以太坊官方推荐的智能合约开发IDE,

随机推荐