基于单片机巡迹避障智能小车系统
前言
💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
资料获取
文章底部名片,详细资料联系我。
设计介绍
基于单片机巡迹避障智能小车系统是一个集成了单片机控制、传感器检测、路径识别和避障策略于一体的智能系统。以下是对该系统的详细介绍:
一、系统组成
-
核心控制器
单片机作为整个系统的核心控制器,负责接收传感器数据、执行控制算法,并输出控制指令。常用的单片机型号包括STC89C52、Arduino、Raspberry Pi等,这些单片机具有性能稳定、功耗低、适合实时控制等特点。 -
传感器
寻迹传感器:用于检测地面上的特定路径标记,如黑线。通常使用红外线传感器或光电传感器,通过检测反射光线的变化来确定路径位置。
避障传感器:用于检测小车前方是否存在障碍物,并测量障碍物的距离。常用的避障传感器包括超声波传感器和红外测距传感器。
设计程序
#include <reg52.h>
#define ucharunsigned char
#define uintunsigned int
uchar temp, signal, tt1, t0, t1, t2, t3, t4, t5, t6;
sbitjia= P3 ^ 1;
sbitjian= 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;
* }
* } */
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
毕业设计精品实战案例
收藏关注不迷路!!
🌟文末获取设计🌟
原文地址:https://blog.csdn.net/QQ1928499906/article/details/142468087
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!