Хабрахабр

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Можно взять 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
//если на втором датчике - короткое - на экране будет отображаться # перед словом 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мм, "фольга" стала показывать верный результат — почему — загадка!

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

Diana-54 Airking

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

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

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

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

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

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

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

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

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

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

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть