|
12.09.2016, 12:19 | #1 | |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
масштабное измерение скорости V2.0
Чтобы не "мусорить" в чужой теме...
Давно блуждали мысли, "поковырять" arduino, но так как реального применения не находилось, то так на уровне мыслей все и оставалось. И тут наткнулся на тему xu56857 масштабное измерение скорости Первоначально планировалось только доработать авторский код с целью добавления возможности выбора масштаба и единиц измерения, но выслушав советы BR95009 и Qvan22, основательно "перелопатил" исходный скетч. В чем отличие от авторского - как таковые убраны задержки обработки кода, т.е. программа работает постоянно, все задержки реализованы при помощи флагов. Все пины и константы вынесены в переменные, что позволяет подключать датчики и кнопки к любому выходу с минимальными правками кода. Добавлен выбор масштаба (HO, TT, N). При необходимости можно добавить любой масштаб Добавлен выбор единиц измерения (км/ч, MPH). При необходимости можно добавить любые единицы (дюймы в сек, миллиметры в сек... Все, что душе угодно). Для сохранения выбранных настроек используется энергонезависимая память контроллера (EEPROM), что позволяет при повторном включении вернутся к последним выбранным единицам измерения и масштабу Добавлена анимация во время измерения. Вместо надписей GO LEFT/GO RIGHT - реализована бегущая строка из символов > и < движущихся в соответствующем направлении Пока все реализовано на макетке на UNO, жду нужные компоненты от наших китайских товарищей и буду реализовывать в "железе". Схема скетч Arduino код:
Последний раз редактировалось BNSF9399; 14.09.2016 в 02:12. |
|
|
3 пользователя(ей) сказали cпасибо: |
12.09.2016, 14:59 | #2 |
Местный
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,838
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 974
Поблагодарили 2,653 раз(а) в 1,570 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (2679)
|
|
|
2 пользователя(ей) сказали cпасибо: |
12.09.2016, 15:27 | #3 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
|
|
12.09.2016, 19:57 | #4 |
Московский модуль
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 942
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,990
Поблагодарили 3,315 раз(а) в 638 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (3330)
|
Попробовал установить Ваш скетч - супер! Очень понравилось , что добавили время ожидания в 20 секунд на срабатывания второго датчика, я об этом думал, но руки не дошли ((, проще было нажать "резет". Вот что значит софт написанный специалистом, спасибо!
|
|
12.09.2016, 20:30 | #5 | |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
Цитата:
---------- Сообщение добавлено в 22:30 ---------- Предыдущие сообщение было в 22:24 ---------- Шикарно, очень элегантно! Кстати, если будете паять на навесном монтаже, то я тут для себя открыл вот такие макетки. На ней собирается, также как на бредборде и паяется, с перемычками. Красота.
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
|
12.09.2016, 21:07 | #6 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
Хорошие, но резать надо дорожки. Хотя, это удобнее чем лишние перемычки делать. Но я заказал обычные, благо не так много соединений.
ну у меня реально только при изменении значения запись идет. Можно доработать, делать запись если состояние не менялось какоето время, тем самым исключив запись "прощелкиваемых" позиций. подумаю над этим. Я такой же специалист, как и вы. Это вообще мое первое "творение" на ардуине. Так, php средненько знаю, лет 10 назад на перле немного упражнялся. Спасибо BR95009, показал красивый "финт" с millis(), иначе ябы тоже залез в цикл прерываемый вторым датчиком. |
|
Пользователь сказал cпасибо: |
12.09.2016, 22:23 | #7 |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
Зачем резать? Паяйте так же, как ставите на бредбоард. Все очень культурно. Правда не так компактно, но для компактных решений один хрен свою PCB нужно делать нормальну двухстороннюю.
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
12.09.2016, 23:30 | #8 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
|
|
Пользователь сказал cпасибо: |
13.09.2016, 11:26 | #9 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
вынес чтение в отдельную функцию, так как оно нужно только при старте.
запись сделал перед началом отображения результатов. т.е. в процессе работы можно менять масштаб и единицы, но в EEPROM они будут записаны только после очередного замера скорости. а вернее, даже не записаны, а обновлены. Т.е. запись произойдет только в том случае, если значение в EEPROM отличается от текущего выбранного. Еще бы с округлением дробного числа разобраться. Чтото мне подсказывает, что dtostrf просто отрезает лишние знаки. В результате 0.19 км/ч будет отображаться как 0.1, а надо 0.2 round только до целого округляет. Делать финт ушами с округлением значения умноженного на 10, а затем делить на 10? красивее пока в голову ничего не лезет. |
|
Пользователь сказал cпасибо: |
13.09.2016, 12:03 | #10 | |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
А зачем замерять до десятых вообще?
Мы же для настройки меряем Мах скорость, а она обычно в десятах киллометров у локомотивов (у немецких, например). По этому округелние до целых вполне себе годится. А так то: Цитата:
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
|
13.09.2016, 14:38 | #11 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
в принципе - да, а вдруг минимальную захочется померять? у меня 0.188 она.
ну так оно до целого округляет. в php в round второй параметр указывает дробную часть, т.е. round(0.188, 2) вернет 0.19, round(0.188,1) - 0.2, а тут round(0.188) вернет 0. Поэтому и получается, что нужно делать round(0.188*10)/10 ? |
|
Пользователь сказал cпасибо: |
12.09.2016, 21:23 | #13 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
Это время можно менять на свое усмотрение. у меня с MD LSH micro 1 см за 20 сек проезжает. Стало быть 7см - 140 сек.
Тут можно или дробную часть измерений увеличить (в моем варианте только десятые отображает), либо смириться с тем, что маленькие скорости не меряем. за получение форматированного результата отвечает функция dtostrf(sV,12,1,buffer); Где 12 - это минимальное количество символов в возврате (включая точку) и 1 количество знаков в дробной части. Почему я сделал так - все просто. при обработке мне не надо считать длину получившегося числа, чтобы прижать его вправо к единицам измерения. эта функция дополнит число ведущими пробелами до 12 знаков. итого, я печатаю с нулевой позиции число и точно знаю, что оно у меня всегда закончится в 11 позиции, а с 13 позиции я печатаю единицы измерения. Если поменять 1 на 3, то получим 3 знака после запятой в возврате. Тогда и таймаут можно побольше сделать. |
|
Пользователь сказал cпасибо: |
13.09.2016, 16:07 | #14 |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
Ну можно все умножить на 1000. А потом выводить по условиям.
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
14.09.2016, 13:45 | #15 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
Шальные руки голове покоя не дают. в процессе экспериментов выяснилось, что функция dtostrf превосходно округляет сама. также выяснилось, что при расчете скорости в м/с V = S / T при большом значении T, зачастую получаем на выходе 0. проблему решил умножением S на 1000, с последующим умножением на 0.001 результата масштабной скорости Arduino код:
Ниже два скетча. Первый без кнопки, количество знаков задается в переменной Arduino код:
схема скетч v2.10 - без кнопки Arduino код:
|
/*
scale speed meter v3.10 2016.09.14 13:14 GMT
*/
#include <LiquidCrystal.h> // Добавляем библиотеку LCD
#include <EEPROM.h> // Добавляем библиотеку работы с энергонезависимой памятью
// Добавляем библиотеку антидребезга кнопок
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
Main code by Thomas O Fredericks (tof@t-o-f.info)
Previous contributions by Eric Lowry, Jim Schimpf and Tom Harkaway
[url]https://github.com/thomasfredericks/Bounce2/archive/master.zip[/url]
* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <Bounce2.h>
// переменные, которые можно менять
int S = 70; //дистанция (расстояние между датчиками) в миллиметрах
int resultDelay = 5000; // время показа результата измерений в миллисекундах
int animationDelay = 50; // время задержки анимации в миллисекундах
unsigned long timeoutDelay = 160000; // время ожидания срабатывания второго датчика в миллисекундах
// флаги
unsigned long flagLeft = 0; // время срабатывания левого датчика
unsigned long flagRight = 0; // время срабатывания правого датчика
unsigned long flagShow = 0; //время окончания отображения результатов
unsigned long flagAnimation = 0; //время отображения следующего символа при анимации
// переменные для расчетов
unsigned long timeStart;//время срабатывания первого датчика
unsigned long timeStop;//время срабатывания второго датчика
long T; //интервал в милисекундах
float V; //скорость в м/с
float sV; //масштабная скорость
int selected_scale = EEPROM.read(0); // ключ массива выбранного масштаба
int selected_unit = EEPROM.read(1); // ключ массива выбранных единиц измерения
int selected_decimals = EEPROM.read(2); // ключ массива точности отображения результата
// массивы, которые можно дополнять или изменять
const String scale[][2] = {{" HO", "87"}, {" TT", "120"}, {" N", "160"}}; // массив масштабов (отображение на экране, множитель)
const String units[][2] = {{"KPH", "3.6"}, {"MPH", "2.23694"}}; // массив единиц измерения (отображение на экране, коэффициент перевода из метров в секунду)
int decimals[] = {1, 2, 3}; // массив точности отображения результата.
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // (RS, E, DB4, DB5, DB6, DB7) инициализируем дисплей
int ir_left = 2; // вход лекого датчика
int ir_right = 3; // вход правого датчика
int scalePin = 10; // вход кноки выбора масштаба
int unitsPin = 11; // вход кнопки выбора единиц измерения скорости
int decimalsPin = 12; // вход кнопки выбора точночти отображения результатов
Bounce scaleBouncer = Bounce(); // объект-обработчик антидребезга кнопки выбра масштаба
Bounce unitsBouncer = Bounce(); // объект-обработчик антидребезга кнопки выбора единиц измерения
Bounce decimalsBouncer = Bounce(); // объект-обработчик антидребезга кнопки выбора точночти отображения результата
// переменные для анимации
int r;
char c;
void setup() {
lcd.begin(16, 2);
pinMode(ir_left, INPUT);
pinMode(ir_right, INPUT);
pinMode(scalePin, INPUT);
pinMode(unitsPin, INPUT);
// параметры обработчика антидребезга
scaleBouncer.attach(scalePin);
scaleBouncer.interval(5);
unitsBouncer.attach(unitsPin);
unitsBouncer.interval(5);
decimalsBouncer.attach(decimalsPin);
decimalsBouncer.interval(5);
}
// расчет скорости
void calculateSpeed(int selected_unit, int selected_scale, int selected_decimals){
T = (timeStop - timeStart);
V = S * 1000.0 / T;
sV = V * units[selected_unit][1].toFloat() * scale[selected_scale][1].toInt() * 0.001;
char buffer[12];
String tmpStr = dtostrf(sV, 12, decimals[selected_decimals], buffer);
lcd.setCursor(0, 0);
lcd.print(tmpStr);
flagShow = millis() + resultDelay;
timeStart = 0;
timeStop = 0;
}
//рисуем бегущую строку
void animation() {
lcd.setCursor(r, 1);
lcd.print(c);
if(flagRight > 0) {
r++;
if(r > 11){
r = 1;
if(c == '>') {
c = ' ';
}
else {
c = '>';
}
}
}
else if(flagLeft > 0) {
r--;
if(r < 1){
r = 11;
if(c == '<') {
c = ' ';
}
else {
c = '<';
}
}
}
flagAnimation = millis() + animationDelay;
}
void loop() {
if(selected_scale > sizeof(scale)/sizeof(scale[0])-1) {
// если считанное значение больше, чем количество элементов в массиве масштабов - обнуляем значение
selected_scale = 0;
EEPROM.write(0, 0);
}
if(selected_unit > sizeof(units)/sizeof(units[0])-1) {
// если считанное значение больше, чем количество элементов в массиве единиц измерения скоростей - обнуляем значение
selected_unit = 0;
EEPROM.write(1, 0);
}
if(selected_decimals > sizeof(decimals)/sizeof(int)-1) {
// если считанное значение больше, чем количество элементов в массиве точночти отображения результата - обнуляем значение
selected_decimals = 0;
EEPROM.write(2, 0);
}
// если флаг отображения результатов меньше текущего времени выполняем код, в противном случае продолжаем отображать результаты измерений
if(flagShow < millis()) {
flagShow = 0;
// если сработал один датчик, но за время timeoutDelay не сработал второй - выводим TIME OUT
if(timeStart > 0 && timeStart + timeoutDelay < millis()) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" TIME OUT ");
flagShow = millis() + resultDelay;
timeStart = 0;
timeStop = 0;
flagLeft = 0;
flagRight = 0;
flagAnimation = 0;
}
// если одновременно сработали оба датчика, но не выставлены флаги начала измерения - выводим ошибку
else if(digitalRead(ir_right) == LOW && digitalRead(ir_left) == LOW && flagLeft == 0 && flagRight == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ERROR ");
flagShow = millis() + 1000;
}
// если нет сигнала от обоих датчиков и не выставлены флаги обоих датчиков - система готова к измерениям
else if(digitalRead(ir_right) == HIGH && digitalRead(ir_left) == HIGH && flagLeft == 0 && flagRight == 0) {
// если была нажата кнопка масштаба
if(scaleBouncer.update()){
if(scaleBouncer.read() == HIGH) {
selected_scale++;
if(selected_scale > sizeof(scale)/sizeof(scale[0])-1){
selected_scale = 0;
}
}
}
// если была нажата кнопка единиц измерения
if (unitsBouncer.update()){
if(unitsBouncer.read() == HIGH) {
selected_unit++;
if(selected_unit > sizeof(units)/sizeof(units[0])-1){
selected_unit = 0;
}
}
}
// если была нажата кнопка единиц измерения
if (unitsBouncer.update()){
if(unitsBouncer.read() == HIGH) {
selected_unit++;
if(selected_unit > sizeof(units)/sizeof(units[0])-1){
selected_unit = 0;
}
}
}
// если была нажата кнопка выбора точночти отображения результата
if (decimalsBouncer.update()){
if(decimalsBouncer.read() == HIGH) {
selected_decimals++;
if(selected_decimals > sizeof(decimals)/sizeof(int)-1){
selected_decimals = 0;
}
}
}
char buffer[12];
String tmpStr = dtostrf(0.000, 12, decimals[selected_decimals], buffer);
lcd.setCursor(0, 0);
lcd.print(tmpStr);
lcd.setCursor(13, 0);
lcd.print(units[selected_unit][0]);
lcd.setCursor(13, 1);
lcd.print(scale[selected_scale][0]);
lcd.setCursor(1, 1);
lcd.print("READY ");
}
// если измерения не началось и сработал один из датчиков при этом нет флага второго датчика - начинаем замер
else if(timeStart == 0 && ((digitalRead(ir_right) == LOW && flagLeft == 0) || (digitalRead(ir_left) == LOW && flagRight == 0))) {
timeStart = millis();
if(digitalRead(ir_right) == LOW){
flagRight = millis();
c = '>';
r = 1;
}
else {
flagLeft = millis();
c = '<';
r = 11;
}
lcd.setCursor(1, 1);
lcd.print(" ");
animation();
}
// если сработал один из датчиков и выставлен флаг второго - заканчиваем измерения и производим расчет скорости
else if((digitalRead(ir_right) == LOW && flagLeft > 0) || (digitalRead(ir_left) == LOW && flagRight > 0)) {
timeStop = millis();
flagLeft = 0;
flagRight = 0;
flagAnimation = 0;
EEPROM.update(0, selected_scale);
EEPROM.update(1, selected_unit);
EEPROM.update(2, selected_decimals);
lcd.setCursor(1, 1);
lcd.print("RESULT ");
calculateSpeed(selected_unit, selected_scale, selected_decimals);
}
// если настало время рисовать новый символ при анимации
else if(flagAnimation < millis()){
animation();
}
}
}
3 пользователя(ей) сказали cпасибо: |
14.09.2016, 14:47 | #16 | |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
Цитата:
---------- Сообщение добавлено в 16:47 ---------- Предыдущие сообщение было в 16:42 ---------- А что LCD такой шняжный? C кучей проводков? Я купил такой же, тока I2C шный. 4 провода: GND, Vcc, SCL, SDA. Все.
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
|
14.09.2016, 17:04 | #17 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
|
|
2 пользователя(ей) сказали cпасибо: |
14.09.2016, 20:00 | #18 |
Ĩ.Ĉ.Š.ҧрѻҫҭҩ мӥҫҭҿӄѣӤ.Ҟ.Ҫ
Регистрация: 10.07.2006
Адрес: 13 верста У.Г.Ж.Д. HOe.N.Z? . . G.Oe.HO!
Сообщений: 2,432
Сказал(а) 'не согласен(а)'!: 466
Сказали 'не согласен'! 136 раз(а) в 123 сообщениях
Сказал(а) спасибо: 3,326
Поблагодарили 7,264 раз(а) в 2,868 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (7893)
|
экран то как раз одинаковый. Разница только в экономии, либо деньги, либо контакты на ардуине. Если контактов в проекте хватает, то легче припаять "лишние" 12 проводков вместо 4, чем переплачивать: дополнительная платка I2C, стоит почти как экран, а если припаяна китайцами, то как два экрана
|
|
14.09.2016, 23:43 | #19 |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
Ахренеть! Без платки-100 руб, с платкой - 151! Вот это экономия!
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
14.09.2016, 22:04 | #20 |
Заглянувший
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 204
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 458
Поблагодарили 454 раз(а) в 135 сообщениях
:
0 за это сообщение 0 Всего Репутация: - луч света в тёмном царстве (454)
|
Интересный проект! Скажите, а что вы думаете о варианте добавления такого "функционала" как измерение скорости на кругу. Все как в вашем видео на ютубе, где вы подстраиваете cv декодера, а ваш прибор будет помогать в калибровке?
Хотим посмотреть скорость на отрезке пути - используем оба датчика, хотим настроить декодер - используем один на кругу. Даже "железную" часть не надо изменять, только дописать программу... |
|
15.09.2016, 10:54 | #21 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
а что мешает этим же спидометром на кругу мерять? если спидометра нет, мы математическим путем вычисляем скорость исходя их длины круга и времени его прохождения. а тут сразу получаем результат
я его не кругу и планирую использовать. замерил скорость - подстроил, пока локомотив проезжает круг и по "приезду" к спидометру он уже полным ходом с новыми настройками будет ехать и нам не надо будет пропускать круг. ---------- Сообщение добавлено в 10:54 ---------- Предыдущие сообщение было в 10:50 ---------- меня всегда поражали такие сравнения "да че там, 10 рублей или 15... копейки разница." а теперь зайдем с другой стороны. 150 и 100 - это на 50% дороже! При том, что эти 50 рублей ну ни как не влияют на проект в целом, так как выводов контроллера вполне хватает для подключения дисплея напрямую. а на 50 рублей можно 20 кнопок купить или лишний ИК датчик. |
|
Пользователь сказал cпасибо: |
15.09.2016, 12:04 | #22 |
Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,624
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,029
Поблагодарили 9,323 раз(а) в 3,311 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (9364)
|
Самый существенный ограниченняй ресурс ардуины - это пины. Ваш экран сожрал практически все цифровые пины. А если Вам захочется еще прикрутить что нибудь, использовать шим? Поменять частоту таймера? Использовать экран в другом проекте наконец, где пинов свободных не будет? Будете ждать месяц новый экран I2C с ебея?
Сэкономив 50 руб?
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка. Московский Модуль H0-присоединяйтесь! |
|
16.09.2016, 14:33 | #23 | |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
Все дело в том, что комплектующие берутся под конкретный проект и использовать их в другом - это значит разобрать готовое изделие. Зачем? Новый проект - новые комплектующие. Остался экран - его можно использовать в другом проекте, там, где пинов хватит. Если не хватит - можно купить отдельно плату I2C или нужный экран. Цитата:
Чем скорость на отрезке отличается от скорости на кругу? Если локомотив едет с одинаковой скоростью, то она что на отрезке, что на кругу будет одинаковой. Поколдовал малость. Отказался от кнопки выбора точности, устанавливаем программно в переменной decimals Добавил режим таймера. Скорость на кругу рассчитываем по времени прохождения круга Пин с датчика которого ведется отсчет указан в переменной timerPin. Это может быть как отдельный датчик, так и любой из двух уже имеющихся (правый-левый) Для переключения режима работы используется кнопка выбора единиц измерения. При удержании кнопки более 1.5 сек, происходит переключение режима При выбранном режиме таймера стартовый экран Напдись "START" слева от кнопки выбора масштаба, она же кнопка работы с таймером, предполагается нажатие на эту кнопку для старта работы таймера После нажатия, надпись меняется на "WAIT" - ожидание первого срабатывания датчика и начала отсчета После начала отсчета и прохождения кругов слева сверху - время прохождения последнего круга слева снизу - время прохождения предыдущего (предпоследнего круга) справа сверху - время прохождения текущего круга справа снизу - общее время от старта первого круга Следующее нажатие на кнопку выбора масштаба - приводит к остановке таймеров Следующее нажатие - очистку таймеров и возврат к стартовому экрану Для перехода в режим "Спидометр", на любой стадии, удерживаем кнопку выбора единиц измерения 1,5 сек. |
5 пользователя(ей) сказали cпасибо: |
15.09.2016, 12:53 | #24 |
Московский модуль
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 942
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,990
Поблагодарили 3,315 раз(а) в 638 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (3330)
|
Тогда уж такой https://ru.aliexpress.com/item/Whole...9-0e34f19a8871
можно и мультики рисовать |
|
15.09.2016, 13:34 | #25 |
Местный
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,865
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,665
Поблагодарили 3,280 раз(а) в 1,176 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (3291)
|
|
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
масштабное измерение скорости | xu56857 | Arduino | 37 | 29.12.2017 21:43 |
Тепловоз ТЭП80 - наш рекордсмен скорости (271км/ч) | Coyote | ЖД техника | 1 | 30.01.2016 00:04 |
Влияние скорости на свет | Murat | Электрика и DCC | 2 | 22.08.2010 18:09 |
Как добиться снижения скорости лока? | Sandro | общий | 20 | 22.07.2009 21:39 |
Регулирование скорости локомотива на аналоге | qwer04061995 | Электрика и DCC | 11 | 17.09.2008 09:25 |