Airgun.Org.Ru

Всероссийское Общество любителей пневматического оружия
Текущее время: 22 авг 2019, 20:09

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 109 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 01 окт 2017, 10:17 
Забанен
Аватара пользователя

Регистрация: 18.01.2011
Сообщений: 222
Откуда: Ставрополь
Арсенал: "ВМ" 1939г. 7.62х54 ММГ СХП.ИЖ-60 детка Крюгерка.
plotnik писал(а):
Не совсем...
Обманул всех - болтал, болтал, а ссылку на прошивку не дал, поэтому и никто там не регистрируется... :DD

Не болтал,а подробно рассказывал,и делал, болтаем мы здесь обсуждаем критикуем,обсе...м наслаждаясь от этого.Читать желательно не между строк,все скетчи в архивах (часть3) свободны для скачивания,или что то мешает тупо скачать и установить? :old:

_________________
Рубль скачет,евро скачет,доллар скачет...одно радует,зарплата стабильная!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 01 окт 2017, 19:21 
Забанен
Аватара пользователя

Регистрация: 18.01.2011
Сообщений: 222
Откуда: Ставрополь
Арсенал: "ВМ" 1939г. 7.62х54 ММГ СХП.ИЖ-60 детка Крюгерка.
:shock: :shock: :shock:


Вложения:
Безымянный.png431.png324512.png
Безымянный.png431.png324512.png [ 248.35 Кб | ]

_________________
Рубль скачет,евро скачет,доллар скачет...одно радует,зарплата стабильная!
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 дек 2017, 10:43 

Регистрация: 22.10.2017
Сообщений: 20
Откуда: Краснодар
Поделитесь, пожалуйста, емэйл адресом droboguns в личку, спасибо.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 15 мар 2018, 15:03 

Регистрация: 24.02.2014
Сообщений: 12
Откуда: S-Pb
Арсенал: иж-61
темка интересная. есть ардуинка нано, попробую макетку собрать..

_________________
Главное ввязаться, а там поглядим...
С этой баранкой всю пьянку забросил...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 06 апр 2018, 10:47 

Регистрация: 24.05.2010
Сообщений: 692
Откуда: г. Пермь
Арсенал: Крюгерган
ИЖ-60 продан,
В-2,
Крюгерган ИЖ-60 №2
ПАПА продан,
Эдган R3M,
Мурка 512 АП.
МР-155
ИЖ 38 отреставрирован
ИЖ 60 Крюгеган 4,5
На катушках вместо оптических элементов можно реализовать, просто как то на оптике погрешность измерения больше.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 12 апр 2018, 10:43 

Регистрация: 29.09.2010
Сообщений: 245
Откуда: Подольск
Вот и меня этот вопрос интересует... Если в этой схеме вместо оптопар катушки включить... Кто-бы взялся схему переделать? И скетч для ардуины переписывать придется наверное...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 17 май 2018, 18:53 

Регистрация: 01.10.2009
Сообщений: 71
Откуда: Иркутск
доброго времени суток. Собрал хронограф на ардуино. И казалось бы все идеально рабоает, но сравнил его показания с рамочным - отличаются довольно сильно. На скоростях около 270м/с скорость скачет хаотично до +-7м/с (когда рамочник показывает разброс +-2м/с). На скоростях 20м/с (плевок бумажкой) ардуино занижает скорость на 6-9м/с также хаотично.

Схемотехника простая - светодиоды светят на фототранзисторы, которые подтянуты к земле резисторами (кажется на 10кОм, точно не помню - паял полгода назад). Т.е. пока транзистор освещен, на сигнальном проводе лог. 1, в темноте лог. 0. Сигнал идет на контакты внешнего прерывания INT0 и INT1.
Ардуино nano запитана от преобразователя напряжением 5,5в.
текст программы:


#include <util/delay.h> // библиотека
#include "TM1637.h" // библиотека экрана
#define CLK 5 // пины подключения к экрану
#define DIO 4
TM1637 tm1637(CLK,DIO); // создаем экземпляр объекта типа «TM1637», с которым будем работать и задаем пины.можно было и не определять константы, а написать проще — вместо трёх предыдущих строк одну:
// TM1637 tm1637(5,4);, но так как мы сделали наглядней


int l = 100; // длинна между воротами в мм
int u = 0; // переменная для скорости
volatile boolean g1 = 0; // переменная для ворот1
volatile boolean g2 = 0; // переменная для ворот 2
volatile int t = 0;

void Timer1 ( void ) // функция инициализаици таймера1
{
TCCR1A = 0; //обычный режим
TCCR1B = 0; // таймер остановлен
TCNT1 = 0; // таймер обнулен
TIMSK1 = 0; //сбросили флаги
TIMSK1 |= (1<<TOIE1); //Разрешение прерывания по переполнению Т1.
}


void external_interrupts () // функция инициализаици внешних прерываний
{
EICRA = 0; // выставляем 0 во всем регистре
EICRA |= (1 << ISC11) | (1 << ISC01); // падающий фронт вызывает прерывания по INT1 и INT0
EIMSK |= (1 << INT1) | (1<<INT0); // разрешили внешние прерывания
}


ISR(INT0_vect) // функция прерывания 0
{
TCNT1 = 0; // обнуляем таймер
TCCR1B |= (1 << CS10); // запускаем таймер1
g1 = 1; // ставим метку, что 1 ворота пройдены
g2 = 0; // на всякий снимаем флаг со 2 ворот.
}


ISR(INT1_vect) // функция прерывания 1
{
TCCR1B = 0; // останавливаем таймер1
g2 = 1; // ставим метку, что ворота 2 пройдены
}



ISR(TIMER1_OVF_vect) // функция прерывания по переполнению таймера1
{
// g1 = 0;
// g2 = 0;
// TCCR1B = 0; // останавливаем таймер1
// TCNT1 = 0; // таймер обнулен
// t = 1;

t = t + 1;
}


void setup() {
Timer1(); // инициализировали таймер1
external_interrupts(); // инициализация внених прерываний
sei(); // разрешили глобальные прерывания
tm1637.init(); // инициализировали библиотеку экрана
tm1637.set(BRIGHT_TYPICAL); // выбираем значение яркости экрана BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
Serial.begin(9600); // сериал соединение с компом
Serial.println("Hello"); // говорим привет компу
for (int i=9999; i > 0; i = i - 1111){ // покажем на дисплее цифры от 9 до 1 для проверки
tm1637.display( i );
_delay_ms(100);
}
tm1637.display(0); // ноль на дисплей

}

void loop()
{

if (g1 == 1 && g2 == 1) // если пуля пролетела все ворота посчитать скорость, сообщить эту скорость, сбросить маркеры ворот, сбросить счетчик
{
u = 16000000/(65535*t+TCNT1); // u = l*v/x u больше в 10 раз для удобства
Serial.print( "speed = " );
Serial.println( u );
tm1637.display( u );
t = 0;
g1 = 0;
g2 = 0;
TCNT1 = 0; // обнуляем таймер
for (int i=0; i < 3; i++){ // помигаем значением
tm1637.clearDisplay();
_delay_ms(100);
tm1637.display( u );
_delay_ms(200);
}
}
}

Вот вроде бы все просто как валенок и обязано работать. Где искать косяки?


Вложения:
хрон2.jpg
хрон2.jpg [ 210.6 Кб | ]
хрон1.jpg
хрон1.jpg [ 237.37 Кб | ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 21 авг 2018, 19:06 
Аватара пользователя

Регистрация: 24.05.2018
Сообщений: 195
Откуда: Moscow
Арсенал: МР-512 с газовой пружиной.
Crosman Vantage NP
КрюгерГан 5.5, ствол 5.5 (роднок 536)
(КрюгерГан 6.35, ствол 6.35 (роднок 536))
Летящий писал(а):
доброго времени суток. Собрал хронограф на ардуино. И казалось бы все идеально рабоает, но сравнил его показания с рамочным - отличаются довольно сильно. На скоростях около 270м/с скорость скачет хаотично до +-7м/с (когда рамочник показывает разброс +-2м/с). На скоростях 20м/с (плевок бумажкой) ардуино занижает скорость на 6-9м/с также хаотично.

Схемотехника простая - светодиоды светят на фототранзисторы, которые подтянуты к земле резисторами (кажется на 10кОм, точно не помню - паял полгода назад). Т.е. пока транзистор освещен, на сигнальном проводе лог. 1, в темноте лог. 0. Сигнал идет на контакты внешнего прерывания INT0 и INT1.
Ардуино nano запитана от преобразователя напряжением 5,5в.
текст программы:


#include <util/delay.h> // библиотека
#include "TM1637.h" // библиотека экрана
#define CLK 5 // пины подключения к экрану
#define DIO 4
TM1637 tm1637(CLK,DIO); // создаем экземпляр объекта типа «TM1637», с которым будем работать и задаем пины.можно было и не определять константы, а написать проще — вместо трёх предыдущих строк одну:
// TM1637 tm1637(5,4);, но так как мы сделали наглядней


int l = 100; // длинна между воротами в мм
int u = 0; // переменная для скорости
volatile boolean g1 = 0; // переменная для ворот1
volatile boolean g2 = 0; // переменная для ворот 2
volatile int t = 0;

void Timer1 ( void ) // функция инициализаици таймера1
{
TCCR1A = 0; //обычный режим
TCCR1B = 0; // таймер остановлен
TCNT1 = 0; // таймер обнулен
TIMSK1 = 0; //сбросили флаги
TIMSK1 |= (1<<TOIE1); //Разрешение прерывания по переполнению Т1.
}


void external_interrupts () // функция инициализаици внешних прерываний
{
EICRA = 0; // выставляем 0 во всем регистре
EICRA |= (1 << ISC11) | (1 << ISC01); // падающий фронт вызывает прерывания по INT1 и INT0
EIMSK |= (1 << INT1) | (1<<INT0); // разрешили внешние прерывания
}


ISR(INT0_vect) // функция прерывания 0
{
TCNT1 = 0; // обнуляем таймер
TCCR1B |= (1 << CS10); // запускаем таймер1
g1 = 1; // ставим метку, что 1 ворота пройдены
g2 = 0; // на всякий снимаем флаг со 2 ворот.
}


ISR(INT1_vect) // функция прерывания 1
{
TCCR1B = 0; // останавливаем таймер1
g2 = 1; // ставим метку, что ворота 2 пройдены
}



ISR(TIMER1_OVF_vect) // функция прерывания по переполнению таймера1
{
// g1 = 0;
// g2 = 0;
// TCCR1B = 0; // останавливаем таймер1
// TCNT1 = 0; // таймер обнулен
// t = 1;

t = t + 1;
}


void setup() {
Timer1(); // инициализировали таймер1
external_interrupts(); // инициализация внених прерываний
sei(); // разрешили глобальные прерывания
tm1637.init(); // инициализировали библиотеку экрана
tm1637.set(BRIGHT_TYPICAL); // выбираем значение яркости экрана BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
Serial.begin(9600); // сериал соединение с компом
Serial.println("Hello"); // говорим привет компу
for (int i=9999; i > 0; i = i - 1111){ // покажем на дисплее цифры от 9 до 1 для проверки
tm1637.display( i );
_delay_ms(100);
}
tm1637.display(0); // ноль на дисплей

}

void loop()
{

if (g1 == 1 && g2 == 1) // если пуля пролетела все ворота посчитать скорость, сообщить эту скорость, сбросить маркеры ворот, сбросить счетчик
{
u = 16000000/(65535*t+TCNT1); // u = l*v/x u больше в 10 раз для удобства
Serial.print( "speed = " );
Serial.println( u );
tm1637.display( u );
t = 0;
g1 = 0;
g2 = 0;
TCNT1 = 0; // обнуляем таймер
for (int i=0; i < 3; i++){ // помигаем значением
tm1637.clearDisplay();
_delay_ms(100);
tm1637.display( u );
_delay_ms(200);
}
}
}

Вот вроде бы все просто как валенок и обязано работать. Где искать косяки?


ТУТА
Код:
void loop()
{

if (g1 == 1 && g2 == 1) // если пуля пролетела все ворота посчитать скорость, сообщить эту скорость, сбросить маркеры ворот, сбросить счетчик
{
u = 16000000/(65535*t+TCNT1); // u = l*v/x u больше в 10 раз для удобства
Serial.print( "speed = " );
Serial.println( u );
tm1637.display( u );
t = 0;
g1 = 0;
g2 = 0;
TCNT1 = 0; // обнуляем таймер
for (int i=0; i < 3; i++){ // помигаем значением
tm1637.clearDisplay();
_delay_ms(100);
tm1637.display( u );
_delay_ms(200);
}
}


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 07 окт 2018, 19:35 

Регистрация: 01.10.2009
Сообщений: 71
Откуда: Иркутск
В общем, дошли руки до проверки хронографа. Для этого я отрезал провода идущие от светодиодов и прицепил их ко второй ардуине. Для неё написал прошивку, позволяющую с нужным интервалом времени отключать сперва один, а потом второй светодиод. Хронограф это разумеется принимал за выстрел и считал скорость. Погонял на скоростях от 26 до 800 м/с.
На высоких скоростях погрешность составила около 2%.
Таким образом, можно сделать вывод, что программная часть работает и скорости фототранзисторов хватает.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 03 ноя 2018, 21:39 

Регистрация: 01.10.2009
Сообщений: 71
Откуда: Иркутск
Однако, дальнейшие тесты показали, что при быстром мигании светодиода фототранзистор не срабатывает. Минимально я смог выставить 280 тактов, а это 17,5мкс. Шарик диаметром 4,5мм на скорости 277м/с пролетает мимо датчика за меньшее время. И датчик не срабатывает. А шарик диаметром 6 мм пролетает мимо датчика за чуть большее время, что приводит к срабатыванию.

Тут мне в руки попался датчик дыма и я выпаял оттуда светодиод и фотодиод. Решил протестить их.
Написал код, который на короткое время отключает светодиод. Это время постоянно уменьшается до тех пор, пока наконец не становится слишком малым для регистрации события.

#include <util/delay.h> // основная библиотека

volatile int a = 0; // переменная
int b = 0; // переменная
unsigned int tact = 1000; // количество тактов


void IniTimer1 (void) // описание функция инициализаици таймера1
{
TCNT1 = 0; // таймер обнулен
TCCR1A = 0; //обычный режим
TCCR1B = 0; // таймер остановлен
TIMSK1 = 0; //сбросили флаги
TCCR1B |= (1<<WGM12); // стс режим (сброс по совпадению)
//////OCR1A = time; // максимальный предел счета
TIMSK1 |= (1<<OCIE1A); //Разрешение прерывания по совпадению
}


void Ini_External_Interrupts () // функция инициализаици внешних прерываний
{
EICRA = 0; // выставляем 0 во всем регистре
EICRA |= (1 << ISC01); // падающий фронт вызывает прерывания по INT0
EIMSK |= (1<<INT0); // разрешили внешние прерывания
}

ISR(TIMER1_COMPA_vect){ //обработчик прерывания по совпадению
PORTB|=(1<<5); // ВКЛЮЧАЕМ СВЕТОДИОД
TCCR1B = 0; // таймер остановлен
TCNT1 = 0; // таймер обнулен
}

ISR(INT0_vect) // функция прерывания 0
{
a++;
}

void setup() {
DDRD&=~(1<<2); // пин на прерывание на вход
DDRB|=(1<<5); // пин на светодиод на выход
PORTB|=(1<<5); // высокий лог уровень на светодиод

IniTimer1(); // инициализировали таймер1
Ini_External_Interrupts(); // инициализация внених прерываний
sei(); // разрешили глобальные прерывания
Serial.begin(9600); // сериал соединение с компом
Serial.println("Hello"); // говорим привет компу
}

void loop()
{
for (b = 0, a = 0; a == b; b++, tact--) {
OCR1A = tact; // указывам задержку
TCCR1B |= (1 << CS10); // запускаем таймер1
PORTB&=~(1<<5); //выключаем светодиод
delay(1); // ждем время
//срабатывают прерывания по таймеру и по внешнему прерыванию
PORTB|=(1<<5); // на всякий случай включаем светодиод
// если прерывания сработали цикл повторяется, если нет выходим из цикла
}
Serial.println(tact);
a = 0;
b = 0;
tact = 1000;
}


В итоге я стал получать данные: 127 тактов, 412 тактов, 600 тактов. И я заметил, что чем больше расстояние между диодами, тем меньшие промежутки времени мы регистрируем. Пробуя перекрыть диод пальцем я получил минимальный промежуток всего в 4 такта. А это 0,25 мкс. Т.е. пулю 4,5 мы заметим до скорости... Чего-то дофига получается :) под 18000м/с :)
Может и с фототранзистором такая же фигня, просто там все детали уже вклеены в трубку, а фотодиод я спаял навесным монтажом и смог обратить внимание на разницу в полученных данных.

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


Вложения:
Комментарий к файлу: схема подключения фотодиода

RYXGK6_acIs.jpg
RYXGK6_acIs.jpg [ 14.58 Кб | ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 12 ноя 2018, 01:51 

Регистрация: 08.08.2014
Сообщений: 92
Откуда: Красноярск
Арсенал: Паяльник
1. noname фототранзисторы могут быть ОЧЕНЬ тормозными (желательно использовать оригинал Kingbright).
2. подключать фототранзисторы лучше как в хронографе sparrow (чтобы при затенении напряжение поднималось).

Напряжение при засвеченных транзисторах настроить на 1.6-1.8 вольта (чем больше - тем выше чувствительность, но выше 1.9-2.1 вольт срабатывает прерывание).


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 12 ноя 2018, 07:27 

Регистрация: 01.04.2017
Сообщений: 138
Откуда: РФ
скетч хронографа для дисплея нокиа 1202
Если кто переделает под TM1637 то удешевит и геморроя как с дисплеем 1202 не будет.
https://yadi.sk/d/nn8Krhh4wz1H9w

и еще один скетч под дисплей 1602

https://yadi.sk/d/ts8joQSHJjBdFg


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 28 мар 2019, 10:10 
Аватара пользователя

Регистрация: 06.02.2012
Сообщений: 59
Откуда: кемеровская обл. город мыски
Арсенал: ВЛ-12 - 5.5
и еще один скетч под дисплей 1602

https://yadi.sk/d/ts8joQSHJjBdFg[/quote]
Всем здравствуйте. Раздобыл платы и решил сделать себе хрон. Скачал по ссылке программу , нажал "проверить " - красное что то выскочило .


Вложения:
Безымянный.png
Безымянный.png [ 27.63 Кб | ]
DSCN8351.JPG
DSCN8351.JPG [ 187.35 Кб | ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 28 мар 2019, 11:41 

Регистрация: 01.04.2017
Сообщений: 138
Откуда: РФ
У меня все нормально компилируется


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 28 мар 2019, 11:58 
Аватара пользователя

Регистрация: 10.05.2010
Сообщений: 826
Откуда: Кемеровская область, г. Осинники
библеотеки все стоят


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 28 мар 2019, 13:11 
Аватара пользователя

Регистрация: 06.02.2012
Сообщений: 59
Откуда: кемеровская обл. город мыски
Арсенал: ВЛ-12 - 5.5
VROON писал(а):
библеотеки все стоят

В этом деле я :(


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 28 мар 2019, 19:35 

Регистрация: 08.08.2014
Сообщений: 92
Откуда: Красноярск
Арсенал: Паяльник
На 1.8.8 версии все нормально компилируется.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 22 апр 2019, 22:16 
Аватара пользователя

Регистрация: 02.10.2011
Сообщений: 195
Откуда: Omsk
Тоже собрали хрон, правда немного доработали его

http://www.youtube.com/watch?v=T_oZRQ7R1bc&t=1s


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Arduino хронограф
СообщениеДобавлено: 23 май 2019, 22:30 
Аватара пользователя

Регистрация: 25.09.2017
Сообщений: 23
Откуда: между ЧМ и Каспием
Арсенал: это все от бедности
Сильно разочаровался в фототранзисторах.
У всеми любимых L-3DP3C (L-32P3C) время реакции 15 мкс, а время пролета пульки длинной 5мм на скорости :? 300м/с - 17мкс.
Они их просто не замечают :?


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 109 ]  На страницу Пред.  1, 2, 3, 4

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
POWERED_BY
Русская поддержка phpBB