Самодельный рамочный хронограф для пневматики схема. Хронограф для измерения скорости пули пневматики

Давно имею старенькую компрессионную пневматику ИЖ-53. Купил лет 7 назад с рук за смешные деньги. Cразу поставил ему новую прозрачную манжету и новую пружину от винтовки, укоротив несколько витков, сколько - за давностю лет не помню.

Сегодня забрел на один форум, где все занимаются разгоном пневматического оружия и за пару часов проглотил всю ветку по ИЖам.

Сразу загорелось померять скорость пули, поэтому слил прогу AirSpeed и почитал про датчиков из фольги. Вот тут-то меня ленью и накрыло. Не люблю дурную работу, которую приходится по несколько раз переделывать. А с датчиками из фольги так бы и получилось, после одного-двух выстрелов восстанавливать всю конструкцию - нет уж, увольте.

Посмотрел на схемы покупных хронометров - тоска зеленая с прошивками, ПИКами и двусторонними платами. Технология ЛУТа знакома не по наслышке, но ради десятка выстрелов делать себе геморрой на неделю - не хочу.

Сразу пришла идея объединить эти две идеи. Сделать простейшие оптические датчики из оптопар и совместить их с прогой AirSpeed.

Ну-с, начнем!.

Схему набросал уже к этому описанию, но может кому пригодится до начала сборки



Покупного в моей конструкции на ноль рублей, но только потому, что всякий электронный хлам у меня всегда валяется дома.

Да, самое главное! Поставь один из последних альбомов Пикника, а то нифига не получится



Кусок трубки 15 сантиметров - ПВХ труба для горячей воды (Можно любую с подходящим диаметром) Внутренний диаметр у нее 11,5мм у ствола внешний 11 - подойдет с домоткой



Сверлим две сквозных дырки на ровном расстоянии в 100 мм. Верхние под фотодиоды от старой мыши - 3 мм. (Смотрим на свои штангелем и сверлим свой размер). Нижние под белые светодиоды от старого фонарика - 5 мм. (Опять же смотрим на свои).

Я перед монтажом убедился, что светодиоды и фотодиоды друг другу подходят - припаял к проводу, воткнул в микрофонный вход компа, накрутил громкость и быстро пронес светодиод мимо фотодиода, услышал звук в колонках - все тип-топ.



Втыкаем в соответствующие отверстия свето- и фотодиоды. Припаиваем к ним провода. Сразу надо определиться с источником питания светодиодов. Им надо не менее 3 вольт и не более 20 ма. Я взял один LiIon элемент от ноутбука, он дает 3,7 в. Светодиоды в этом случае включаем через резистор 820 Ом, подойдет любой из диапазона 470-910 Ом.

Можно светодиоды питать и от двух любых 1,5вольтовых пальчиковых батарей. Их заряда хватит на год точно При таких сроках эксплуатации я рекомендую элементы питания просто припаивать не заморачиваясь на кроватки, разъемы и прочие удобства. Паять надо быстро, чтобы не перегреть элемент.

Сразу же после пайки нежных и тонких выводов фотодиода заливаем сопливым пистолетом. чтоб ненароком не оторвать.

Проверить работу на этапе пайки легко - при включении питания щелчек должен быть в обоих колонках. При пропускании пульки через вертикально поставленную трубку отчетливо должны быть слышны два щелчка в колонках.

Если щелчков нет при включенном канале микрофона и выкрученной на

максимум громкости - меняем полярность проводов на фотодиодах.



"А внутре у нее неонка!" Думаю, что если отстрелится линза у свето- или фотодиода - ничего страшного не будет. Все продолжит работать как и раньше.



Так, как моя трубка была больше диаметра ствола - на ствол одел кусок термоусадки и плотно натянул датчик - соосность видно со стороны казенника с включенными светодиодами прекрасно.



На фотке сам пистолет и пулеуловитель из картонной коробки с бумажным хламом внутри.

На все ушло два часа. Основное время потратил на неторопливое попивание пива и поиск подходящих фотодиодов.

Теперь можно проводить испытания.



Результат работы виден на скриншоте. выстрелы 117 м/с, последующие падаот до 106 м/с. Затесавшийся глюк с 400 м/с просто игнорируем - хотя было бы неплохо )))))

Данные получены на турецких пулях ORNEK весом 0.42 г.



На фотографии показания весов для 100 шт. без учета веса тары.

Для нифига не апгрейднутого и не герметичного пистолета довольно неплохие показатели. Дым из ствола идет постоянно.

Можно начинать апать

Думаю, что для огнестрела тоже можно использовать данную конструкцию, надо только брать металлическую трубку гораздо большего диаметра, чем ствол. И не крепить ее к стволу, а стрелять в нее просто так, с подставки или с рук. Плюс ко всему для точности увеличить длину до одного метра. Короче, берется водопроводная труба 100 мм диаметром и длиной 1100 мм. И все будет работать.

Кому нужна прога - качаем http://www..rar Downloads:

Еще две прекрасные программы от Миронова.

http://www..rar Downloads:

Владею пневматической винтовкой, всегда была интересна скорость вылета пули из ствола, это кому-то покажется странным, но у пневмолюбов скорость пули одна из главных тем для членометрии. Погуглив немного нашел несколько вариантов схем на разных микроконтроллерах, так как у меня уже был работы с AVR, без раздумий выбрал вариант на avr. Все необходимые детали я нашел на упоминавшемся уже здесь Taydaelectronics.com. Покупка собрана, оплачена, получена, приступим…

Сразу приложу схему:


поподробнее желающие могут посмотреть на

Итак, нам понадобится:


- 1 шт.
- 1 шт.
Пара конденсаторов 330 нФ и 100нФ для регулятора напряжения
(можно запитать всю схему от трех пальчиковых батареек вместо кроны, тогда регулятор и конденсаторы не понадобится)
2 шт.
1 шт.
2 шт.
2 шт.
выключатель, панелька для микроконтроллера, панелька для индикатора, коннекторы для шлейфов, сам шлейф я использовал от старого компьютера. Так же набор резисторов.

Повторил схему в протеусе, подогнал под свои нужды, и вытравил печатную плату

Кое-как расставил компоненты, чтобы иметь примерное представление, как рисовать дорожки. И да, у меня нет принтера, я рисую дорожки перманентным маркером)))

Сначала пробую на бумаге

Потом переношу на текстолит

Травим. Травлю в горячем растворе хлорного железа, разведенного примерно 1:3 с водой. После травления раствор храню на балконе, он работает даже после высыхания, нужно просто добавить воды. Следует осторожничать и не допускать попадания его на металлические поверхности - начнется усиленная коррозия.

Чистим

Сверлим. Дрельку делал из патрона и моторчика с фасттека.

Вот все компоненты запаяны на плату, осталось только прошить микроконтроллер

ОНО ЖИВОЕ!

После этого я изготовил измерительную трубку с датчиками. Устроено просто - на расстоянии 50 мм друг от друга находятся расположенные друг напротив друга фототранзистор и светодиод, своеобразные оптопары. Когда пулька пролетает по трубке, она поочередно перекрывает луч света первому и второму транзистору, о чем они сигналят микроконтроллеру, который высчитывает скорость по всем известной со школы формуле.

исходный код

/*
* Прошивка без наворотов, расстояние между датчиками 100мм
* общий анод!
* Updated at: 15.12.2013
*

#define F_CPU 1000000UL

#include
#include
#include

#define LED_EMPTY ~0b00000000

#define LED_0 ~0b00111111
#define LED_1 ~0b00000110
#define LED_2 ~0b01011011
#define LED_3 ~0b01001111
#define LED_4 ~0b01100110
#define LED_5 ~0b01101101
#define LED_6 ~0b01111101
#define LED_7 ~0b00000111
#define LED_8 ~0b01111111
#define LED_9 ~0b01101111
#define LED_DOT ~0b10000000

#define LED_MINUS ~0b01000000
#define LED_E ~0b01111001
#define LED_r ~0b01010000
#define LED_G ~0b00111101
#define LED_o ~0b01011100

#define BASE_LENGTH 1000

Typedef struct LedPanel {
int seg1;
int seg2;
int seg3;
} LedPanel;

Void renderSegmentNext() {
static int activeSegment = 0;
activeSegment = (activeSegment + 1) % 3;

Switch (activeSegment) {
case 0:
PORTB = led.seg1;
PORTD = ~0b0110000;
break;
case 1:
PORTB = led.seg2;
PORTD = ~0b1010000;
break;
case 2:
PORTB = led.seg3;
PORTD = ~0b1100000;
break;
}
}

Void initPorts() {
//init led ports
DDRB = 0xFF;
DDRD |= (0b111 << 4);
//init button ports
DDRD &= ~(1 << PD0);
DDRD &= ~(1 << PD1);
}

Int digitToLedValue(int digit) {
switch (digit) {
case 0:
return LED_0;
case 1:
return LED_1;
case 2:
return LED_2;
case 3:
return LED_3;
case 4:
return LED_4;
case 5:
return LED_5;
case 6:
return LED_6;
case 7:
return LED_7;
case 8:
return LED_8;
case 9:
return LED_9;
default:
return LED_MINUS;
}
}
void setLedValue(int value) {
if(value < 0 || value > 400){
led.seg1 = LED_MINUS;
led.seg2 = LED_MINUS;
led.seg3 = LED_MINUS;
return;
}

Led.seg3 = digitToLedValue(value % 10);
if (value >= 10) {
led.seg2 = digitToLedValue((value / 10) % 10);
} else {
led.seg2 = LED_EMPTY;
}
if (value >= 100) {
led.seg1 = digitToLedValue((value / 100) % 10);
} else {
led.seg1 = LED_EMPTY;
}
}

ISR(TIMER1_OVF_vect) {
//stop timer and reset value
TCCR1B &= ~(1 << CS00);
TCNT1 = 0;
//disable int1
GIMSK &= ~(1 << INT1);
//set error output
setLedValue(-1);
}

ISR(INT0_vect) {
//reset timer and start it
TCNT1 = 0;
TCCR1B |= (1 << CS00);
//enable int1
GIMSK |= 1 << INT1;
}

ISR(INT1_vect) {
//stop timer
TCCR1B &= ~(1 << CS00);
//disable int1
GIMSK &= ~(1 << INT1);
//calculate speed
int speed = (F_CPU / 10000L) * BASE_LENGTH / TCNT1;
setLedValue(speed);
}

Int main() {
initPorts();

MCUCR |= (1 << ISC00);
MCUCR |= (1 << ISC01);
GIMSK |= 1 << INT0;

MCUCR |= (1 << ISC10);
MCUCR |= (1 << ISC11);
GIMSK &= ~(1 << INT1);

TIMSK |= (1 << TOIE1);

SetLedValue(0);

While (1) {
renderSegmentNext();
_delay_ms(2);
}
}

Напильником и ручным лобзиком придал нужную форму коробочке, распихал всю начинку по местам, закрепив где необходимо термосоплями.

Приступим к стрельбам:

Винтовка на фото - Stoeger x20, в который установлена газовая пружина. В теории может выжать 250 м/с.
И он почти выжал пулькой 0.68 грамм


Устройство готово, и работоспособно.

Конечно же я не рассчитываю на его точность, эталона рядом не было, но скорость показывает не рандомно, стабильно. Если нужно отслеживать изменение начальной скорости пули в зависимости от изменений конструкции пневматики, то этого вполне достаточно. Аналоги такого хронометра стоят более 2 тысяч рублей, этот же обошелся мне не более чем в 300р, и еще подарил 4 часа приятного времяпрепровождения.

В своей первой публикации я хочу рассказать вам, как я собрал хронограф за пару вечеров из дешевых и доступных всем деталей. Как вы наверное уже догадались из названия, этот девайс служит для измерения скорости пули у пневматических (и не очень) винтовок и бывает полезным для контроля её технического состояния.

1. Детали и принадлежности

  • Китайский Digispark - 80 рублей на момент покупки
  • Сегментный дисплей на TM1637 - 90 рублей на момент покупки
  • ИК светодиоды и ИК фототранзисторы (10 пар) - 110 рублей на момент покупки, нам нужны 2 пары
  • Резисторы 220 Ом (100шт) - 70 рублей на момент покупки, нам нужно только 2 штуки
На этом заканчиваются детали, которые необходимо покупать. Резисторы можно не заказывать, похожие по номиналу (но не меньше!) можно выдернуть из ненужной бытовой электроники. Таким образом, суммарные затраты менее 350 рублей, это ничто по сравнению с ценой нового заводского хронографа (over 1000р за самый простой, который по факту еще примитивнее нашего сабжа). Кроме деталей нам пригодятся:
  • Провода - найти в оффлайне бесплатно не проблема
  • Кусок пластиковой водопроводной трубы длиной более 10см (диаметр по вкусу) - так же легко найти
  • Паяльные принадлежности
  • Мультиметр (опционально)
Первые 3 детали достойны отдельного рассмотрения, так как имеют свои особенности, поэтому начнем с мини-обзоров на них.

1.1. Digispark

Представляет собой простую миниатюрную Arduino-совместимую плату с ATtiny85 на борту. Как подключить к Arduino IDE читаем на официальном сайте проекта , там же можно найти драйвера для нее. Существует два основных вида этой платы: с microUSB и более брутальный с USB коннектором, разведенным прямо на плате.

Мой хронограф не имеет собственного источника питания, поэтому я выбрал первый вариант платы. Встроенная батарейка/аккумулятор сильно повысит цену, не добавив при этом практически ничего к юзабилити. Power bank и кабель для зарядки телефона валяется практически у каждого.

Характеристики само собой унаследованы от ATtiny85, его возможностей в нашем случае достаточно с головой. Фактически МК в хронографе не делает ничего, кроме опроса двух датчиков и управления дисплеем. Для тех, кто впервые сталкивается с Digispark-ом, я свёл наиболее важные особенности в таблицу:

Эту табличку я использую как шпаргалку при разработке различных девайсов на базе этой платы. Как вы наверное заметили, нумерация пинов для функции analogRead() отличается, это следует учитывать. И еще одна особенность: на третьем пине висит подтягивающий резистор на 1.5кОм, т.к. он используется в USB.

1.2. Дисплей на базе TM1637

Следующая важная деталь - цифровой дисплей, на который будет выводиться информация. Дисплей можно использовать любой, мой выбор обусловлен только дешевизной и простотой работы с ним. От дисплея в принципе можно вообще отказаться и выводить данные по кабелю на ПК, тогда девайс станет еще дешевле. Для работы понадобится библиотека DigitalTube . Сабж, на который я дал ссылку в начале поста, представляет собой клон дисплея Grove . Вид спереди:

Между цифрами расстояние одинаковое, поэтому при выключенном двоеточии числовые значения читаются нормально. Вместе со стандартной библиотекой поставляется пример, который работает с Digispark-ом без плясок с бубном:

Все, что умеет стандартная библиотека, - выводить числа 0-9 и буквы a-f, а так же менять яркость всего дисплея целиком. Значение цифры задается функцией display(int 0-3, int 0-15).

Экспресс-курс по использованию дисплея

// 1. Объявить заголовочный файл #include // 2. Задать пины #define CLK 0 #define DIO 1 // 3. Объявить объект TM1637 tm1637(CLK, DIO); // 4. Проинициализировать void setup() { tm1637.init(); tm1637.set(6); // Яркость } // 5. Использовать void loop() { // Вывод числа x на дисплей int x = 1234; tm1637.display(0, x / 1000); tm1637.display(1, x / 100 % 10); tm1637.display(2, x / 10 % 10); tm1637.display(3, x % 10); delay(500); }


Если попытаться вывести символ с кодом за границами , то дисплей показывает чушь, которая при этом не статичная, поэтому схитрить для вывода спецсимволов (градусов, минуса) без бубна не получится:

Это меня не устраивало, так как в своем хронографе я хотел предусмотреть вывод не только скорости, но и энергии пули (вычисляемой на основе заранее прописанной в скетче массы), эти два значения должны выводиться последовательно. Чтобы понять, что показывает дисплей в данный момент времени, нужно как-то разделять эти два значения визуально, например, при помощи символа «J». Конечно, можно тупо задействовать символ двоеточия как флаг-индикатор, но это же не тру и не кошерно) Поэтому я полез разбираться в библиотеку и на базе функции display сделал функцию setSegments(byte addr, byte data), которая зажигает в цифре с номером addr сегменты, закодированные в data:

Void setSegments(byte addr, byte data) { tm1637.start(); tm1637.writeByte(ADDR_FIXED); tm1637.stop(); tm1637.start(); tm1637.writeByte(addr|0xc0); tm1637.writeByte(data); tm1637.stop(); tm1637.start(); tm1637.writeByte(tm1637.Cmd_DispCtrl); tm1637.stop(); }
Кодируются сегменты предельно просто: младший бит data отвечает за самый верхний сегмент, и т.д. по часовой стрелке, седьмой бит отвечает за центральный сегмент. Например, символ "1" кодируется как 0b00000110. Восьмой, старший бит используется только во второй цифре и отвечает за двоеточие, во всех остальных цифрах он игнорируется. Чтобы облегчить себе жизнь я, как и полагается любому ленивому айтишнику, автоматизировал процесс получения кодов символов при помощи excel:

Теперь можно легко сделать так:

Let"s say HELLO

#include #define CLK 0 #define DIO 1 TM1637 tm1637(CLK, DIO); void setSegments(byte addr, byte data) { tm1637.start(); tm1637.writeByte(ADDR_FIXED); tm1637.stop(); tm1637.start(); tm1637.writeByte(addr|0xc0); tm1637.writeByte(data); tm1637.stop(); tm1637.start(); tm1637.writeByte(tm1637.Cmd_DispCtrl); tm1637.stop(); } void setup() { tm1637.init(); tm1637.set(6); } void loop() { // Вывод Hello setSegments(0, 118); setSegments(1, 121); setSegments(2, 54); setSegments(3, 63); delay(500); }

1.3. Датчики

Тут я, к сожалению, не могу ничего особо сказать, потому что на странице товара нет ни слова о характеристиках или хотя бы маркировки, по которой можно было бы откопать даташит. Типичный noname. Известна только длина волны 940нм.

Ценой одного светодиода определил, что ток больше 40мА для них смертелен, а напряжение питания должно быть ниже 3.3В. Фототранзистор немного прозрачный и реагирует на свет

2. Подготовка деталей и сборка

Схема очень простая и незамысловатая, из всех пинов digispark-a нам понадобятся только P0, P1 - для работы с дисплеем, а так же P2 - для работы с датчиками:

Как видно, один резистор ограничивает ток на светодиодах, второй - стягивает P2 к земле. Фототранзисторы соединены последовательно, поэтому прохождение пули перед любой оптопарой приводит к уменьшению напряжения на P2. Путем регистрации двух последовательных скачков напряжения и замера времени между ними мы можем определить скорость движения пули (зная расстояние между датчиками, ессно). Использование одного пина для замеров имеет еще один плюс - нет никакого требуемого направления движения пули, можно стрелять с обоих концов. Собирать будем из этой горстки деталей:

Я пошел по пути миниатюризации и решил сделать бутерброд при помощи куска макетной платы:

Весь бутерброд залил термоклеем для прочности:

Остается только разместить датчики в трубке и припаять провода:

На фото видно, что я разместил дополнительный электролит на 100мКф параллельно светодиодам, чтобы при питании от повербанка не было пульсаций ИК диодов.

Пин P2 в качестве входа был выбран не просто так. Напомню, что P3 и P4 используются в USB, поэтому использование P2 дает возможность прошивать девайс уже в собранном виде. Во-вторых, P2 - аналоговый вход, поэтому можно не использовать прерывания, а просто мерить разницу в цикле между предыдущим и текущим значением на нем, если разница выше некоторого порога - значит пуля проходит между одной из оптопар. Но есть одна программная хитрость, без которой приведенная схема не взлетит, о ней поговорим далее.

3. Прошивка

3.1. Пару слов о prescaler

Prescaler представляет собой делитель частоты, по-умолчанию в arduino-подобных платах он равен 128. От значения этой величины зависит максимальная частота опроса АЦП, по дефолту для 16 мГц контроллера получается 16/128 = 125 кГц. На каждую оцифровку уходит 13 операций, поэтому максимальная частота опроса пина - 9600 кГц (в теории, на практике реально не выше 7 кГц). Т.е. интервал между замерами примерно 120 мкс, это очень и очень много. Пуля, летящая со скоростью 300 м/с пролетит за это время 3,6 см - контроллер просто не успеет засечь факт прохождения пули через оптопару. Для нормальной работы нужен интервал между замерами как минимум 20 мкс, необходимое значение делителя для этого равно 16. Я пошел еще дальше и в своем девайсе использую делитель 8, делается это следующим образом:

#ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #endif void setup() { sbi(ADCSRA,ADPS2); cbi(ADCSRA,ADPS1); cbi(ADCSRA,ADPS0); ... }
Реальные замеры интервала analogRead на разных делителях:

3.2. Итоговый скетч

Я не буду подробно описывать код, он и так хорошо задокументирован. Вместо этого я в общих словах опишу алгоритм его работы. Итак, вся логика сводится к следующим этапам:
  • Первый цикл - измеряется разница между текущим и предыдущим значением на пине
  • Если разница больше заданного порога, то выходим из цикла и запоминаем текущее время (micros())
  • Второй цикл - аналогично предыдущему + счетчик времени в цикле
  • Если счетчик достиг заданной величины, то информирование об ошибке и переход к началу. Это позволяет не уходить циклу в вечность, если пуля по каким-то причинам не была замечена вторым датчиком
  • Если счетчик не переполнился и разница значений больше порога, то замеряем текущее время (micros())
  • На основе разницы во времени и расстоянии между датчиками вычисляем скорость и выводим на экран
  • Переход в начало
Это сильно упрощенная модель, в самом коде я добавил свистелок, в том числе вычисление и показ энергии пули на основе введенной заранее в коде массы пули.

Собственно, весь код

/* * Хронограф для измерения скорости движения пули, SinuX 23.03.2016 */ #include #define CLK 1 // Пин дисплея #define DIO 0 // Пин дисплея #define START_PIN 1 // Аналоговый пин старта #define END_PIN 1 // Аналоговый пин финиша #define START_LEV 50 // Порог срабатывания старта #define END_LEV 50 // Порог срабатывания финиша #define TIMEOUT 10000 // Время ожидания финиша в микросекундах #define BULLET_WEIGHT 0.00051 // Масса пули в килограммах (для вычисления энергии) #define ENCODER_DIST 0.1 // Расстояние между датчиками в метрах (10см = 0.1м) #define SHOW_DELAY 3000 // Время показа результата // Для ускорения analogRead #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #endif // Служебные переменные int prevVal, curVal; unsigned long startTime, endTime; TM1637 tm1637(CLK, DIO); /* Переделанная функция TM1637::display(), которая позволяет зажигать отдельные сегменты * Нумерация сегментов: младший бит - верхний сегмент и т.д. по часовой стрелке * Центральный сегмент - старший бит */ void setSegments(byte addr, byte data) { tm1637.start(); tm1637.writeByte(ADDR_FIXED); tm1637.stop(); tm1637.start(); tm1637.writeByte(addr|0xc0); tm1637.writeByte(data); tm1637.stop(); tm1637.start(); tm1637.writeByte(tm1637.Cmd_DispCtrl); tm1637.stop(); } // Инициализация void setup() { // Устанавливаем prescaler на 8 для ускорения analogRead cbi(ADCSRA,ADPS2); sbi(ADCSRA,ADPS1); sbi(ADCSRA,ADPS0); // Инициализация дисплея tm1637.init(); tm1637.set(6); // Отображение приветствия setSegments(0, 118); setSegments(1, 121); setSegments(2, 54); setSegments(3, 63); delay(1000); } // Главный цикл void loop() { // Заставка ожидания showReady(); // Ожидание старта curVal = analogRead(START_PIN); do { prevVal = curVal; curVal = analogRead(START_PIN); } while (curVal - prevVal < START_LEV); startTime = micros(); // Ожидание финиша curVal = analogRead(END_PIN); do { prevVal = curVal; curVal = analogRead(END_PIN); // Если превышен интервал ожидания - показ ошибки и выход из цикла if (micros() - startTime >= TIMEOUT) { showError(); return; } } while (curVal - prevVal < END_LEV); endTime = micros(); // Вычисление и отображение результата showResult(); } // Отображение заставки ожидания выстрела void showReady() { setSegments(0, 73); setSegments(1, 73); setSegments(2, 73); setSegments(3, 73); delay(100); } // Вычисление и отображение скорости, энергии пули void showResult() { // Вычисление скорости пули в м/с и вывод на дисплей float bulletSpeed = ENCODER_DIST * 1000000 / (endTime - startTime); tm1637.display(0, (int)bulletSpeed / 100 % 10); tm1637.display(1, (int)bulletSpeed / 10 % 10); tm1637.display(2, (int)bulletSpeed % 10); setSegments(3, 84); delay(SHOW_DELAY); // Вычисление энергии в джоулях и вывод на дисплей float bulletEnergy = BULLET_WEIGHT * bulletSpeed * bulletSpeed / 2; tm1637.point(1); // Вместо точки ":" - костыль, но пойдет) tm1637.display(0, (int)bulletEnergy / 10 % 10); tm1637.display(1, (int)bulletEnergy % 10); tm1637.display(2, (int)(bulletEnergy * 10) % 10); setSegments(3, 30); delay(SHOW_DELAY); tm1637.point(0); } // Вывод ошибки при превышении времени ожидания пули void showError() { setSegments(0, 121); setSegments(1, 80); setSegments(2, 80); setSegments(3, 0); delay(SHOW_DELAY); }

4. Примеры работы

При правильном подключении девайс взлетел практически сразу, единственный обнаруженный недостаток - он негативно реагирует на светодиодное и люминисцентное освещение (частота пульсаций около 40 кГц), отсюда могут появляться спонтанные ошибки. Всего в девайсе предусмотрено 3 режима работы:

Приветствие после включения и переход в режим ожидания выстрела (экран заполняется полосками):

В случае ошибки - отображается «Err», и снова переход в режим ожидания:

Ну и сам замер скорости:

После выстрела сначала показывается скорость пули (с символом "n"), затем - энергия (символ "J"), причем энергия вычисляется с точностью до одного знака после запятой (на гифке видно, что при показе джоулей горит двоеточие). Корпус покрасивее найти пока не смог, поэтому просто залил все термосоплями:

Пожалуй, на этом у меня все, надеюсь, кому-то был полезен.

Хронограф является универсальным прибором, способным проводить замер скорости полета предметов малого размера. Настройку и тестирование пневматики удобнее всего проводить с хронографами рамочного типа. Они могут улавливать движение пуль, болтов арбалета, стрел, скоб рогатки. Хронограф для пневматики можно изготовить своими руками или приобрести в специализированных магазинах.

Типы хронографов

Измерение стартовой скорости пули при помощи хронографа, позволяет выявить мощность пистолета или винтовки, подобрать подходящие пули, рассчитать баллистические поправки, провести сравнение скорости в начале и после модернизации оружия.

Существуют различные типы хронографов . Надульная модель занимает мало места и без труда помещается в кармане чехла, а также она меньше тратит энергию. Для конкретного типа оружия может потребоваться переходник . Такой вид не зависит от освещения и удобен в использовании на природе. Прицельную стрельбу можно вести вместе с прибором. Для СО2 такая модель не подходит.

При обладании внушительным арсеналом, лучше приобрести рамочный хронограф , чтобы не закупать большое количество переходников. Этот тип прибора хорошо работает с СО2, имеет разъем для внешнего источника питания. Броня позволяет проводить измерение показателей на различной дистанции, не опасаясь повредить механизм. Наличие дополнительного экрана помогает оперативно получать результаты.

Существуют также рамочные модели большого размера, расширяющие число возможностей. Такой вариант подходит для использования с любыми видами оружия, удобен при стационарном подключении к сети. В качестве альтернативы, хронограф может получать питание от батарей класса АА в количестве восьми штук. В отличие от модели малого размера, большой аппарат обладает встроенным индикатором фронтального типа . Можно дополнительно установить съемный экран. При помощи USB-адаптера можно переносить данные измерения с устройства на компьютер.

Покупка хронографа для пневматики

Купить в Москве и Санкт-Петербурге различные типы хронографов можно в следующих магазинах:

  • Airgun Store - по цене от 3500 до 24 тыс. р.;
  • Diada Arms - по цене от 4 тыс. до 13 тыс. р.;
  • Pnevmat 24 - по цене от 4 тыс. до 7 тыс. р.;
  • Oxotnika.net - по цене от 3 тыс. до 20 тыс. р.

В этих магазинах также предлагаются различные комплектующие и аксессуары для хронографов. Можно приобрести более бюджетную модель на AliExpress по цене от 3 тыс. р. или купить б/у, например, на портале Guns.ru или Avito по цене от 1500 р.

Хронограф рамочного типа для пневматики своими руками

Хронограф фиксирует время пролета пули между несколькими датчиками и рассчитывает ее скорость. Устройство состоит из трех частей:

  • рабочей зоны, пропускающей через себя пулю;
  • схемы, проводящей вычисления;
  • дисплея, показывающего рассчитанные результаты.

Схемы для хронографа могут быть различны по стоимости, функциональности и дизайну. Простейшие датчики считывают падающий на них свет, интенсивность которого изменяется по мере перемещения пули, отбрасывающей тень. Чувствительные к свету элементы являются частью многих хронографов, сделанных в домашних условиях и в заводских моделях.

Самостоятельно изготовленный прибор имеет несколько преимуществ:

Наряду с этим, у аппарата есть и свои недостатки :

  • громоздкость конструкции;
  • потребность в защите от попадания для лицевой стороны рабочей зоны;
  • влияние погодных условий и освещения на работу;
  • чувствительность схемы оптики к значительным механическим воздействиям, включающим попадания пулевых осколков и рикошеты;
  • вывод ложных показаний при появлении в камере посторонних предметов, таких как снег, насекомые или механические осколки;
  • влияние траектории полета на фиксируемую скорость пули (движение объекта по диагонали снижает показатель).

Компоненты и материалы для сборки

Общее количество деталей и их сложность зависят от уровня навыков проектирования и установки схем у пользователя. Некоторые компоненты являются обязательными при любом виде сборки:

  • светодиоды для создания искусственного источника света;
  • паяльник с флюсом и припоем для закрепления проводов и установки микросхемы;
  • оптические приемники для считывания уровня освещенности во время пролета пули через светодиоды;
  • микросхема для определения времени полета пули и расчета скорости;
  • дисплей для отображения результатов замеров;
  • прямоугольный полый корпус, закрытый с четырех сторон (лучше выбирать изделие из цельного металла, которое будет устойчиво к ударам).

Этапы монтажа хронографа

Элементы микросхемы и датчики должны находиться под защитой или располагаться в местах, которые не будут доступны для прямого попадания пули. Под них нужно заранее подготовить место в корпусе. Внутренняя часть изделия покрывается темной краской, не создающей бликов, чтобы избежать лишних срабатываний прибора и увеличить его чувствительность.

Элементы чувствительные к свету и сами светодиоды монтируются в предварительно размеченные отверстия. Фотоприемники должны быть немного заглубленными, а светодиоды слегка выпирать во внутреннюю часть хронографа. Такое размещение позволит снизить интенсивность внешнего света, падающего на прибор.

На следующем этапе устанавливается и подключается к датчикам плата, размечаются секции под введение питания. Для самостоятельного составления схемы можно использовать рис. 1.

Рис. 1 Микросхема хронографа

Когда основные узлы будут собраны, схему нужно будет защитить от механических воздействий и влаги. Для этой задачи подойдет коробок из пластмассы для печатной платы, который будет иметь выходы к батарее, дисплею и датчикам.

Принцип работы хронографа собственного изготовления

В качестве источника питания для прибора могут использоваться батареи, аккумуляторы, блок питания, подключаемый к сети. Автономный источник более выгоден и удобен, так как настройка оружия в большинстве случаев проводится за пределами дома.

Процесс замера скорости проходит три этапа:

  • пуля проходит через ось начального датчика, обнуляя счетчик времени в микропроцессоре;
  • после пересечения пулей оси следующего датчика, время останавливается и данные передаются для проведения расчетов;
  • микропроцессор проводит вычисления и выводит показатели скорости на дисплей.

Наглядно работу хронографа рамочного типа можно увидеть на рис. 2.

Рис. 2 Схема работы хронографа

Для того, чтобы самостоятельно собрать хронограф, понадобятся знания и опыт в электротехнике , пайке и разработке электрических цепей. Облегчить задачу можно, заказав изготовление микросхемы мастеру по электронике. Хронограф, собранный своими руками, обойдется значительно дешевле, чем покупной вариант.

kuente 07-05-2008 08:26

Диаметры всех светодиодов и оптоприемников 5мм
Оптоприемники ставить с интервалом между их центрами 6-7мм (чем плотнее тем лучше)
Светодиоды с интервалом 10-15мм
База 80мм

Оптодатчики очень чувствительны к внешним световым помехам- лампы дневного света например,
поэтому корпус надо делать из небликующего, светопоглощающего черного материала, или возможно краской черной красить. Сами оптоприемники делать не торчащими наружу а чуть утапливать.
Светодиоды скорее наоборот должны чуть выглядывать.
Возможно конструкция с оптоприемниками вверху а светодиодами внизу будет более устойчива к световым помехам.

Близкорасположеные сотовые или дектовые телефоны и их базы тоже наводят сильные помехи на схему. Возможно правильная экранировка потребуется.

Подстроечными резисторами в схеме подбирается усиление-чтоб надежно срабатывало от пролетающей пульки но не срабатывало ложно от различных помех.

Anthrax 836 07-05-2008 12:13

к chronolite всё это можно прикрутить?

Trojak 07-05-2008 15:47

Почему? Oчень хочется

kuente 07-05-2008 17:43

схему видишь, пытайся - перерабатывай, используй на хронолайте...

kuente 07-05-2008 19:29

господа, тема не про хронолайт, ему такой датчик не светит... просьба не засорять тему флудом.

nAxAH 09-05-2008 09:35

ждём схемку от Вас

bart 09-05-2008 14:32

Решил сам делать хронограф, подскажите плиз где взять прошивку для него?

kuente 10-05-2008 15:33

quote: Originally posted by bart:
Решил сам делать хронограф, подскажите плиз где взять прошивку для него?

написать самому

NVN 10-05-2008 22:52

Самостоятельное изготовление - это хорошо. А в продаже рамочный датчик не появиться?

Storag 12-05-2008 14:27

А че удалили сообщение? Есть возражения по поводу последовательного включения светотранзисторов?

mironov 13-05-2008 10:04

quote: Есть возражения по поводу последовательного включения светотранзисторов?

Присоединяюсь к вопросу.

kuente 15-05-2008 18:16

quote: Originally posted by NVN:
Самостоятельное изготовление - это хорошо. А в продаже рамочный датчик не появиться?

появится, но позже, сейчас не хватает производственных мощностей на это дело

fusion 15-05-2008 22:30

Вообще говоря первая схема включения фототранзисторов довольно странная. В рабочем режиме при освещении фототранзисторов светодиодами сопротивление канала эммитер-коллектор низкое. При пролете пули (предположим пуля дала тень только на один фототранзистор) сопротивление фототранзистора подскакивает, но при этом его шунтируют освещенные собратья. Конечно ОУ усилит мизерный сигнал но по уму можно обойтись последовательной цепочкой обратносмещенных фотодиодов.

kuente 16-05-2008 15:14

Данная схема не окончательный вариант, можно переработать ее по собственному усмотрению

NVN 16-05-2008 15:54

quote: появится, но позже, сейчас не хватает производственных мощностей на это дело

Значит, я - один из первых покупателей. Хроном очень доволен, единственный недостаток его - сложность адаптации к разным винтовкам. Удерживая рукой трубочный датчик довольно сложно "поймать" пулю, не всегда получается. Приходится вытачивать переходники, иногда довольно громоздкие (на модер). Рамочный датчик в дополнение к трубочному - прекрасное решение проблемы.

hoakinn 31-05-2008 12:45

Сделал хрон рамочный по подобной схеме, только использовал не операционник lm358 а компаратор lm393 схемку упростил и использовал последовательное включение фототранзисторов (по 3 штуки на одни ворота с расстоянием между ними 5 мм). Ик светодиоды Ф5мм по 2 штуки на ворота с расстоянием между ними 10мм. Таким образом ворота получились узкие, но как показали испытания вполне хватает. База 80мм, ширина ворот ~ 15-17мм, высота ворот 45 мм.

Storag 31-05-2008 13:05

А каковы размеры ворот в ИБХ? Замеряйте, плиз, у кого есть. Не хочу делать хрон с узкими воротами, но и слишком широкие тоже не нужны.

mironov 18-11-2008 10:56

quote: Originally posted by kuente:
схему видишь, пытайся - перерабатывай, используй на хронолайте...

Tranklykator 19-11-2008 23:06

Схема с параллельным включением фототранзисторов работать, кмк, не будет, ибо нормальное состояние фототранзисторов в хронолайте - открытое. пролетевшая пулька затенит один или два, они закроются, но будут шунтированы остальными не затененными (открытыми) фототранзисторами. Их надо как то включить последовательно, хоть это вроде неправильно... Кстати, попробовал соединить последовательно 8 фототранзисторов и один эмиттерный резистор и засветить всю эту хрень лазером от указки, только линзу снял с нее. Лазерный диод дает расходящийся луч, который в поперечнике имеет прямоугольную форму. Т.о. получаем рогатый датчик наоборот - один излучатель и много приемников. Хоть лазер дает 680 нм, а фототранзисторы имеют пик на 950 нм, цепочка вполне реагировала на затенение хотябы одного фототранзистора. напряжение на резисторе при засветке лазером цепочки составляло около 2,5 вольт, при затенении одного или неск датчиков падало до 0,5 вольт. Кроме того, от лазера получается очень четкая тень, в отличие от цепочки светодиодов. Правда, перепада напряжения при подаче на хронолайт напрямую мало, а с операционными усилителями я дружу плохо , поэтому схема заглохла... Кстати, питание цепочки в пределах 8 - 12 вольт. Сильно не ругайте, это всего лишь идея... Слишком все получается навернуто - куча фототранзисторов, куча питающих напряжений... хрон будет размером и массой с кирпич

mironov 20-11-2008 11:24

quote: пролетевшая пулька затенит один или два, они закроются, но будут шунтированы остальными не затененными (открытыми) фототранзисторами.

здесь две ошибки:
- транзисторы не закроются до конца как в трубочном датчике
- открытый фототранзистор всеравно имеет конечное сопротивление и не маленькое (в открытом состоянии ток около 1мА)
quote: цепочка вполне реагировала на затенение хотябы одного фототранзистора. напряжение на резисторе при засветке лазером цепочки составляло около 2,5 вольт, при затенении одного или неск датчиков падало до 0,5 вольт.

При частичном затенении падение напряжения на резисторе все равно будет меняться и при параллельном и при последовательном включении.
Вот это изменение напряжения на резисторе и есть сигнал, его надо усилить и привести к потребному виду.
Попробуй соеденить транзисторы параллельно и цепочка все равно будет реагировать.

Storag 20-11-2008 12:39

При параллельном соединении изменение напряжения на ФТ будет гораздо меньшим чем при последовательном, значит компаратор не будет надежно отрабатывать.

Storag 20-11-2008 12:46


[B]

для хронолайта будет наверное так:

слишком сложно, можно сделать проще, операционник в режиме компаратора если - то ему пофиг в каком состоянии находиться, чтобы не инвертировать выходной сигнал используя еще один элемент можно просто его входы поменять местами. Плюс убрать конденсатор на входе, используя фототранзисторы как часть делителя напряжения, мерять изменение сигнала прямо на них. На второй вход опорное напряжение с которым сравнивается напряжение на ФТ.

mironov 20-11-2008 13:03

quote: Плюс убрать конденсатор на входе, используя фототранзисторы как часть делителя напряжения, мерять изменение сигнала прямо на них.

А как в таком случае избавиться от статической (низкочастотной) помехи: внешняя засветка, загрязнение датчиков?

Storag 20-11-2008 15:13

Приемник сверху, передатчик снизу. ФТ утоплены в корпус, закрыты инфракрасным светофильтром. Рамка внутри оклеена черным бархатом или что лучше всего замазана сажей, это резко уменьшает отражения даже по сравнению с черным пластиком и черной краской, в крайнем случае красить матовой краской нужно. Следующий момент - выбор рабочей точки фототранзисторов и величины опорного напряжения для уменьшения влияния загрязненности датчиков, вернее стекла их закрывающего.

mironov 20-11-2008 15:50

Мне кажется это будет борьба со следствием, а не с причиной (хотя черный - неотражающий корпус это правильно). Схема ведь не сложнее самого хронографа и на плате без разницы сколько микросхем паять, одну или две, стоят они копейки, основная цена будет от транзисторов и диодов. И опять таки ИБХ: датчики наружу торчат, корпус не сильно матовый и ничего - работает.

Storag 20-11-2008 16:45

Не знаю, не знаю. Смотрел у Олега2100 на хрон - датчики закрыты красным стеклышком и ничего нигде не торчит. А какая схема лучше - проверять надо, ибо в массовом производстве дешевле обходится схема с минимумом настроек, но такие схемы не всегда выигрывают по параметрам.

mironov 20-11-2008 17:16

Я эту схему проверял в программе Circuit Maker, версия правда какая-то старая, 3.03 кажется.
При ширине импульса на резисторе R1 (R4) 5мкс, фронта по 1 мкс и амплитуде 25мВ схема работала. При уменьшении длительности импульса или амплитуды переставала срабатывать, если же уменьшить длительность импульса и увеличить амплитуду или наоборот то все также работало, до определенных пределов.
Насколько я знаком с такими программами, ОУ считают они довольно хорошо, если режимы по уровню и частоте не предельные для конкретной железки, то расчет совпадает с железом очень точно. Проверял когда учился в институте, считал АЧХ для микрофонного входа усилка, потом проверял приборами - совпадение тогда меня сильно удивило.

YuraS 20-11-2008 19:51

Для ИБХ окошко 50х90 мм, практически это 2 спичечных коробка; датчики торчат в 713, в 716 - закрыты красным стеклышком.

Tranklykator 20-11-2008 22:05

quote: Originally posted by mironov:

- транзисторы не закроются до конца как в трубочном датчике - открытый фототранзистор всеравно имеет конечное сопротивление и не маленькое (в открытом состоянии ток около 1мА)


вообще то да, согласен... в итоге конечно какой то импульс будет получен и
при параллельном и при последовательном соединении датчиков, просто я весьма ленив и хотел обойтись без схем усиления не вышло...
Но ток открытого состояния фототранзистора мы все таки устанавливаем эмиттерным резистором, ибо без него при интенсивной засветке легко выжать из этого фототранзистора 15 мА при напряжении 1,5 В, что конечно не является номинальным режимом и неизвестно, будет ли достигнуто время срабатывания в 3 мкс (по даташиту 3 мкс при 5 В и 1 мА)
p/s все таки интересно, как соединены датчики в том же ИБХ?

hoakinn 22-11-2008 09:41

Я себе сделал с последовательным влючение фототранзисторов и по одному компаратороу на ворота - все прекрасно работает

hoakinn 25-11-2008 21:48

Блин, почти как у меня хрон только подстроечные резисторы у меня буржуйские "синенькие"(от совковых отказался из-за низкой стабильности) и весь "фарш" у меня на верхней платке

Tranklykator 26-01-2009 18:52

Смастерил рамку для хронолайта по схеме mironov"a... На удивление, схема заработала сразу, даже не пришлось переменники крутить Ловит где то 8 из 10 выстрелов, но думается, настройка все исправит... Автору схемы респект и большое человеческое спасибо

snim 14-03-2009 01:49

mironov
Tranklykator

Какие использовали светодиоды и фототранзисторы?

Tranklykator 15-03-2009 22:18

2 snim - у меня оптика хронолайтовская, т.е. фототранзисторы L-32P3C и светодиоды L-34F3C. И еще я делал последовательное включение фототранзисторов, но похоже, зря...

snim 16-03-2009 01:31

quote: Originally posted by Tranklykator:

у меня оптика хронолайтовская, т.е. фототранзисторы L-32P3C и светодиоды L-34F3C

Спасибо! Понял. Есть такие в ЧипДипе. Интересно, а что mironov использовал.
Делали по схеме из поста 21 ?

Tranklykator 16-03-2009 21:16

ну да, из 21...только фототранзисторы последовательно

Successful 01-03-2010 08:57



VAT57 02-03-2010 20:00

quote: Вот у меня возникла такая идея. Если сделать по первой схеме(параллельное соединение), однако использовать принцип отражения ИК луча от пули, а не прерывания. Для этого нужно установить ИК светодиоды и фототранзисторы за ИК светофильтром с одной стороны, например только снизу. Тогда т.н. рамка будет вообще не нужна. Зону действия таких датчиков, можно обозначить, например, черными прутиками, выходящими из корпуса наклонно расходящимися под углом примерно в 60 градусов, как это сделано у фирменного ProChrono.
Скорее всего в нем используется именно этот принцип.

Устройство получится не работоспособным. Отражённый луч даже от плоскости слаб и не достаточен для работы фотодатчиков, а от оферической поверхности шарика или пульки будет полностью рассеиваться в пространстве. В "рогатых" хронох источник ИК находится сверху, приёмник -снизу или источник и приёмник снизу. Пулька в этом случае прерывает отражённей световой поток от верхней зеркальной дуги, выполняющей роль рефлектора.

Successful 02-03-2010 23:43

VAT57 03-03-2010 20:45

quote: В том то и дело, что я смотрел недавно передачу про оружие, называется "Арсенал", так там показывали отстрел в хронограф ProChrono, и он был без дуг сверху. Как по вашему он тогда работал?

Возможно высокочастотный ёмкостной со щелевыми узконаправленными СВЧ приёмо-передатчиками 1,5-2,5 Ггц.

mironov 03-03-2010 22:43

quote: Вот у меня возникла такая идея. Если сделать по первой схеме(параллельное соединение), однако использовать принцип отражения ИК луча от пули, а не прерывания. Для этого нужно установить ИК светодиоды и фототранзисторы за ИК светофильтром с одной стороны, например только снизу. Тогда т.н. рамка будет вообще не нужна. Зону действия таких датчиков, можно обозначить, например, черными прутиками, выходящими из корпуса наклонно расходящимися под углом примерно в 60 градусов, как это сделано у фирменного ProChrono.
Скорее всего в нем используется именно этот принцип.

Хронограф оптический, работает в видимом диапазоне, на рогах крепятся рассеиватели. В пасмурный день рассеиватели можно не ставить. В помещении на рассеиватели ставят дополнительную подсветку из светодиодов.

Successful 06-03-2010 20:44

Спасибо, уже скачал мануал.

Successful 05-12-2010 09:35

Вот я изучил инструкцию на фирменный хронограф ProChrono, и там написано, что он работает в видимом спектре. Как вы думаете, может в нем применена такая схема датчика?
Т.е. в корпусе установлено два (по количеству датчиков) параболических зеркала, слегка наклоненных, чтобы весь свет, который попадает через щели в корпусе (желательно очень узкие), фокусировался на фоторезисторах или других фотоэлементах, работающих на видимом спектре. Тогда, при попадании в зону щели, пролетающей пули, на зеркале проявится затенение, и оно отразится на фотоэлементе. Дальше - дело техники.