Как стать автором
Обновить

#BigGun. Простейший «рамочный» хронограф на Arduino (измерение скорости пули)

Время на прочтение5 мин
Количество просмотров19K

дура - она такая пуля!


Электрически конструкция датчика состоит из одних проводников. Элементарно.


Никакой обвязки — принципиально — это две "кнопки" с массы на порты 2 и 3, проще детекторного приемника!


сборка прибора проводилась под покровом ночи - ибо лето-жара ;-)


Небольшой экскурс в историю(курсивом) — пневматическим оружием занимаюсь более 20 лет, и все это время для измерения скорости пули использовал метод баллистического маятника.
Но появился Дробовик — энергия против магнума калибра 4.5мм -в 100 раз!!! больше — не бревно-же на подвесах использовать!


На то время уже приобщился к использованию Arduino в мирных целях._


За основу взял конструкцию Михаила Шевченко на двух парах оптических датчиков.


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


Попытался собрать универсального рамочного монстра со множеством оптических датчиков — FAIL.


Решив упрощать, пришел к описываемой конструкции, дальше уже некуда ;-)


Принцип датчиков позаимствовал у создателей программы Airspeed (родом из 90-х).


устройство датчиков


Просто добавь микроконтроллер (точность — на порядок выше)!


То-есть, оно когда заработало, то так просто выглядит!


В отличие от звуковых карт, пришлось оперировать не аналоговым сигналом, а переходом с логической 1 на 0.


Удаче предшествовало множество экспериментов — 2 варианта рамок, 3 вида электрической "обвязки" и 4 правки скетчей (программы).


Подтяжка напряжения на цифровые пины (PULLUP) оказалось наиболее жизненным и стабильным решением!


В итоге, вероятность допустить ошибку при повторении данной схемы — мизерная!


Все, дальше нет времени обьяснять, датчики можно собрать просто глядя на фотографии.


собранный и готовый к работе прибор


Итак, начинаем игру в ПЯТНАШКИ — исходные материалы — деревяный брусок 15х10х5см, два куска полиэтиленового листа 15x15см, толшиной 2.5мм.


На большей толщине рамок — датчики могут не срабатывать, на меньшей — коротить от дуновения ветерка.


Можно взять 3-мм гофрокартон, бальзу, или вовсе сделать рамки из обычных линеек!


Основное что следует помнить — 4мм толщины — уже много, на шести работать и вовсе перестает!


Размер "окна" в рамках — 9x9см (изначально было десять) мало?


Если Вы не можете попасть в десятку, в прямом и переносном смысле, то говорить о необходимости хронометра — рано!


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


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


При этом, сам брус должен быть уже 100мм. на толшину одной рамки (на самом деле древесина в результате усыхания на складе сама уменьшается в размерах ;-)


П-образные рамки сделаны из соображений "многоразовости" одного "комплекта" фольги — после каждого выстрела линейкой проводим между парами пластин дабы разомкнуть контакт в районе пулевых отверстий.


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


в дело идут подручные материалы - даже прищепки пригодились!


В качестве проводников взял многожильную витую пару — все концы залудил (мы-же помним о том что медь с алюминием напрямую не соединяют!)


Так с этим разобрались.


Теперь перейдем к микроконтроллеру — все отлаживал на arduino Uno (Atmega-328) 16Mhz + LCD Keypad Shield.


Итак, текст скетча (программы):


// Подключаем библиотеки
#include <LiquidCrystal.h>

//ВАЖНО! инициализируем пины вывода - у Вас могут быть другие!!!
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

//определяем переменные:
//скорость пули
unsigned int data = 0;

//переменные для записи времени прерываний
volatile unsigned long int time1 = 0;
volatile unsigned long int time2 = 0;

void setup() {

  //Устанавливаем количество столбцов и строк LCD
  lcd.begin(16, 2);

  //определяем пины для работы с прерываниями 
attachInterrupt(0, sensor_1, FALLING);
attachInterrupt(1, sensor_2, FALLING);

//включение внуттреннего напряжения подтяжки на эти-же  пины
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);

}

void loop() {

  lcd.setCursor(0, 0);
  lcd.print("CHRON 100mm base"); 

//проверка разомкнутости цепей датчиков
nogood:

//если на первом датчике - короткое - на экране будет отображаться # после слова CHRON
if ( digitalRead(2) == LOW )
{ 
  lcd.setCursor(5, 0);
  lcd.print("#");
  goto nogood;
}
else
{
  lcd.setCursor(5, 0);
  lcd.print(" "); 
}

//если на втором датчике - короткое - на экране будет отображаться # перед словом base
if ( digitalRead(3) == LOW )
{ 
  lcd.setCursor(11, 0);
  lcd.print("#");
  goto nogood;
}
else
{
  lcd.setCursor(11, 0);
  lcd.print(" "); 
}

  lcd.setCursor(0, 1);
  lcd.print("Speed ");
  lcd.setCursor(6, 1);
  lcd.print(data);
  lcd.setCursor(13, 1);
  lcd.print("M/S");

     delay(100);

 while ( time1 == 0 && time2 == 0 ) ;

        delay(100);

    if ( time1 != 0 && time2 != 0 && time2 > time1 )
    {
        data = 0.1 / ((time2 - time1) / 1000000.0); // v = s / t
    }

//    Serial.println(data)
// Если у Вас нет дисплея - комментарим все строки работы с библиотекой LiquidCrystal (lcd), 
// раскомментируем верхнюю - Serial.println - скорость будет отображаться в окне Arduino IDE 
  lcd.setCursor(6, 1);
  lcd.print(data);

    time1 = 0;
    time2 = 0;
}

void sensor_1()
{
    if ( time1 == 0 )
    {
        time1 = micros();
    }
}

void sensor_2()
{
    if ( time2 == 0 )
    {
        time2 = micros();
    }

}

Вкратце, принцип работы — командой PULLUP на пины 2,3 включается напряжение подтяжки (внутренними резисторами 20-50 кОм)
Пролет пули делает короткое замыкание, регистрируемое прерываниями (sensor FALLING), как наиболее быстрыми командами arduino.
Зная разницу во времени и расстояние между датчиками, вычисляется скорость пули.


ВАЖНА очередность датчиков — первый — на пин 2!


Все.



Кто-то возразит, что на пробивание фольги тратится энергия, и реальная скорость пули будет выше!


Поначалу вроде все так и было!


По сравнению со скоростью, замеренной полтора года назад прибором с оптическими датчиками (280м/с) — девайс на фольге выдавал 260!


Энергетически — это 22Джоуля против 19! — потеря сразу трешки!


Но как только я уменьшил базу до 100мм, "фольга" стала показывать верный результат — почему — загадка!


Пули использовал Luman FT 0.56грамма, приборы на основе одного и того-же микроконтроллера, база в обоих случаях — 100мм, одна винтовка


Diana-54 Airking


Теперь о стабильности показаний — из 5 выстрелов, "выброс" только по одному, цифры остальных — сходятся.


Да, и последнее, спросите — зачем в век электроники изобретать велосипед?


Все очень просто — ответ — дробовик!


При измерении скорости заряда на вылете — не проблема — подойдет любой прибор!


Но на расстоянии дробь имеет свойство рассеиваться (стандартная мишень для проверки осыпи — 75x75см).


А теперь представьте вариант необходимости замера скорости заряда на 35 метрах — если в клочья разнесет даже китайский прибор за 50$ — будет обидно.


Выход — либо "бронировать" корпус и датчики (достаточно доски 40мм), либо использовать одноразовые.


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


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


Метких Вам выстрелов, а охотникам — Ни Пуха, Ни Пера!


До новых встреч на Хабре, Андрей.

Теги:
Хабы:
+19
Комментарии30

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн