需求 我想要在不接触的情况下测量一个小玻璃弹珠的速度,最开始买了几个常用的红外管结果发现触发性能不达标,速度在3m/s以上时就会无法检测到。首先要高速,最好能测量几十米每秒的速度,然后最好便携一点
方案 找了一个看起来不错的光电管IR12-21C/TR8
和PT12-21B/TR8
,价格也很感人就是了,然后前后两个板子用同一个PCB,板对板连接,然后连接到外置的单片机
PCB
程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 unsigned long t12 = 0 ;unsigned long t13 = 0 ;int trigger = 0 ;void IRAM_ATTR isr12 () { t12 = micros(); trigger = 12 ; } void IRAM_ATTR isr13 () { t13 = micros(); trigger = 13 ; } void setup () { Serial.begin(115200 ); pinMode(12 , INPUT_PULLUP); pinMode(13 , INPUT_PULLUP); attachInterrupt(12 , isr12, RISING); attachInterrupt(13 , isr13, RISING); } void loop () { if (trigger == 13 ){ Serial.print("trigger13:" ); Serial.println(t13-t12); Serial.print("-----v:" ); Serial.print(5600000 /(t13-t12)); Serial.println("cm/s" ); trigger = 0 ; }else if (trigger == 12 ){ Serial.print("trigger12:" ); Serial.print(t12-t13); Serial.print("-----v:" ); Serial.print(5600000 /(t12-t13)); Serial.println("cm/s" ); trigger = 0 ; } }
通过这个程序发现实际使用过程中,有时候会出现同一位置两次触发,暂时不确定是因为振铃还是因为物体长度。考虑到物体长度减小触发间隔减小,我认为应该是物体长度导致的变化