Авторизация
Регистрация

Напомнить пароль

Серая коробочка радиодеталей. Хронометр для пневматики своими руками

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



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

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

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

Микроконтроллер attiny 2313 — 1 шт.
Регулятор напряжения L7805 — 1 шт.
Пара конденсаторов 330 нФ и 100нФ для регулятора напряжения
(можно запитать всю схему от трех пальчиковых батареек вместо кроны, тогда регулятор и конденсаторы не понадобится)
Подстроечный резистор на 20-50 килоом 2 шт.
7-сегментный индикатор на три цифры с общим катодом 1 шт.
УФ светодиод 2 шт.
Фототранзистор 2 шт.
выключатель, панелька для микроконтроллера, панелька для индикатора, коннекторы для шлейфов, сам шлейф я использовал от старого компьютера. Так же набор резисторов.
КОРОБОЧКА!!!

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


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


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


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


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


Чистим


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




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


ОНО ЖИВОЕ!


После этого я изготовил измерительную трубку с датчиками. Устроено просто — на расстоянии 50 мм друг от друга находятся расположенные друг напротив друга фототранзистор и светодиод, своеобразные оптопары. Когда пулька пролетает по трубке, она поочередно перекрывает луч света первому и второму транзистору, о чем они сигналят микроконтроллеру, который высчитывает скорость по всем известной со школы формуле.
исходный код
/*
* Прошивка без наворотов, расстояние между датчиками 100мм
* общий анод!
* Updated at: 15.12.2013
* Author: pahan
*/

#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#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;

LedPanel led;

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);

sei();

setLedValue(0);

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



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


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


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

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

Конечно же я не рассчитываю на его точность, эталона рядом не было, но скорость показывает не рандомно, стабильно. Если нужно отслеживать изменение начальной скорости пули в зависимости от изменений конструкции пневматики, то этого вполне достаточно. Аналоги такого хронометра стоят более 2 тысяч рублей, этот же обошелся мне не более чем в 300р, и еще подарил 4 часа приятного времяпрепровождения.
Планирую купить +32 Добавить в избранное
+69 +128
свернутьразвернуть
Комментарии (58)
RSS
+
avatar
+3
  • ksiman
  • 13 сентября 2014, 19:16
Замечательно, но исходная схема неверна.
Переверните фотодиоды :)
Вот в протеусе фототранзисторы верно нарисованы
+
avatar
0
работает же!
+
avatar
0
  • ksiman
  • 13 сентября 2014, 19:48
Работает, потому что стоят фототранзисторы и они правильно подключены. На исходной схеме автора нарисованы неправильно подключенные фотодиоды. Можете в протеусе проверить :)
+
avatar
0
горят
+
avatar
+1
  • ksiman
  • 13 сентября 2014, 19:57
Фотодиоды, а не светодиоды.
Фотодиоды всегда работают при обратном напряжении на них
+
avatar
0
там фототранзисторы же. в той схеме имею в виду
+
avatar
0
  • MACman
  • 17 ноября 2014, 10:53
В на схеме обозначения фотодиода в Википедии, получается, ошибка? Там «стрелка» элемента направлена от анода (+) к катоду (-).
P.S. Я в этой теме нуб и хочу разобраться
+
avatar
+31
  • gogabig
  • 13 сентября 2014, 19:52
Если работает — НИЧЕГО не меняй, даже если неправильно собрано!
+
avatar
0
  • devgram
  • 13 сентября 2014, 19:54
ИМХО трубка маловата, разве, что если только на дуло надевать, а обзор интересный, полезный, спасибо.
+
avatar
0
я просто приставлял ствол к трубке. три выстрела, все удачные
+
avatar
0
  • devgram
  • 13 сентября 2014, 20:25
тогда пользоваться аккуратно, и не давать случайным пользователям
это не придирки, а попытка по советовать сделать прибор безопасным
+
avatar
0
  • d480
  • 14 сентября 2014, 08:32
я просто приставлял ствол к трубке. три выстрела, все удачные


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



Дальше целое поле для творчества, Например, расфокусировать луч по оси, находящейся в плоскости преграды, сократив при этом количество отражений и усилив ставший более слабым импульс на выходе фотоприёмника, или вообще применить вместо светодиода лазерный диод, дающий не точку, а линию…
+
avatar
+1
  • AndyBig
  • 14 сентября 2014, 16:01
По такой схеме только лазерный излучатель и подойдет, или городить оптическую систему узкой фокусировки светодиода и фотоприемника :)
Расфокусировка не поможет, потому что если луч будет шире пульки, прерывания светового потока не будет :)
+
avatar
0
  • d480
  • 15 сентября 2014, 06:36
Прерывание будет, только амплитуда импульса будет меньше. Поэтому я и написал, что понадобится доп. усиление.
+
avatar
0
  • ksiman
  • 13 сентября 2014, 19:56
У Вас собрано всё верно. Оригинал схемы неверен
+
avatar
+1
А где на странице магазина написано что это и для чего?
А это просто коробка
+
avatar
0
категория товаров для людей с фантазией. из этой коробочки можно сделать что угодно
+
avatar
+1
  • Kneht33
  • 13 сентября 2014, 21:07
Красава!!!
Перефразируя общение в секс-чатах — «Хочу вставить в него своего Крюгера!!!»
+
avatar
0
  • GuRAM
  • 13 сентября 2014, 21:55
Отлично, а самое главное дешево) Я как то покупал года так 3-4 назад за 1 800 рублей. Для винтовок на ГП особо то и не нужно, а вот для редукторных РСР думаю нужнее. На али кто нибудь встречал собранный хронограф?
+
avatar
0
  • ROMAN81
  • 14 сентября 2014, 05:36
Да, на Али есть готовые, но не помню как пишется на английском название… поэтому ссылку не дам.
+
avatar
0
  • Schiff
  • 14 сентября 2014, 08:44
Shooting Chronograph вводим в поиск, результатов хватает. Правда цены завышены, нормальный рамочник можно взять за такую сумму.
+
avatar
0
  • nonpro
  • 13 сентября 2014, 23:59
новая тема для оргов
+
avatar
+1
  • AndyBig
  • 14 сентября 2014, 00:40
У нас на радиорынке подобные коробочки стоят примерно столько же, и не нужно ждать 3-4 недели :)
Автору плюс в обзор за прямые руки :))
+
avatar
0
  • jh7
  • 14 сентября 2014, 02:39
у нас бесплатно раздают еще и денег на такси дают
+
avatar
0
  • AndyBig
  • 14 сентября 2014, 16:03
Много дают? Если меньше 100 баксов, то не в счет :)
+
avatar
0
сходил на рынок, купил коробочку, ждешь остальное 3-4 недели.
+
avatar
0
  • AndyBig
  • 14 сентября 2014, 16:05
Сходил на рынок, купил все, ничего не ждешь — такой вариант ближе к жизни :) В схеме нет ни одной дефицитной или дорогой детали.
+
avatar
0
дораха
+
avatar
0
  • AndyBig
  • 14 сентября 2014, 16:17
Кто «дораха»? Тут весь девайс выйдет в 200-250 рублей вместе с корпусом :)
+
avatar
0
всмысле дорого, не подумай.
хороший у тебя радиорынок. у меня только коробочка 150 стоит, по 10р за диоды, 25 за кнопочку, разъемы, у них 20р миниджек стоит, а под шлейф я боюсь даже думать. ну и микроконтроллеров у них нет, и 150 за штуку попросили бы точно
+
avatar
0
  • AndyBig
  • 14 сентября 2014, 16:58
О… Да, у вас как-то дороговато :)
+
avatar
0
  • d480
  • 14 сентября 2014, 07:55
Конечно же я не рассчитываю на его точность, эталона рядом не было...
Эталон можно построить самому. Если светодиоды запитать от импульсного генератора, выдающего импульсы сначала на входной светодиод, а затем на выходной, то можно программно выбрать задержку так, что счётчик будет показывать заранее выбранное число. У микроконтроллера дофига лишних ног и места в программной памяти тоже, встроенный калибратор можно сделать прямо на нём. В режиме калибровки микроконтроллер будет сам мигать светодиодами, а в режиме измерения — ждать, когда пролетит пуля ;))
+
avatar
0
ну ты загнул. я еле переделал прошивку под другой дисплей. уровень знаний не тот. подкину автору мысль
+
avatar
0
  • d480
  • 15 сентября 2014, 06:50
Думаю, что он об этом давно знает :)
+
avatar
0
  • AndyBig
  • 14 сентября 2014, 16:07
Простите, а как этот генератор будет калибровать расстояние между входным и выходным светодиодами? :)
В режиме калибровки микроконтроллер будет сам мигать светодиодами
Что и каким образом будет при этом калиброваться? :)
+
avatar
+1
  • d480
  • 15 сентября 2014, 06:49
Что и каким образом будет при этом калиброваться? :)
Хороший вопрос. Несмотря на то, что оба счётчика времени будут синхронизированы от одного задающего генератора (и тот, который генерирует интервал, и тот, который измеряет время пролёта), на точность измерения времени второго из них влияет исправность оптической системы и электро-оптических преобразователей сигнала. По сути, кроме них, всё остальное, либо работает, либо — нет. Самоконтроль при помощи мигающих светодиодов вполне сможет оценить эту исправность.
+
avatar
0
  • AndyBig
  • 15 сентября 2014, 09:56
Так это не калибровка, а именно самопроверка :) Да и то она сможет проверить только исправность фототранзисторов, в режиме ожидания ведь и так светодиоды светятся и для проверки оптической системы нет нужды мигать :)
+
avatar
-1
  • Faster
  • 14 сентября 2014, 08:31
Прямость рук и не какого мошенничества! насчет споров и колебровки даже н знаю, важно знатьрастояние между сенсорами и все, лучше добавить несколько сенсоров для увеличения точности…
+
avatar
+1
  • AndyBig
  • 14 сентября 2014, 16:15
Несколько дополнительных сенсоров точность не повысят, точность повысит максимально точно измеренное расстояние между точками срабатывания светодиодов и внешний кварц для микроконтроллера, потому как внутренний генератор у него вообще не отличается точностью :)
+
avatar
0
  • ksiman
  • 14 сентября 2014, 17:39
потому как внутренний генератор у него вообще не отличается точностью
Внутренний генератор у этого контроллера весьма точный (не хуже 0,1%), чего более, чем достаточно для данного применения
+
avatar
+1
  • AndyBig
  • 14 сентября 2014, 17:56
А производитель этих контроллеров с Вами не согласен:
At 3V and 25°C, this calibration gives a frequency within ± 10% of the nominal frequency. Using run-time calibration methods as described in application notes available at www.atmel.com/avr it is possible to achieve ± 2% accuracy at any given VCC and Temperature
То есть с простой калибровкой, идущей с завода, этот генератор обеспечивает +-10% от заявленной частоты при определенном питании и температуре. Прользуясь танцами с бубном его можно заставить повысить точность до +-2% при неизменном напряжении питания и температуре. Перенесли девайс куда-то, где теплее или холоднее — калибровка коту под хвост и возвращаемся хорошо если к плюс-минус 10% :)
+
avatar
0
  • ksiman
  • 14 сентября 2014, 18:16
Да я и сам был немало удивлён, измеряя точность временных отсчётов при использовании встроенного генератора. Производитель явно поскромничал.
Правда проверял на атмегах
+
avatar
+1
  • AndyBig
  • 14 сентября 2014, 18:44
А Вы измерьте их при +15 и при +30 градусах :) А, и еще не забудьте напряжение питания контроллера менять от 3 до 5 вольт :)
RC-генераторы просто не могут быть с точностью 0.1%, если только они не термостабилизированы и не содержат прецизионного источника опорного напряжения. Вообще всегда было принято при измерении каких-то внешних временных интервалов обязательно тактировать контроллер от внешнего кварца. В этом отношении приведенная схема безграмотна :) Но мерять относительные величины при неизменных внешних условиях ею можно :)
+
avatar
+1
  • ksiman
  • 15 сентября 2014, 07:31
А Вы измерьте их при +15 и при +30 градусах :) А, и еще не забудьте напряжение питания контроллера менять от 3 до 5 вольт :)
RC-генераторы просто не могут быть с точностью 0.1%, если только они не термостабилизированы и не содержат прецизионного источника опорного напряжения.
Да, проверял при стабильном питающем напряжении и нормальной температуре. Но на разных контроллерах (стоит в панельке) повторяемость выдержки была очень высокая и о применении кварца даже не задумывался.
+
avatar
0
  • vismyk
  • 14 сентября 2014, 19:17
it is possible to achieve ± 2% accuracy at any given VCC and Temperature
— «возможно достичь точности ± 2% при любых VCC и температуре». По-моему так. © ;)
+
avatar
+2
  • AndyBig
  • 14 сентября 2014, 20:52
Более точный перевод: "… при любых заданных VCC и температуре". То есть можно добиться этой точности при 0 градусов и 2.5 вольтах питания, можно для +40 и 5 вольтах… Но нельзя обеспечить эту точность в диапазоне температур или напряжений :)
Кроме того калибровка требует или внешних инструментов (программатор, UART) или того же внешнего кварца. То есть по-быстрому перед очередными отстрелами ее не проведешь :)
+
avatar
+1
  • d480
  • 15 сентября 2014, 07:00
Внутренний генератор у этого контроллера весьма точный (не хуже 0,1%), чего более, чем достаточно для данного применения
Послушайте, ну о чём здесь спорить, AndyBig абсолютно прав, девайс, построенный на принципе измерения времени, должен быть кварцованым. Зачем экономить на спичках?
+
avatar
0
Винтовка хорошая, тоже себе такую присматриваю, только в пластике.
+
avatar
0
  • doc
  • 15 сентября 2014, 18:46
Дрельку делал из патрона и моторчика с фасттека.
А можно по подробней? Какой двигатель и блок питания? И где можно такие патрончики для свёрл купить?
+
avatar
+1
мотор
патрон
блок питания любой, который даст 12в. 1а. сам питаю от самопального лабораторника регулируемого
+
avatar
0
  • termsl
  • 10 октября 2014, 02:05
Я бы не писал, сколько мысов оно намеряло, не к добру это:)
+
avatar
0
ради бога, кому это нужно то
+
avatar
0
Афтор немного приврал в стоимости, один программатор стоим 1800 руб
+
avatar
0
свой USBASP я купил за 200р, сейчас можно и дешевле найти. Не обязательно пользовать дорогущий
+
avatar
0
  • vmitr
  • 07 января 2016, 07:56
Здравствуйте, каким программатором вы пользовались и какой программой для прошивки?
+
avatar
0
Usb asp программатор, sina prog программка
+
avatar
0
  • vmitr
  • 22 января 2016, 19:37
Большое спасибо автору. Схему спаял, все работает.
Но осталось поле для работы. Замерил скорость с помощью генератора и частотомера. Оказалось, что хронограф занижает скорость на 11 %. Полагаю что это из-за несоответствия частоты внутреннего генератора расчетной 1 МГц. Впаял кварц на 4 МГц. Подскажите пожалуйста, что нужно изменить в прошивке, чтобы она учитывала кварц и коэфф. деления на 4. Ну и до кучи как подобрать расстояние между фотодиодами. Использовал самую первую прошивку на 100 мм с общим катодом. Еще раз огромное спасибо за схему.
+
avatar
0
  • sstyle
  • 30 сентября 2016, 15:18
трубку по идее надо ЧЕРНУЮ. Ну и лучше сделать рамочный конечно.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.