标题:
如何解决51单片机红外避障小车不能在迷宫内走直线这一难题。
[打印本页]
作者:
洛伦兹力量
时间:
2021-7-13 08:35
标题:
如何解决51单片机红外避障小车不能在迷宫内走直线这一难题。
//个人刚入学51单片机,玩的东西,没那么高级
//三轮红外避障小车(一个万向轮,二个轮子用电机驱动)
// 小车由于俩个电机不可能完全相等,摩檫力等等系列因素让二个轮子的转速不同,故无法走直线
//解决思路:
//可以通过左右两边的红外其中一个红外让小车走一个一抖一抖的直线,实现其原理就是 例如是右边打的红外,检测到右边的墙壁,就让它往左走,检测不到右边的墙壁,就让它往右走。让其在中断里进行不断扫描其过程。
//由于速度过大就会抖的非常厉害,故通过PWM调节速度。
//代码如下
#include <REGX52.H>
//L298N输出
sbit out1=P1^3; sbit out3=P1^5;
sbit out2=P1^4; sbit out4=P1^6;
//使能
sbit ine1=P1^0;
sbit ine2=P1^1;
//红外
sbit hw_y=P0^0;
//调节二个轮子的速度,不能让其太快
unsigned int count=0;
unsigned int compare_l=50;
unsigned int compare_r=50;
void Timer0Init()
{
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = 0xA4;
TH0 = 0xFF;
TR0 = 1;
ET0=1;
EA=1;
}
void right() //右
{
compare_l=30;
compare_r=30;
out1=0;
out2=0;
out3=0;
out4=1;
}
void left() //左
{
compare_l=30;
compare_r=30;
out1=1;
out2=0;
out3=0;
out4=0;
}
void Turnaround() //靠墙走直的函数
{
if(hw_y==0)
left();
else if(hw_y==1)
right();
}
void main()
{
Timer0Init();
while(1)
{}
}
void Timer0_Routine() interrupt 1
{
TL0 = 0xA4;
TH0 = 0xFF;
count++;
count%=100;
//左右摇摆放入其中纠正方向,通过那两个函数来调节方向
Turnaround();
if(count<compare_r)
ine1=1;
else
ine1=0;
if(count<compare_l)
ine2=1;
else
ine2=0;
}
//还没解决走出迷宫的思路,希望各位大佬给点建议。蟹蟹啦
作者:
开心就好hhhh
时间:
2021-7-13 11:33
可以用pid算法调节两个轮子的速度
作者:
烈火
时间:
2021-7-13 12:46
PWM口可以再细分一下,遇到障碍物时,可以避开。
作者:
yzwzfyz
时间:
2021-7-14 09:27
PWM等等……,都不是要点:
想想,如果你自己在迷宫里开车:
1、你需要什么条件?
2、你会如何处理?
如果仅仅是走直线,在硬件想想办法,是可以达成相对满意的目标的。
例如:每个汽车都有脱手方向盘走直线的功能,可以借鉴。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1