Airgun.Org.Ru https://airgun.org.ru/forum/ |
|
Arduino хронограф https://airgun.org.ru/forum/viewtopic.php?f=35&t=75200 |
Страница 4 из 5 |
Автор: | droboguns [ 01 окт 2017, 10:17 ] |
Заголовок сообщения: | Arduino хронограф |
plotnik писал(а): Не совсем... Обманул всех - болтал, болтал, а ссылку на прошивку не дал, поэтому и никто там не регистрируется... Не болтал,а подробно рассказывал,и делал, болтаем мы здесь обсуждаем критикуем,обсе...м наслаждаясь от этого.Читать желательно не между строк,все скетчи в архивах (часть3) свободны для скачивания,или что то мешает тупо скачать и установить? |
Автор: | droboguns [ 01 окт 2017, 19:21 ] | ||
Заголовок сообщения: | Arduino хронограф | ||
|
Автор: | Bas [ 20 дек 2017, 10:43 ] |
Заголовок сообщения: | |
Поделитесь, пожалуйста, емэйл адресом droboguns в личку, спасибо. |
Автор: | Myxa_M [ 15 мар 2018, 15:03 ] |
Заголовок сообщения: | Arduino хронограф |
темка интересная. есть ардуинка нано, попробую макетку собрать.. |
Автор: | ivana [ 06 апр 2018, 10:47 ] |
Заголовок сообщения: | Arduino хронограф |
На катушках вместо оптических элементов можно реализовать, просто как то на оптике погрешность измерения больше. |
Автор: | Mewgun [ 12 апр 2018, 10:43 ] |
Заголовок сообщения: | |
Вот и меня этот вопрос интересует... Если в этой схеме вместо оптопар катушки включить... Кто-бы взялся схему переделать? И скетч для ардуины переписывать придется наверное... |
Автор: | gafbich [ 21 авг 2018, 19:06 ] |
Заголовок сообщения: | Arduino хронограф |
Летящий писал(а): доброго времени суток. Собрал хронограф на ардуино. И казалось бы все идеально рабоает, но сравнил его показания с рамочным - отличаются довольно сильно. На скоростях около 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 ] |
Заголовок сообщения: | |
В общем, дошли руки до проверки хронографа. Для этого я отрезал провода идущие от светодиодов и прицепил их ко второй ардуине. Для неё написал прошивку, позволяющую с нужным интервалом времени отключать сперва один, а потом второй светодиод. Хронограф это разумеется принимал за выстрел и считал скорость. Погонял на скоростях от 26 до 800 м/с. На высоких скоростях погрешность составила около 2%. Таким образом, можно сделать вывод, что программная часть работает и скорости фототранзисторов хватает. |
Автор: | Летящий [ 03 ноя 2018, 21:39 ] | ||
Заголовок сообщения: | Arduino хронограф | ||
Однако, дальнейшие тесты показали, что при быстром мигании светодиода фототранзистор не срабатывает. Минимально я смог выставить 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м/с Может и с фототранзистором такая же фигня, просто там все детали уже вклеены в трубку, а фотодиод я спаял навесным монтажом и смог обратить внимание на разницу в полученных данных. Я предполагаю, что при слишком ярком освещении фотодиода (и наверняка фототранзистора) накапливается избыточный заряд, который пропадает не сразу. И это приводит к большим задержкам и ошибкам. Так что наверное стоит тонко подбирать яркость светодиода и тестировать готовую сборку на скорость реакции.
|
Автор: | GenFail [ 12 ноя 2018, 01:51 ] |
Заголовок сообщения: | |
1. noname фототранзисторы могут быть ОЧЕНЬ тормозными (желательно использовать оригинал Kingbright). 2. подключать фототранзисторы лучше как в хронографе sparrow (чтобы при затенении напряжение поднималось). Напряжение при засвеченных транзисторах настроить на 1.6-1.8 вольта (чем больше - тем выше чувствительность, но выше 1.9-2.1 вольт срабатывает прерывание). |
Автор: | М_а_р_к [ 12 ноя 2018, 07:27 ] |
Заголовок сообщения: | Arduino хронограф |
скетч хронографа для дисплея нокиа 1202 Если кто переделает под TM1637 то удешевит и геморроя как с дисплеем 1202 не будет. https://yadi.sk/d/nn8Krhh4wz1H9w и еще один скетч под дисплей 1602 https://yadi.sk/d/ts8joQSHJjBdFg |
Автор: | botche [ 28 мар 2019, 10:10 ] | |||
Заголовок сообщения: | Arduino хронограф | |||
и еще один скетч под дисплей 1602 https://yadi.sk/d/ts8joQSHJjBdFg[/quote] Всем здравствуйте. Раздобыл платы и решил сделать себе хрон. Скачал по ссылке программу , нажал "проверить " - красное что то выскочило .
|
Автор: | М_а_р_к [ 28 мар 2019, 11:41 ] |
Заголовок сообщения: | Arduino хронограф |
У меня все нормально компилируется |
Автор: | VROON [ 28 мар 2019, 11:58 ] |
Заголовок сообщения: | Arduino хронограф |
библеотеки все стоят |
Автор: | botche [ 28 мар 2019, 13:11 ] |
Заголовок сообщения: | Arduino хронограф |
VROON писал(а): библеотеки все стоят В этом деле я |
Автор: | GenFail [ 28 мар 2019, 19:35 ] |
Заголовок сообщения: | |
На 1.8.8 версии все нормально компилируется. |
Автор: | Skayl [ 22 апр 2019, 22:16 ] |
Заголовок сообщения: | Arduino хронограф |
Тоже собрали хрон, правда немного доработали его http://www.youtube.com/watch?v=T_oZRQ7R1bc&t=1s |
Автор: | bigman [ 23 май 2019, 22:30 ] |
Заголовок сообщения: | Arduino хронограф |
Сильно разочаровался в фототранзисторах. У всеми любимых L-3DP3C (L-32P3C) время реакции 15 мкс, а время пролета пульки длинной 5мм на скорости 300м/с - 17мкс. Они их просто не замечают |
Автор: | GenFail [ 05 сен 2019, 18:31 ] | ||
Заголовок сообщения: | Arduino хронограф | ||
Прошивка для хронографа с дисплеем на чипе TM1637. Измерение скорости + сохранение результатов в EEPROM (до 50). Полностью совместима с хронографом от AlexGyver. Работает на Atmega168/328 (возможно, будет работать и на Atmega8, с ней я проверял только на запуск). Используется таймер1 без предделителя, также можно настраивать напряжение на датчиках без мультиметра (удерживая кнопку включить хронограф - войдет в сервисный режим).
|
Автор: | М_а_р_к [ 08 сен 2019, 07:57 ] |
Заголовок сообщения: | Arduino хронограф |
GenFail писал(а): Прошивка для хронографа с дисплеем на чипе TM1637. Измерение скорости + сохранение результатов в EEPROM (до 50). Полностью совместима с хронографом от AlexGyver. Работает на Atmega168/328 (возможно, будет работать и на Atmega8, с ней я проверял только на запуск). Используется таймер1 без предделителя, также можно настраивать напряжение на датчиках без мультиметра (удерживая кнопку включить хронограф - войдет в сервисный режим). Время будет. заценим. |
Автор: | GenFail [ 13 сен 2019, 01:15 ] | ||
Заголовок сообщения: | Arduino хронограф | ||
up: на atmega8/Arduino NG работало не очень корректно, т.к. ломается таймер0 (и перестает работать delay). Переписал инит таймера, теперь должно быть нормально. И почему-то нормально работает только с бутлоадером.
|
Автор: | Gilbert888 [ 14 фев 2020, 13:40 ] | ||
Заголовок сообщения: | Arduino хронограф | ||
Доработал немного датчик. Использовал вот такую штуку https://umnaya-elektronika.ru/datchiki/ ... pyatstviy/ диод и транзистор использовал с датчика, немного удлиннив провода. Платы закрепил к трубе обычными стяжками.
|
Автор: | steals2k [ 25 июн 2020, 17:22 ] |
Заголовок сообщения: | Arduino хронограф |
Gilbert888 писал(а): Доработал немного датчик. Использовал вот такую штуку https://umnaya-elektronika.ru/datchiki/ ... pyatstviy/ диод и транзистор использовал с датчика, немного удлиннив провода. Платы закрепил к трубе обычными стяжками. успевает обрабатывать? (что-то тема затихла) есть свободная есп8266 и тм1637, от проекта ик-пульт должен был остаться ик-излучатель, ну а приёмники и так были. а что если использовать лазер для детектирования? пучок уже можно сделать или шире-кмк, удобнее. вопрос в приёмнике. |
Автор: | michman_Hab [ 30 июн 2020, 16:12 ] |
Заголовок сообщения: | Arduino хронограф |
доброго времени. вопрос по датчикам, если использовать от принтеров датчики с энкодеров? их у меня накопилось разных. |
Автор: | Rishelie [ 30 июн 2020, 23:09 ] |
Заголовок сообщения: | Arduino хронограф |
michman_Hab писал(а): доброго времени. вопрос по датчикам, если использовать от принтеров датчики с энкодеров? их у меня накопилось разных. Среди меня бродит мнение, что любой оптический датчик по быстродействию справится. Нужно, чтобы он по линзам обеспечивал нужную дальнобойность (угол). А дальше подстройка по токам/чувствительности. |
Автор: | michman_Hab [ 01 июл 2020, 05:00 ] |
Заголовок сообщения: | Arduino хронограф |
еще раз доброго времени. можно ли как то адаптировать прошивку под Arduino Mega 2560? есть она под рукой, а другую надо заказывать и ждать. |
Автор: | michman_Hab [ 01 июл 2020, 07:10 ] |
Заголовок сообщения: | Arduino хронограф |
вот нашел в закромах Ардуино Pro mini 5V / 16M она на ATmega328 но без юсб порта можно ли на ней собрать? |
Автор: | VROON [ 01 июл 2020, 09:27 ] |
Заголовок сообщения: | Arduino хронограф |
michman_Hab писал(а): вот нашел в закромах Ардуино Pro mini 5V / 16M она на ATmega328 но без юсб порта можно ли на ней собрать? Они одинаковые по назначению портов. Если найдете чем прошить то вперёд |
Автор: | Skayl [ 01 июл 2020, 09:39 ] |
Заголовок сообщения: | Arduino хронограф |
michman_Hab писал(а): вопрос по датчикам, если использовать от принтеров датчики с энкодеров? Rishelie писал(а): Среди меня бродит мнение, что любой оптический датчик по быстродействию справится. Все совсем по другому. Светодатчик по сути можно любой, лишь бы совпадал по длине волны с фотодатчиком. У каждого фотодатчика есть определенное время включения и время выключения, т.е. то время за которое он откликнется на свет и потом перейдет в прежнее состояние при пропадании этого света. Возьмем самые распространенные фототранзисторы, которые обычно ставят со времен хронолайта, например L-53P3C или L-32P3C. Разница у них только в диаметре, один 5мм, другой 3мм. Посмотрим на них даташит в частности время реакции на свет и видим что этот параметр равен 15us. Теперь посчитаем время прохождения этого расстояния пули при скорости 300. 3мм она пролетит за 10us, а 5мм за 16us. Датчики сработают, но с неким опоздание и в итоге дадут некую погрешность. |
Страница 4 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |