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

文章目录


前言

💗博主介绍:✌全网粉丝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;
 * }
 * } */

具体实现截图


设计获取

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

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

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

相关推荐
hairenjing11235 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
模拟IC攻城狮7 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
IT B业生7 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机
一枝小雨7 小时前
51单片机学习心得2(基于STC89C52):串口通信(UART)
单片机·嵌入式硬件·51单片机
IT B业生8 小时前
51单片机教程(一)- 开发环境搭建
单片机·嵌入式硬件·51单片机
海绵波波10710 小时前
Webserver(4.8)UDP、广播、组播
单片机·网络协议·udp
好想有猫猫10 小时前
【51单片机】串口通信原理 + 使用
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
云卓科技11 小时前
无人车之路径规划篇
人工智能·嵌入式硬件·算法·自动驾驶
stm 学习ing12 小时前
C语言 循环高级
c语言·开发语言·单片机·嵌入式硬件·算法·嵌入式实时数据库
w微信1501350781212 小时前
小华一级 代理商 HC32F005C6PA-TSSOP20 HC32F005系列
c语言·arm开发·单片机·嵌入式硬件