当前位置: 首页 > news >正文

智能寻迹避障清障机器人设计(电路图附件+代码)

附  录

智能小车原理图

智能小车拓展板原理图

 

智能小车拓展板PCB

智能小车底板PCB

Arduino UNO原理图

Arduino UNO PCB

程序部分

void Robot_Traction()                     //机器人循迹子程序{//有信号为LOW  没有信号为HIGHSR = digitalRead(SensorRight);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭SL = digitalRead(SensorLeft);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭if (SL == LOW && SR == LOW)run();   //调用前进函数else if (SL == HIGH & SR == LOW)// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转left();else if (SR == HIGH & SL == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转right();else // 都是白色, 停止brake();}void bz()//障碍程序{front_detection();//测量前方距离if (Front_Distance < 20) //当遇到障碍物时{brake3(2);//先刹车back3(3);//后退减速brake3(2);//停下来做测距left_detection();//测量左边距障碍物距离right_detection();//测量右边距障碍物距离if ((Left_Distance < 20 ) && ( Right_Distance < 20 )) //当左右两侧均有障碍物靠得比较近spin_left3(0.7);//旋转掉头else if (Left_Distance > Right_Distance) //左边比右边空旷{left3(4);//左转brake3(1);//刹车,稳定方向}else//右边比左边空旷{right3(4);//右转brake3(1);//刹车,稳定方向}}else{run(); //无障碍物,直行}}void gs() //跟随函数{front_detection();//测量前方距离R = digitalRead(SensorR);//有信号表明在白色区域,红外传感器LED1亮L = digitalRead(SensorL);//有信号表明在白色区域,红外传感器LED2亮if (Front_Distance >9&&Front_Distance <= 30&&L == LOW&&R==LOW)run();   //调用前进函数else if (L == HIGH & R == LOW)// 左跟随红外传感器,检测到信号,车子向右偏离轨道,向左转left();else if (R == HIGH & L == LOW) // 右跟随红外传感器,检测到信号,车子向左偏离轨道,向右转  right();else if(Front_Distance > 4 && Front_Distance <= 9&&L == LOW&&R==LOW)brake();//先刹车else if(Front_Distance > 0 && Front_Distance <= 4&&L == LOW&&R==LOW)back();else // 都是黑色, 停止brake();  }void ceju() //测距程序{front_detection();//测量前方距离if (Front_Distance > 0 && Front_Distance <= 99 ){Serial.print("distance= ");Serial.print(Front_Distance);Serial.println("cm");delay(700);}if(Front_Distance >99 )Serial.println("Out of range");delay(700);}void jxbcs(){int robotIniPosArray[4][2] = {{servopin3, 90},{servopin2, 90},  {servopin4, 90},{servopin1, 90}};for (int i = 0; i < 4; i++){servopulse(robotIniPosArray[i][0], robotIniPosArray[i][1]);}}void jxb(char val1){val = Serial.read();switch (val1) {case 'W':  a += 10;if (a > 140) a = 140;servopulse(servopin1, a);Serial.print("a="); Serial.println(a);break;case 'S': a -= 10;if (a < 70) a = 70;servopulse(servopin1, a);Serial.print("a="); Serial.println(a);break;case 'A': b += 10;if (b > 180) b = 180;  Serial.print("b="); Serial.println(b);break;case 'D': b -= 10;if (b < 0) b = 0;Serial.print("b="); Serial.println(b);break;case '8':  c += 10;if (c > 180) c = 180;Serial.print("c="); Serial.println(c);break;case '5': c -= 10;if (c < 0) c = 0;Serial.print("c="); Serial.println(c);break;case '4': d += 10;if (d > 180) d = 180;servopulse(servopin4, d);Serial.print("d="); Serial.println(d);break;case '6': d -= 10;if (d < 0) d = 0; servopulse(servopin4, d);Serial.print("d="); Serial.println(d);break;break;default:break;}}void dump(decode_results *results){int count = results->rawlen;if (results->decode_type == UNKNOWN){brake();}}void IR_IN()                             //机器人遥控子程序{if (irrecv.decode(&results)) //调用库函数:解码{if (millis() - last > 250) //确定接收到信号{on = !on;//标志位置反dump(&results);//解码红外信号}if (results.value == CH0 )    { run2();delay(100);brake2();}//前进if (results.value == CH1 )    { back2();delay(100);brake2();}//后退if (results.value == PREV )   { left2();delay(80);brake2();}//左转if (results.value == NEXT )   { right2();delay(80);brake2();}//右转if (results.value == CH2 )     brake2();//停车if (results.value == PLAY )    spin_left2();//左旋转if (results.value == EQ )      spin_right2();//右旋转if (results.value == IR_200 ) { jxbcs();keyMode = KEYMODE_1;brake2();}if (results.value == VOL1 )   { val1 = 'W';jxb(val1); }if (results.value == VOL2 )   { val1 = 'S'; jxb(val1); }if (results.value == IR_0 )   { val1 = 'A';jxb(val1); }if (results.value == IR_100 ) { val1 = 'D';jxb(val1); }if (results.value == IR_1 )   { val1 = '8'; jxb(val1); }if (results.value == IR_2 )   { val1 = '5';jxb(val1);  }if (results.value == IR_4 )   { val1 = '4';jxb(val1); }if (results.value == IR_5 )   { val1 = '6'; jxb(val1);}if (results.value == IR_6 )   keyMode = KEYMODE_1;if (results.value == IR_7)    keyMode = KEYMODE_2;if (results.value == IR_8)    keyMode = KEYMODE_3;if (results.value == IR_9)    keyMode = KEYMODE_4;last = millis();irrecv.resume(); // Receive the next value }}void LEDTask(){switch (keyMode){case KEYMODE_1: IR_IN();digitalWrite(PORT_LED1, HIGH); break; //调用复位程序case KEYMODE_2: Robot_Traction(); digitalWrite(PORT_LED1, LOW);break;case KEYMODE_3: bz();digitalWrite(PORT_LED1, HIGH);break;//用超声波避障程序case KEYMODE_4: gs();digitalWrite(PORT_LED1, LOW);break; //调用跟随程序case KEYMODE_5: ceju(); digitalWrite(PORT_LED1, HIGH);break;//测距default:break;}}void reve(){if( Serial.available()>0 ){int receive=Serial.parseInt();if(receive>=1 && receive<=5){moveSpeed=int(receive*40+55);}else if(receive==0)        {brake();Serial.println("Speed=0,brake");}//停车else if(receive==100)      { val1 = 'A';jxb(val1); }else if(receive==101)      { val1 = 'W';jxb(val1); }else if(receive==102)      { val1 = 'S';jxb(val1);}else if(receive==103)      { val1 = 'D';jxb(val1);}else if(receive==104)      { val1 = '5';jxb(val1);}else if(receive==105)      { val1 = '4';jxb(val1); }else if(receive==106)      { val1 = '6';jxb(val1);}else if(receive==107)      { val1 = '8';jxb(val1);}else if(receive==117)      { jxbcs(); keyMode = KEYMODE_1;Serial.println("FW");brake2();}     else if(receive==108)     {run(); Serial.println("run");}//前进else if(receive==109)     {back();Serial.println("back");}//后退else if(receive==110)     {brake();Serial.println("brake");}//停车else if(receive==111)     { left();Serial.println("left");}//左else if(receive==112)     {right();Serial.println("right");}//右else if(receive==113)     {keyMode = KEYMODE_2;Serial.println("Robot_Traction");}//寻迹else if(receive==114)     {keyMode = KEYMODE_3;Serial.println("bz");}//避障else if(receive==115)     {keyMode = KEYMODE_4;Serial.println("gs");}//跟随else if(receive==116)     {keyMode = KEYMODE_5;}}}void loop(){reve();//蓝牙遥控IR_IN();//红外遥控LEDTask();//模式区分servopulse(servopin2, b);//2舵机连续转动servopulse(servopin3, c);//3舵机连续转动}

相关文章:

智能寻迹避障清障机器人设计(电路图附件+代码)

附 录 智能小车原理图 智能小车拓展板原理图 智能小车拓展板PCB 智能小车底板PCB Arduino UNO原理图 Arduino UNO PCB 程序部分 void Robot_Traction() //机器人循迹子程序{//有信号为LOW 没有信号为HIGHSR digitalRead(SensorRight);//有信号表明在白…...

设计模式-- 3.适配器模式

适配器模式 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色和职责 请求者&#xff08;client&#xff09;&#xff1a;客户端角色,需要使用适配器的对象&#xff0c;不需要关心适配器内部的实现&#xff0c;…...

设计一个简单的规则引擎

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…...

openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c

文章目录 openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c概述笔记END openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c 概述 使用 SHA3-512 对stdin输入做摘要, 并输出摘要值. 笔记 /*! \file EVP_MD_stdin.c \note openssl3.2 - 官方demo学习 - digest - EVP…...

浅谈 Raft 分布式一致性协议|图解 Raft

前言 大家好&#xff0c;这里是白泽。本文是一年多前参加字节训练营针对 Raft 自我整理的笔记。 本篇文章将模拟一个KV数据读写服务&#xff0c;从提供单一节点读写服务&#xff0c;到结合分布式一致性协议&#xff08;Raft&#xff09;后&#xff0c;逐步扩展为一个分布式的…...

4_【Linux版】重装数据库问题处理记录

1、卸载已安装的oracle数据库。 2、知识点补充&#xff1a; 3、调整/dev/shm/的大小 【linux下修改/dev/shm tmpfs文件系统大小 - saratearing - 博客园 (cnblogs.com)】 mount -o remount,size100g /dev/shm 4、重装oracle后没有orainstRoot.sh 【重装oracle后没有orains…...

隧道应用2-netsh端口转发监听Meterpreter

流程介绍&#xff1a; 跳板机 A 和目标靶机 B 是可以互相访问到的&#xff0c;在服务器 A 上可以通过配置 netsh 端口映射访问 B 服务器。如果要拿 B 服务器的权限通常是生成正向后门&#xff0c;使用 kali 的 msf 正向连接B服务器&#xff0c;进而得到 Meterpreter&#xff0c…...

《Spring》--使用application.yml特性提供多环境开发解决方案/开发/测试/线上--方案1

阿丹有话说&#xff1a; 有不少同志有疑问说我正常开发的时候&#xff0c;需要自己搭建项目的时候。总是出现配置文件环境切换出现问题。多环境系列会出两个文章解决给搭建重点解决一下这个问题。给与两种解决的方案。正确让大家只需要按照步骤操作就可以完成。 原理&#xf…...

统计项目5000+,出具报表5分钟......捷顺科技数据中台怎么做?

捷顺创立于1992年&#xff0c;以智慧车行、人行出入口软硬件产品为依托&#xff0c;致力于智慧停车生态建设和运营&#xff0c;是出入口智能管理和智慧生态环境建设的开创者和引领者。 历经近三十年的发展&#xff0c;已经成为国内智慧停车领域的领军企业。公司集研、产、销一…...

力扣(105. 从前序与中序遍历序列构造二叉树,106. 从中序与后序遍历序列构造二叉树)

题目1链接 题目1&#xff1a; 思路&#xff1a;使用前序确定根&#xff0c;使用中序分左右子树&#xff0c;分治法。 难点&#xff1a;如何控制递归确定左右子树。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* T…...

网络安全技术新手入门:在docker上安装dvwa靶场

前言 准备工作&#xff1a;1.已经安装好kali linux 步骤总览&#xff1a;1.安装好docker 2.拖取镜像&#xff0c;安装dvwa 一、安装docker 输入命令&#xff1a;sudo su 输入命令&#xff1a;curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key …...

Docker 介绍 及 支持的操作系统

Docker组成&#xff1a; Docker主机(Host)&#xff1a; 一个物理机或虚拟机, 用于运行Docker服务进程和容器, 也成为宿主机, node节点。 Docker服务器端(Server)&#xff1a; Docker守护进程, 运行Docker容器。 Docker客户端(Client)&#xff1a; 客户端使用docker命令或其他工…...

大模型实战营Day5 LMDeploy大模型量化部署实践

模型部署 定义 产品形态 计算设备 大模型特点 内存开销大 动态shape 结构简单 部署挑战 设备存储 推理速度 服务质量 部署方案&#xff1a;技术点 &#xff08;模型并行 transformer计算和访存优化 低比特量化 Continuous Batch Page Attention&#xff09;方案&#xff08;…...

py连接sqlserver数据库报错问题处理。20009

报错 pymssql模块连接sqlserver出现如下错误&#xff1a; pymssql._pymssql.OperationalError) (20009, bDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (passwordlocalhost)\n) 解决办法&#xff1a; 打…...

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…...

SQL语句详解二-DDL(数据定义语言)

文章目录 操作数据库创建&#xff1a;Create查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete使用数据库 操作表常见的几种数据类型创建&#xff1a;Create复制表 查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete 操作数据库 创…...

web前端算法简介之链表

链表 链表 VS 数组链表类型链表基本操作 创建链表&#xff1a;插入操作&#xff1a;删除操作&#xff1a;查找操作&#xff1a;显示/打印链表&#xff1a;反转链表&#xff1a;合并两个有序链表&#xff1a;链表基本操作示例 JavaScript中&#xff0c;instanceof环形链表 判断…...

C++函数对象

任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象&#xff0c;同时也提供了许多内置的函数对象。 函数包装器 std::function 提供存储任意类型函数对象的支持。 function (C11) 包装具有指定函数调用签名的任意类型的可调用对象 (类模板) bad_funct…...

插件化简单介绍

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、常见的插件化方案…...

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...