学校实训室中8台机电自动化实训设备,模拟工业生产制造现场的,真实再现了工业生产线中的供料、检测、搬运、切削加工、装配、输送和分拣过程,是典型的自动化生产线。设备有很多光电传感器用于检测物料产品等,于是就想光电传感器做一个单片机的小应用,利用光电传感器检测传送带上的产品的数量。
说做咱就做,正好手头有一个小车的避障红外光电传感器E18-D80NK
如下图所示。E18-D80NK-N这是一种集发射与接收于一体的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出。有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离的问题(由于红外光的特性,不同颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。检测障碍物的距离可以根据要求通过尾部的电位器旋钮进行调节。该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、流水线计件等众多场合。其主要参数如下:工作电压5V,工作电流10-15mA,驱动电流100mA,感应距离3-80cm。其中棕色线为VCC,蓝色线为GND,黑色线为out即传感器输出,正常状态是高电平输出,当检测到物体目标之后输出低电平。由于该传感器是NPN型开漏输出,所以连接在单片机上的时候需要接上拉电阻,上拉电阻选择1K的即可。
-
电路连接
黑线即E18-D80NK的输出接单片机的P3.2口,通过外部中断实现产品技术处理。黑线要接1K电阻的到VCC,这里直接接到了棕色VCC线上,棕色VCC线接5V单片机电源输出。显示的话采用四位数码管实现。
2.主要程序
主要程序为中断处理和结果显示。
中断处理代码如下所示。当中断响应之后,首先要是延时一段时间再去判断传感器的状态。确定是否真的检测传送带上的物品,以消除扰动对测量测结果的影响。产品经过传感器大概//需要700-1000ms左右的时间,这段时间传感器一直输出低电平。而扰动持//续时间比较短,20-150ms左右,所以这里选择延时200ms左右,消除扰动影响。
void Exit0Int() interrupt 0
{
EX0 = 0; //关中断
Delay_ms(200);
if(!key1)
{
count++;
TR0=1;
LEDdisplay(count);
}
else EX0=1;
}
/*******************************************************************************
* 函 数 名 :LEDdisplay
* 函数功能 :循环显示各个位上的数据
* 输 入 :num要显示的数据
* 输 出 :无
*******************************************************************************/
void LEDdisplay(unsigned int num)
{
unsigned char qian,bai,shi,ge;
qian=num/1000;
bai=num%1000/100;
shi=num%100/10;
ge=num%10;
wela_1 = 1; //关闭所有数码管
wela_2 = 1;
wela_3 = 1;
wela_4 = 1;
wela_4=0; //显示千位
LED_PORT=table[qian];
Delay_ms(1);
LED_PORT = 0xff;
wela_4=1;
wela_3=0; //显示百位
LED_PORT=table[bai];
Delay_ms(1);
LED_PORT = 0xff;
wela_3=1;
wela_2=0; //显示十位
LED_PORT=table[shi];
Delay_ms(1);
LED_PORT = 0xff;
wela_2=1;
wela_1=0; //显示个位
LED_PORT=table[ge];
Delay_ms(1);
LED_PORT = 0xff;
}
3.运行效果(如视频所示)
完成代码,请公众号后台回复产品计数器五个字获取下载链接。