当前位置: 首页 > 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 目前国内用的比较多的就…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...