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

基于单片机巡迹避障智能小车系统

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 设计程序
  • 具体实现截图
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

基于单片机巡迹避障智能小车系统是一个集成了单片机控制、传感器检测、路径识别和避障策略于一体的智能系统。以下是对该系统的详细介绍:

一、系统组成

  1. 核心控制器
    单片机作为整个系统的核心控制器,负责接收传感器数据、执行控制算法,并输出控制指令。常用的单片机型号包括STC89C52、Arduino、Raspberry Pi等,这些单片机具有性能稳定、功耗低、适合实时控制等特点。

  2. 传感器
    寻迹传感器:用于检测地面上的特定路径标记,如黑线。通常使用红外线传感器或光电传感器,通过检测反射光线的变化来确定路径位置。
    避障传感器:用于检测小车前方是否存在障碍物,并测量障碍物的距离。常用的避障传感器包括超声波传感器和红外测距传感器。

设计程序

#include <reg52.h>
#define uchar	unsigned char
#define uint	unsigned int
uchar temp, signal, tt1, t0, t1, t2, t3, t4, t5, t6;sbit	jia	= P3 ^ 1;
sbit	jian	= P3 ^ 2;uchar time = 20;void delay_1ms( uint d )
{uint i;while ( d-- )for ( i = 0; i < 75; i++ );
}void delay_50us( unsigned int t )  /* 延时函数 */
{unsigned int j, k;for (; t > 0; t-- ){for ( j = 10; j > 0; j-- ){for ( k = 1; k > 0; k-- );}}
}void motor_run()     /* 电机起动 */
{P1 = 0x35;delay_1ms( 220 - time );P1 = 0x53;delay_1ms( time );
}void motor_left()    /* 左进 */
{P1 = 0x30;delay_1ms( 220 - time );P1 = 0x00;delay_1ms( time );
}void motor_right()     /* 右进 */
{P1 = 0x05;delay_1ms( 220 - time );P1 = 0x00;delay_1ms( time );
}void motor_big_right()    /* 粗右进 */
{P1 = 0x55;delay_1ms( 220 - time );P1 = 0x00;delay_1ms( time );
}void motor_big_left()
{P1 = 0x33;delay_1ms( 220 - time );P1 = 0x00;delay_1ms( time );
}void motor_stop()      /* 电机停止 */
{P1 = 0x00;
}void  key_scan()
{if ( jia == 0 ) /* 判定 */{delay_50us( 100 );/* 延时 */if ( jia == 0 ){time++;if ( time == 200 )time = 200;while ( jia == 0 );/* 自锁 */}}if ( jian == 0 ) /* 判定 */{delay_50us( 100 );/* 延时 */if ( jian == 0 ){time--;if ( time == 20 )time = 20;while ( jian == 0 );/* 自锁 */}}
}void motor_back()
{P1 = 0x53;
}void main()
{t0	= 0;t1	= 0;t2	= 0;t3	= 0;t4	= 0;t5	= 0;t6	= 0;tt1	= 0;EA	= 1;ET1	= 1;TR1	= 1;TMOD	= 0x01;TH1	= -(1000 / 256);TL1	= -(1000 % 256);while ( 1 ){key_scan();if ( P3 == 0xfe ){motor_back();}else{temp	= P2;signal	= temp & 0xff;  /* 得到红外反向信号 */switch ( signal ){case 0xff:              /* 无偏差 */motor_run();t0++;if ( t0 == 10 ){t0 = 0;motor_left();motor_right();}t1 = t2 = t3 = t4 = t5 = t6 = 0;break;case 0xfd: /* 1轮右偏 */motor_big_left();t1++;if ( t1 == 4 ){t1 = 0;motor_left();}t0 = t2 = t3 = t4 = t5 = t6 = 0;break;case 0xef: /* 4轮左偏 */motor_big_right();t2++;if ( t2 == 4 ){t2 = 0;motor_right();}t0 = t1 = t3 = t4 = t5 = t6 = 0;break;case 0xfb:      /* 2轮右偏出轨 */case 0xf9:      /* 1、2轮右偏 */motor_big_left();t3++;if ( t3 == 4 ){t3 = 0;motor_left();}t0 = t1 = t2 = t4 = t5 = t6 = 0;
/*				delay_1ms(10); */break;case 0xdf:      /* 5左偏出轨 */case 0xcf:      /* 4、5轮左偏 */motor_big_right();t4++;if ( t4 == 4 ){t4 = 0;motor_right();}t0 = t1 = t2 = t3 = t5 = t6 = 0;
/*				delay_1ms(10); */break;case 0xfe: /* 0最右偏出轨 */case 0xfa:motor_big_left();t5++;if ( t5 == 1 ){t5 = 0;motor_left();motor_left();}t0 = t1 = t2 = t3 = t4 = t6 = 0;
/*				delay_1ms(10); */break;case 0xbf: /* 6最左偏出轨 */case 0x9f:motor_big_right();t6++;if ( t6 == 1 ){t6 = 0;motor_right();motor_right();}t0 = t1 = t2 = t3 = t4 = t5 = 0;
/*				delay_1ms(10); */break;case 0xeb:      /* 前两传感器压在黑线上 */case 0xdb:      /* 后两传感器压在黑线上 */case 0xbe:      /* 中间两传感器压在黑线上 */case 0xac:      /* 前四传感器压在黑线上 */case 0x9a:      /* 后四传感器压在黑线上 */motor_back();delay_1ms( 200 );motor_stop();/*				delay_1ms(1000); */default:
/**                      motor_back();*                      delay_1ms(50);*                      motor_left();*                      motor_right();*/break;}}}
}/*void time1() interrupt 3* {** TH1=-(1000/256);* TL1=-(1000%256);* tt1++;* if(tt1==300)* {* motor_back();* //	delay_1ms(1);* tt1=0;* }* } */

具体实现截图

在这里插入图片描述
在这里插入图片描述

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟


http://www.mrgr.cn/news/34574.html

相关文章:

  • Mysql 5.7.6以上版本怎样关闭GTID(由GTID改为基于file,position方式)
  • RabbitMQ集群搭建
  • AI 大模型应用:AI开发的捷径工作流模式
  • MySQL中字段类型和Java对象中的数据类型对应关系
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 内网安全-代理技术-socket协议
  • 设计模式相关知识
  • SpringBoot+Aop+注解方式 实现多数据源动态切换
  • vcruntime140_1.dll无法继续执行代码的6种解决方法
  • Undet for sketchup 2023.3注册机 支持草图大师sketchup2021-2022-2023
  • 数据结构之图的遍历
  • MySQL | 使用 HAVING 子句进行高级数据筛选
  • 数据链路层协议 —— 以太网协议
  • 如何快速免费搭建自己的Docker私有镜像源来解决Docker无法拉取镜像的问题(搭建私有镜像源解决群晖Docker获取注册表失败的问题)
  • 全栈开发(四):使用springBoot3+mybatis-plus+mysql开发restful的增删改查接口
  • 代码随想录算法训练营Day11
  • JDK7u21 HashMap版
  • C++之STL—vector容器进阶篇
  • Spring源码学习:SpringMVC(2)DispatcherServlet初始化【子容器9大组件】
  • go解决引入私有包报错“Repository owner does not exist“的两种方式
  • 难题妙解——前K个高频单词
  • Vue从入门到精通:全方位掌握Vue.js开发技能
  • CF 461 B Appleman and Tree 题解(树形 dp+排列组合)
  • MySQL和SQL的区别简单了解和分析使用以及个人总结
  • 手写数字识别案例分析(torch,深度学习入门)
  • 看Threejs好玩示例,学习创新与技术(React-three-fiber)