找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3104|回复: 3
打印 上一主题 下一主题
收起左侧

如何解决51单片机红外避障小车不能在迷宫内走直线这一难题。

[复制链接]
跳转到指定楼层
楼主
ID:936280 发表于 2021-7-13 08:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//个人刚入学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;
}



//还没解决走出迷宫的思路,希望各位大佬给点建议。蟹蟹啦
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:934353 发表于 2021-7-13 11:33 | 只看该作者
可以用pid算法调节两个轮子的速度
回复

使用道具 举报

板凳
ID:744327 发表于 2021-7-13 12:46 | 只看该作者
PWM口可以再细分一下,遇到障碍物时,可以避开。
回复

使用道具 举报

地板
ID:123289 发表于 2021-7-14 09:27 | 只看该作者
PWM等等……,都不是要点:
想想,如果你自己在迷宫里开车:
1、你需要什么条件?
2、你会如何处理?
如果仅仅是走直线,在硬件想想办法,是可以达成相对满意的目标的。
例如:每个汽车都有脱手方向盘走直线的功能,可以借鉴。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表