RailwayPassion.com - Форум за железопътен моделизъм
Електроника и Електротехника | Electronics and Electrical Engineering => Цифрово / дигитално управление | Digital Command Control => Темата е започната от: IvanC в 02 Април 2022, 22:18:06
-
Публикувам темата в този раздел, макар че не е във връзка с цифрово управление, но тъй като използвам микропроцесори и всичко е цифрово, няма как да е за раздела за аналогова техника.
Знам, че Пико имат измервателен вагон, но реших сам да си направя такъв. Вагонът използва датчик на Хол и магнити, залепени на едно от колелата за отчитане на изминатото от вагона разстояние и акселерометър за измерване на наклона на вагона. Процесорът във вагона е Ардуино Про-мини и само събира данните от датчиците и ги изпраща по серийния интерфейс към HC-05 Bluetooth модул.
Схемата:
(https://cankov.com/modelrailroad/meascar/pulse_meter_acc_sch.png)
Използвам датчик на Хол OH137 (https://cankov.com/modelrailroad/meascar/oh137.pdf), но може да се използва кой да е датчик на Хол, който работи на 5V и е достатъчно малък, за да се събере до някое от колелата на вагона. Магнитите са плоски, кръгли с диаметър 2 мм и дебелина 1 мм. Магнитите и датчикът на Хол са от eBay.
Програмата в Про-минито работи с два вида акселерометри - MMA8452Q и MPU-6050, като автоматично разпознава кой от двата е свързан. Ако при стартирането на програмата не се открие акселерометър, програмата продължава да работи без да изпраща данни за наклона. Акселерометърните модули са също от eBay.
Светодиодът D1 и баластното му съпротивление R3 са по желание на брат ми. Той е монтирал жълт светодиод на покрива на вагона и този светодиод мига с ефект на въртящ се "буркан". Аз не го използвам на моите измервателни вагони. Отделно, програмата светва периодично светодиода на Про-минито, свързан на извод 13, което също може да се използва като индикация за работа на програмата.
За захранване използвам литиево-йонна акумулаторна батерия от USB батерия, заедно с преобразувателя от USB батерията. Този преобразувател зарежда акумулатора при свързване на външно 5-волтово захранване и качва и стабилизира напрежението от акумулатора на 5V за захранване на модулите във вагона. Свързал съм ключе между USB преобразувателя и захранването на модулите във вагона. Всичко това ще покажа по-нататък нагледно със снимки.
Вагонът няма индикация. Причината за това е, че когато вагонът се използва на макет, не винаги има достъп до вагона и ако има индикация, тя няма да се вижда. Освен това, както споменах по-горе, програмата на вагона само събира необработени данни и ги изпраща към блутута без каквато и да е обработка. Идеята е да не се губи време в обработката на данните, за да не се пропускат импулси от датчика на Хол или да се допуска грешка при измерването на времето между импулсите. Обработката на данните и индицирането им стават в други устройства, което позволява по-голяма свобода при написването на програмите за тези устройства.
В момента имам три начина за обработка и индициране на данните:
1. Устройство на базата на Arduino Про-мини с 16х2 индикация.
2. Приложение за Android устройство - телефон или таблет.
3. Програма за Windows.
За тези програми - по-нататък.
Иван
-
Това са снимки от направата на първия измервателен вагон. В него няма акселерометър. Акселерометър монтирах в измервателен вагон номер 3, така че има време да стигна до него.
Монтиране на магнитите:
(https://cankov.com/modelrailroad/meascar/meascar0101.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0102.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0103.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0104.jpg)
Подготовка и монтаж на датчика на Хол:
(https://cankov.com/modelrailroad/meascar/meascar0105.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0106.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0107.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0108.jpg)
На този вагон се опитах да използвам захранване от релсите. За съжаление не се получи. Проблемът е от кратките прекъсвания на захранването, когато няма буфериране. Блутут модулът се рестартира и докато приемникът с индикацията се свърже наново, отново поради нестабилно токоснемане, блутутът във вагона се рестартира и връзката между двата блутута така и не може да се осъществи. Само за пробата използвах голям кондензатор:
(https://cankov.com/modelrailroad/meascar/meascar0109.jpg)
Така схемата работеше надеждно, но ми беше ясно, че няма как да го направя за постоянно - не исках да монтирам кондензатори или акумулатор в салона, защото ще се виждат. Опитах се да сложа кондензатори в тоалетните, но не успях да събера достатъчен капацитет за надеждна работа.
Ето и (много) кратък клип от първите проби - индикаторната схема е все още събрана на breadboard:
https://youtu.be/pvOVvkhxwPQ
В крайна сметка монтирах конектор за захранване на измервателната схема от външна USB батерия. Батерията поставям в открит вагон, закачен непосредствено до измервателния вагон:
(https://cankov.com/modelrailroad/meascar/meascar0110.jpg)
Иван
-
Измервателен вагон номер 2 е с литиево йонна акумулаторна батерия във вагона. Както писах в първото мнение в темата, използвам USB преобразувател за зареждането на акумулатора и за формиране на стабилизирано напрежение 5V за измервателната схема.
За съжаление не можах да намеря снимки от монтирането на модулите във вагона, но намерих клип, който съм качил на Тубата, където този измервателен вагон е в състава на влака за "товарната проба" на шасито за БДЖ 46 ("баба Меца") - вагонът на опашката на влака. Виждат се светлините на процесорната платка и на блутута (червени):
https://youtu.be/h9K--d2HZIs
Принципно схемата на захранването е идентична с тази на измервателен вагон номер 3, снимки на който ще пусна в следващото мнение. Монтажът на датчика на Хол пък е идентичен с този на измервателен вагон номер 1. Акселерометър няма.
USB конекторът и ключето за захранването са на дъното на вагона - както при измервателен вагон номер 3.
Иван
-
Страхотно! Цяла сутрин чета, гледам и препрочитам! С нетърпение очаквам третия вагон и останалите подробности!
Тази тема, ще си я направя в поредния PDF-файл, за папката от "Иван и Владо С" на компа ми! Благодаря момчета!
:hi: :hi: :hi:
-
Този вагон направих преди да добавя акселерометър към програмата и вагона. Мислех си, че съм направил снимки след добавянето на акселерометъра, но такива не намерих. Затова в края на мнението ще обясня накратко с думи как го монтирах. Свързването му е показано на схемата в първото мнение в темата.
Вагонът е на Пико, номер 58985. Той е много подходящ заради "сандъка" на шасито, което ще стане ясно от снимките.
И така, това са модулите, които използвам (без акселерометъра):
(https://cankov.com/modelrailroad/meascar/meascar0301.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0302.jpg)
Направа на "дънна" платка:
(https://cankov.com/modelrailroad/meascar/meascar0303.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0304.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0305.jpg)
Подготовка на Ардуиното:
(https://cankov.com/modelrailroad/meascar/meascar0306.jpg)
Пиновете, които стърчат нагоре са за куплунга на датчика на Хол.
Дънната платка монтирана на вагона:
(https://cankov.com/modelrailroad/meascar/meascar0307.jpg)
Всъщност тук е удачно да спомена, че впоследствие монтирах модула на акселерометъра залепен с тънко двустранно тиксо към дънната платка в зоната под блутут модула и го опроводих към захранването на дънната платка. На Ардуиното запоих още два пина към отворите за A4 и A5, а от към дънната платка запоих проводници с 2-пинов конектор с който да свържа SDA и SCL изводите на модула на акселерометъра към А4 и А5 изводите на Ардуиното.
Следва преработването на USB батерията:
(https://cankov.com/modelrailroad/meascar/meascar0308.jpg)
На горната снимка се вижда, че съм махнал големия USB конектор и съм запоил контактната пластина за плюса на батерията на 90 градуса спрямо оригинала. Кутията на USB батерията е скъсена и съм изрязал малко парченце от капака, което на долните снимки се вижда вече залепено към "езичето" на капака. Така "езичето" подпира USB конектора, за да не се измества при включване на USB кабела за зареждане.
(https://cankov.com/modelrailroad/meascar/meascar0309.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0310.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0311.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0312.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0313.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0314.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0315.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0316.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0317.jpg)
Дънната платка и кутията на батерията са хванати към сивия детайл с малки винтчета - виждат се при увеличаване на снимките.
Магнитите, залепени на колооста:
(https://cankov.com/modelrailroad/meascar/meascar0318.jpg)
Монтиране на датчика на хол:
(https://cankov.com/modelrailroad/meascar/meascar0319.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0320.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0321.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0322.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0323.jpg)
Както се вижда, използвал съм конектор, залепен за шасито на вагона, в който се включва датчикът на Хол. По този начин местоположението на датчика може да бъде регулирано много лесно.
(https://cankov.com/modelrailroad/meascar/meascar0324.jpg)
Вагонът завършен:
(https://cankov.com/modelrailroad/meascar/meascar0325.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0326.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0327.jpg)
Кратко клипче от първите проби на вагона:
https://youtu.be/5CFYXPNedF4
Иван
-
В предните мнения показах измервателните вагони, направени от мен. В това мнение пускам снимките на втория измервателен вагон направен от брат ми Владо (VladoC). Коментарите са също неговите и понеже са много кратки, в края ще добавя и няколко коментара от мен.
Вагонът е на Piko, от хоби серията, кат. номер 58781:
(https://cankov.com/modelrailroad/meascar/meascav0201.jpg)
Колоос и датчик на Хол:
(https://cankov.com/modelrailroad/meascar/meascav0202.jpg)
(https://cankov.com/modelrailroad/meascar/meascav0203.jpg)
Акумулаторът е LiIon 14500, 800 mAh, USB зарядно за една клетка и стабилизатор на напрежение за 5 V:
(https://cankov.com/modelrailroad/meascar/meascav0204.jpg)
(https://cankov.com/modelrailroad/meascar/meascav0205.jpg)
(https://cankov.com/modelrailroad/meascar/meascav0206.jpg)
Владо
---------------------------------------------------------------------------------------
Виждам, че Владо не е използвал преобразувателна платка от USB батерия, а два отделни модула. Освен това неговият акумулатор не е от USB батерия. Най-вероятно затова не е използвал платка от USB батерия.
Вижда се по-различният подход при монтажа на елементите, датчика на Хол и магнитите, което е интересно и дава повече идеи.
На снимките не виждам обаче модула на акселерометъра. Виждам проводници, запоени към A4 и A5 на Ардуиното, така че предполагам има акселерометър, може би в средата под батерията и 4-те проводика с конектора до батерията са на този модул.
На снимките се вижда светодиодът, монтиран на покрива на вагона, който имитира въртящ се буркан и за който писах в първото мнение в темата. Ето и кратък клип от работата на вагона по време на настройване на декодера в Людмилата:
https://youtu.be/5TWFyj3nhME
Иван
-
Разглобих моя измервателен вагон 3, за да направя снимки на монтирания акселерометър. Бях забравил какъв кошмар е да се разглоби и после да се сглоби. При разглобяването имам чувството, че всички щипки се чупят, а при сглобяването, двете кулиси и техните пружинки изпадат при най-малкото сътресение, а две ръце не стигат да крепят двете кулиси на място и да сглобяват останалите части. Както и да е, с малко гресчица на пружинките на кулисите и много "сладки" думи казани на ум (за да не чуе жената и да се чуди защо си псувам сам...!) успях да сглобя обратно вагона успешно и без щети.
(https://cankov.com/modelrailroad/meascar/meascar0328.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0329.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0330.jpg)
Иван
-
Ето кода на програмата за Ардуиното във вагона:
#include <Wire.h> // i2c library Използвани библиотеки
#define baudRate 115200 // serial baud rate
#define sensPin 17 // sensor pin (initially 3)
#define heartbeat 13 // LED pin
#define heartbeatPeriod 19 // heartbeat period
#define beaconPin 11 // beacon pin; only 3, 5, 6, 9, 10 and 11 on ATmega328P
#define beaconMaxPwm 160 // beacon max PWM
#define beaconCycle 30 // beacon cycle time in 0.1s between 1 and 255
#define debounceTime 8500 // debounce time for mechanical contact in µs
#define sendPeriod 300000 // time to wait before sending another value in µs
#define sendStart ' ' // serial send start symbol
#define sendDelimiter ';' // serial send delimiter
#define sendTerminator '/' // serial send terminator symbol
#define beaconS max(1, 43 / beaconCycle)
#define beaconM beaconS * beaconCycle / 2.56
// MMA8452Q, MPU-6050
const byte accelAddress[] = { 0x1C , 0x68 }; // accelerometer I2C address
const byte accelID[] = { 0x2A , 0x68 }; // accelerometer ID
const byte accelStatusReg[] = { 0x00 , 0x3A }; // accelerometer status register
const byte accelXReg[] = { 0x01 , 0x3B }; // accelerometer X-axis register
const byte accelYReg[] = { 0x03 , 0x3D }; // accelerometer Y-axis register
const byte accelZReg[] = { 0x05 , 0x3F }; // accelerometer Z-axis register
const byte accelWhoAmIReg[] = { 0x0D , 0x75 }; // accelerometer device ID register
const byte accelCtrl1Reg[] = { 0x2A , 0x6B }; // accelerometer control register
const byte accelActive[] = { 0x01 , 0x00 }; // accelerometer activate
const byte accelXSeq[] = { 0 , 2 }; // accelerometer X-axis sequence
const byte accelYSeq[] = { 2 , 0 }; // accelerometer Y-axis sequence
const byte accelZSeq[] = { 4 , 4 }; // accelerometer Z-axis sequence
const long maxSamples = 610; // accelerometer number of samples
unsigned long const infinity = 1e9; // "infinity" constant
unsigned long const sensTimeout = 6e6; // pulse timeout
unsigned long timeToSend = infinity; // elapsed time between two pulses to send out
unsigned long currentTime = 0; // current time
unsigned long lastTime = 0; // last read time value
unsigned long pulseCounter = 0; // counter of total number of pulses
bool sensFlag = false; // last sensor state
unsigned long previousTrans = 0;
int heartbeatCounter = 0;
unsigned long beaconMillis = beaconM;
int beaconCounter = 0;
bool accelFound = false;
long accelX = 0;
long accelY = 0;
long accelZ = 0;
long tX = 0;
long tY = 0;
long tZ = 0;
long samples = 0;
long accelSamples = 0;
int accel = 0;
void setup() { // setup
pinMode(sensPin, INPUT_PULLUP); // set sensor pin as input with internal pull-ups
pinMode(heartbeat, OUTPUT); // set LED pin as output
Serial.begin (baudRate); // initialize serial port
Wire.begin(); // join i2c bus as master
for (accel = 0; accel < sizeof(accelAddress) / sizeof(byte); accel++) {
accelFound = (readRegister(accelAddress[accel], accelWhoAmIReg[accel]) == accelID[accel]); // check if accelerometer is present
if (accelFound) break;
} // for (accel)
writeRegister(accelAddress[accel], accelCtrl1Reg[accel], accelActive[accel]);
} // setup()
void loop() { // main cycle
if (digitalRead(sensPin) == LOW) { // sensor activated
currentTime = micros(); // read current time
if (sensFlag && (currentTime - lastTime > debounceTime)) { // debounce done
timeToSend = currentTime - lastTime; // load new pulse time
lastTime = currentTime; // remember current time
pulseCounter++; // increment pulse counter
sensFlag = false; // wait for next transition to LOW
} // if (sensFlag && (currentTime - lastTime > debounceTime))
} // if (digitalRead(sensPin) == LOW)
else if (!sensFlag && (micros() - currentTime > debounceTime)) sensFlag = true; // ignore bounce at transition to HIGH and prepare for debounce
if (micros() - lastTime > sensTimeout) timeToSend = infinity; // load infinity if pulse timed out
if ((micros() < previousTrans) || (micros() - previousTrans > sendPeriod)) { // send everything
previousTrans = micros(); // remember current time of transmission
Serial.print(sendStart); // send start symbol
Serial.print(timeToSend); // send pulse length
Serial.print(sendDelimiter); // send pulse length delimiter
Serial.print(pulseCounter); // send pulse counter
if (accelFound) { // send accelerometer data if accelerometer is present
Serial.print(sendDelimiter); // send delimiter
Serial.print(samples); // send number of samples acquired
Serial.print(sendDelimiter); // send pulse length delimiter
Serial.print(accelX); // send X-axis acceleration
Serial.print(sendDelimiter); // send delimiter
Serial.print(accelY); // send Y-axis acceleration
Serial.print(sendDelimiter); // send delimiter
Serial.print(accelZ); // send Z-axis acceleration
} // if (accelFound)
Serial.println(sendTerminator); // send transmission terminator
digitalWrite(heartbeat, LOW); // begin heartbeat logic
heartbeatCounter++;
if (heartbeatCounter > heartbeatPeriod) { // flash heartbeat
heartbeatCounter = 0;
digitalWrite(heartbeat, HIGH);
} // end of heartbeat logic
} // end of send everything
byte f = beaconCounter << 2; // beacon PWM is activated in quarters of the cycle
if (beaconCounter & 64) f = ~f; // invert PWM if fading out
if (millis() - beaconMillis > expo(beaconM, f)) { // check if beacon time has expired
beaconMillis = millis(); // get current time for next checks
beaconCounter += beaconS; // increment beacon cycle counter
if (beaconCounter & 128) analogWrite(beaconPin, 0); // turn off beacon in 3rd and last quarters
else { // 1st and 2nd quarters of beacon cycle
f = beaconCounter << 2; // calculate beacon PWM
if (beaconCounter & 64) f = ~f; // invert beacon PWM in 2nd quarter
f = highByte((unsigned int)f * (unsigned int)beaconMaxPwm); // apply beacon max PWM
analogWrite(beaconPin, f); // send PWM to beacon pin
} // done with 1st and 2nd beacon cycle quarters
} // done with beacon
if (accelFound) { // read accelerometer values if accelerometer is present and accumulate for averaging
byte rawData[6]; // initialize buffer
readRegisters(accelAddress[accel], accelXReg[accel], rawData, sizeof(rawData)); // read accelerometer raw data into buffer
tX += (int)(rawData[accelXSeq[accel]] << 8 | rawData[accelXSeq[accel]+1]); // accumulate accelerometer raw X
tY += (int)(rawData[accelYSeq[accel]] << 8 | rawData[accelYSeq[accel]+1]); // accumulate accelerometer raw Y
tZ += (int)(rawData[accelZSeq[accel]] << 8 | rawData[accelZSeq[accel]+1]); // accumulate accelerometer raw Z
accelSamples++; // increment sample counter
if (accelSamples >= maxSamples) { // desired number of samples are collected:
accelX = tX; // average and convert accelerometer raw X to ten thousands slope
accelY = tY; // average and convert accelerometer raw Y to ten thousands slope
accelZ = tZ; // average and convert accelerometer raw Z to ten thousands slope
samples = accelSamples; // get number of samples to be sent
tX = 0; // zero raw accumulators
tY = 0;
tZ = 0;
accelSamples = 0; // zero sample counter
} // if (accelSapmples > maxSamples)
} // if (accelFound)
} // loop()
unsigned long expo(unsigned long m, byte c) {
if (c < 51) return (m * 2);
if (c < 102) return (m * 1.290);
if (c < 153) return (m * 0.831);
if (c < 240) return (m * 0.535);
return (m * 0.345);
} // expo
byte readRegister(byte addr, int reg) { // read single byte from accelerometer
Wire.beginTransmission(addr); // initialize transmission
Wire.write(reg); // send register address
Wire.endTransmission(false); // send above and keep connection open
Wire.requestFrom(addr, (byte)1); // request 1 byte, bus is released when done by default
if (Wire.available()) { // wait for data to arrive
return Wire.read(); // return byte
} else {
return 0;
} // if (Wire.available())
} // byte readRegister(byte addr, int reg)
void readRegisters(byte addr, int reg, byte *buffer, byte len) { // read len bytes starting from reg; store bytes in buffer
Wire.beginTransmission(addr); // initialize transmission
Wire.write(reg); // send register address
Wire.endTransmission(false); // send above and keep connection open
Wire.requestFrom(addr, (byte)len); // request len bytes, bus is released when done by default
if (Wire.available()) { // wait for data to arrive
for (int i = 0; i < len; i++) buffer[i] = Wire.read(); // read len bytes into buffer
} // if (Wire.available())
} // void readRegisters(byte addr, int reg, byte *buffer, byte len)
void writeRegister(byte addr, byte reg, byte data) { // write single byte to accelerometer
Wire.beginTransmission(addr); // initialize transmission
Wire.write(reg); // send register address
Wire.write(data); // send data
Wire.endTransmission(); // send above and close connection
} // void writeRegister(byte reg, byte data)
Иван
-
Използваният Bluetooth модул е HC-05. Фабричните му настройки са за скорост на обмен по серийния интерфейс (бодрейт) 9600 бита в секунда, което е прекалено бавно за нуждите на измервателния вагон. Програмата в Ардуиното използва 115200 бита в секунда, заради което настройките на HC-05 трябва да се променят.
Това става в т.нар. "AT" режим, по подобие на едновремешните модеми. Влизането в "AT" режим е малко особено - при изключено захранване на модула, трябва да се натисне и задържи бутонът на модула и да се подаде захранването. След около секунда - две бутонът може да се отпусне и светодиодът на модула трябва да мига бавно, което показва, че модулът е в "AT" режим. Ако светодиодът мига бързо, модулът не е успял да влезе в "AT" режим и трябва да повторим процедурата наново.
След като модулът е влязъл в "AT" режим, стартираме серийния монитор на Ардуино средата. Разбира се предварително трябва да сме избрали верният COM порт за USB-Serial кабела/преобразувателя. Всъщност серийният монитор на Ардуино средата може да се стартира и преди да сме вкарали HC-05 модула в "AT" режима.
Важно е да настроим серийния монитор правилно. Това става, като изберем "38400 baud" долу вдясно на екрана на монитора и "Both NL & CR" отляво на скоростта. Сега за да тестваме връзката с HC-05 модула, цъкаме с мишката горе на екрана на серийния монитор, вляво от бутона "Send", за да се появи там мигащ курсор и написваме с ГЛАВНИ БУКВИ НА ЛАТИНИЦА (всичко, което пишем като команди на HC-05 модула е с главни латински букви):
AT
и натискаме бутона "Enter" на клавиатурата или бутона "Send" на серийния монитор. Въобще след всяка въведена команда, трябва да натиснем един от тези два бутона, за да бъде изпратена към модула.
Ако всичко работи както трябва, на екрана трябва да се изпише отговорът от модула
OK
Ако искаме да видим текущата настройка на скоростта на обмен на серийния интерфейс, написваме
AT+UART
и натискаме "Enter" на клавиатурата или "Send" на прозореца на серийния монитор, на което модулът ще отговори например с
AT+UART:9600,0,0
Отговорите от модула може да пропуснат "AT" преди плюса, в зависимост от техния фърмуер, така че това да не ни хвърля в оркестъра. Горният отговор показва, че скоростта на обмен на модула е 9600 бита в секунда (бода).
За да променим скоростта на 115200 бита в секунда, написваме
AT+UART=115200,0,0
и изпращаме тази команда към модула с натискане на един от двата бутона, както съм написал по-горе. Модулът трябва да отговори
OK
за да потвърди, че е възприел и изпълнил командата. Ако искаме може да изпратим пак командата
AT+UART
на която модулът трябва да отговори с
AT+UART:115200,0,0
което означава, че настройката е направена.
Ако модулът е вече използван, трябва да му проверим паролата, която ще ни трябва при свързване с модула от някое от устройствата/програмите за индициране на параметрите, измервани от вагона. Това става с командата
AT+PSWD
на което модулът ще отговори примерно
AT+PIN:"1234"
или
AT+PIN:1234
Важното тук е да обърнем внимание дали в отговора паролата (пинът) е заграден в кавички или не. Ако искаме да променим паролата, командата е
AT+PSWD="9876"
или
AT+PSWD=9876
като вместо 9876 въведем 4-цифрен пин по наше желание, който обаче трябва да запомним или още по-добре да си го запишем. Важното е да въведем новия пин в кавички или без такива в зависимост от това как модулът ни е отговорил преди това на комадната AT+PSWD - със или без кавички. Ако отговорът е с кавички, пишем ги и ние, ако е без - въвеждаме новия пин без кавички.
Ако модулът е възприел новата команда, трябва да ни отговори с "OK". Препоръчвам отново да запитаме модула за паролата му, за да сме напълно убедени, че е възприета правилно.
Друго, което може да искаме да променим е името на модула. Фабричната стойност (име) е "HC-05". След време, ако използвате повече модули в различни устройства, всичките ще се появяват на компютъра или на GSM-а/таблета с HC-05 и ще е трудно да ги разграничим. Проверката за името става с командата
AT+NAME
отговорът от модула ще е
AT+NAME:HC-05
За да променим името на модула изпращаме команда
AT+NAME=MESSWAGEN-1
като вместо MESSWAGEN-1 слагаме името, което желаем.
Друга важна настройка е за ролята на модула. Този в измервателния вагон трябва да е "SLAVE", т.е. подчинен. Заводската настройка е за "SLAVE", но е желателно да го проверим, а ако модулът вече е използван за други нужди и да го променим, ако трябва. Командата за проверка е
AT+ROLE
на което модулът трябва да отговори с
AT+ROLE:0 ако е "SLAVE"
или
AT+ROLE:1 ако е "MASTER"
Ние искаме първото. Ако модулът е отговорил с второто, изпращаме команда
AT+ROLE=0
При изпращане на команда за промяна на AT+ROLE, модулът ще излезе от "AT" режима и затова обикновено това е последната команда, която изпращаме. Ако искаме отново да вкараме модула в "AT" режим, изключваме му захранването и повтаряме процедурата, която съм описал в началото на мнението.
Това е по настройките на HC-05 модула. В следващо мнение ще спомена и за настройките на HC-05 за устройството за индициране на скоростта и изминатия път, които се различават само при AT+ROLE командата. Това е ако някой реши да си направи това устройство вместо да използва приложението за Андроид устройство или програмата за Windows. Аз лично предпочитам да използвам самоделната индикация.
Иван
-
Приемникът на информацията от измервателния вагон е също базиран на Ардуино Про-мини и HC-05 Bluetooth модул. За показване на измерените от вагона и изчислени параметри използвам течнокристална индикация с 16х2 символа, т.е. с 2 реда с 16 символа на ред. Индикацията има I2C към паралелен преобразувател. Така връзките към процесора се свеждат до минимум (4 проводника - маса, +5 V, SDA и SCL).
Ето схемата на приемника с индикацията:
(https://cankov.com/modelrailroad/meascar/receiver_display_sch.png)
Захранването е идентично на това в измервателните вагони 2 и 3 - литиево-йонен акумулатор и зарядно/преобразувател до 5 V от USB батерия и ключе за захранването.
Настройките на HC-05 Bluetooth модула са почти идентични с тези на модула във вагона. Единствената разлика е настройката за MASTER:
AT+ROLE=1
Важно е паролата/пинът на модула в индикацията да е еднакъв с този на модула във вагона, така че преди да направим настройката с AT+ROLE, трябва да сменим паролата/пина с тази, която сме записали в HC-05 модула на вагона.
Ето всички настройки за модула на индикацията:
AT+UART=115200,0,0
AT+PSWD="същата_парола_като_на_вагона"
AT+ROLE=1
Да припомня, че паролата се въвежда с или без кавички в зависимост от това как модулът е отговорил на запитването AT+PSWD - с или без кавички.
Няма нужда да се променя името на модула, защото модулът на индикацията няма да се свързва с компютър или Андроид устройство.
Иван
-
(https://cankov.com/modelrailroad/meascar/recdisp01.jpg)
(https://cankov.com/modelrailroad/meascar/recdisp02.jpg)
(https://cankov.com/modelrailroad/meascar/recdisp03.jpg)
(https://cankov.com/modelrailroad/meascar/recdisp04.jpg)
(https://cankov.com/modelrailroad/meascar/recdisp05.jpg)
(https://cankov.com/modelrailroad/meascar/recdisp06.jpg)
Моделите на кутийката за 3D принтер:
Основа (https://cankov.com/modelrailroad/meascar/sm++_r.stl)
Капак (https://cankov.com/modelrailroad/meascar/sm++_f.stl)
И двете ги печатам с лицето надолу, като на основата включвам печатането на подпори, за да се получат сравнително добри вътрешни повърхности.
Иван
-
Програмата на Ардуиното за индициране на скоростта и изминатия път:
#define verNum "IC 2.0 " // sketch version number Номер на версията на програмата
#define verDate "07/04/21" // and date и дата на завършване
#include <LCD_I2C.h> // libraries used Използвани библиотеки
#include <Wire.h>
unsigned long const wheelDia = 480; // wheel running diameter in mm divided by Диаметър на колелото в mm разделен
// number of pulses per rotation (magnets) на броя импулси на оборот (на броя магнити)
// 480 for ROCO, 501 for PIKO
#define tarePin 3 // zeroing button pin Извод за бутона за нулиране на изминатия път
#define baudRate 115200 // serial baud rate Бодрейт на серийния интерфейс
#define serialTimeout 3200 // serial read timeout in ms Таймаут на серийния интерфейс в милисекунди
#define readStart ' ' // serial read start symbol Константа за нормалната работа на програмата
#define widthDelimiter ';' // pulse length delimiter Константа за нормалната работа на програмата
#define readTerminator '/' // serial read terminator symbol Константа за нормалната работа на програмата
#define LCD_address 0x27 // LCD i2c address Адрес на дисплея - използвай i2c_scanner за прочитане на адреса
#define LCD_columns 16 // LCD columns Колони на дисплея
#define LCD_rows 2 // LCD rows Редици на дисплея
#define heartbeat 13 // LED pin Извод на светодиода на Ардуиното
#define wheelConstKPH 11310UL * wheelDia // wheel constant for km/h Константа за нормалната работа на програмата
#define wheelConstMPH 7028UL * wheelDia // wheel constant for MPH Константа за нормалната работа на програмата
#define wheelConstKM 31831UL // wheel constant for km Константа за нормалната работа на програмата
#define wheelConstMI 51227UL // wheel constant for mile Константа за нормалната работа на програмата
#define wheelConstCM 277UL // wheel constant for cm Константа за нормалната работа на програмата
int heartbeatCounter = 0; // Променлива за нормалната работа на програмата
unsigned long kph = 0, mph = 0, pL = 0, t = 0; // Променливи за нормалната работа на програмата
unsigned long s, l, r, sign; // Променливи за нормалната работа на програмата
long nSk = 0, iSk = 0, nSm = 0, iSm = 0, vC = 0; // Променливи за нормалната работа на програмата
unsigned long rData[] = {0, 0, 0, 0, 0, 0, 0, 0}; // Променлива за нормалната работа на програмата
LCD_I2C lcd(LCD_address, LCD_columns, LCD_rows); // initialize display Дефиниране и инциализиране на дисплея
void setup() { // begin setup От тук до края е самият код на програмата
pinMode(heartbeat, OUTPUT); // set LED pin as output
pinMode(tarePin, INPUT_PULLUP); // set zero pin as input with internal pull-up
Serial.begin (baudRate); // initialize serial port
lcd.begin(); // initialize LCD
lcd.backlight(); // turn on backlight
lcd.clear(); // clear screen
lcd.print("Speedometer"); // display program name
lcd.setCursor(0, 1);
lcd.print(String(verNum) + String(verDate)); // display version and date
delay(1200);
} // end of setup
void loop() { // begin main cycle
int lF = 0, sTimedout;
do {
if (Serial.available()) { // read serial
t = millis(); // read current timestamp for serial timeout
char c = Serial.read();
if (c == readStart) {r = 0; vC = 0; sign = 1;}
else if (c == widthDelimiter) {rData[vC] = r * sign; r = 0; vC++; sign = 1;}
else if (c == '-') sign = -1;
else if (c != readTerminator) r = r * 10 + String(c).toInt();
else if (c == readTerminator) {
rData[vC] = r * sign; lF = true; s = rData[0]; l = rData[1];
} // if (c == readTerminator)
} // if (Serial.available())
sTimedout = ((millis() - t) > serialTimeout);
} while ((lF == 0) && (sTimedout == 0));
if ((lF) && (s)) { // data received
nSk = wheelConstKPH / s; // calculate new speed
iSk = nSk - kph; // calculate speed increment
if (nSk > 2) iSk /= 2; if (nSk > 8) iSk /= 2; // adjust speed increment
if (nSk > 30) iSk /= 2; if (nSk > 120) iSk /= 2; // based on new speed
if (nSk > 480) iSk /= 2;
if (abs(nSk - kph) < abs(iSk) * 3 / 2) kph = nSk; else kph += iSk;
nSm = wheelConstMPH / s; // do the same as above for mph
iSm = nSm - mph;
if (nSm > 2) iSm /= 2; if (nSm > 8) iSm /= 2;
if (nSm > 30) iSm /= 2; if (nSm > 120) iSm /= 2;
if (nSm > 480) iSm /= 2;
if (abs(nSm - mph) < abs(iSm) * 3 / 2) mph = nSm; else mph += iSm;
displaySpeed(0, 0, kph % 1000, " km/h "); // display speed in km/h
displaySpeed(0, 1, mph % 1000, " mph "); // display speed in mph
unsigned long km = ((l - pL) * wheelDia / wheelConstKM) % 10000UL; // calculate distance in km
unsigned long cm = ((l - pL) * wheelDia / wheelConstCM) % 1000000UL; // calculate distance in miles or cm
int i = 9; if ((km < 1000) && (cm < 100000)) i--; // figure out from where to display distance
displayDistance(i, 0, km, " km "); // display distance in km
displayDistancm(i - 1, 1, cm, " cm "); // display distance in cm
heartbeatCounter = (heartbeatCounter + 1) % 17; // heartbeat logic
digitalWrite(heartbeat, !heartbeatCounter); // flash heartbeat
} // end of calculating received data
if (!digitalRead(tarePin)) pL = l; // zero button pressed - get zero distance counter value
if (sTimedout) {lcd.clear();lcd.print(" NO SIGNAL!");} // serial timed out - display "NO SIGNAL!"
t = millis(); // read current timestamp for serial timeout
if (t % 16 == 0) {
if (abs(nSk - kph) < abs(iSk) * 3 / 2) kph = nSk; else kph += iSk;
if (abs(nSm - mph) < abs(iSm) * 3 / 2) mph = nSm; else mph += iSm;
}
} // end of main cycle
void displaySpeed( int c, int r, long n, String s) {
lcd.setCursor(c, r);
if (n < 100) lcd.print(" ");
if (n < 10) lcd.print(" ");
lcd.print(String(n) + s);
}
void displayDistance( int c, int r, long n, String s) {
lcd.setCursor(c, r);
if (n < 1000) lcd.print(" ");
if (n < 100) lcd.print(" ");
lcd.print(String(n / 10) + "." + String(n % 10) + s);
}
void displayDistancm( int c, int r, long n, String s) {
lcd.setCursor(c, r);
if (n < 100000) lcd.print(" ");
if (n < 10000) lcd.print(" ");
if (n < 1000) lcd.print(" ");
if (n < 100) lcd.print(" ");
if (n < 10) lcd.print(" ");
lcd.print(String(n) + s);
}
В наалото на кода има един ред, който задава константата на колелото и датчика на Хол:
unsigned long const wheelDia = 480; // Диаметър на колелото в mm разделен
// на броя импулси на оборот (на броя магнити)
// обикновено 480 за ROCO, 501 за PIKO
Тази константа е равна на диаметъра на колелото на оригинала в милиметри, разделен на броя магнити. Под "оригинала" имам предвид колелото на вагон в мащаб 1:1.
От опит установих, че диаметърът на колоосите на вагоните на Роко отговаря на диаметър на оригинала 960 мм, а на Пико на 1002 мм. Тъй като използвам два магнита на колело, съответната константа е 480 за колоос на Роко и 501 за Пико, което съм написал и в коментара на програмата.
Тази константа трябва да променим така, че да отговаря на диаметъра на използваната колоос.
Друга константа, която може да се наложи да променим е адресът на дисплея, зададен на реда
#define LCD_address 0x27 // Адрес на дисплея - използвай i2c_scanner за прочитане на адреса
Този адрес е или 0x27 или 0x3f, в зависимост от това кой I2C чип е монтиран на втората платка на дисплея (I2C адаптера). Ако чипът е PCF8574(T), адресът е 0x27, ако чипът е PCF8574А(Т), адресът е 0x3f.
Програмата използва две библиотеки. Едната е "Wire", която идва заедно с Ардуино средата, втората е "LCD_I2C". Втората може да е моя разработка, затова пускам препратка за изтегляне:
Библиотека LCD_I2C (https://cankov.com/modelrailroad/meascar/LCD_I2C.zip)
В ZIP файла ма една папка, която трябва да се копира в папката "libraries" в работната папка на Ардуино средата - където са по подразбиране програмите за Ардуино.
Иван
-
При включване на захранването на скоростомера, на екрана за кратко се изписва информация за програмата:
(https://cankov.com/modelrailroad/meascar/recdisp11.jpg)
Ако скоростомерът не намери измервателен вагон с парола/пин, отговарящ на неговия, на екрана се изписва, че няма сигнал от измервателен вагон:
(https://cankov.com/modelrailroad/meascar/recdisp12.jpg)
При осъществена връзка с измервателния вагон, на екрана се изписват моментната скорост в км/ч (km/h) и мили в час (mph) и изминатият път на "оригинала" в километри (km) и на модела в сантиметри (cm). Скоростта е винаги на оригинала, т.е. мащабната скорост.
(https://cankov.com/modelrailroad/meascar/recdisp13.jpg)
Константите в програмата са за HO, т.е. мащаб 1:87, поради което мащабната скорост и изминат път в километри са за този мащаб. Ако мащабът е различен от HO, някои от константите в програмата трябва да се променят.
По поръчка на Владо Цанков, програмата следи извод 3 на Ардуиното (tarePin). Между този извод и маса може да се свърже бутон. При натискането на бутона, показанието за изминатия път се нулира. Това нулиране е само в скоростомера. Вагонът продължава да изпраща броя регистрирани импулси от момента на подаване на захранването му. Ако изключим скоростомера и го включим отново, показанието за изминатия път ще е отново от включване на захранването на вагона. Разбира се може да нулираме показанието на индикацията по всяко време и повече от един път.
Пропуснах да спомена в предно мнение, че на платката на модула на индикацията има едно тримерче (врътка за отвертка - на снимките в две мнения преди това е синичко с бяла врътка) - с него се настройва контрастът на индикацията. Ако след включване на захранването, на екрана не се вижда нищо или се виждат само черните точки на матрицата, трябва да завъртим това тримерче в едната или другата посока, за да си нагласим желания контраст на текста.
Иван
-
Както писах в първото мнение в тази тема, вторият метод за индициране на данните от измервателния вагон е с Android устройство. Проложението иска сравнително бързо устройство иначе показва информацията с голямо закъснение. Това се получи след като добавих акселерометърът (ъгломерът) към вагона. Ако вагонът няма акселерометър, може да се използва и по-стар/бавен таблет или телефон.
Приложението може да се свали от тук:
Скоростомер плюс за Android устройство (https://cankov.com/modelrailroad/speedometer/SpeedometerPlus.apk)
Приложението не е в магазина на Гугъл по лично мои съображения. Поради това, за да се инсталира, трябва в телефона/таблета да е разрешено инсталиране на приложения, които не са в гугълския магазин. Това е доста специфично за всяко устройство, така че ако не знаете как да го разрешите, търсете някой познат, който е навътре с това. Иначе операционната система няма да позволи инсталирането на приложението и дори може да изтрие файла.
Приложението не иска никакви разрешения от операционната система и няма никакви реклами (една от причините да не го публикувам в магазина на Гугъл). Приложението не иска никакви активирания или заплащания (друга причина да не е в магазина).
При стартиране на приложението, на екрана се показва главният екран:
(https://cankov.com/modelrailroad/meascar/smeterapp01.jpg)
Всички съобщения са на английски. Не съм ги превеждал на български, защото всичко е елементарно за работа и се подразбира от мерните единици, които са показани.
Когато няма свързан измервателен вагон, приложението е в демонстрационен режим - както е показано по-горе. За да се свърже измервателен вагон, първо трябва да се направи "съешването" от Bluetooth настройките на телефона. Това е идентично с процеса с всяко друго Bluetooth устройство. Да припомня, че паролата/пинът е този който сме прочели или променили за HC-05 модула във вагона - няколко мнения по-горе. Тук е особено полезно ако сме променили името на модула с нещо "по-говорящо".
След като вагонът е вече свързан с телефона/таблета, трябва да се избере в приложението. Това става, като цъкнем на бутона "Bluetooth Devices" (Bluetooth устройства). Изписва се списък с всички свързани към телефона/таблета устройства:
(https://cankov.com/modelrailroad/meascar/smeterapp02.jpg)
Горната картинка е за моя телефон. Понеже съм правил експерименти с много HC-05 модули, списъкът е доста дълъг и пак понеже на повечето не съм променял имената (защото е само за тест), става голяма обърквация кой модул къде се намира. Та затова силно препоръчах (и все още препоръчвам) да се промени името на модула в измервателния вагон с нещо по-смислено.
И така, намираме измервателния вагон и цъкаме на името му. Ако захранването на вагона е включено, ще се покаже информацията от него, ако не, операционната система ще каже, че не намира избраното устройство и приложението ще се върне в демонстрационен режим.
Настройки на приложението
За да променим настройките на приложението, цъкаме на бутончето с трите хоризонтални чертички в горния десен ъгъл.
(https://cankov.com/modelrailroad/meascar/smeterapp03.jpg)
Настройките са:
1. Диаметър на колелото на вагона (Wheel Diameter) в милиметри. Това е диаметърът на колелото на оригинала, разделен на броя магнити - също, както в програмата за индикацията с Ардуино.
2. Мерна единица (Unit of Measure) - километри (km) или мили (mi) (сухоземни, а не морски/въздушни). Бутонът показва текущо активната мерна единица. Мерната единица се използва за изминат път (мащабен на "оригинала") и мащабна скорост, съответно в километри в час (km/h) или мили в час (mph).
3. Мащаб (Scale) в едно към - въвеждаме желания мащаб. Мащабът може да е произволен, но е все пак силно пожелателно да въведем мащаба на измервателния вагон, за да са верни показанията на мащабните скорост и път.
4. Вид на индикацията на скоростта (Display Type) - аналогова (Analog) или цифрова (Digital). Цъкаме на бутона за да превключим между двата типа. И тук, както при избор на мерна единица, бутонът показва текущо активния вид на индикацията. На следващите картинки е показана цифрова индикациа, а на първата в това мнение е показана аналоговата.
5. Обхват на индикацията на скоростта - максималната скорост на циферблата на аналоговата индикация. Не е активно при избрана цифрова индикация.
Като сме свършили с настройките, цъкаме на бутончето със стрелката в горния ляв ъгъл, за да се върнем на основния екран.
Ако приложението се е свързало с измервателен вагон, основният екран изглежда така:
(https://cankov.com/modelrailroad/meascar/smeterapp06.jpg)
Вижда се "цифровото" индициране на скоростта, за разлика от "аналоговото", което е поазано на първата картинка в мнението.
Ако скоростта е под 20 км/ч, тя се индицира с точност до една десета в "цифров" режим:
(https://cankov.com/modelrailroad/meascar/smeterapp05.jpg)
Искам да обърна внимание, че ако вагонът има акселерометър, на екрана се показват наклоните на вагона по надлъжната ос X и по напречната ос Y в едно на хиляда (промили) с точност до една десета. Показва се и бутон за калибриране на датчика. Ако вагонът няма акселерометър, даните за наклона не се показват.
И така, на основния екран се показват:
1. Мащабната скорост в км/ч или мили в час (mph)
2. Изминатият мащабен път в км или мили
3. Избраният мащаб
4. Изминатият моделен път в сантиметри (cm)
5. Наклонът на вагона по дължината му (X) и страничният му наклон (Y) в промили (едно на хиляда)
Бутонът "Reset" нулира показанията за изминатия път. Това става в приложението. Ако затворим приложението и го стартираме отново, то ще покаже изминатия път от вагона от включване на захранването му.
Приложението запомня последното Bluetooth устройство, с което е работило последно и при следващо стартиране автоматично го търси, за да се свърже с него. Ако не го открие (или ако Bluetooth на Андроид устройството е изключен), приложението автоматично минава в демонстрационен режим.
Калибриране на датчика за наклона (акселерометъра)
1. Поставяме вагона на релси, не на ребордите. Не е задължително повърхността, на която са релсите да е хоризонтална. Раздвижваме вагона леко напред-назад, за да улегнат колоосите в гнездата им (където лагеруват).
2. Изчакваме показанията на наклона да се успокоят.
3. Цъкаме на бутона "Calibrate". На екрана се появяват едни точки, които изчезват една по една:
(https://cankov.com/modelrailroad/meascar/smeterapp07.jpg)
а бутонът "Calibrate" става недостъпен. По време на тази стъпка е важно вагонът да не се разклаща.
4. Когато приложението завърши този етап от калибрирането, на екрана се изписва съобшение да завъртим вагона на 180° (Rotate Car 180°) и бутонът "Calibrate" отново става достъпен:
(https://cankov.com/modelrailroad/meascar/smeterapp08.jpg)
5. Вдигаме вагона от релсите, завъртаме го на 180° и го поставяме отново на релсите, на същото място. Отново раздвижваме вагона леко напред-назад.
6. Пак изчакваме показанията на наклона да се успокоят.
7. Пак цъкаме бутона "Calibrate". На екрана отново се показват точките, които постепенно изчезват, бутонът е недостъпен и пак внимаваме да не се разклати вагонът.
8. Когато завърши и вторият етап от калибрирането, приложението се връща в изходно положение.
Калибрирането на датчика за наклона (акселерометъра) става в приложението, а не във вагона. Затова е важно калибрирането да се направи за всяко използвано приложение (в различни Андроид устройства). Така направеното калибриране е също специфично за вагона, с който е направено. Ако трябва да използваме друг измервателен вагон с акселерометър, трябва наново да калибрираме и предишното калибриране се губи.
Иван
-
:hi: Свалям ти шапка за този проект.
Много оригинална идея и реализация: вагон + скоростомер + мобилно приложение.
Благодаря за подробното описание и многото снимки.
За да реализираш подобен проект трябва да имаш доста познания в различни области:
моделиране, електроника, програмиране и др.
Поздравявам те за успешната работа!
-
Третият метод за индициране на данните от измервателния вагон е с програма за Windows. Програмата е тествана и работи с 32- и 64-битовите версии на Windows XP, 7 и 10. Програмата може да се свали от следните препратки:
Програма за 32-битов Windows (https://cankov.com/modelrailroad/speedometer/speed_2107_win32.zip)
Програма за 64-битов Windows (https://cankov.com/modelrailroad/speedometer/speed_2107_win64.zip)
Трябва да свалим версията в зависимост от това на какъв Windows ще я използваме - 32- или 64-битов. След като сме свалили ZIP файла от една от горните препратки, трябва да отворим ZIP-а и да копираме папката, която се намира в ZIP файла в папка по наш избор. Това може да е папката "Program Files" или папката с документи, но важното е да запомним къде точно сме изкопирали папката.
След това отваряме въпросната папка, намираме папката "Speedometer+ 2107 wXX", където "XX" е 32 или 64, в зависимост от това коя версия сме свалили, намираме филето "SpeedometerPlus.exe", провлачваме го с ДЕСНИЯ бутон на мишока на десктопа (работния плот) и избираме "Create shortcuts here", което в българската вересия на Windows е нещо като "Създай препратка тук". За "съжаление" нямам българска версия на "Прозорко" и не мога да проверя точния термин, който се използва.
Стартираме програмата. Понеже и програмата за Windows и приложението за Андроид съм ги писал все аз, за много голямо мое удивление, те си приличат неимоверно много и затова в това мнение ще карам описанието по-накратко. Което не става съвсем ясно - гледайте в мнението за приложението по-горе или питайте.
И така, при първоначално стартиране, програмата тръгва в демонстрационен режим:
(https://cankov.com/modelrailroad/meascar/smeterprg01.png)
Програмата стартира в демонстрационен режим, когато не може да осъществи връзка с измервателен вагон. И тук, както в приложението за Андроид, "съешването" на Windows с вагона става през настройките на Bluetooth устройства на Windows. Разликата е, че в Windows на Bluetooth устройствата се присвоява COM порт. Трябва да намерим кой е този порт в диспечера на устройствата на "Прозорко" и да го изберем в настройките на програмата.
В настройките на програмата влизаме, като от основния прозорец на програмата цъкнем на бутона "Settings", при което се отваря този прозорец:
(https://cankov.com/modelrailroad/meascar/smeterprg03.png)
И така, настройките са:
1. Избор на COM порт (Serial Port), демек Bluetooth модула в измервателния вагон. Този порт трябва да намерим от диспечера на устройствата, особено ако има повече от... 2. "Малка" подробност в "Прозорко" е, че всеки Bluetooth модул, който е конвертор към сериен порт (като HC-05, което използвам в измервателния вагон), при "съешване" в "Прозорко" създава 2 порта. Обикновено (досега при мен ВИНАГИ) портът с по-малкия номер е този, който ни трябва. Та след като сме намерили този порт, цъкаме на полето вдясно от "Serial Port" и избираме съответния порт.
(https://cankov.com/modelrailroad/meascar/smeterprg02.png)
2. Скорост на серийния интерфейс (Serial Baud Rate). Оставяме го на 115200 или ако не е толкова, избираме тази стойност. Не съм забелязал да има някакво значение в Windows.
3. Диаметър на колелото (Wheel Diameter) в милиметри (mm) - диаметърът на колелото на "оргинала", разделен на броя магнити.
4. Мерна единица (Unit of Measure) - километри (km) или мили (mi).
5. Мащаб (Scale) в едно към - въвеждаме желания мащаб.
6. Вид на индикацията на скоростта (Display Type) - аналогова (Analog) или цифрова (Digital).
7. Обхват на индикацията на скоростта - максималната скорост на циферблата на аналоговата индикация.
8. Датчик за наклона (Inclinometer) - за разлика от приложението за Андроид, тук калибрирането на датчика е в настройките. Калибрирането е аналогично на това в приложението, с единствената разлика, че не се индицират текущите стойности на надлъжния и напречния наклони на вагона:
8.1. Поставяме вагона на релси, не на ребордите и раздвижваме вагона леко напред-назад.
8.2. Изчакваме 5-7 секунди.
8.3. Цъкаме на бутона "Calibrate". На екрана се появяват точките, които изчезват една по една:
(https://cankov.com/modelrailroad/meascar/smeterprg07.png)
И тук внимаваме вагонът да не се разклаща.
8.4. Когато програмата завърши този етап от калибрирането, на екрана се изписва съобшение да завъртим вагона на 180° (Rotate Car 180°) и бутонът става "Continue":
(https://cankov.com/modelrailroad/meascar/smeterprg08.png)
8.5. Вдигаме вагона от релсите, завъртаме го на 180° и го поставяме пак на релсите, на същото място. Отново раздвижваме вагона леко напред-назад.
8.6. Пак изчакваме 5-7 секунди.
8.7. Цъкаме бутона "Continue". На екрана отново се показват точките, които постепенно изчезват и внимаваме да не се разклати вагонът.
8.8. Когато завърши и вторият етап от калибрирането, бутонът "Calibrate" се появява отново.
И тук данните от калибрирането на датчика за наклона (акселерометъра) се запазват в програмата, а не във вагона.
От настройките можем да се върнем към основния екран по два начина:
1. Цъкаме на бутона "OK" - промените по настройките, които сме направили се запазват
или
2. Цъкаме на бутона "Cancel" - настройките остават такива, каквито са били преди да сме влезли в прозореца за настройване на програмата. Ако преценим, че сме "окъкали" нещо в настройките, това е бутонът, който трябва да натиснем.
Ако пограмата се е свързала с измервателен вагон, основният прозорец изглежда така:
(https://cankov.com/modelrailroad/meascar/smeterprg06.png)
Ако сме избрали "цифрово" индициране на скоростта, прозорецът изглежда по този начин:
(https://cankov.com/modelrailroad/meascar/smeterprg05.png)
И тук когато скоростта е под 20 км/ч, тя се показва с точност до 0,1 км/ч, а над 20 км/ч - с точност до 1 км/ч.
Както в приложението за Андроид, програмата показва следните параметри:
1. Мащабната скорост в км/ч или мили в час (mph)
2. Изминатият мащабен път в км или мили
3. Избраният мащаб
4. Изминатият моделен път в сантиметри (cm) или инчове (in)
5. Наклонът на вагона по надлъжната (X) и напречната (Y) ос в промили (едно на хиляда)
Бутонът "Reset" нулира показанията за изминатия път, като това също става в прорграмата.
Програмата също запомня последния COM порт, с който е работил и при следващо стартиране автоматично се опитва да се свърже с измервателен вагон по този порт. Ако не открие измервателен вагон на този порт или ако портът не е активен, програмата автоматично минава в демонстрационен режим.
Иван
-
Приложението за Андроид и програмата за Windows работят и без измервателен вагон, както вече писах в горните мнения - в демонстрационен режим. Затова ако искате да си поиграете с тях, може да си ги свалите и инсталирате.
И програмата, и приложението имат в името си думата "плюс" или знака "+". Това е, за да ги разгранича (най-вече за себе си) от версиите без "плюс", които написах първоначално преди да добавя акселерометър (датчика за наклон) във вагона. "Не плюс" програмата и приложение не работят коректно с вагон с акселерометър, докато обратното работи - "плюс" програма/приложение работи коректно с вагон без акселерометър, но с кода за вагона, който съм публикувал в тази тема.
Вагонът, програмата и приложението, публикувани тук не са съвместими с други измервателни вагони и програми/приложения. Тези "други", за които знам са измервателния вагон на Пико и приложението Messwagen на германеца от Щумифорума. Може да има (и сигурно има) и други такива, за които не съм чувал.
Иван
-
Ах, изкефи ме с "прозорко"!!!
Значи "темата става социална, значи филма ще го дават и у нас!" (един стар виц на Шкумбата)
Може би ще се опитам да го реализирам, съгласно твоята тема.
Ако стане, ще се опитам да го допълня и с "кантар" за теглителна сила на модел, закачен да тегли вагона...
Тоест вагона да мери на свойта задна кука, тежеста която може да теглят различните локомотиви...
Нещо подобно беше реализирал тук Митко (888) но като самостоятелно измерване с дисплей на самия вагон.
Мисля че беше ползвал мерителна лъжица с електронен датчик
(кантарче в лъжица). Даже някъде и аз си купих такава лъжица
(ама с тия ремонти дори нямам на идея къде е в момента).
А може би, ти си мислил да включиш на по-късен етап (като акселерометъра) съответния датчик (Ардуиното има доста датчици за периферия),
като доразшириш през софтуера и за такива възможни измервания. Някога имаше дори стандарт
по NEM (може би ооще е валиден), по който се мереше теглителната сила на моделите.
Сега май слагат гумени бандажи за застраховка и...така стандарта може да е отпаднал вече (не съм проверявал).
То и в книгата на Юр.Ботев имаше дори елементарна скица с отвес и тежести на него... като
резултата се получаваше съгласно тежестта и времето за преминаване на 1 метър от трасето,
по което даден локомотив тегли този отвес ... Не си спомням как се третираше приплъзването при потегляне и т.н.
Та така!
Имам питане.
На показанията за "У" има възможност (явно) и за отрицателни показания.
При условие, че това е напречната координата, значи така може да мери и неправилно полагане
на трасето (кривини като по американските "житни" трасета) или например, постигането на
желания вътрешен наклон в криви при скоростни трасета (наклон към центъра на завоя, заради скоростта в кривата).
Тоест дали може и за това да върши работа?
-
Показанията за наклона са със знак + или - в зависимост от посоката на наклона. Това важи и за двете оси. Оста Y е напречната на вагона, т.е. мери страничния наклон на вагона. ОБАЧЕ!!!... поради сравнително грубото окачване на нашите вагони, този наклон може да е с голяма грешка. Нали разбираш, че когато "лагеруването" е конус в конус с "някаква" хлабина, как точно ще легне оста в "буксите" е божа работа.
Показанията за наклона са валидни само когато вагонът е в покой. Движението никога не е равномерно и поради чувствителността на датчика, в движение показанието варира в големи граници. Дори след установяване на вагона на място, показанията варират в сравнително голяма степен за около 3-5-7 секунди, в зависимост от това колко рязко е спрял вагона.
Това за динамометъра си го мислех, но аз съм по простичките работи и засега не виждам някаква реална полза от подобно нещо. Иначе би било интересна заигравка, но само до там. За мен и меренето на наклона си е изгъзица, но го направих по заявка на брат ми (той все ми пуска мухите - такъв си е още откакто бях малък и минавах прав под масата ::) ), както и бутоните за нулиране са по негова заявка. За мен е интересно да човъркам нещо с поялника и да пиша програмки. Аз не ползвам показанията за наклона и нулирането. Иначе идеята за наклоните е да се проверяват съответните по макетите - баири и виражи.
Иван
-
Да си дойдем на думата ... Цитирам се отпреди 4 години (http://www.railwaypassion.com/forums/index.php/topic,5048.msg110681.html#msg110681): "Меренето на наклона в движение не ми върши никаква работа. Показанията мърдат на където си искат. Гледах и още няколко филмчета на Пико с техния софтуер - и там рисуваха едни назъбени криви за наклона, за които вече съм убеден че се дължат на всякакви други потрепвания на измерителя но не и на крив път. ". Наклонът се ме,и достатъчно бързо и лесно без да се вози нивелир на вагон.
И още един цитат (http://www.railwaypassion.com/forums/index.php/topic,5048.msg112693.html#msg112693): "За мен има смисъл меренето на тягата. Може да се види не само колко тегли един локомотив, ами и колко се натоварва от конкретен влак или вагон и какво може да се очаква от него. Особено в криви и наклони различните вагони се държат доста различно.
Също и при закачане на два локомотива в един влак. Или ако искате му викайте консист. Това което "жп моделистите", а и производителите на декодери правят по въпроса е пълна пародия!"
Всеки, който закача два локомотива един за друг, особено цифрови, би трябвало да знае дали двата дърпат заедно или единият пречи на другия. Не само ако има наклони по трасето, но и на равно - при ускорение и при спиране. С тензометър е единствения начин да се провери до колко правилно са настроени декодерите в консиста. Ако пък има бутащ локомотив като втора машина - става още по важно да се мери кой кого дърпа и дали помага или пречи.
Не е нужно да се чупят кантарчета и лъжици. В момента у нас такъв датчик струва около 10 лв. (без да се чака доставка от другия край на света), заедно със специално направения за целта чип hx711 и цял модул - прецизен уселвател с АЦП за директно свързане към ардуино (или каквото искате) - с гугъл веднага ще намерите линкове. Нужно е само монтиране с четири винтчета - две за вагона и две за шахтата на куплунга.
-
Лъжицата е за самостоятелна Джиджавка!
За "по-така" уред и "син зъб" си иска датчик
с възможност за комуникация към ардуиното.
Нещо като това дето говориш!
Иначе си е точно заигравка с поялника и софта!
Но пък ако се направи усредняване (изчисляване)
на брой показания в единица време, може да се
"успокоят" крайните показания и така да се мери,
както наклона в макета, така и страничния такъв в трасетата.
А ако се остави опция, да се променя единицата време,
като част от текущата скорост , може да се подобри
и замерването в даден участък, с ниска скорост!
За още по-добра прецизност (дори при движение на ръка)!
Ей, така - мисли на глас, като част от заигравка та!
Впрочем и бутоните за нулиране са добро допълнение!
;)
-
То и аз се "заиграх" с горе изложеното...
Ами ако се/и сложи/м колооси с прави шийки и така избегнем
"конус в конус с хлабина", дали няма рязко да се подобрят показателите?
То и самите шийки с по един лагер 3х1х1 мм и..."жми градо"!!!
:lol: :lol: :lol: :hi: :scratch_ones_head:
За такива или подобни колооси:
(https://modellbahnmarkt24.de/images/product_images/popup_images/94324_0.jpg)
и евентуално тези лагерчета на шийките:
(https://www.runstarbearing.com/wp-content/uploads/2020/09/1-steel-ball-bearings-s681.jpg?v=1601017164)
(https://www.runstarbearing.com/wp-content/uploads/2020/09/1-steel-ball-bearings-s681-d.jpg?v=1601017051)
steel ball bearings s681
Part Number S681
Bearing type BALL
Structure Single Row
Load Direction Radial
Seal type open
Bore diameter(d) 1mm
Outer diameter(D) 3mm
Width(B) 1mm
material Stainless steel 440C(9Cr18)
ring material Stainless steel 440C(9Cr18)
cage material Stainless steel 304
ball material Stainless steel 440C(9Cr18)
Rubber material Stainless steel 304 with rubber
Grade ABEC-1
Clearance C0
BALL SIZE(mm) 0.6mm
BALL QTY 6
ПП. Само въпросните лагери не се купуват никога от "Амазон" където се предлагат на безумните 67,95$!!!
Плюс пощенски разходи почти още толкова - 57, 95 $ (https://www.amazon.com/S681-Bearing-1x3x1-Stainless-Open/dp/B002BBD2CY)!!! Те от "Dragon" ли ще гo метнат в БГ :angry:
В алиекспрес и дори в алибабаа, за тази сума може да се купят минимум 500 броя!!!
За БГ не съм проверявал...
ПП2. Надявам се да не съм "размазал" темата на Иван!? :blush2:
-
. . .
Надявам се да не съм "размазал" темата на Иван!? :blush2:
Напротив, радвам се че има дискусия!
Митко,
Според мен няма нужда от тензометрия за настройване на декодери на локомотиви, за да вървят заедно в състав (consist). Спокойно става с вагон, мерещ скоростта. Трябва скоростите на двата (трите и т.н.) локомотива, които ще са в състав да са еднакви за еднакви положения на тротъла. Няма нужда да се прави за всяко положение на тротъла, а през 2-3. Единственият товар на локомотива е измервателния вагон. Не искам да навлизам тук в детайли и подробности как става това и защо работи, тъй като е друга тема.
За меренето на това кой локомотив колко тегли - ами той тегли точно толкова, колкото може :yes:. Да кажем, че установим, че даден локомотивът не може да изтегли 15 4-осни пътнически вагона в хеликс с наклон 5%. Какво правим тогава? Или сменяме локомотива с такъв, който може да ги изтегли на този участък или намаляваме броя вагони или разваляме хеликса и го правим наново с наклон да речем 3% и/или с по-голям радиус. Къде в цялата тази схема ще ни помогне тензометрията? Тя (тензометрията) няма да ни каже в кой хеликс кой локомотив колко вагона може да изтегли. Вярно, може с тензометричен вагон да измерим усилието на куката от определена влакова композиция на куката на локомотива в този хеликс, но най-лесно е да проверим опитно дали въпросният локомотив ще изтегли въпросната композиция във въпросния хеликс.
Горното са мои мисли и в никакъв случай не искам дискусията да приключи с тях. Бих бил много благодарен ако Митко и други, които са на различно от моето мнение да дадат конкретни (или дори хипотетични) примери, в които биха използвали тензометричен (динамометричен) вагон и как точно се използва показанието на теглителната сила.
Иван
-
. . .
Но пък ако се направи усредняване (изчисляване)
на брой показания в единица време, може да се
"успокоят" крайните показания и така да се мери,
както наклона в макета, така и страничния такъв в трасетата.
. . .
Пацо,
Осредняване има. Вагонът прави определен брой измервания за наклоните по X, Y и Z (да има и по Z-координатата - вертикалната ос на датчика/вагона), които сумира и изпраща по BT (Bluetooth), както изпраща и броя измервания. Програмата и приложението правят самата сметка на осреднената стойност. Без това осредняване показанията изглеждат хаотични, дори и когато датчикът не е във вагон, а лежи залепен на работната ми маса. Това се дължи на голямата прецизност на датчика. Ако сте забелязали, наклоните се показват с точност от 0,1 промили (на хиляда), както това обикновено става в българските железници. Това е прекалено голяма прецизност, но понеже филтрирането се получи доста добро, реших да го оставя така. Мисля че вагонът на Пико показва наклоните с разрешаваща способност 0,1%, т.е. 10 ПЪТИ по-малка прецизност.
В програмата на вагона има един ред
const long maxSamples = 610; // accelerometer number of samples
където се задава броя измервания, преди сумираните стойности за наклоните да се изпратят по серийния интерфейс към BT. Който желае може да експериментира с тази стойност.
Що се отнася до меренето в движение - просто забрави! Правих експеримент с един от крановете на работа - това са кранове с товароподемност до 70 тона, монтирани на шаси на камион. Имаме цифрови нивелири, които мерят с прецизност от 0,1°, като сложих един такъв на крана. При нивелирането на крана, показанието на нивелира се мени "както си иска", а след преустановяване на командата е нужно да минат около 5 секунди, за да се стабилизира показанието на нивелира. Затова прецених, че осредняването, което съм направил е достатъчно и няма нужда да се мъча да правя допълнително филтриране за мерене в движение.
Иван
-
... Спокойно става с вагон, мерещ скоростта. Трябва скоростите на двата (трите и т.н.) локомотива, които ще са в състав да са еднакви за еднакви положения на тротъла. Няма нужда да се прави за всяко положение на тротъла, а през 2-3. ...
Може и въобще да не им мериш скоростта. Просто ги пускаш да обикалят заедно на една педя разстояние един от друг, и гледаш дали се приближават или раздалечават. На колкото скорости искаш. Ама като закачиш вагоните какво става - не е ясно колкото и да са еднакви скоростите.
Пък и това мерене нали се прави не защото трябва да се мери ... Влакчетата си вървят и без да ги мерим, ама с измерител си е друго.
-
Може и въобще да не им мериш скоростта. Просто ги пускаш да обикалят заедно на една педя разстояние един от друг, и гледаш дали се приближават или раздалечават. На колкото скорости искаш. Ама като закачиш вагоните какво става - не е ясно колкото и да са еднакви скоростите.
Пък и това мерене нали се прави не защото трябва да се мери ... Влакчетата си вървят и без да ги мерим, ама с измерител си е друго.
Може и на една педя един от друг, но трябва да се внимава повече при промяна на CV-тата в таблицата за скоростта, за да не се чукнат един в друг. Поотделно с измервателен вагон става по-лесно.
Да кажем, че сме настроили локомотивите един по един без товар (освен може би измервателен вагон). Закачаме единия локомотов към влака, а втория слагаме "на една педя" пред влаковия локомотив. Подкарваме ги заедно. Ако декодерите са с добра регулация по индуцирано ЕДН, скоростта на влаковия локомотив или ще се промени много малко или въобще няма да се промени (това е от личен опит). Всъщност е по-добре, ако скоростта на влака намалее. Тогава като закачим втория локомотив, той винаги ще допринесе с теглителната си сила към тази на първия локомотив, т.е. на първия (влаковия) локомотив няма да му се налага освен да тегли влака, но и да бута втория локомотив или ако сме закачили втория локомотив на опашката, да тегли и него.
Проблемът би съществувал, ако локомотивът, теглещ влака (т.е. влаковият локомотив), се движи по-бързо от втория локомотив. Тогава вторият локомотив ще е допълнителен товар на влаковия. Но именно затова трябва двата (или повече) локомотива да са настроени да се движат без товар с (приблизително) еднакви скорости на едни и същи позиции на тротъла.
Иван
-
Проблемът е винаги когато двата локомотива имат разлика в скоростта, а това винаги е така. Декодерът се стреми да поддържа една и съща скорост на локомотива. Ако локомотивът тръгне по-бързо, декодерът намалява напрежението на мотора за да се забави движението. И обратно.
Когато ги закачиш двата заедно какво става. Единият е малко по-бавен (колко малко, много малко ...?). Другият го подръпва или побутва да се движи леко по-бързо. Декодерът на по-бавния иска да му намали скоростта, намалява напрежението на моторчето. С по-бързия е обратно - другият го бави, декодерът му се мъчи да увеличи напражението за да си поддържа по-високата скорост и т.н. В крайна сметка по-бавничкият бръмчи колкото да си задвижи зъбчатките, а по-бързият поема всичко. Независимо кой е отпред и кой отзад.
Затова в декодерите има настройки скоростта да е "твърда" само за най-ниските скорости, а след това скоростта да не се поддържа съвсем постоянна, а да намалява при натоварване, за да може да се поемат такива разлики. А и при движение е по-истинско.
ПС: Сетих се - локомотивите обикновено не се чукат един в друг, при настигане просто се закачат и трябва да почваш отначало с настройките.
-
Проблемът е винаги когато двата локомотива имат разлика в скоростта, а това винаги е така. Декодерът се стреми да поддържа една и съща скорост на локомотива. Ако локомотивът тръгне по-бързо, декодерът намалява напрежението на мотора за да се забави движението. И обратно.
Когато ги закачиш двата заедно какво става. Единият е малко по-бавен (колко малко, много малко ...?). Другият го подръпва или побутва да се движи леко по-бързо. Декодерът на по-бавния иска да му намали скоростта, намалява напрежението на моторчето. С по-бързия е обратно - другият го бави, декодерът му се мъчи да увеличи напражението за да си поддържа по-високата скорост и т.н. В крайна сметка по-бавничкият бръмчи колкото да си задвижи зъбчатките, а по-бързият поема всичко. Независимо кой е отпред и кой отзад.
Затова в декодерите има настройки скоростта да е "твърда" само за най-ниските скорости, а след това скоростта да не се поддържа съвсем постоянна, а да намалява при натоварване, за да може да се поемат такива разлики. А и при движение е по-истинско.
Точно така! Затова писах, че е по-добре скоростта на локомотива да намалее при товар, т.е. когато тегли или бута влак. Тогава вторият локомотив ще поеме част от теглителното усилие на влака.
ПС: Сетих се - локомотивите обикновено не се чукат един в друг, при настигане просто се закачат и трябва да почваш отначало с настройките.
Това зависи от вида на тегличите и къде ще се срещнат. Тегличите за работа с кулиса в кривата не могат да се закачат. Така е и при тегличите на Каде, които в крива не могат да се закачат. Аз използвам вече само "къси" тегличи на Роко за европейските модели и Кадета за американските и когато локомотиви (или вагони) се срещнат в крива, става "манджа с грозде". ;D
Иван
-
...
За меренето на това кой локомотив колко тегли - ами той тегли точно толкова, колкото може :yes:.
Да кажем, че установим, че даден локомотивът не може да изтегли 15 4-осни пътнически вагона в хеликс
с наклон 5%. Какво правим тогава? Или сменяме локомотива с такъв, който може да ги изтегли на този участък
или намаляваме броя вагони или разваляме хеликса и го правим наново с наклон да речем 3% и/или с по-голям радиус.
Къде в цялата тази схема ще ни помогне тензометрията? Тя (тензометрията) няма да ни каже в кой хеликс кой локомотив
колко вагона може да изтегли. Вярно, може с тензометричен вагон да измерим усилието на куката от определена влакова
композиция на куката на локомотива в този хеликс, но най-лесно е да проверим опитно дали въпросният локомотив ще
изтегли въпросната композиция във въпросния хеликс.
Иван
Еее... то, когато някой локомотив закъса на хеликса, май освен че ще е късно, ще е ..."гадно", както на душата, така и на самият
лок, заради натоварващото изнасилване. Остава само да го връщаме на зад и...със зверска засилка да го изкачим!
(никога не съм го разбирал, защо някои моделистти въобще го правят!?).
Тук някои може и да подскочат, но е хубаво дори и без измервателни вагони (различните модели) да имаме все пак някакъв
реализъм! Не върви на маневрен триосен локомотив да "окачим" 15 четириосни вагона и да го подгоним по хеликса. А ако
искаме точно реализъм, не би трябвало модел на локомотив за равнинни трасета, въобще да го катерим по спиралата.
Спомням си подобен случай - БР 55 в ТТ от ПИКО, не само го пуснахме с пътническа (явно) тежка композиция по спиралата,
ами и дори го засилихме, като видяхме, че се задъхва. Може би в мерак да го качим поне веднъж де... :blush2:
То в конкретния случай, цялата композиция спря в средата между два етажа от спиралата, щото освен че не съобразихме,
за двигателчето на лока (този е в котела - тоест доста тънък/слаб двигател) ще е доста затруднено, въобще не пипахме
настройките на дешифратора, щото е звуков и си дойде с модела, на фабричните настройки. Абе въобще ...дори отворихме
максимално радиусите в хеликса (двойно трасе в спирала) и урегулирахме наклона вече с прецизност до милиметър
по височините на подпорите. Тоест нямахме "мерителен вагон" за улеснения в строежа на спиралата и мерихме
с рулетка при сглобяването (преди проблема). А за теглителните характеристики на лока, до тогава не се бяхме и сетили,
пък, че този модел не му е мястото в планината - съвсем!!! Мерак от новата покупка ни ослепи...тъпчовци сме си! :blush2:
Тоест за мен, вагон който мери теглителна сила си е необходим, при това точно толкова, колкото и да може да мери
наклоните и скоростта. Считам, че щом "се иска" моделна скорост, би трябвало да имаме и някакво реално замерване
както на моделни наклони, така и на теглителната сила. За мен това си е част от "гъдела" на хобито и
споделям лично мнение. Знам хора, които се отказаха от спирали, с думите "че нещо на чертеж,
не става точно като на практиката при сглобяването". Особено като не вземат пред вид, щото моделните реборди
оказват доста по-различно триене в кривите по хеликса!
...
Пацо,
Осредняване има. Вагонът прави определен брой измервания за наклоните по X, Y и Z
(да има и по Z-координатата - вертикалната ос на датчика/вагона), които сумира и изпраща по BT (Bluetooth),
както изпраща и броя измервания. Програмата и приложението правят самата сметка на осреднената стойност.
Без това осредняване показанията изглеждат хаотични, дори и когато датчикът не е във вагон, а лежи залепен
на работната ми маса. Това се дължи на голямата прецизност на датчика. Ако сте забелязали, наклоните се
показват с точност от 0,1 промили (на хиляда), както това обикновено става в българските железници. Това е
прекалено голяма прецизност, но понеже филтрирането се получи доста добро, реших да го оставя така.
Мисля че вагонът на Пико показва наклоните с разрешаваща способност 0,1%, т.е. 10 ПЪТИ по-малка прецизност.
...
Ами според мен осредняването трябва да е още по-добро от сегашното. То май от ПИКО именно за това са свалили 10 пъти
прецизността им. Така не само са "успокоили" показанията от датчика, но са ги направили използваеми за моделистта.
Не съм си "играл" с подобни датчици, но може би ако има и се ползват "по-грубо" мерещи, също ще е едно възможно решение.
Понякога твърде прецизираното замерване, само пречи на моделистите, докато ...учените примерно, търсят все по голяма точност!
А сега в "движение" се сещам и какво АЦП се ползва (стъпките му)!?
Но все си мисля, че основното решение е в софтуера (както ти си го направил) защото в практиката си редовно ползвам
смартфона с приложение за мерене на градуси по трите оси и точност именно 0,1 градус!!! Но самият смарт телефон,
макар и временно монтиран към доста груба метална конструкция, ми дава реални данни до толкова точно и с нормална
скорост за визуализация, че да се извърщва реална работа с гаечни ключове, почуквания с чук, въртене с двигатели и
дори следене освен движението по трите оси, и силата на сигнала от спътник на 38 000 км!!!
В крайна сметка за около 30 мин, получаваме направо перфектно настройване на сателитни антени.
А е перфектно, защото отклонение от 1 градус тук в антената, дава огромно значение за "намиране"
на цел отстояща на такива километри.
Та може би и в смартфоните има чисто софтуерно "смачкване" на количеството данни поне отправяни към дисплея,
за да показват спокойно въпросните отклонения от 0,1 градус, без да "полудяват" на екрана.
Е...то тук май става чрез осем ядрени процесори, докато ардуиното е къде, къде по слабо от към възможности!
Но пък както правиш осредняването на данните, може и да забавиш опресняването на индицирането им на дисплея.
Не знам дали чрез "цикъл в цикъл" като част от програмата или нищо подобно (аз съм хардуерист, с много бегли познания в софта).
Не знам дори дали правилно се израззявам...идеята е количеството данни индицирани към дисплея да се делят на десет
(примерно), тоест от десет подадени числа, диспея да показва само десетото. В хардуера му казваме
"скорост на опресняване" или тактова честота при динамични индикации. Уф,дано да си разбрал какво
се опитвам да кажа.
И да имаш желание още да "почовъркаш" (така де, няма само брат ти, да ти "пуска фитили" Я... :lol: )
:hi:
Искаше мнения - моето е това!
:yes: ;D ;D ;D
-
Пацо,
Благодаря за коментарите!
Хеликсите не се правят за имитиране на планински участъци, а за достъп до големи гари за складиране на влакове и за "скриване" за известно време на влаковете от видимата част на макета, чрез което се постига по-голяма реалистичност на движението. Тези гари са под това, което се вижда на макета и подходите към тях се правят с хеликси (спирали). Затова всички локомотиви, които вървят по макета с определени композиции, трябва да могат да изкачат хеликсите.
В момента на мен ми харесва меренето на наклона така, както съм го направил. Сравнявам работата му със скъпите купешки ъгломери, които имаме на работа и при мен резултатът е идентичен, като при тях. Макет нямам, за да мога да кажа дали ще върши работа там, на макет де. Както показах, брат ми също направи измервателен вагон с мерене на наклони, но и той няма макет.
Значи възможностите са няколко, две от които са:
1. Брат ми отива с измервателния вагон (и може би с някои други самоделни "джаджи") на някоя сбирка или в някой от клубовете, където има макет с баири и пуска вагона за проверка на баирите и най-вече да се види как точно ще се държи вагонът по отношение на меренето на наклоните.
2. Ти се хващаш да направиш вагон, експериментираш, правиш проби на сухо и на макети (ако имаш достъп до такива) и си казваш личното мнение и даваш конкретни съвети или пожелания. Иначе така може до безкрай да си коментираме без да стигнем до нещо конкретно. Аз без конкретно задание не мога да работя. Аз си човъркам, но в един момент трябва да спра да работя по даден проект и да го "запечатам", за да мога да работя и по други проекти. При нужда за промени го "отпечатвам" и правя нова версия (revision) и пак така, докато го "запечатам" отново.
Вторият вариант работи за всеки съфорумец. Публикувал съм всичко необходимо за направата на вагона, както и софтуера за индициране. Всичко е тествано и работи. Ако все пак някой срещне затруднения, готов съм да помагам дистанционно през форума.
Ако някой реши да прави измервателен вагон и не може да намери някои от модулите и частите (като например датчиците на хол, магнитите и акселерометрите), да пише тук. Брат ми може да има все още някоя и друга бройка от тях, а аз мога да му изпратя още. Останалите модули и батериите са налични в България - питайте и брат ми ще каже откъде е купувал неговите.
Понеже (Пацо) попита: АЦП-тата на акселерометрите са 12-битов за MMA8452Q и 16-битов за MPU-6050. Аз (демек програмата във вагона) чета всичките битове и натрупвам 600 и горница измервания, така че прецизността на измерването е по-висока от индицираната.
Между другото проверих как вагонът на Пико показва наклоните и е така, както писах по-горе - мери с прецизност 0,1% (1 на хиляда), или 10 пъти по-ниска от моя вагон. При нужда мога много лесно да променя прецизността на индициране на наклоните от програмата и приложението на 1 на хиляда, но както писах, засега не виждам такава нужда. Десетата на показанието винаги може да се игнорира в главата на гледащия екрана с показанието. :yes:
Иван
-
Абсолютно вярно!
Много благодаря, че споделяш тук с нас, опита натрупан с човъркането, както и метода за сглобяването
на измервателен вагон. Това което ни показваш тук е безценно! В крайна сметка аз така разбирам
съществуването на форумите - всеки който желае, показва стъпките и проблемите с които се е срещнал,
та следващите го, да не повторят проблемите му или да намерят решението им по-лесно.
За частите и т.н. също си много точен. Нямаш си на идея как ме сърбят ръцете, но в момента нямам
нито физическа възможност, нито мога да отделя необходимото време. Приоритет са ми много други задачи,
произлизащи от едновременно действие по капитални ремонти на две жилища.
Но със сигурност щом имам новата работилничка (а тя ще е финала на ремонтите) и свободно време,
ще се опитам да реализирам твоят измервателен вагон. Тъй като ти предостави и необходимият софтуер
(от който не разбирам) за него, ще се придържам плътно към съветите и насоките ти в темата.
За това и сега разсъждавам за евентуални допълнения и дори подобрения.
Сигурен съм, че каквито и проблеми да срещна, ще имам твоето съдействие, за което от сега съм ти благодарен.
Но дори тук темата само да я има - това е много за всеки моделист и винаги е едно добро начало в надграждането му.
:hi: :clapping: :clapping: bg&flag
-
Начертах "схемата" на захранването, което използвам в измервателните вагони и индикацията на скоростта с ATMega328P:
(https://cankov.com/modelrailroad/meascar/power_sch.png)
Схемата е с леки "вариации" в зависимост дали има конектор между ключа за захранването и модула, който конектор не е начертан на горната схема. От друга страна USB конекторът е на платката на модула, който съм означил като IC1. Означих USB конектора отделно за яснота, тъй като все още имам и друга идея, при която такъв конектор за зареждане на батерията няма да има. Все още не съм изпробвал тази идея напълно и ще я публикувам, ако излезе успешна.
Иван
-
Работи-и-и-и-и-и........ УРА!!! :yahoo: :dance1: :yahoo:
Както писах преди, тази идея ми се въртеше в главата от самото начало - да захраня вагона директно от релсите. Идеята как да го направя ми дойде преди време и я проверих на бюрото, използвайки "лабораторен" токоизправител, но все пак имах съмнения как ще се държи при краткотрайно отпадане на захранването от релсите. Оказа се, че тези модули се справят добре. Ето я и схемата:
(https://cankov.com/modelrailroad/meascar/power+_sch.png)
Първият модул, означен с IC1 е да свали напрежението след Греца до 5 волта за нормалната работа на втория модул - IC2. Модулите IC2 и IC3 са идентични и са за USB батерия - за зареждане на 1 клетка Li-Ion батерия от 5V, пристигащо от USB конектор и да качи напрежението от батерията до 5V на другия USB конектор. Всъщност двата USB конектора са запаралелени и на практика модулът има три извода: +5V, маса/батерия- и батерия+. За тази схема махнах USB конекторите от модулите, защото заемат много място.
При налично напрежение от релсите, то се изправя от Греца B1, филтрира от кондензатора C1 и сваля до 5V от модула IC1. На изхода на IC1 има отново филтриращ кондензатор C2 и през диода D1, напрежението се подава на модула IC2, който зарежда батерията. Ако няма напрежение на релсите, батерията не се зарежда. Диодът D1 служи да предотварти подаването на напрежение от батерията към модула IC1, за да не може последният да разрежда батерията, защото в покой напрежението на батерията се подава на изхода на модула IC2.
От батерията напрежението през ключа SW1 постъпва на модула IC3, който го качва и стабилизира на 5V, откъдето се подава на останалата схема на вагона. По този начин, схемата на вагона работи единствено от батерията, независимо дали тя се зарежда (постъпва захранване от релсите) или не и така се избягват нежелани рестартирания на измервателните модули на вагона.
Ключът за захранването е между батерията и модула IC3, за да не може последният да разрежда допълнително батерията. Разрядният ток на модула при липса на товар на изхода на модула е няколко микроампера и макар и малък, непрекъснато разрежда батерията. Стига, че един модул (IC2) разрежда батерията в покой, няма нужда и друг (IC3) да я разрежда без нужда.
При събиране на схемата имах проблем с модула IC1. На тестовата схема работеше без проблеми, докато на платката на вагона се държеше странно. След двукратно разпояване и тестване, при което работеше без проблеми, ме "светна", че на тестовата схема използвам електролитен кондензатор на изхода на модула (C2), а на платката на вагона бях запоил танталов кондензатор със същата стойност. Смених кондензатора с електролитен и всичко тръгна както трябва. Не ми е съвсем ясно защо чипът на модула не харесва танталовия кондензатор. Четох дейташийта на чипа, но в него нищо не казват за изходния кондензатор.
Токоснемането:
(https://cankov.com/modelrailroad/meascar/meascar0401.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0402.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0403.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0404.jpg)
Ключът за захранването:
(https://cankov.com/modelrailroad/meascar/meascar0405.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0406.jpg)
Датчикът на Хол:
(https://cankov.com/modelrailroad/meascar/meascar0407.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0408.jpg)
Основната платка на вагона, на която са запоени модулите (процесорът и Bluetooth модулите са на конектори):
(https://cankov.com/modelrailroad/meascar/meascar0409.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0410.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0411.jpg)
Завършеното вагонче:
(https://cankov.com/modelrailroad/meascar/meascar0412.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0413.jpg)
Вагончето е на Пико 58765, евтиничко от Хоби серията - като на брат ми, но с друга "боя"... по-скоро почти няма боя, поради което прозира доста и на изкуствена светлина се виждат светлините на модулите, което не е лошо, защото вагонът си е за проба на схемата и така виждам кой модул какво точно прави.
Иван
-
Попадна ми още едно моделе на измервателен вагон на DB тип "щука", жълто на цвят, като "Измервателен вагон 1", с който започнах темата. При него приложих схемата на захранване от релсите, идентична с тази на "Измервателен вагон 4", на който съм сбъркал заглавието и съм го кръстил "Измервателен вагон номер 3 - захранване от релсите" по-горе.
Премахнати стени в салона за акумулатора и Ардуино и Blootooth модулите:
(https://cankov.com/modelrailroad/meascar/meascar0501.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0502.jpg)
Монтиране на датчика на Хол на едната от талигите:
(https://cankov.com/modelrailroad/meascar/meascar0503.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0504.jpg)
Монтиране на токоснемащи пластини:
(https://cankov.com/modelrailroad/meascar/meascar0505.jpg)
Платка за осветлението:
(https://cankov.com/modelrailroad/meascar/meascar0506.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0509.jpg)
От горната страна на платката за осветлението са монтирани преобразувателят на напрежение от изправеното от релсите напрежение до 5V, нужно на модула за заряд на акумулаторната батерия и модулът на акселерометъра.
Модулите за заряд на акумулатора и формиране на 5V захранване от акумулатора, леко скъсени, за да се съберат в едно купе:
(https://cankov.com/modelrailroad/meascar/meascar0507.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0508.jpg)
Модулите на захранването, монтирани към платката за осветлението:
(https://cankov.com/modelrailroad/meascar/meascar0510.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0511.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0512.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0513.jpg)
Платката за монтиране на Ардуино и Bluetooth модулите, на която се намира и ключето за захранване на модулите:
(https://cankov.com/modelrailroad/meascar/meascar0514.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0515.jpg)
Монтиране на талигите:
(https://cankov.com/modelrailroad/meascar/meascar0517.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0518.jpg)
В тежестта на вагона съм направил изрез за ключето за захранване, а от горната й страна съм залепил парченце кече, което подпира платката за Ардуино и Bluetooth модулите:
(https://cankov.com/modelrailroad/meascar/meascar0519.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0520.jpg)
От долната страна на оборудването на салона на вагона направих каналчета за проводниците от талигите:
(https://cankov.com/modelrailroad/meascar/meascar0521.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0522.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0523.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0524.jpg)
Проводници, запоени към Ардуиното за свързване на модула на акселерометъра по I2C интерфейс:
(https://cankov.com/modelrailroad/meascar/meascar0525.jpg)
Модулите и акумулаторната батерия, монтирани по местата си; на прозорците на купетата, в които се намират те, за да не се виждат, съм поставил бели бленди от тънка пластмаса:
(https://cankov.com/modelrailroad/meascar/meascar0526.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0527.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0528.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0529.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0530.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0531.jpg)
Платката на осветлението, монтирана на мястото си и всичко опроводено към нея:
(https://cankov.com/modelrailroad/meascar/meascar0532.jpg)
Завършеният вагон:
(https://cankov.com/modelrailroad/meascar/meascar0533.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0534.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0535.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0536.jpg)
Иван
-
Ай..... :wacko: :swoon: :swoon: :swoon:
Не стига, че е измервателен вагон...но и с осветление!!!
:clapping: :hi: :clapping: :hi:
-
Ай..... :wacko: :swoon: :swoon: :swoon:
Не стига, че е измервателен вагон...но и с осветление!!!
:clapping: :hi: :clapping: :hi:
Инженерите по измерването няма да седят на тъмно, я!
:yes:
Иван
-
:lol: :lol: :lol: :hi:
Не се бях сетил... bg&flag
-
Последния път като реших да използвам измервателен вагон номер 3, се оказа, че батерията му е разредена. Взех измервателен вагон номер 2 - и неговата батерия беше разредена. Реших да ги преработя на захранване от релсите. Ето преработката на измервателен вагон номер 3:
(https://cankov.com/modelrailroad/meascar/meascar0351.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0352.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0353.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0354.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0355.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0356.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0357.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0358.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0359.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0360.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0361.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0362.jpg)
(https://cankov.com/modelrailroad/meascar/meascar0363.jpg)
Иван