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

news2024/12/29 11:21:53

文章目录

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


前言

💗博主介绍:✌全网粉丝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.coloradmin.cn/o/2160364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Python学习日记-28] 开发基础练习1——股票查询程序

[Python学习日记-28] 开发基础练习1——股票查询程序 简介 题目及效果参考 源码与解析 简介 该练习使用了列表、字典、字符串等之前学到的数据类型&#xff0c;用于巩固实践之前学习的内容&#xff0c;题目当中使用到的数据均摘录与东方财富网&#xff0c;最好在学习完前面的…

【论文阅读】Grounding Language with Visual Affordances over Unstructured Data

Abstract 最近的研究表明&#xff0c;大型语言模型&#xff08;llms&#xff09;可以应用于将自然语言应用于各种各样的机器人技能。然而&#xff0c;在实践中&#xff0c;学习多任务、语言条件机器人技能通常需要大规模的数据收集和频繁的人为干预来重置环境或帮助纠正当前的…

USB总线同步数据采集卡6路高速模拟量采集带DIO功能USB2884/2885/2886

USB2884/2885/2886 数据采集卡 概述&#xff1a; 系统框图&#xff1a; 规格参数&#xff1a; 板卡外形图&#xff1a; 尺寸图及元器件功能说明&#xff1a;

图像识别OCR(Tess4J)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

ZBrush入门使用介绍——16、ArrayMesh

大家好&#xff0c;我是阿赵。   继续介绍ZBrush的用法。这次看看ArrayMesh功能。   简单来说&#xff0c;ArrayMesh功能是可以复制很多个模型&#xff0c;然后根据路径排列。 一、 从阵列预设生成ArrayMesh 先把模型转换成多边形网格体 这时候&#xff0c;ArrayMesh的选…

jupyter安装与使用——Ubuntu服务器

jupyter安装与使用——Ubuntu服务器 一、安装miniconda3/anaconda31. 下载miniconda32. 安装miniconda33. 切换到bin文件夹4. 输入pwd获取路径5. 打开用户环境编辑页面6. 重新加载用户环境变量7. 初始化conda8.验证是否安装成功9.conda配置 二、安装jupyter2.1 conda安装2.2 配…

Java调用数据库 笔记05(查询篇)

一. 数据库&#xff08;通过各种驱动来实现调用&#xff09;&#xff1a; &#xff08;应用程序通过接口控制的各种数据库驱动来调用数据库-->jdbc方法&#xff09; 1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类…

C++_23_STL容器

文章目录 STL容器概念常用容器A string作用构造函数基本赋值操作获取字符串长度存取字符操作拼接操作查找和替换注意:查找是不存在返回-1比较操作截取操作插入与删除string与char * 转换 B vector概述与数组区别迭代器构造函数赋值操作插入与删除取值操作大小相关存储自定义类型…

linux 安装 tomcat9、java环境

一、安装 Java环境 1. 下载文件 https://repo.huaweicloud.com/java/jdk/ 或者网盘&#xff1a;通过网盘分享的文件&#xff1a;jdk-8u192-linux-x64.tar.gz 链接: https://pan.baidu.com/s/1V3pQWzgSLJxdrUdmmKueRA 提取码: qspw 2. 查看Linux系统是否有自带的jdk&#xf…

智慧水利采砂船在线监控平台:构建高效、智能的河道采砂监管体系

随着科技的不断发展&#xff0c;水利行业的智慧化转型也日益受到重视。智慧水利采砂船在线监控平台便是这一转型的重要成果之一。该平台主要服务于水政执法人员&#xff0c;针对取得河道采砂许可证的采砂公司及采砂船&#xff0c;实施在线自动监控&#xff0c;旨在提高监管效率…

评论表设计与实现(多级评论)

首先分析评论的类型 对文章的回复&#xff08;也称根回复或一级回复&#xff09;对根评论的回复 &#xff08;二级回复&#xff0c;被回复的评论id和根评论相同&#xff09;对回复的回复&#xff08;二级回复&#xff0c;被回复的评论id和根评论不同&#xff09; 抽象出数据库…

if __name__ == ‘__main__‘: 在 Python 中的作用

Python Python 是一种广泛使用的高级编程语言&#xff0c;它以其易读性和简洁的语法而闻名。Python 支持多种编程范式&#xff0c;包括面向对象、命令式、函数式和过程式编程。它由 Guido van Rossum 创建&#xff0c;并在 1991 年首次发布。 Python 的一些关键特性包括&#…

MacOS Catalina 从源码构建Qt6.2开发库之02: 配置QtCreator

安装Qt-creator-5.0.2 在option命令中配置Qt Versions指向 /usr/local/bin/qmake6 Kits选入CLang

解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题

解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 遇到SSH连接银河麒麟V10SP1时“connection reset by ip地址 port 22”的错误&#xff0c;可以尝试以下步…

GNU链接器(LD):设置入口点(ENTRY命令)的用法及实例解析

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…

#嵌入式笔面经分享#科大讯飞公司嵌入式硬件面经(第1面)

DNS是什么 DNS&#xff08;Domain Name System&#xff09;是一种用于将域名转换为IP地址的分布式命名系统。它充当 7.12 440 一个组产出最 7.12 440 一个组产出最多的是组长&#xff0c;是管理&#xff0c;这个组不正常。​出一个小学数学应用题&#xff1a;在 OSI七层模型?…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…

什么是反射,反射用途,spring哪些地方用到了反射,我们项目中哪些地方用到了反射

3分钟搞懂Java反射 一、反射是什么 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的工具&#xff0c;它允许程序在运行时获取和操作类、接口、构造器、方法和字段等。反射是Java语言的一个重要特性&#xff0c;它为开发人员提供了许多灵活性&#xf…

PHP探索校园新生态校园帮小程序系统小程序源码

探索校园新生态 —— 校园帮小程序系统&#xff0c;让生活更精彩&#xff01; &#x1f331;【开篇&#xff1a;走进未来校园&#xff0c;遇见新生态】&#x1f331; 你是否厌倦了传统校园的繁琐与单调&#xff1f;是否渴望在校园里也能享受到便捷、智能的生活体验&#xff1…

APS软件:生产计划排程的秩序守护者

生产计划制定 &#xff08;1&#xff09;APS排程是一种高度精细化的生产计划制定方法&#xff0c;它精准地计算出不同产品不同工序生产任务的起始、结束时间、每段工序加工时间内的生产数量以及产品的整个生产周期&#xff0c;同时全面考量设备性能、人员配置、物料供应等关键…