51单片机趣玩制作—智能避障小车_V1.0

一、智能避障小车(V1.0)

V1.0版本智能避障小车,通过单片机控制各避障模块并驱动直流电机,实现小车根据障碍物情况不同,做出前进/后退/转弯/后转弯等动作,可以在一般室内条件下无碰撞行进。

(一)准备阶段

1、制作思路

先购买各个硬件模块,之后解耦智能避障小车为动力模块避障模块两大部分,分别测试成功后进行软件模拟,最后完成硬件拼接与实际测试。

2、制作原则

安全第一,避免翻车。

3、硬件系统

(1)动力模块

四个直流减速电机,一个L298N电机驱动模块;

(2)避障模块

四个或六个红外避障模块;

(3)其它

组装用:89C52单片机、5V电池、小车底盘、固定件、轮子(某宝成套出售),打胶枪,电烙铁、杜邦线(公母)
在这里插入图片描述

4、软件系统

(1)动力模块

A.驱动电机正反转:
驱动一组直流电机正转,当P3^2口接收一个低电平时触发外部中断,中断返回后驱动直流电机反转(L298N驱动电机真值表如下):
在这里插入图片描述
程序:

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1 = P0^0;
sbit IN2 = P0^1;
uint flag;
void exter0() interrupt 0{
	IN1 = 1;
	IN2 = 1;
	flag = 0;
}
void main(){
	flag = 1;
	EA = 1;
	EX0 = 1;
	while(flag == 1){
		IN1 = 1;
		IN2 = 0;
	}
	if(flag == 0){
		while(1){
			IN1 = 0;
			IN2 = 1;
		}
	}
}
(2)避障模块

A.当避障模块前有障碍物时向单片机P3^2口发送一个低电平

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1 = P1^0;
sbit led2 = P1^1;
uint flag;
void exter0() interrupt 0{
	flag = 0;
	led1 = 0;
    led2 = 1;
}
void main(){
	flag = 1;
	EA = 1;
	EX0 = 1;
	while(flag == 1){
		led1 = 0;
        led2 = 0;
	}
	if(flag == 0){
		while(1){
            led1 = 1;
			led2 = 0;
		}
	}
}
(3)模块合并

A.智能小车上电后直行,当4个避障模块中任意一个遇到障碍物时,小车停止并后退,后方遇到障碍停止并前进,五次遇到障碍后小车停止,LED1点亮。

扫描二维码关注公众号,回复: 9930658 查看本文章
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1 = P1^0;
sbit IN1 = P0^0;
sbit IN2 = P0^1;
sbit IN3 = P0^2;
sbit IN4 = P0^3;
sbit ob1 = P0^4;
sbit ob2 = P0^5;
sbit ob3 = P0^6;
sbit ob4 = P0^7;
sbit ex0 = P3^2;
uint flag,temp,obstacle,n;
void delay(uint z){
    uint x,y;
    for (x = 200; x > 0; x--) {
        for(y = z; y > 0; y--);
    }
}
void exter0() interrupt 0{
	IN1 = IN2 = IN3 = IN4 = 1;
	ex0 = 1;
	obstacle = 1;
	n = !flag;
	flag = n;
	temp ++;
}
void main(){
	while(1){
		ob1 = ob2 = ob3 = ob4 = 1;
		ex0 = 1;
		flag = 1;
		temp = 1;
		EA = 1;
		EX0 = 1;
		while(temp <= 5){
			while(flag == 1){
				IN1 = IN3 = 1;
				IN2 = IN4 = 0;
				obstacle = ob1 && ob2;
				while(obstacle == 0){
					ex0 = obstacle;
					delay(210);
				}
			}
			while(flag == 0){
				IN1 = IN3 = 0;
				IN2 = IN4 = 1;
				obstacle = ob3 && ob4;
				while(obstacle == 0){
					ex0 = obstacle;
					delay(210);
				}
			}
		}
		while(1){
			IN1 = IN2 = IN3 = IN4 = 0;
			led1 = 0;
		}
	}
}

(二)测试阶段

正常运行,测试成功。
下一个版本计划升级转向避障与声音控制启动。

发布了12 篇原创文章 · 获赞 15 · 访问量 2698

猜你喜欢

转载自blog.csdn.net/m0_46115596/article/details/104832933
今日推荐