STC89C52单片机红外避障设计教程
以下是一个基于STC89C52单片机的红外避障设计:
硬件部分:
-
STC89C52单片机
-
红外避障传感器模块
-
电位器(可选)
-
驱动电机的电路
-
LED指示灯
软件部分:
-
初始化程序
-
读取红外传感器数据
-
判断是否有障碍物
-
控制电机运动
-
循环执行
具体实现:
硬件部分:
- STC89C52单片机连接电路如下:

- 红外避障传感器模块连接电路如下:

- 电位器连接电路如下:

- 驱动电机的电路如下:

- LED指示灯连接电路如下:

软件部分:
- 初始化程序:
#include <reg52.h>
#include <intrins.h>
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;
sbit LED = P2^0;
void delay(unsigned int time) // 延时函数
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<112;j++);
}
void main()
{
IN1 = 0; // 初始化电机控制引脚
IN2 = 0;
IN3 = 0;
IN4 = 0;
LED = 0; // 初始化LED指示灯
while(1); // 程序循环执行
}
- 读取红外传感器数据:
unsigned char IRSensor() // 读取红外传感器数据
{
unsigned char val;
val = P3;
return val;
}
- 判断是否有障碍物:
unsigned char obstacleDetection() // 判断是否有障碍物
{
unsigned char val;
val = IRSensor();
if(val != 0xff) // 有障碍物
return 1;
else // 无障碍物
return 0;
}
- 控制电机运动:
void motorControl(unsigned char mode) // 控制电机运动,mode为控制模式
{
switch(mode)
{
case 1: // 向前运动
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
break;
case 2: // 向左运动
IN1 = 0;
IN2 = 1;
IN3 = 1;
IN4 = 0;
break;
case 3: // 向右运动
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 1;
break;
case 4: // 停止运动
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
break;
}
}
- 循环执行:
void main()
{
unsigned char mode = 1; // 初始化运动模式
IN1 = 0; // 初始化电机控制引脚
IN2 = 0;
IN3 = 0;
IN4 = 0;
LED = 0; // 初始化LED指示灯
while(1) // 程序循环执行
{
if(obstacleDetection()) // 如果有障碍物
{
LED = 1; // 点亮LED指示灯
motorControl(2); // 向左运动
delay(1000); // 延时1秒
mode = 3; // 改变运动模式,向右运动
}
else // 如果无障碍物
{
LED = 0; // 熄灭LED指示灯
motorControl(mode); // 继续当前运动模式
}
}
}
以上就是一个基于STC89C52单片机的红外避障设计。该设计通过读取红外传感器数据来判断是否有障碍物,如果有障碍物则向左运动,延时1秒后再向右运动,如果无障碍物则继续当前运动模式。同时,该设计还使用LED指示灯来显示是否有障碍物。
原文地址: https://www.cveoy.top/t/topic/onGc 著作权归作者所有。请勿转载和采集!