嵌入式小项目练习-光电设计竞赛-寻迹小车-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();
}


目录
相关文章
|
1月前
|
数据采集 机器学习/深度学习 算法
|
30天前
|
人工智能 算法 BI
第一周算法设计与分析 D : 两面包夹芝士
这篇文章介绍了解决算法问题"两面包夹芝士"的方法,通过找出两个数组中的最大最小值,计算这两个值之间的整数个数,包括特判不存在整数的情况。
|
8天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
33 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
8天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
55 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
7天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
37 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
16 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
5天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
19 4
|
3天前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
13 1
|
3天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
16 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
22天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。