嵌入式小项目练习-光电设计竞赛-寻迹小车-03-寻迹算法分析与源代码

简介: 嵌入式小项目练习-光电设计竞赛-寻迹小车-03-寻迹算法分析与源代码

这里我用了三个光敏电阻的传感器来进行寻迹:这里用X1,X2,X3(检测到了为0)来表示:

算法思路:

将三个传感器放置如图:         |          |          |

1)直行:X1=1;X2=0;X3=1;

2)左转:X1=0;X2=1;X3=1;

3)右转:X1=1;X2=1;X3=0;

4)直角左转:X1=0;X2=0;X3=1;

5)直角右转:X1=1;X2=0;X3=0;

其他情况慢慢后退:这样提高了小车的容错性,如果一旦出现寻迹乱码的情况(这里指未出现的组合数如:X1=1 X2=0 X3=1)

算法思路很简单主要看小车寻迹的赛道,代码中的pwm的宽度是随意设置的,具体什么样的弯道角度需要耐心调试,反复试验。

main.c

#include<reg52.h>#include<pwm.h>#defineu8unsignedchar#defineu16unsignedint//光学开关模块sbitLS=P2^3;
//接寻迹模块#definefin_1P3^6#definefin_2P3^7#definefin_3P3^5voidmain()
{
P1=0X00;   //关电机    TMOD=0X01;
TH0=0XFc;        //1ms定时TL0=0X18;
TR0=1;
ET0=1;
EA=1;            //开总中断while(1)
    {
if(LS==1)
        {    
if(fin_1==1&&fin_2==0&&fin_3==1)
run();
elseif(fin_1==1&&fin_2==1&&fin_3==0)
right();
elseif(fin_1==0&&fin_2==1&&fin_3==1)
left();
elseif(fin_1==1&&fin_2==0&&fin_3==0)
right_90();
elseif(fin_1==1&&fin_2==0&&fin_3==0)
left_90();
elseback();
        }
else        {
P0=0X00;   //关电机        }
    } 
}

pwm.h文件:

#ifndef_PWM_H#define_PWM_H#include<reg52.h>//定义小车驱动模块输入IO口 sbitIN1=P1^0;
sbitIN2=P1^1;
sbitIN3=P1^2;
sbitIN4=P1^3;
//pwm端使能位:sbitLeft_pwm=P1^6;  //PWM信号端sbitRight_pwm=P1^7;     //PWM信号端//小车驱动接线定义  voidLeft_moto_go();      //左电机向前走voidLeft_moto_back();      //左边电机向后转//void Left_moto_Stop();      //左边电机停转                     voidRight_moto_go();       //右边电机向前走voidRight_moto_back();     //右边电机向后走//void Right_moto_Stop();     //右边电机停转//左电机调速  调节push_val_left的值改变电机转速,占空比externvoidpwm_out_left_moto(void);
externvoidpwm_out_right_moto(void);
//调速模块externvoidrun();
externvoidleft_90();
externvoidright_90();
externvoidleft();
externvoidright();
externvoidback();
#endif

pwm.c文件

#include<reg52.h>#include<pwm.h>unsignedcharpwm_left=0;//变量定义unsignedcharpush_left=0;// 左电机占空比N/100unsignedcharpwm_right=0;  
unsignedcharpush_right=0;// 右电机占空比N/100unsignedinttime=0;
voidLeft_moto_go()
{
IN1=1;
IN2=0;
    }  
voidLeft_moto_back()
{
IN1=0;
IN2=1;
}   
/*void Left_moto_Stop()   {IN1=0;IN2=0;}*/voidRight_moto_go()     
{
IN3=1;
IN4=0;
}   
voidRight_moto_back()   
{
IN3=0;
IN4=1;
}
/*  void Right_moto_Stop()   {IN3=0;IN4=0;} *///左电机调速  调节push_val_left的值改变电机转速,占空比voidpwm_out_left_moto(void)
{  
if(pwm_left<=push_left)
           {
Left_pwm=1; 
           }
else           {
Left_pwm=0;
           }
if(pwm_left>100)
pwm_left=0;
}
//右电机调速                                    voidpwm_out_right_moto(void)
{  
if(pwm_right>100)
pwm_right=0;
if(pwm_right<=push_right)
    {
Right_pwm=1; 
    }
else    {
Right_pwm=0;
    } 
}
//前进voidrun(void)
{
push_right=80;
push_left=80;
Left_moto_go();
Right_moto_go();
}
//左转直角voidleft_90(void)
{
push_right=50;
push_left=80;
Left_moto_go();
Right_moto_back();     
}
//右转直角voidright_90(void)
{
push_right=80;
push_left=50;
Right_moto_go();
Left_moto_back();
}
//左转微调voidleft(void)
{
push_right=80;
push_left=60;
Left_moto_go();
Right_moto_go();
}
//右转微调voidright(void)
{
push_right=80;
push_left=60;
Right_moto_go();
Left_moto_go();
}
//后退voidback(void)
{
push_right=20;
push_left=20;
Left_moto_back();
Right_moto_back();
}
// TIMER0中断服务子函数产生PWM信号voidtimer0()  interrupt1using2{
TH0=0XFc;    //1Ms定时TL0=0X18;
time++;
pwm_left++;
pwm_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}


目录
相关文章
|
3月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
95 4
|
4月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
122 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
1天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
10天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
25 6
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
4月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
153 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
3月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
4月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
4月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
151 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
81 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练

热门文章

最新文章