50分悬赏循迹小车完整程序,

50分悬赏循迹小车完整程序,,第1张

智能小车程序
#include "reg52h"
#define det_Dist 255 //单个脉冲对应的小车行走距离,其值为车轮周长/4
#define RD 9 //小车对角轴长度
#define PI 31415926
#define ANG_90 90
#define ANG_90_T 102
#define ANG_180 189
/============================全局变量定义区============================/
sbit P10=P1^0; //控制继电器的开闭
sbit P11=P1^1; //控制金属接近开关
sbit P12=P1^2; //控制颜色传感器的开闭
sbit P07=P0^7; //控制声光信号的开启
sbit P26=P2^6; //接收颜色传感器的信号,白为0,黑为1
sbit P24=P2^4; //左
sbit P25=P2^5; //右 接收左右光传感器的信号,有光为0
unsigned char mType=0; //设置运动的方式,0 向前 1 向左 2 向后 3 向右
unsigned char Direction=0; //小车的即时朝向 0 朝上 1 朝左 2 朝下 3 朝右
unsigned sX=50; unsigned char sY=0; //小车的相对右下角的坐标 CM(sX,sY)
unsigned char StartTask=0; //获得铁片后开始执行返回卸货任务,StartTask置一
unsigned char Inter_EX0=0; // 完成一个完整的任务期间只能有一次外部中断
// Inter_EX0记录外部中断0的中断状态
// 0 动作最近的前一次未中断过,
// 1 动作最近的前一次中断过
unsigned char cntIorn=0; //铁片数
unsigned char bkAim=2; //回程目的地,0为A仓库,1为B仓库,2为停车场,
//(在MAIN中接受铁片颜色判断传感器的信号来赋值)
unsigned char Light_Flag=0;//进入光引导区的标志(1)
unsigned int cntTime_5Min=0;//时间周期数,用于 T0 精确定时
unsigned int cntTime_Plues=0; //霍尔开关产生的脉冲数
/============================全局变量定义区============================/
/------------------------------------------------/
/-----------------通用延迟程序-------------------/
/------------------------------------------------/
void delay(unsigned int time) // time05ms延时
{
unsigned int i,j;
for(j=0;j<time;j++)
{
for(i=0;i<60;i++)
{;}
}
}
/-----------------------------------------------/
/-------------------显示控制模块----------------/
/-----------------------------------------------/
/数码管显示,显示铁片的数目(设接在P0,共阴)/
void Display(unsigned char n)
{
char Numb[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x37,0x77};
P0=Numb[n];
}
/-----------------------------------------------/
/-------------------传感器模块------------------/
/-----------------------------------------------/
/光源检测程序: /
/用于纠正小车运行路线的正确性/
unsigned char LightSeek()
{ void Display(unsigned char);
bit l,r;
l=P24;
r=P25;
if(l==0&&r==1)
{
//Display(1);
return (3); //偏左,向右开
}
if(r==0&&l==1)
{
//Display(3);
return(1); //偏右,向左开
}
if((l==1&&r==1)||(l==0&&r==0))
{//Display(9);
return(0); //没有偏离,前进
}

}
/铁片检测程序: /
/判断铁片的颜色,设定bkAim,0为A仓库,1为B仓库,2为停车场/
void IornColor()
{
delay(4000);
bkAim=(int)(P26);
Display((int)(P26)+2);
}
/-----------------------------------------------/
/------------------运动控制模块-----------------/
/-----------------------------------------------/
/====基本动作层:完成基本运动动作的程序集====/
/运动调整程序: /
/对小车的运动进行微调/
void ctrMotor_Adjust(unsigned char t)
{
if(t==0)
{
P2=P2&240|11; //用来解决两电机不对称的问题
delay(6);
}
if(t==3)
{
P2=P2&250; //向左走
delay(1);
}
if(t==1)
{
P2=(P2&245);
delay(1); //向右走
}
P2=((P2&240)|15);
delay(10);
}
/直走程序: /
/控制小车运动距离,dist为运动距离(cm),type为运动方式(0 2)/
/只改变小车sX 和 sY的值而不改变Direction的值 /
void ctrMotor_Dist(float dist,unsigned char type)
{unsigned char t=0;
mType=type;
P2=((P2&240)|15);
cntTime_Plues=(int)(dist/det_Dist);
while(cntTime_Plues)
{
if(Inter_EX0==1&&StartTask==0)
{
cntTime_Plues=0;
break;
}
if(Light_Flag==1) t=LightSeek();

if(type==0) //向前走
{
P2=P2&249;
delay(40);
ctrMotor_Adjust(t);
}
if(type==2) //向后退
{
P2=P2&246;
delay(50);
ctrMotor_Adjust(t);
}
P2=((P2&240)|15);
if(mType==2) delay(60);//刹车制动 05ms
else delay(75);
}
}
/拐弯程序: /
/控制小车运动角度,type为运动方式(1 3) /
/只改变小车Direction的值而不改变sX 和 sY的值/
void ctrMotor_Ang(unsigned char ang,unsigned char type,unsigned char dir)
{
unsigned char i=0;
mType=type;
P2=((P2&240)|15);
cntTime_Plues=(int)((PIRD90/(180det_Dist)12)ang/90);
while(cntTime_Plues)
{
if(Inter_EX0==1&&StartTask==0)
{
cntTime_Plues=0;
break;
}
if(type==1) //向左走
{
P2=P2&250;
delay(100);
ctrMotor_Adjust(0);
}
if(type==3) //向右走
{
P2=P2&245;
delay(100);
ctrMotor_Adjust(0);
}
P2=((P2&240)|15);
delay(50);//刹车制动 05ms
}
if(!(Inter_EX0==1&&StartTask==0))
{
Direction=dir;
}
}
/====基本路线层:描述小车基本运动路线的程序集====/
/当小车到达仓库或停车场时,放下铁片或停车(0,1为仓库,2为停车场)/
void rchPlace()
{unsigned int time,b,s,g;
time=(int)(cntTime_5Min0065535);//只有一个数码管时,轮流显示全过程秒数 个 十 百
b=time%100;
s=(time-b100)%100;
g=(time-b100-s10)%10;
if(bkAim==2)
{
//到达停车场了,停车
EA=0;
P2=((P2&240)|15);
while(1)
{
Display(10); //N
delay(2000);
Display(cntIorn);
delay(2000);
Display(11);//A
delay(2000);
Display(b);
delay(2000);
Display(s);
delay(2000);
Display(g);
delay(2000);
}
}
else
{
if(Inter_EX0==1&&StartTask==1)P10=0; //到达仓库,卸下铁片
}
}
/无任务模式: /
/设置小车的固定运动路线,未发现铁片时的运动路线/
void BasicRoute()
{ //Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_90,1,1);
ctrMotor_Dist(100-sX,0);
ctrMotor_Dist(125,2);
ctrMotor_Dist(73,0);
ctrMotor_Ang(ANG_90,1,2);
//Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_180,1,0);
rchPlace();

}
/任务模式: /
/设置小车的发现铁片后的运动路线/
void TaskRoute()
{
//基本运行路线表,记载拐弯 0 向前 1 左拐 2 向后 3 右拐,正读去A区;反读去B区
StartTask=1;
ctrMotor_Ang(ANG_90_T,1,2);
if(bkAim==1) //仓库A
{
ctrMotor_Dist(10,0);
P2=((P2&240)|15);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,2);
ctrMotor_Ang(ANG_90_T,1,2);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
// ctrMotor_Ang(208,1,0);
}
else if(bkAim==0) //仓库B
{
ctrMotor_Dist(10,0);
P2=((P2&240)|15);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,0);
ctrMotor_Ang(ANG_90_T,1,0);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
//ctrMotor_Ang(208,1,0);
}
delay(5000);

rchPlace();
}
/---------------------------------------------/
/-------------------主程序段------------------/
/---------------------------------------------/
void main()
{
delay(4000);
P2=0xff; //初始化端口
P07=0;
P1=0;
TMOD=0x01; //初始化定时器0/1 及其中断
TL0=0;
TH0=0;
TR0=1;
ET0=1;
ET1=1;
IT0=1; //初始化外部中断
EX0=1;
IT1=1;
EX1=1;
EA=1;
P11=1;
while(1)
{
Display(cntIorn);
bkAim=2;

BasicRoute();
if(Inter_EX0==1)
{
TaskRoute();//按获得铁片后的路线运动
IE0=0;
EX0=1;
}
Inter_EX0=0;

}
}
/----------------------------------------------------/
/----------------------中断程序段--------------------/
/----------------------------------------------------/
/定时器0中断程序: /
/当时间过了5分钟,则就地停车并进入休眠状态/
void tmOver(void) interrupt 1
{
cntTime_5Min++;
TL0=0;
TH0=0;
if(cntTime_5Min>=4520)
{
Display(5);
P2=((P2&240)|15);
EA=0; //停车程序
P07=1;
delay(4000);
PCON=0X00;
while(1);
}
}
/外部中断0中断程序: /
/发现铁片,发出声光信号并将铁片吸起,发光二极管和蜂鸣器/
/并联在一起(设接在P07) 0为A仓库,1为B仓库,2为停车场/
void fndIorn(void) interrupt 0
{
unsigned char i;
P10=1;
P2=((P2&240)|15); //停车
P07=1;
delay(1000);//刹车制动 05ms
P07=0;
Inter_EX0=1;
cntIorn++;
Display(cntIorn);
for(i=0;i<40;i++)
{
P2=P2&249;
delay(2);
P2=((P2&240)|15);
delay(2);
}
P2=P2&249;
delay(100);
P2=((P2&240)|15); //停车
IornColor(); //判断铁片黑白,设置bkAim
for(i=0;i<95;i++)
{
P2=P2&249;
delay(3);
P2=((P2&240)|15);
delay(2);
}
P2=((P2&240)|15); //停车
delay(4000); //把铁片吸起来
EX0=0;
}
/外部中断1中断程序: /
/对霍尔开关的脉冲记数,对小车的位置进行记录,以便对小车进行定位/
void stpMove(void) interrupt 2
{
cntTime_Plues--;
if(Direction==0) //向上
{
if(mType==0) sY+=det_Dist;
else if(mType==2)
sY-=det_Dist;
}
else if(Direction==1) //向左
{
if(mType==0) sX+=det_Dist;
else if(mType==2)
sX-=det_Dist;
}
else if(Direction==2) //向下
{
if(mType==0) sY-=det_Dist;
else if(mType==2)
sY+=det_Dist;
}
else if(Direction==3) //向右
{
if(mType==0) sX-=det_Dist;
else if(mType==2)
sX+=det_Dist;
}

物联网是以计算机科学为基础,包括网络、电子、射频、感应、无线、人工智能、条码、云计算、自动化、嵌入式等技术为一体的综合性技术及应用,它要让孤立的物品(冰箱、汽车、设备、家具、货品等等)接入网络世界,让它们之间能相互交流、让我们可以通过软件系统 *** 纵himer、让himer鲜活起来。
科技创新改变生活,物联网以及延伸的人工智能必将为未来带来自便利的美好生活。
人类总是在追求自便利的美好生活,物联网很有前瞻性。
下一波的IT浪潮就是云计算、物联网、人工智能、生物技术。
目前物联网是新新事物,教学资源紧张是正常的,新新事物风险和机遇并存。
请相信机遇的东西确实是过了这个村,没了这个店,物联网目前就像初期的计算机专业一样,
等它成熟了,等你看到它的发展了,那时候你就落后,只能在前人后面捡烟头。
好好把握学习这个专业的机会,目前物联网处于发展初期,等你毕业刚好是大展拳脚的好时机!
请特别关注:
1、智能家居 2、智能交通 3、智能医疗 4、智能电网 5、
智能物流 6、智能农业 7、智能电力 8、智能工业 9、质量追溯
相信选择这个新新行业有风险,但机会总是给第一个敢吃螃蟹的人。
当然你可以选择传统保守的行业,那是另一种人生态度,开心就好!

寻迹小车一般都有光电引导头,他用的是物理学原理,黑色在物理的意思上是吸收一切光线(白色的意思是反射任何光线)。小车下面的引导头(有发射和接收两个头,一般是一体式的)会发射光线,当遇到白色物体时,光线被反射回来,然后接收头接收,输出高电平,这样小车就判断为白色。如果遇到的是黑线,则不会被反射,接收头无法接收到信号,输出低电平,小车就知道是黑色。后面就很简单了,小车上的引导头往往是并联多路,比如五路或者三路,只要让中间的引导头一直跟着黑线走,一直寻迹黑色就可以了。而最外边的两个不能碰到黑线就好。如果偏了,小车就用单片机程序调整一下电机的控制,让两侧电机加速或者减速,或者一加速一减速(转弯能力更强),小车就转弯,调整一下方向就好了。

国内比较成功的比较大的应用:
1铁道部列车车厢管理,就是通过在每一节车厢(不管是客车、货车)均装置一个RFID芯片,在铁路两侧,相互间隔一段距离放置一个读写器。这样,就可以随时掌握全国所有的列车在铁路线路上所处的位置,便于列车的跟踪、调度和安全控制。国内提供系统集成的主要是远望谷科技,为此该公司以此为依托,成功进行了IPO,而且在股市表现不俗!
2 中国的第二代身份z,第二代身份z最显著的进步不是说在卡表面的照片换为彩色的了,而是在卡的内部更富科技含量的RFID芯片。芯片可以存储个人的基本信息,需要时在读写器上一扫,即可显示出你身份的基本信息。而且可以做到有效防伪,因为芯片的信息编写格式内容等只有特定厂家提供,伪造起来技术门槛比较高。
3中国大部分高校的学生证,由于中国的高校生数量众多,学生假期返乡出行享受火车半价优惠。为此,相关部门采用了可读写的RFID芯片。里面存贮了该用户列车使用次数信息,每使用一次就减少一次。而且不易伪造,加强了管理。
4很多的一卡通比如,市政一卡通、校园一卡通都可以归为较为简单的物联网应用。
5ETC不停车收费系统:在很多高速公路收费站,现在都留有一个不停车收费系统,无人值守。车辆即可只要减速行驶不同停车即可完成信息认证、计费。国内较早在首都机场高速做了试点,目前在全国各地已经有了很多地方做了尝试。但由于不仅需要对收费系统进行升级改造,还需对可能通过的车辆上安装识别芯片。因为很难对所有的车辆都进行安装,所以通常很多地方同时保留了ETC和人工收费。因为人工收费车辆要提前减速,并停止下来,每一辆车收费按照15秒,实际前后大概要30秒,在交通高峰阶段容易造成拥堵。因此,条件具备的地方还是要推行ETC,不仅加快通行速度,还可以节约管理成本。当然有些地方也考虑就业问题和灰色收入,所以积极性不是很高。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/dianzi/13375597.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-31
下一篇2025-08-31

发表评论

登录后才能评论

评论列表(0条)

    保存