рамочный хронограф

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем eldar, 25 июл 2016.

  1. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    Очень сожалею что все телепаты в отпуске. увы повествовательный стиль , это не мой конек. Сейчас нашел полчасика вернуться к балалайке. понял что вопрос можно было сформулировать 3 словами. " как добится стабильного напряжения на датчиках" (схема получилась очень критична даже к перепаду 0.1в)[​IMG] и сам нашел простое решение брать не 5 в с сетевой зарядки, а взять блок питания на 9 в + понижающий стабилизатор. + ниже прикрепил набросок кода с самопроверкой значений датчиков каждые 5 сек. кот написал специально для форума так как полный код с проверкой всех групп датчиков получился просто гигантским на несколько сраниц. в ниже приведенном коде приведена собственно мысль как организовать самокалибровку датчиков. Хотя возможно и в реальной поделке буду использовать сумму а не показания отдельных датчиков. Старался как мог, оставил только основные моменты, прошу с пониманием отнестись. Если это останется непонятым, сам разберусь рано или поздно, однако хорошо если бы нашлись телепаты и поняли), хотя бы направили на путь истинный. Помимо программирования приходится осваивать литературу)

    Код (C++):
     #include <MsTimer2.h>
    #define IN_1 A0; // приемные входные инфракрасные диоды группами по 2 шт последовательно
    #define IN_2 A1;
    #define IN_3 A2;
    #define IN_4 A3;

    #define OUT_1 A4;// приемные выходные инфракрасные диоды группами по 2 шт последовательно
    #define OUT_2 A5;
    #define OUT_3 A6;
    #define OUT_4 A7;


    int datIN ;
    int datOUT ;


    int prev_datOUT_1 ; // первое измерение с датчиков входа и выхода
    int prev_datIN_1 ;

    int prev_datOUT_2 ;  // второе измерение с входа и выхода
    int prev_datIN_2 ;

    int prev_datOUT_3 ;  // третье измерение с входа и выхода
    int prev_datIN_3 ;

    int sumIN ; // сумма значений с входных датчиков
    int sumOUT ; // сумма значений с выходных датчиков

    int prev_sumIN ; // значения последней калибровки
    int prev_sumOUT ;

    long Time_IN ; // время срабатывания входных датчиков
    long Time_OUT; // время срабатывания выходных датчиков

    int BulletSpeed ; скорость
    //тут я не уверен, это только предположение, через таймер через каждые 5 сек проверять значения на датчиках
    void Sum ()
    { sumIN = (analogRead(A0)+analogRead(A1)+analogRead(A2)+analogRead(A3)) ;
    sumOUT = (analogRead(A4)+analogRead(A5)+analogRead(A6)+analogRead(A7));
    if  (( prev_sumIN - sumIN >= 17)&& ( prev_sumOUT - sumOUT   >= 17))
    /* если в момент измерения произошло срабатывание датчиков, то оставляем значение
    которое было измеряно ранее. если нет то это значение становится пороговым
    конечно очень спорный момент но ничего уменее не придумал
    почему 17 потому что в моем макетном вырианте перепад в момент затенения фотодида
    был в пределах 19 - 25 сколько это в вольнат лень перещитывать,
    но для сигнала этого вполне достаточно*/

    {
      sumIN = prev_sumIN;
      sumOUT = prev_sumOUT;
    }
    }

    // в скетче для примера использыется только одна приемная и выходная группа на пинах А0 А4

    void setup() {
    pinMode(A0, INPUT);
    pinMode(A1, INPUT);
    pinMode(A2, INPUT);
    pinMode(A3, INPUT);
    pinMode(A4, INPUT);
    pinMode(A5, INPUT);
    pinMode(A6, INPUT);
    pinMode(A7, INPUT);
    delay(1500);
    int prev_datIN_1 = (analogRead(A0)+analogRead(A1)+analogRead(A2)+analogRead(A3)); // первое значение с датчиков
    int prev_datOUT_1 = (analogRead(A4)+analogRead(A5)+analogRead(A6)+analogRead(A7));
    delay(1500);
    int prev_datIN_2 = (analogRead(A0)+analogRead(A1)+analogRead(A2)+analogRead(A3)); // второе значение
    int prev_datOUT_2 = (analogRead(A4)+analogRead(A5)+analogRead(A6)+analogRead(A7));
    delay(1500);
    int prev_datIN_3 = (analogRead(A0)+analogRead(A1)+analogRead(A2)+analogRead(A3)); // третье
    int prev_datOUT_3 = (analogRead(A4)+analogRead(A5)+analogRead(A6)+analogRead(A7));

      int prev_sumIN = (prev_datIN_1 + prev_datIN_2 + prev_datIN_3) / 3; // среднее значение с датчиков
      int prev_sumOUT = (prev_datOUT_1 + prev_datOUT_2 + prev_datOUT_3) / 3;
    //  MsTimer2::set(5000, Sum); // 5 секунд период
    //  MsTimer2::start();

    Serial.begin(9600);



    }

    void loop() {
    int sumIN = (analogRead(A0)+analogRead(A1)+analogRead(A2)+analogRead(A3)); // вот тут и может быть собака зарыта
    int sumOUT = (analogRead(A4)+analogRead(A5)+analogRead(A6)+analogRead(A7)); // если момент измерения и пролета предмета произойдет одновременно
    // то в лучшем случае не измерит скорость пролета, в худшем начнется некотролируюемая фигня
    if ( prev_sumIN - sumIN >= 17)  // ну и собственно измерение скорости где 220 расстояние между датчиками в мм
    {
    long Time_IN = millis();
    }
    if (prev_sumOUT - sumOUT >= 17)
    {
      long Time_OUT = millis();
    }

    int BulletSpeed =220 / (Time_OUT - Time_IN);

    }
     
  2. Vad33

    Vad33 Капитан-оригинал

    А вы туда с руки стреляете или стрелялку в зажим крепите?
    Просто интересно, какой смысл в куче свето и фото диодов, если затенение ловите, а не отражение.
    К тому же все полученные значения усредняете, а это палюбому уменьшает всплеск,
    Да и analogRead - не самая быстрая команда.
    Кароче, сдается мне, копаете не туда, пытаетесь разглядеть силуэт мотылька на фоне прожекторов,
    моргая глазами.
    Может я конечно, чего не понимаю и даже - скорее всего... :)
     
  3. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    вечер добрый, спасибо за ответ)
    как бы из принципа чем больше тем лучше. фотодидов много для того что бы не было "мертвых зон" ИМХО. но надо все на практике проверять. если смогу 3мя на 12 см ширины обойтись то конечно же поставлю 3 а не 8.
    это один из вариантов кода, как я писал выше у меня есть код по обработке значения с каждого датчика. Но он огромный до безобразия с около 80ю промежуточными переменными. Сейчас курю "классы и библиотеки" скорее всего смогу сильно ужать его.
    если память не изменяет 0,00011 в самом пессимистичном случае. для пневматических скоростей до 400 м/с вполне хватит.
    по первой части "апсалютно" точно, по второй сомнения).
    в посте выше в коде не совсем правильно написал проверку пороговых значений датчиков по таймеру. потом позднее пришла мысль как огранизовать постоянную самопроверку через прерывания.
    Тоже могого не понимаю, но если получится то отлично. если нет тоже хорошо + научусь еще чему то в программировании. а из запчастей соберу хронограф по "народной" схеме. Сейчас все упирается в почту, как скоро запчасти доставят. А там методом практического тыка уже выяснять что будет работать что нет. как то так. С уважением
     
  4. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    в "опщим" пичалько(((. https://drive.google.com/file/d/0B2kaRZ6OgtCPel9zaHBIQjRtMlE/view?usp=sharing .
    Собрал, опробовал протестил, = хрень. кодовая часть работает норм, а вот физическая увы, на объект в диаметре меньше 7 мм тупо не реагирует. Если у кого есть интерес в этой поделке пишите свои предложения, проверю. Хрон собран на фотодиодах, потому осталось еще несколько вариантов.
    1. собрать на фоторанзисторах (они наверное еще месяц идти будут).
    2 урезать карасей и уменьшить расстояние между излучающими диодами и премниками.
    3. попробовать вариант с отраженным сигналом.
    4 если не пройдет ни один вариант, соберу по народной схеме.
     
  5. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    всем доброго вечера. Жаль что особого интереса нет к теме. Возник азарт все таки довести до конца работу.
    История такая. Виной всему датчики. Кинули китайский братия(((. Заказывал фотодиоды, так как вся схема была заточена под них, а пришли фототранзисторы. Причем с гадскими характеристиками. только 2 четких положения или пропускает ток или нет. Причем промежуточные значения между пороговыми очень слабо меняются. Но это еще пол беды. Они начинают срабатывать только тогда, когда полностью вся площадь фототранзистора закрыта, если есть хоть маленькая щелочка для света, он вообще никак не реагирует. Для чего такие фототранзисторы нужны Х/З. (Времени жалко до ужаса, пока следующий заказ придет это еще месяц полтора)
    пока вышел из положения так. спилил верхушки транзисторов, так как было предположение что его форма фокусирует лучи на кристалле, максимально затенил по сторонам оставив открытыми только спиленные торцы. так же спилил и затер нулевкой излучающие ИК диоды, что бы свет был рассеяный. и датчики ловили любое резкое затенение. (придется добавить в кот условие, что измерение будет истинным елси изменине произошло в определенный период времени). Но вылезла новая болячка. откудато хватают помехи датчки, при чем это не электронаводки. две группы датчиков ловят всплески независимо друг от друга. может кто подскажет как с этим можно бороться? схема подключения на этой странице выше. Очень хочется воплотить проект в жизь!)


    [​IMG]

    значение 99 и надпись "VHOD_PORT" это датчики словили брошенную спичку)
     
    Последнее редактирование: 17 май 2017
  6. mcureenab

    mcureenab Гуру

    Из потока сознания уловил
    (400 (м / с)) * 0.0001 с = 4 сантиметра

    Пока АЦП чешется с 1 сэмплом пуля пролетит мимо датчика.

    Какая у вас пулька? Пусть 1 см.

    (400 (м / с)) / (1 см) = 40 кГц

    Arduino в состоянии оцифровывать сигнал частотой около 4 кГц.

    http://www.atmel.com/images/Atmel-8...PA-168A-168PA-328-328P_datasheet_Complete.pdf

    24.6.1 Analog Input Circuitry

    Вам нужно дифференцирующей схемой ловить изменение сигнала на датчике и только при срабатывании датчика дергать прерывание МК.

    Реагируя на появление и пропадание тени от пули можно фиксировать путь менее 1 мм на скорости 400 м/с. Этот размер меньше размера светодиода.
     
    CYITEP_BAC9I нравится это.
  7. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    Очень огромное спасибо!!!
    И за то что в суть вникли и за то что коротко и по теме объяснили что к чему.
    А так бы я долго бы еще "ап стену" бился. Остается только один вариант. компараторы и цифровой вход.
    как появится свободное время попробую реализовать подключение датчиков по схеме автора проекта "хронолайт"
    [​IMG]
    Едиственно не совсем понял почему все выходы компаратора объединены? Но это мелочи, подключу все выходы отдельно. + попробую https://istarik.ru/blog/arduino/1.html , что это за зверь. В интернете видел самодельные хронографы с высотой порталов по пол метра. вот бы чудо произошло и кто нибудь из авторов здесь обитал. В личку бы поделился расстановкой датчиков(обещаю хранить тайну!!!) . а пока чуда не случилось. буду пилить гири). и ждать когда придет заказ с нормальными фоторанзисторами.
    Кстати кому ни будь надо 80 фототранзисторов с уникальными характеристиками? Они открыты если на на них падает хоть чуть чуть света и закрыты только когда полностью закроешь от света. (самовывоз из Казахстана:))

    Добавлено позже;
    Кст по выше приложенной картинке. Какие конденсаторы лучше использовать в этой схеме, керамические или электролиты?
     
    Последнее редактирование: 17 май 2017
  8. mcureenab

    mcureenab Гуру

    Если есть керамические, ставьте керамические. Емкость может быть немного больше чем на схеме. Главное, чтобы схема фильтровала низкочастотные помехи, такие как мерцание осветительных ламп и т.п.

    То что выходы объединены, то скорее потому, что траектория объекта известна. Когда в МК подряд приходят 4 прерывания, очевидно, что это сигналы от каждого датчика, через которые последовательно пролетел объект.
     
    CYITEP_BAC9I нравится это.
  9. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    Вечер добрый (если он добрый). где там топикстартеры? закончил работу над этим проектом. получилось весьма хорошая вещь. работает прекрасно. потихоньку начну выкладывать материал. Хотя как я понял пневманутых здесь нет. пишите если есть интерес выложу наработки. Так как довольно много материала придется выкладывать. а времени не сильно много свободного. Хотел снять видио но условия не позволяют. так что. придется картинками с комментариями все выкладывать. начну со схемы подключения [​IMG]
    как собрать входные датчики нарисовано на картинке выше. на каждый порт свой компаратор к которуму к каждому входу подключены 4 сборки из 3 фототранзисторов. выход каждого компаратора запараллелен. схема рассчитана на фототранзисторы L-53P3C.
    излучающие ИК диоды любые, но желательно с широким углом излучения. иначе придется городить линейку из множества диодов как у меня. у моих узкий лучь 7 градусов. поетому пришлось делать излучающую сборку из 15 диодов. постепенно, при наличии свободного времени буду выкладывать картинки с пояснениями. По завершении проекта. возникло подозрение что все это можно было собрать на STM32 и тогда не понадобился бы компаратор. можно было бы реализовать такую схему. считывать analogReadом данные с датчиков. создать 2 переменные, одну сильно сильно усреднять фильтром Калмана, ну или просто усреднять. второй переменной отслеживать всплески напряжения. и если он превысит определенный порог, то зафиксировать время события. так же с выходными датчиками. мало того что при таком подходе не нужен компаратор. так отпадает необходимость тестирования датчиков. так как в каждый момент будет свой усредненный порог срабатывания. Если кто проспонсирует на детали, проверю этот вариант. Хотя кажется что все получится. На этом не сегодня все. до новых встреч

    (сорри только сейчас заметил, неправильно подвел на рисунке +5 вольт к кнопкам, надо было к другой ноге кнопки)
     
    Последнее редактирование: 20 июн 2017
  10. mcureenab

    mcureenab Гуру

    Вы уже пытались испольщовать analigRead и ничего не вышло. Потому что это теоретически невозможно.
    Посчитайте всё для stm32, чтобы не казалось, а зналось.

    К стати на борту МК Arduino есть компаратор. Так что можно его использовать. Время до долей мкс измерять.
     
    CYITEP_BAC9I нравится это.
  11. CYITEP_BAC9I

    CYITEP_BAC9I Гик

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

    [​IMG]

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

    [​IMG]

    В процессе изготовления делал вариант, когда излучающие ИК диоды и приемные фототранзисторы находились наверху (от излучающих диодов даже остались отверстия на нижней картинке). а снизу находились полоски зеркал. Схема очень удобная и компактная. но необходимо делать экранирующий корпус, так как свет особенно солнечный сводит на нет всю настройку. последний вариант лишен этого недостатка. и может фунциклировать в таком макетном виде
     
    Последнее редактирование: 23 июн 2017
  12. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    Cильно не буду распаляться. после включения происходит тестирование напряжения на приемных фототранзисторах. за индикацию напряжения на каждом портале входном и выходном отвечают 2 светодиода. если горят сразу 2 значит напряжение идеальное и можно продолжать работу. если горит синий значит напряжение в пределах нормы но ниже идеального. если горит желтый то выше идеального но тоже в пределах нормы. если же желтый мигает. значит напряжение выше рабочего диапазона. и если мигает синий то ниже. Это необходимо что бы знать что с приемными элементами все нормально. если все в порядке все группа светодиодов мигает 3 раза. и хронограф переходит в режим измерения. если же по каким то причинам нужно выйти из режима тестирования. нужно нажать кнопку выбора режимов и хронограф так же перейдет в режим измерения. но что он в таком случае намеряет неизвестно.

    [​IMG]

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

    [​IMG]

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


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

    если же кнопку выбора режимов зажать более 1.5 секунд вход в режим ввода веса пульки

    [​IMG]

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

    [​IMG]

    если снова зажать кнопку выбора режимов более 1.5 сек введённый результат сохраняется в переменную веса пульки. и при следующим измерении. на индикаторе высвечивается номер измерения, энергия выстрела, в данном случае 0.004 джоуля.

    [​IMG]


    затем снова скорость измерения. и так далее. в общем игрушка работает очень хорошо. Счетч выложу чуть позднее, там надо косметически кое что подправить
     
    Последнее редактирование: 23 июн 2017
  13. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    если будут вопросы к качеству снимков и чем снято, сразу отвечаю микроволновкой. если у кого есть ненужный Pentax K-5, с радостью приму в дар и даже сниму видео)
     
  14. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    Вечер всем добрый. Подшаманил скетч. Куда подключается и как работает все описано в комментариях. Так же на основе данного кода возможно сделать 3 варианта хронографа «Light», «Medium», «Heavy». В варианте Light» изготавливается только физически сам хронограф с датчиками. И арудино подключается непосредственно к компьютеру, в сериал монитор выводятся все данные измерений. В варианте «Medium», к хронограф доукомплектовывается дисплеем, куда выводятся все результаты измерений. Ну и вариант «Heavy», это мой хрон) https://drive.google.com/file/d/0B2kaRZ6OgtCPUW5YNEFMZUs0Rm8/view?usp=sharing
     
  15. М_А_Р_К

    М_А_Р_К Нерд

  16. mcureenab

    mcureenab Гуру

    Лучше функцию Input Capture использовать. Ей прерывания не мешают.
    Но для хронографа такая точность не нужна.
    Если пулька летит со скоростью звука - 340 м/с, за 1 такт (16 МГц) она пролетит ~ 0.02 мм. Размер датчика в сто раз больше.

    Видел интересную конструкцию хронографа. ИК излучатель и приёмник находятся рядом в корпусе прибора в центре сектора из белой полосы, которая крепится к прибору на двух штангах.
    Излучатель светит в эту полосу, она отражает ИК излучение обратно, и оно попадает в приемник. На приборе две таких рамки. Когда пулька пролетает через сектор образованный полосой, штангами и датчиком в вершине сектора, количество отраженного полосой ИК излучение уменьшается. Датчик срабатывает.
     
  17. М_А_Р_К

    М_А_Р_К Нерд

    Ардуино делит частоту на 64 точность измерений снижается.
    Я тестировал оба варианта с делителем и без него.
    С делителем на скоростях 270мс с базой 70мм разброс +- 5мс что не есть хорошо.
    Плато трудновато будет найти.

    Про конструкцию хронографа . 9456667.jpg такой?
     
  18. mcureenab

    mcureenab Гуру

    Да. Такой.

    Разброс не хорошо, но сдается мне, датчик физически не даст точность больше в силу размера. Т.е. единицы мс можно смело округлять. Даже измерить расстояние между датчиками с такой точностью не получится просто потому что не ясно в каком конкретно месте тень от пули вызывает срабатывание.
     
  19. М_А_Р_К

    М_А_Р_К Нерд

    На счет оптического датчика и его точности могу поспорить.
    У меня хронограф собран на пик16ф630 кварц 20мгц в рамочном варианте, винтовка редукторная.
    Разброс скоростей иногда +-1мс. (не говорю уже про наствольный)
    Я много уже перелопатил прошивок, скетчей, короче разных модификаций хронографов.
    Про точность измерений немного уже знаю.

    А рогатый хронограф купил недавно у дядушки Ляо ради любопытства
    Схема там не сложная. Все тот же операционный усилитель и компаратор.
     
  20. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    здравствуйте. може те ли поделиться фотографиями, как там расположены приемники и излучающие диоды?
    Переделывать пока не собираюсь. свою жажду к хронографам удовлетварил). интересна сама схема, как обойтись минимумом деталей.
    Хрон что выше, это была вообще, моя самая первая работа на дуне. сейчас, я бы все совсем по другому написал. но лень, да и с этой прошивкой хрон работает нормально за все время ни одного сбоя. носил пару раз в тир. сравнивал с "покупным" "стрельцом", после подстройки, показания почти идентичные. -+1м/с. мне такой точности хватит. был интерес у посетителей к моему хрону. говорят еслиб выглядел по человечески заказали бы такой же. кстати у меня тоже редуктор, но разброс большой, по скоростям до 7 м/с (уже лень разбирать все и настраивать. однако это не мешает собирать кучу на 42 метра в 3 см)