- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

Попытался собрать универсального рамочного монстра со множеством оптических датчиков — 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!

Все.

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

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

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

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

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

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

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

Diana-54 Airking

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

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

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

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

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

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

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

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

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

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

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

Автор: gerasimenkoao

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/283596

Ссылки в тексте:

[1] конструкцию Михаила Шевченко: http://justforduino.blogspot.com/2013/05/arduino.html

[2] Источник: https://habr.com/post/414745/?utm_source=habrahabr&utm_medium=rss&utm_campaign=414745