DIY一个铝箔测速仪 飞矢飞弹测速
原理是用单片机的定时器计时测出时间,然后除去距离得到速度,测试中要仔细调整铝箔的间距,保证穿破的时候两片铝箔可以接通,一片铝箔大概可以测几十次用弹弓实验两次分别是92m/s和112m/s
以下为程序:
/*************************
名称:铝箔测速仪
功能:0.5m的两块铝箔依次被炮弹击穿,接通0.4和0.5,
根据时间和位移计算速度1~9999米/秒,慢于1米/秒的显示0
备注:铝箔间距50cm 开机显示5536
若改变距离可以修改displayLED(50000/t)括号中的数字
时间=10*t微秒 displayLED(距离/时间)
作者:忆昔长别
***********************/
#include<stc12c5a.h>
unsigned char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned long int t=0;
unsigned char i=0;//为了锁死定时器开关TR0
unsigned char *p; //为了判断语句控制外面的定时器开关
unsigned char second=0,minute=0;
unsigned int t1=0;
sbit K1=P3^6; //铝箔开关1
sbit K2=P3^7;//铝箔开关2
void displayLED(unsigned int a) //四位数显示函数带小数点
{
  unsigned char b[4];
  unsigned char i,j;
  for(i=0;i<4;i++)
  {
    b[i]=a%10;
a=a/10;
  }
  P0=0XF7;
  for(i=0;i<4;i++)
  {
     P2=table[b[i]];
for(j=0;j<100;j++);
P2=0x00;
P0=P0>>1;
  }
  P2=0X80;P0=0X0d; //显
  for(j=0;j<100;j++); //示
  P2=0x00; //小数点
}
void timer0_init()
{
   TL0 =0xEC; //设置定时初值
   TH0 =0xEC;
   TMOD=0X02;
   ET0=1;
   EA=1;
}
void displayLED_(unsigned int a) //四位数显示函数不带小数点
{
  unsigned char b[4];
  unsigned char i,j;
  for(i=0;i<4;i++)
  {
    b[i]=a%10;
a=a/10;
  }
  P0=0XF7;
  for(i=0;i<4;i++)
  {
     P2=table[b[i]];
for(j=0;j<100;j++);
P2=0x00;
P0=P0>>1;
  }
}

void main()//这里把main写出了mian半天没看出来!
{
    P2M0=0Xff;
P2M1=0X00;
P3|=0xc0;
p= &i;
timer0_init();
while(1)
{
      TR0=i;
  if(t==0) //结合定时器状态的双重判断,防止开关误判
  {
     if(K1==0)*p=1;   //第一块铝箔击中瞬间打开定时器
  }
  if(t!=0)
  {
     if(K2==0)*p=0;   //在第二块铝箔击中瞬间关闭定时器
  }
  if(i==0)
    displayLED_(165600/t);
  if(i==1)
    displayLED(100*minute+second);
}
}
void T0_Service() interrupt 1
{
   t++;//10微秒计数
t1++;//1毫秒跑秒
if(t1==100)
{
    t1=0;
second++;
if(second==100)
{
   second=0;
   minute++;
}
if(minute==100)
   minute=0;
}
}
最后 。。。发不了图片
end
来自 快乐DIY
2016-2-16 02:01:19
1楼
改成光电会好些吧
折叠评论
加载评论中,请稍候...
折叠评论
2楼
电路图呢?要从程序倒推?
折叠评论
加载评论中,请稍候...
折叠评论
2016-2-17 19:38:49
2016-2-17 19:38:49
3楼
是不是铝箔被穿破的时候,通过判断铝箔开关断开的时间差来得到速度?
表示没电路图,不好理解
折叠评论
加载评论中,请稍候...
折叠评论
2016-2-19 20:52:14
2016-2-19 20:52:14
4楼
这要四片吧,两片之间距离要小,击穿了能导通,计算两组之间导通时间差、。只是改变了检测方式,和光电差不多,但有耗材,而且更换不见得方便,这个比较适合检测速度衰减,远离发射点,射击精度要求低。
折叠评论
加载评论中,请稍候...
折叠评论
2018-8-25 01:23:50
2018-8-25 01:23:50
忆昔长别(作者)
5楼

是的,正是这样。两片铝箔挨的很近,当子弹打过来的时候会把他们接通。只要测量两次,根据速度公式V(速度)=S(路程)/T(时间)就可以算出来速度了。

上面的程序就是用来检测两个时间,然后计算速度的。

不过由于年代久远,我以及找不到电路图了。不过根据程序里的

sbit K1=P3^6; //铝箔开关1
sbit K2=P3^7;//铝箔开关2

这两句话,我知道铝箔开关1接在单片机的P3.6引脚,铝箔开关2接在单片机的P3.7引脚。

数码管的话根据下面的

P2=table[b[i]];

知道四段数码管的a、b、c、d、e、f、g、dot接在单片机的P2.0~P2.7引脚。

具体接线的话,根据下面的

P0=P0>>1;

以及

P0=0XF7;0xf7=1111 0111(二进制),0在倒数第4位点亮四段数码管的第一位

知道四段数码管的A、B、C、D接在单片机的P0.0~P0.3接口,而且数码管型号是”共阳四位八段数码管“。


总结:

1.铝箔开关接线。第一块铝箔接P3.6,第二块铝箔接3.7。为了让铝箔打穿时产生开关信号,需要另外两片铝箔很靠近他们平行放置,并且接地。

2.四位八段数码管(共阳)接线。a、b、c、d、e、f、g、dot分别接到P2.0~P2.7引脚。A、B、C、D接到P0.0~P0.3。

3.单片机型号。stc89c52。搭建最小电路即可。




折叠评论
加载评论中,请稍候...
折叠评论
忆昔长别(作者)
6楼

@huojunan2回答你的问题了。

折叠评论
加载评论中,请稍候...
折叠评论
忆昔长别(作者)
7楼

@qq030711光电的我也知道好,可是不会啊

觉得光电发射接受,成本就高了。而且需要子弹会反光吧,不一定都好用,也容易被外部光线干扰。

折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
ID:{{user.uid}}
{{user.username}}
{{user.info.certsName}}
{{user.description}}
{{format("YYYY/MM/DD", user.toc)}}注册,{{fromNow(user.tlv)}}活动
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png