Хронограф : измеритель скорости пули. От простого к сложному

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Разрабатываю проект хронографа на ардуине для настройки будущего 4 ступенчатого гаусса.

Датчики пули инфракрасные (ик-диод + ик-фототранзистор). Для увеличения крутизны переходного процесса поставил быстродействующий компаратор LM393

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

Так как калиброванного хронографа нет, значения не соответствуют правде. Но это пока не страшно. Позже где нибудь найду и откалибрую.

Схема:

Так выглядит макет:

А также измеренные значения из терминала:

59160      11,8
66864      10,4
65556      10,6
59420      11,7
49664      14,0
 
Платы датчиков изначально предназанчались для гаусса (должны включать 2 и далее ступени)
Но решил заранее их протестировать в хронометре. Работаю отлично
 
Ну и конечно скетч:
/*Хронометр
 Формат вывода: например 56,7
 соответственно не может измерять больше 100м/с
*/

volatile unsigned long Time1=0;        //Время срабатывания первого датчика
volatile unsigned long Time2=0;        //Время срабатывания второго
long value = 0;                        //время пролета пули между датчиками
boolean flag=false;
void setup(){
  Serial.begin(9600);
  attachInterrupt(0, Start, RISING);   //Прерывание по нарастающему фронту на D0
  attachInterrupt(1, End, RISING);     //Прерывание по нарастающему фронту на D1
}

void loop(){
  if (flag==true){
    value = (Time2-Time1);             //вычисляем задержку
    value = 7000000/value;             //вычисляем скорость для расстояния между датчиками 5см
    
    Serial.print(Time2-Time1);
    Serial.print("      ");
    Serial.print(value/10);
    Serial.print(",");
    Serial.println(value%10);
    delay(1000);
    flag=false;
  }
}

void Start(){
  Time1=micros();
}
void End(){
  Time2=micros();
  flag=true;
}

Это первая версия хронометра. Тестовая. Следующим этапом будет вывод значений на 7 сегментный индикатор, а также буду проверять другую схему вместо LM393.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Последняя версия:

Главный экран:

Меню:

1. Калибровка: установка расстояния между датчиками

2. Масса: установка массы пули (для измерения энергия)

3. Скорость/Энергия: изменяет тип данных в таблице Данные

4. Инверсия: инвертирует "цвет" дисплея

5. Назад: возвращение на главный экран

- настройки сохраняются в EEPROM

- Рассчет энергии на данный момент не реализован

Тестирование датчиков

Если нажать одновременно обе кнопки запустится тестирование датчиков

Если датчики правильно подключены и любым предметом закрыть один датчик имитируя пулю, то появится на полсекунды закрашенный круг. Стрелкой показано направление куда должна лететь пуля. Направление программного не изменять не заложено, меняете датчики местами (перепаять провода от датчиков)

После тестированая, чтобы не было неверных данных в таблице со значениями, таблица очищается

Таблица с измеренными значениями (Данные)

Сохраняются 10 последних измерений. Если измерений было больше, значения смещаются

Сброс очищает таблицу

Печатная плата

Детали с преобразователя (такой). Можно питать хоть от пальчиковой батарейки, хоть от литиевого аккумулятора

Прошивки на тестировании. О глюках прошу сообщать (Некоторые сам знаю))) )

Фьюзы с кварцем 16МГц:

low_fuses=0xff
high_fuses=0xde
extended_fuses=0x05
 

Подключение для проверки на магазинной Ардуине:

дисплей
#define CS      7
#define Data    6
#define Clock   5

Кнопки на пинах A2 и A4. Датчики на прерываниях, пины 2 и 3

Видео работы

https://youtu.be/KnbSmpg_Tc0

Исходники для Arduino IDE

Печатная плата

leshak
Offline
Зарегистрирован: 29.09.2011

Ничего вы не понимаете :)  Зато поиском/гуглом такую тему намного легче найти потом будет :)  Ну да... проворонили вы свое щастье :)

Если можно - чуть подробней про компаратор. Не очень понял суть. Ведь, в итоге, его выход идет на вход дуины, которая своим компаратором определяет "0" или "1". Какая разница насколько быстро сработал ваш компаратор, если в итоге оно все равно сигнал пойдет через медленный, и только после него сработает прервыание.

И еще... вообщем-то дело вкуса, просто "приемчик" есть такой. Можно не заводить отдельную переменную под flag. Саму Time2 использовать в качестве флага. Если Time2==0 - флаг сброшен. Вместо if(flag) писать if(Time2)

А еще... традиционно в C/C++ переменный и функции называют с маленькой буквы.

leshak
Offline
Зарегистрирован: 29.09.2011

А еще можете погуглить книгу Arduino Cookbook автор Michael Margolis. Раздел "18.8 Measuring Pulses More Accurately". 

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

можно поподробнее что конкретно я не понимаю. постраюсь понять

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

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

позже обязательно поправлю с маленькой буквы и уберу флаг

leshak
Offline
Зарегистрирован: 29.09.2011

1. Спасибо за столько детальное и красивое объяснение
2. Я не спорю, я просто пытаюсь "уразуметь для себя".

>по картинке будет понятно почему нужен компаратор

Не совсем.

Мне видится две теоретические причины зачем нужен внешний компаратор:

1. Попытатся уменьшить ComparatorDelay
2. Попытатся уменьшить Vref - напряжение на котором у нас сработает прерывание. Что-бы сработка была не в районое 3v, а где-то в районе 1v-2v

Какая из этих причин побудила вас cтавить компаратор?
 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

leshak пишет:

1. Спасибо за столько детальное и красивое объяснение
2. Я не спорю, я просто пытаюсь "уразуметь для себя".

>по картинке будет понятно почему нужен компаратор

Не совсем.

Мне видится две теоретические причины зачем нужен внешний компаратор:

1. Попытатся уменьшить ComparatorDelay
2. Попытатся уменьшить Vref - напряжение на котором у нас сработает прерывание. Что-бы сработка была не в районое 3v, а где-то в районе 1v-2v

Какая из этих причин побудила вас cтавить компаратор?
 

да это чтобы уменьшить ComparatorDelay, а также четкий уровень срабатывания. так как логическая еденица в микроконтроллере имеет разброс, а нужны четкие срабатывания по заданному уровню

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

надеюсь ответил на ваши вопросы

leshak
Offline
Зарегистрирован: 29.09.2011

Мне кажется уменьшение ComparatorDelay тут не происходит. Наоборот - увеличивается. Так как, в итоге, все равно потом отправляется на цифровой пин дуины и обрабатывается ее компаратором. Который имеет свой ComparatorDelay. В итоге у ваc задержка

ComparatorDelay=ExternalComparatorDelay+ArduinoComparatorDelay

А вот "уровень сработки" - да. Тут он явно "помогает". Хотя можно попробовать и самой дуине снизить этот порог сработке. Например - взять вольтовую плату. Или как-то погиратся с AREF. Хотя - не уверен, на то как делают замерые аналоговые пины - он точно влияет, а вот на цифровые...

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

AVR. Учебный курс. Использование аналогового компаратора | Электроника для всех

Using the analog comperator for interrupts - Arduino Forum

Теоретически тогда можно свести ExternalComparatorDelay к нулю. Путем отказа от внешнего компаратора.

> в какой момент времени если подключить напрямую к микроконтроллеру сработает становится случайным процессом

Хм... а вот это уже больше похоже на "дребезг". И есть внешний компаратор его "подавляет", то это скорее говорит о том он более медленный по сравнению со встроенным. 

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

Но, конечно, как быстрее в итоге получится - это только эксперементом выяснится :)

Вообщем - благодарю. "Для себя" - вроде понял. И сразу начал думать "а как без него". Програмерская привычка: нелюбовь ко всему внешнему железу, так как "не наше царство" :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

http://radioskot.ru/publ/pitanie_mikrokontrollera/1-1-0-136

"Для микроконтроллера ATmega8 при напряжении питания 5В логический ноль – это напряжение от 0 до 1,3 В, а логическая единица – от 1,8 до 5 В."

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

характеристика на выходе фототранзитора плавно нарастает (верхняя часть графика) при каком напряжении на входе микроконтроллера он определит что произошло изменение от о до 1 . если основываться на данных из статьи то от 1,8 до 5 вольт. 

допустим это соответствует при 1.8 вольта 300нс при 5 вольт 2 мс. где именно сработает неизвестно. нет также уверенности что оба вохода для датчиков сработают одинаково (при одном напряжении на входе). если бы одинаково можно было бы игнорировать и не учитывать. задержка получилась бы одинаковая. но если один сработает на 2 вольтах а другой на 4 разница будет. при использовании компаратора участок времени в котором может сработать вход микроконтроллера меньше, и гораздо меньше влияние напряжения логической еденицы у конкретного вывода.

если можно было задать в микроконтроллере напряжение срабатывания (возможно это и можно сделать) то тогда от компаратора можно сразу отказываться. но пока оставляю.

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

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

leshak
Offline
Зарегистрирован: 29.09.2011

jeka_tm пишет:

http://radioskot.ru/publ/pitanie_mikrokontrollera/1-1-0-136

"Для микроконтроллера ATmega8 при напряжении питания 5В логический ноль – это напряжение от 0 до 1,3 В, а логическая единица – от 1,8 до 5 В."

Это все понятно. Я же написал что понял: одной из причин введения внешнего компаратора желание понизить порог срабатывания.

А дальше попытался поразмышлять как можно добится этого же эфекта, без применения внешного компаратора. Что-бы "без внешнего", вызывать сработку прервывания скажем на 1V

 

jeka_tm пишет:
нет также уверенности что оба вохода для датчиков сработают одинаково (при одном напряжении на входе). если бы одинаково можно было бы игнорировать и не учитывать. задержка получилась бы одинаковая

Практически уверен что "одинаково". Думаю этот "разброс" указан не из-за того что "сработает когда захочет", а скорее из-за того что в разных камнях, разных моделях, при разной температуре окружающей среды, при плавающем VCC - может плавать этот порог. Но... точно так же будут "плавать" и внешние компараторы. Им вы тоже Vref задаете с помощью делителя напряжения, а следовательно "гарантии что там именно 2v" - тоже не имеете. 

Внутри - думаю все компараторы на цифровых пинах имеют отдин общий Vref. Поэтому все пины - будут "срабатывать" на одном уровне. Хотя сам уровень - может "чуть-чуть плавать". Но синхронно для всех.  Вообщем там внутри та же схема что и у вас :)

jeka_tm пишет:

если можно было задать в микроконтроллере напряжение срабатывания (возможно это и можно сделать) то тогда от компаратора можно сразу отказываться. но пока оставляю.

Так ведь можно. Я же в прошлом посте даже ссылки дал. Ну вот еще одна

Electronics : Microprocessors : Using the Arduino Analog Comparator

На один пин заводите измеряемое значение, на другой уровень на котором "нужно сработать".

Единствено что - все эти примеры для одного измеряемого пина. Как сделать замер с другого пина - нужно будет покурить даташит основательней.

jeka_tm пишет:

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

Да я же не спорю :) Я действительно не понял зачем тут компараторы. После вашего первого, весьма подробного объяснения - понял зачем они. Но задался вопросом "а можно ли без них?" Похоже что "переспав с даташитом" - таки можно :)

Ну а нужно ли вам - так это вам, конечно решать. Если у вас уже есть компараторы, работает и вас устраивает точность - то конечно нет смысла хмурить мозг над http://www.atmel.com/Images/doc8161.pdf  страинцы 248-260

Кстати там видно что и опроное тоже можно "найти внутри". 1.1V внутренний опорный источник можно подключить.

Я не пытаюсь охаять ваш проект. Замечательно все сделано, преподнесено. И объяснения постарались дать исчерпывающие. Спасибо. Без вас - я бы не полез гуглить "arduino analog comparator interrupt". Не нашел бы этих страниц даташита. Заодно сделал для себя открытие что оказывается там еще и встроенный температурый сенсор есть, который тоже, теоретически можно прочитать :)  (страница 260)

Так что в итоге - влюбом случае диалог с вами был полезен. Теперь знаю два пути: с внешними компараторами и внутреним. Пригодится :)  В разных ситуациях - разное будет удобней.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Продолжу..

Разработал плату хронографа с расстоянием между датчиков 70мм. В качестве компаратора TL431. Ардуина самодельная на Atmega8. Вывод на дисплей Nokia 1202 (возможна замена на 1100, а также 1110, 1110i (последние паять очень тяжело) Под 1100 плату переделывать не надо провода легко подпаиваются к резисторам. для остальных нужна переделка небольшая.Все дисплеи легко купить на Митинском радиорынке в магазине Профи http://shop.siriust.ru/product_info.php/products_id/16418)

Программу дописываю. Плата не последний вариант. еще не продумал включение питания

Из разъемов выведено:

1. датчики для тестирования и настройки хронометра осциллографом

2. Разъем для програмирования через UART

3. Контакты для програмирования через ISP

 

leshak
Offline
Зарегистрирован: 29.09.2011

На ваших постах - просто душа отдыхает :) Чуствуется какой-то инженерно-основательный подход к делу.

>Плата не последний вариант

Если не затруднит - выложите разводку платы в виде файла (кстати, в чем вы присовали плату?)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

leshak пишет:

На ваших постах - просто душа отдыхает :) Чуствуется какой-то инженерно-основательный подход к делу.

>Плата не последний вариант

Если не затруднит - выложите разводку платы в виде файла (кстати, в чем вы присовали плату?)

Спасибо leshak. Стараюсь объяснить так, как если бы сам читал и можно было сразу понять

Плату развожу в DIPtrace. Программа бесплатна до 300 выводов, русифицированная, куча библиотек с элементами, авто и ручная разводка, 3D просмотр будущей платы

http://www.diptrace.com/rus/

Печатку прикладываю, но вариант не последний если хотите пользуйтесь.

Ссылка прямая. То есть я периодически редактирую и она автоматом обновляется

http://yadi.sk/d/mePI0Wf09XD6H

По плате: почти все элементы одностороннего монтажа. Трубка с ик диодами и транзиторами с обратной стороны. На плате 4 больших контакта: это для закрелпения трубки проволокой пайкой

Для LCD стоит стабилизатор на 3.3 вольта (больше подавать нельзя). Не все номиналы еще указал. Со временем укажу.

Питать плату буду от литиевого аккумулятора через преобразователь на 5В

Типа такого

http://www.ebay.com/itm/Mini-PFM-Control-DC-DC-USB-0-9V-5V-to-5V-dc-Boost-Step-up-Power-Supply-Module-/400345678301?pt=LH_DefaultDomain_0&hash=item5d367641dd

В планах на LCD выводит измереное значение в табличном виде а также среднее значение

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Изменил плату. Освободил место для преобразователя, и возможно энкодера. Также увеличил расстояние между датчиками до 100мм для более точных расчетов.

На большую часть деталей дописал номинал

Кстати пуля должна двигаться справо налево. Соответственно одеваем на свол хронометр, стрелям и смотрим на дисплей с левой стороны (мне показало это наиболее удобным)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Плату изготовить новым способом с помощью ламинатора пока не удалось. Поэтому собрал макет.

датчики из предыдущего макета, ардуина нано и жк дисплей NOKIA 1202

Вот такой вид имеют измеренные значения:

Новые значения подписываются под предыдущими каждый раз высчитывается среднее с учетом новых значений

А также каждый раз высылаются все 10значений в терминал (запятые еще не прописал. но и так понятно)

0 znach 101
1 znach 72
2 znach 93
3 znach 68
4 znach 82
5 znach 85
6 znach 64
7 znach 0
8 znach 0
9 znach 0
sredn  80

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Решил сделать в хронографе несколько окон, переключаемых циклически кнопкой

1. Основные измерения: значение только одно, большими цифрами

2. Таблица измеренных значений + среднее значение

фото в предыдущем посте

3. Возможно график (пока решаю нужно ли)

4. Экран настройки хронографа с помощью осциллографа.

вывод скорости и измеренного времени пролета пули между датчиками

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

что то вроде этого

Balaganoff
Offline
Зарегистрирован: 12.07.2011
jeka_tm, доброго времени суток!
 
Заинтересовал ваш проект. А точнее применение LCD Nokia 1202.
А можно увидеть весь код, уже с выводом на дисплей?
 
Заранее благодарен!
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Balaganoff пишет:

jeka_tm, доброго времени суток!
 
Заинтересовал ваш проект. А точнее применение LCD Nokia 1202.
А можно увидеть весь код, уже с выводом на дисплей?
 
Заранее благодарен!

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

вот весь код 

#include <Nokia1100_graph_hr.h>
LCD G = LCD();

// LCD_CS   5
// LCD_Data 6
// LCD_CLK  7


volatile unsigned long time1=0;        //Время срабатывания первого датчика
volatile unsigned long time2=0;        //Время срабатывания второго
unsigned long value = 0;               //время пролета пули между датчиками
unsigned long skorost;                  //временное число

void setup(){
  attachInterrupt(0, Start, RISING);   //Прерывание по нарастающему фронту на D0
  attachInterrupt(1, End, RISING);     //Прерывание по нарастающему фронту на D1
  G.Setup();
  G.Clear();
}

void loop(){
  if (time2 != 0){
    value = (time2-time1);          //вычисляем задержку
    skorost = 700000/value;           //вычисляем скорость для расстояния между датчиками 7см
    delay(100);
    time2 = 0;
    G.Clear();
    G.setCursor(42,3);
    G.print(value/1000);
    G.print(",");
    G.print(value%1000);
    G.print(" ms");
  }
  vyvod(skorost);
  G.Update();
}

//============================================================================
//                             Подпрограммы
//============================================================================

void Start(){          // 1 прерывание
  time1=micros();
}
void End(){
  time2=micros();      // 2 прерывание
}

void vyvod(int skor){
  int temp=skor;                         // переменная для хранения
  int c4=temp%10;                        // четвертая цифра скорости 
  temp/=10;
  int c3=temp%10;                        // третья цифра скорости 
  temp/=10;
  int c2=temp%10;                        // вторая цифра скорости 
  temp/=10;
  int c1=temp%10;                        // первая цифра скорости
  
  if (c1>0){
    vivod(3,15,c1,1);
  }
  vivod(26,15,c2,1);
  vivod(49,15,c3,1);
  vivod(77,22,c4,2);
  G.setCursor(74,48);
  G.print("M/S");
  G.drawLine(73,46,91,46,1);
  G.drawRoundRect(0,0,96,65,5,1);
}

void vivod(byte x,byte y, byte n, byte k){
  if((n!=1)&&(n!=4)){                           
    G.fillRoundRect(x+3/k,y,15/k,5/k,3/k,1);     // сегмент A
  }
  if((n!=5)&&(n!=6)){                     
    G.fillRoundRect(x+16/k,y+3/k,5/k,20/k,3/k,1);  // сегмент B
  }
  if(n!=2){                           
    G.fillRoundRect(x+16/k,y+24/k,5/k,20/k,3/k,1); // сегмент C
  }
  if((n!=1)&&(n!=4)&&(n!=7)){               
    G.fillRoundRect(x+3/k,y+42/k,15/k,5/k,3/k,1);  // сегмент D
  }
  if((n==0)||(n==2)||(n==6)||(n==8)){   
    G.fillRoundRect(x,y+24/k,5/k,20/k,3/k,1);    // сегмент E
  }
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7)){   
    G.fillRoundRect(x,y+3/k,5/k,20/k,3/k,1);     // сегмент F
  }
  if((n!=0)&&(n!=1)&&(n!=7)){     
    G.fillRoundRect(x+3/k,y+21/k,15/k,5/k,3/k,1);  // сегмент G
  }
}


Nokia1100_graph_hr.h это это таже библиотека, только немного урезанная чтобы нормально влезать на атмегу8. просто почистил таблицу символов

в последней и окончательной версии выглядит так

цифры в виде семисегментного индикатора рисуются в функции vivod(X (от 0 до 96), Y (от 0 до 65) выводимая цифра, коэффициент размера (1 большой символ, 2 уменьшенный в 2 раза))

0,0 находится в левом верхнем углу

могу дать просто прошивку hex если вам просто хронометр нужен

и еще ввел 3 разряд целых чисел, потому что проверял с пневматикой макаров CO2 с какой то усиленной пружиной выдал 101м/с

 

Balaganoff
Offline
Зарегистрирован: 12.07.2011

Оперативно ! Спасибо ! 

Ну тогда и Nokia1100_graph_hr.h до кучи киньте пожалуйста!

(не ругайтесь - я чайник)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

я не собираюсь ругаться. просто пытаюсь понять что вам нужно

на последней картинке измерение скорости китайского пистолета стреляющего пластиковыми пульками

Balaganoff
Offline
Зарегистрирован: 12.07.2011

Просто не знаю где взять эту Nokia1100_graph_hr.h  

А код мне нужен чтобы именно с Arduino и 1202 поупражнятся.

И еще не понятно куда идет Reset от 1202

 

Прошу прощения за оффтоп и заранее благодарен.

 

https://code.google.com/p/driver-for-nokia-lcd-1100/ - это то ято я ищу ?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да ничего если просто поиграться берите полную версии библиотеки

http://yadi.sk/d/EaFCqVjvA7pZh

мало ли какой символ вам понадобится

дисплей на 3.3 вольта максимум. все входы CS Data Clock через резисторы 4,7к

резет на 3.3В сажается

http://arduino.ru/forum/programmirovanie/biblioteka-dlya-lcd-nokia-1100#comment-42314

вот там еще примеры есть. пользуйтесь

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Balaganoff пишет:

Просто не знаю где взять эту Nokia1100_graph_hr.h  

А код мне нужен чтобы именно с Arduino и 1202 поупражнятся.

И еще не понятно куда идет Reset от 1202

 

Прошу прощения за оффтоп и заранее благодарен.

 

https://code.google.com/p/driver-for-nokia-lcd-1100/ - это то ято я ищу ?

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Balaganoff если можете платы изготавливать например методом лут то могу дать трассировку макетки для дисплея чтобы подключать к бребоарду. 1202 прекрасно паяется на плату. а если не хотите делать плату лучше возмите дисплей 1100. припаять проводки очень легко

 

Balaganoff
Offline
Зарегистрирован: 12.07.2011

jeka_tm  спасибо за подсказки ! Все заработало. Платки отЛУТил и распаял. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Balaganoff пишет:

jeka_tm  спасибо за подсказки ! Все заработало. Платки отЛУТил и распаял. 

пожалуйста. микроконтроллер какой использовали?

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Вопрос к топикстартеру: А чем встроеный в контроллере компаратор не устроил?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Клапауций
Offline
Зарегистрирован: 10.02.2013

jeka_tm пишет:

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

можно попробовать одним пином скорость мерить(старт/стоп таймера, смотрим время), хотя не совсем понимаю, зачем нужно компаратор использовать.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

jeka_tm пишет:

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

Компаратор один, но его тоже можно использовать 

Balaganoff
Offline
Зарегистрирован: 12.07.2011

Клапауций пишет:

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

+1 

Можно ведь прямо с коллектора оптопары на пин подать. Там ведь всего два состояния.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Судя по схеме компаратор сработает при 1в на входе, а цифровой вход ардуино сработает при 2в

И это даст небольшую разницу во времени

Клапауций
Offline
Зарегистрирован: 10.02.2013

carduino.ru пишет:

Судя по схеме компаратор сработает при 1в на входе, а цифровой вход ардуино сработает при 2в

И это даст небольшую разницу во времени

Что с того? - первый датчик сработает с задержкой, допустим, 10, второй датчик сработает с аналогичной задержкой.

погрешность измерений 10 - 10 = 0.

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

кто может точно сказать уровень логической еденицы меги8 и 328. а также точно сказать что по всем входам уровень логической еденицы одинаковый? нужно конечно подтверждение

Клапауций
Offline
Зарегистрирован: 10.02.2013

jeka_tm пишет:

кто может точно сказать уровень логической еденицы меги8 и 328. а также точно сказать что по всем входам уровень логической еденицы одинаковый? нужно конечно подтверждение

можно потенциометр навесить на вход, постепенно подымая напряжение, смотреть вольтметром напряжение когда срабатывает 0/1 на выходе - сравнить несколько.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Клапауций
Offline
Зарегистрирован: 10.02.2013

jeka_tm пишет:

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

по мне - внешний компаратор в сабже избыточен, если так уж критичны уровни сигналов датчиков, то можно их(уровни) прецезионно ловить аналоговыми входами дуино.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

А почему бы не сделать на одном датчике и без компаратора?

Зная длину пули можно посчитать время ее перемещения(скрость) 

Сенсор сработает в начале пули, а потом в конце , получим импульс где передний фронт это начало пули , а задний фронт это ее конец

За основу можно взять код Dimmer-а

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Да, только тогда это должна быть не ATmega8 со своими 16 МГц, а что то побыстрее МГц так на 300 - 500, и плюс ко всему перед выстрелом надо будет каждую пулю микрометром промерять так как все они разные. В общем в итоге вы получите приличный разброс скоростей.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

maksim пишет:

Да, только тогда это должна быть не ATmega8 со своими 16 МГц, а что то побыстрее МГц так на 300 - 500, 

Может быть у меня калькулятор не исправен? Или я не дооценил скорость пули гауссгана? Или комуто хочется по тролить? Но по моим расчетам 16мГц хватает. Даже при самой невероятной скорости пули 100м/сек и ее длине 3см получается импульс 300мкс. Если считать с точностью 1мкс, то получится приличный результат. 

 

maksim пишет:

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

А что Вы хотите с толчностью до 1 наносекунды считать? Или пули будут в рожке(магазине) разной длины?

Я понимаю что пули не серийного производства, но зачем Вам проверять скорость каждой пули? 

Может лучше по существу что то скажете, или Вам тролить больше удовольствия доставляет?

maksim
Offline
Зарегистрирован: 12.02.2012

Может быть у вас и каклькулятор не исправен.

Не знаю чем там и из чего стреляет автор, но если попытаться ваш способ применить на самой обычной например ИЖ-60, то .... посмотрите размер пули и заявленную скорость. В то время как он устроен сейчас вполне можно померить и пневму.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

уже писал. мерил пневматику макаров кажется получилось 101 м/с

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

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Можно потестировать так еще: 

Делаем на ардуине генератор импульсов дабы не вносить погрешность пистолета и тп

затем 

1. измерить с компаратором расчетную скорость и задержку (все выводится на дисплей)

2. измерить без компаратора

сравнить и собственно все будет понятно

менять интервал между импульсами и посмотреть вносимую погрешность без компаратора

если погрешность будет приличная оставлю компаратор (апроксимировать и вводить поправочные коэффициенты совсем не хочется)

если нет то от компаратор можно отказаться теоретически

самодельные хронометры делают и с компаратором и без

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

maksim пишет:

Может быть у вас и каклькулятор не исправен.

Не знаю чем там и из чего стреляет автор, но если попытаться ваш способ применить на самой обычной например С, то .... посмотрите размер пули и заявленную скорость. В то время как он устроен сейчас вполне можно померить и пневму.

При чем тут ИЖ-60

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

Цитата:

Разрабатываю проект хронографа на ардуине для настройки будущего 4 ступенчатого гаусса

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

jeka_tm пишет:

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

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

за библиотеку спасибо

для пневматов на CO2 не очень подходит. изза испарения углекислого газа на датчиках толи налет, или конденсат образуется (неизвестно насколько чистый СО2, может там и вода есть)

изза этого измеряет один раз а потом начинает белеберду выдавать

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

по идее СО2 конденсат не должен давать

воздушной пневматики не было потестировать есть ли тот же эффект

был только игрушечный пистолет, но там не те давления чтобы кондесат образовался (работал всегда стабильно)

с гауссом таких проблем нет, поэтому мне идеально подходит

carduino.ru
Offline
Зарегистрирован: 06.12.2011

jeka_tm пишет:

по идее СО2 конденсат не должен давать

Так он и не дает, конденсат же из воздуха. Газ при испарении охлаждает ствол и поэтому образуется конденсат 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

возможно. но тогда (хоть мне и не нужно, но интересно) как избавится от этого?

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

или может использовать рамочный датчик и подобные

по второму понятно как работает. а вот первый честно сказать незнаю

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Программатор 100% рабочий специаольно 3 раза проверил на 2 разных платах

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

Не мог же я 2 раза спалить микроконтроллер

МК кстати Atmega8A. Каждый вывод с платы программатора до ножки микроконтроллера прозвонил, все ок. плату вторую 2 разы мыл, все пофигу. AVCC не расключен, но он не используется в хроне, и тоже не расключен и все ок. подтяжку ресета к питанию сделал (хотя в хроне и так програмируется) AVCC подключал к питанию не помогло

maksim
Offline
Зарегистрирован: 12.02.2012

А где осцилятор? Новые - не значит что фьзы у них настроены на внутренний осцилятор.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

maksim пишет:

А где осцилятор? Новые - не значит что фьзы у них настроены на внутренний осцилятор.

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