RailwayPassion.com - Форум за железопътен моделизъм

Електроника и Електротехника | Electronics and Electrical Engineering => Цифрово / дигитално управление | Digital Command Control => Темата е започната от: IvanC в 02 Април 2022, 22:18:06

Титла: Измервателен вагон
Публикувано от: 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.

За тези програми - по-нататък.

Иван
Титла: Измервателен вагон номер 1
Публикувано от: IvanC в 02 Април 2022, 23:11:02
Това са снимки от направата на първия измервателен вагон. В него няма акселерометър. Акселерометър монтирах в измервателен вагон номер 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
Публикувано от: IvanC в 03 Април 2022, 00:16:28
Измервателен вагон номер 2 е с литиево йонна акумулаторна батерия във вагона. Както писах в първото мнение в темата, използвам USB преобразувател за зареждането на акумулатора и за формиране на стабилизирано напрежение 5V за измервателната схема.

За съжаление не можах да намеря снимки от монтирането на модулите във вагона, но намерих клип, който съм качил на Тубата, където този измервателен вагон е в състава на влака за "товарната проба" на шасито за БДЖ 46 ("баба Меца") - вагонът на опашката на влака. Виждат се светлините на процесорната платка и на блутута (червени):

https://youtu.be/h9K--d2HZIs

Принципно схемата на захранването е идентична с тази на измервателен вагон номер 3, снимки на който ще пусна в следващото мнение. Монтажът на датчика на Хол пък е идентичен с този на измервателен вагон номер 1. Акселерометър няма.

USB конекторът и ключето за захранването са на дъното на вагона - както при измервателен вагон номер 3.

Иван
Титла: Re: Измервателен вагон
Публикувано от: pach в 03 Април 2022, 12:49:48
Страхотно! Цяла сутрин чета, гледам и препрочитам! С нетърпение очаквам третия вагон и останалите подробности!
Тази тема, ще си я направя в  поредния PDF-файл, за папката от "Иван и Владо С" на компа ми! Благодаря момчета!
 :hi: :hi: :hi:
Титла: Измервателен вагон номер 3
Публикувано от: IvanC в 03 Април 2022, 23:23:05
Този вагон направих преди да добавя акселерометър към програмата и вагона. Мислех си, че съм направил снимки след добавянето на акселерометъра, но такива не намерих. Затова в края на мнението ще обясня накратко с думи как го монтирах. Свързването му е показано на схемата в първото мнение в темата.

Вагонът е на Пико, номер 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

Иван
Титла: Измервателен вагон ВЦ номер 2
Публикувано от: IvanC в 03 Април 2022, 23:50:23
В предните мнения показах измервателните вагони, направени от мен. В това мнение пускам снимките на втория измервателен вагон направен от брат ми Владо (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 - акселерометър
Публикувано от: IvanC в 04 Април 2022, 04:32:53
Разглобих моя измервателен вагон 3, за да направя снимки на монтирания акселерометър. Бях забравил какъв кошмар е да се разглоби и после да се сглоби. При разглобяването имам чувството, че всички щипки се чупят, а при сглобяването, двете кулиси и техните пружинки изпадат при най-малкото сътресение, а две ръце не стигат да крепят двете кулиси на място и да сглобяват останалите части. Както и да е, с малко гресчица на пружинките на кулисите и много "сладки" думи казани на ум (за да не чуе жената и да се чуди защо си псувам сам...!) успях да сглобя обратно вагона успешно и без щети.

(https://cankov.com/modelrailroad/meascar/meascar0328.jpg)

(https://cankov.com/modelrailroad/meascar/meascar0329.jpg)

(https://cankov.com/modelrailroad/meascar/meascar0330.jpg)

Иван
Титла: Измервателен вагон - програма за вагона
Публикувано от: IvanC в 05 Април 2022, 02:27:52
Ето кода на програмата за Ардуиното във вагона:

#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
Публикувано от: IvanC в 05 Април 2022, 03:32:36
Използваният 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. Аз лично предпочитам да използвам самоделната индикация.

Иван
Титла: Измервателен вагон - Bluetooth приемник с индикация
Публикувано от: IvanC в 07 Април 2022, 21:42:10
Приемникът на информацията от измервателния вагон е също базиран на Ардуино Про-мини и 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 - с или без кавички.
Няма нужда да се променя името на модула, защото модулът на индикацията няма да се свързва с компютър или Андроид устройство.

Иван
Титла: Измервателен вагон - Bluetooth приемник с индикация
Публикувано от: IvanC в 08 Април 2022, 04:31:16
(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)

И двете ги печатам с лицето надолу, като на основата включвам печатането на подпори, за да се получат сравнително добри вътрешни повърхности.

Иван
Титла: Bluetooth приемник с индикация - програма
Публикувано от: IvanC в 08 Април 2022, 05:05:35
Програмата на Ардуиното за индициране на скоростта и изминатия път:

#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" в работната папка на Ардуино средата - където са по подразбиране програмите за Ардуино.


Иван
Титла: Измервателен вагон - Bluetooth приемник с индикация
Публикувано от: IvanC в 08 Април 2022, 05:24:50
При включване на захранването на скоростомера, на екрана за кратко се изписва информация за програмата:

(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 приложение за мобилен телефон или таблет
Публикувано от: IvanC в 12 Април 2022, 05:35:12
Както писах в първото мнение в тази тема, вторият метод за индициране на данните от измервателния вагон е с 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. Когато завърши и вторият етап от калибрирането, приложението се връща в изходно положение.

Калибрирането на датчика за наклона (акселерометъра) става в приложението, а не във вагона. Затова е важно калибрирането да се направи за всяко използвано приложение (в различни Андроид устройства). Така направеното калибриране е също специфично за вагона, с който е направено. Ако трябва да използваме друг измервателен вагон с акселерометър, трябва наново да калибрираме и предишното калибриране се губи.

Иван
Титла: Re: Измервателен вагон
Публикувано от: Ivo Nedkov в 13 Април 2022, 07:31:16
 :hi: Свалям ти шапка за този проект.
Много оригинална идея и реализация: вагон + скоростомер + мобилно приложение.
Благодаря за подробното описание и многото снимки.
За да реализираш подобен проект трябва да имаш доста познания в различни области:
моделиране, електроника, програмиране и др.
Поздравявам те за успешната работа!

Титла: Re: Измервателен вагон
Публикувано от: IvanC в 14 Април 2022, 05:28:29
Третият метод за индициране на данните от измервателния вагон е с програма за 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 порт, с който е работил и при следващо стартиране автоматично се опитва да се свърже с измервателен вагон по този порт. Ако не открие измервателен вагон на този порт или ако портът не е активен, програмата автоматично минава в демонстрационен режим.

Иван
Титла: Измервателен вагон - програма и приложение
Публикувано от: IvanC в 14 Април 2022, 19:21:42
Приложението за Андроид и програмата за Windows работят и без измервателен вагон, както вече писах в горните мнения - в демонстрационен режим. Затова ако искате да си поиграете с тях, може да си ги свалите и инсталирате.

И програмата, и приложението имат в името си думата "плюс" или знака "+". Това е, за да ги разгранича (най-вече за себе си) от версиите без "плюс", които написах първоначално преди да добавя акселерометър (датчика за наклон) във вагона. "Не плюс" програмата и приложение не работят коректно с вагон с акселерометър, докато обратното работи - "плюс" програма/приложение работи коректно с вагон без акселерометър, но с кода за вагона, който съм публикувал в тази тема.

Вагонът, програмата и приложението, публикувани тук не са съвместими с други измервателни вагони и програми/приложения. Тези "други", за които знам са измервателния вагон на Пико и приложението Messwagen на германеца от Щумифорума. Може да има (и сигурно има) и други такива, за които не съм чувал.

Иван
Титла: Re: Измервателен вагон
Публикувано от: pach в 14 Април 2022, 19:59:13
Ах, изкефи ме с "прозорко"!!!
Значи "темата става социална, значи филма ще го дават и у нас!" (един стар виц на Шкумбата)
Може би ще се опитам да го реализирам, съгласно твоята тема.
Ако стане, ще се опитам да го допълня и с "кантар" за теглителна сила на модел, закачен да тегли вагона...
Тоест вагона да мери на свойта задна кука, тежеста която може да теглят различните локомотиви...
Нещо подобно беше реализирал тук Митко (888) но като самостоятелно измерване с дисплей на самия вагон.
Мисля че беше ползвал мерителна лъжица с електронен датчик
(кантарче в лъжица). Даже някъде и аз си купих такава лъжица
(ама с тия ремонти дори нямам на идея къде е в момента).

А може би, ти си мислил да включиш на по-късен етап (като акселерометъра) съответния датчик (Ардуиното има доста датчици за периферия),
като доразшириш през софтуера и за такива възможни измервания. Някога имаше дори стандарт
по NEM (може би ооще е валиден), по който се мереше теглителната сила на моделите.
Сега май слагат гумени бандажи за застраховка и...така стандарта може да е отпаднал вече (не съм проверявал).
То и в книгата на Юр.Ботев имаше дори елементарна скица с отвес и тежести на него... като
резултата се получаваше съгласно тежестта и времето за преминаване на 1 метър от трасето,
по което даден локомотив тегли този отвес ... Не си спомням как се третираше приплъзването при потегляне и т.н.
 Та така!

Имам питане.
На показанията за "У"  има възможност (явно) и за отрицателни показания.
При условие, че това е напречната координата, значи така може да мери и неправилно полагане
на трасето (кривини като по американските "житни" трасета) или например, постигането на
желания вътрешен наклон в криви при скоростни трасета (наклон към центъра на завоя, заради скоростта в кривата).
Тоест дали може и за това да върши работа?
Титла: Re: Измервателен вагон
Публикувано от: IvanC в 14 Април 2022, 22:21:23
Показанията за наклона са със знак + или - в зависимост от посоката на наклона. Това важи и за двете оси. Оста Y е напречната на вагона, т.е. мери страничния наклон на вагона. ОБАЧЕ!!!... поради сравнително грубото окачване на нашите вагони, този наклон може да е с голяма грешка. Нали разбираш, че когато "лагеруването" е конус в конус с "някаква" хлабина, как точно ще легне оста в "буксите" е божа работа.

Показанията за наклона са валидни само когато вагонът е в покой. Движението никога не е равномерно и поради чувствителността на датчика, в движение показанието варира в големи граници. Дори след установяване на вагона на място, показанията варират в сравнително голяма степен за около 3-5-7 секунди, в зависимост от това колко рязко е спрял вагона.

Това за динамометъра си го мислех, но аз съм по простичките работи и засега не виждам някаква реална полза от подобно нещо. Иначе би било интересна заигравка, но само до там. За мен и меренето на наклона си е изгъзица, но го направих по заявка на брат ми (той все ми пуска мухите - такъв си е още откакто бях малък и минавах прав под масата  ::) ), както и бутоните за нулиране са по негова заявка. За мен е интересно да човъркам нещо с поялника и да пиша програмки. Аз не ползвам показанията за наклона и нулирането. Иначе идеята за наклоните е да се проверяват съответните по макетите - баири и виражи.

Иван
Титла: Re: Измервателен вагон
Публикувано от: mitko0888 в 15 Април 2022, 07:23:43
Да си дойдем на думата ... Цитирам се отпреди 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 и цял модул - прецизен уселвател с АЦП за директно свързане към ардуино (или каквото искате) - с гугъл веднага ще намерите линкове. Нужно е само монтиране с четири винтчета - две за вагона и две за шахтата на куплунга.
Титла: Re: Измервателен вагон
Публикувано от: pach в 15 Април 2022, 14:21:30
Лъжицата е за самостоятелна Джиджавка!

За "по-така" уред и "син зъб" си иска датчик
с възможност за комуникация към ардуиното.
Нещо като това дето говориш!

Иначе си е точно заигравка с поялника и софта!
Но пък ако се направи усредняване (изчисляване)
на брой показания в единица време, може да се
"успокоят" крайните показания и така да се мери,
както наклона в макета, така и страничния такъв в трасетата.

А ако се остави опция, да се променя единицата време,
като част от текущата скорост , може да се подобри
и замерването в даден участък, с ниска скорост!
За още по-добра прецизност (дори при движение на ръка)!

Ей, така - мисли на глас, като част от заигравка та!
Впрочем и бутоните за нулиране са добро допълнение!
 ;)
Титла: Re: Измервателен вагон
Публикувано от: pach в 15 Април 2022, 17:56:03
То и аз се "заиграх" с горе изложеното...
Ами ако се/и сложи/м колооси с прави шийки и така избегнем
"конус в конус с хлабина", дали няма рязко да се подобрят показателите?
То и самите шийки с по един лагер 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:
Титла: Измервателен вагон - теглително усилие
Публикувано от: IvanC в 15 Април 2022, 21:24:51
Цитат на: pach link=topic=5564.msg123495#msg123495 date=1650034563
. . .

Надявам се да не съм "размазал"  темата на Иван!? :blush2:

Напротив, радвам се че има дискусия!


Митко,

Според мен няма нужда от тензометрия за настройване на декодери на локомотиви, за да вървят заедно в състав (consist). Спокойно става с вагон, мерещ скоростта. Трябва скоростите на двата (трите и т.н.) локомотива, които ще са в състав да са еднакви за еднакви положения на тротъла. Няма нужда да се прави за всяко положение на тротъла, а през 2-3. Единственият товар на локомотива е измервателния вагон. Не искам да навлизам тук в детайли и подробности как става това и защо работи, тъй като е друга тема.

За меренето на това кой локомотив колко тегли - ами той тегли точно толкова, колкото може  :yes:. Да кажем, че установим, че даден локомотивът не може да изтегли 15 4-осни пътнически вагона в хеликс с наклон 5%. Какво правим тогава? Или сменяме локомотива с такъв, който може да ги изтегли на този участък или намаляваме броя вагони или разваляме хеликса и го правим наново с наклон да речем 3% и/или с по-голям радиус. Къде в цялата тази схема ще ни помогне тензометрията? Тя (тензометрията) няма да ни каже в кой хеликс кой локомотив колко вагона може да изтегли. Вярно, може с тензометричен вагон да измерим усилието на куката от определена влакова композиция на куката на локомотива в този хеликс, но най-лесно е да проверим опитно дали въпросният локомотив ще изтегли въпросната композиция във въпросния хеликс.

Горното са мои мисли и в никакъв случай не искам дискусията да приключи с тях. Бих бил много благодарен ако Митко и други, които са на различно от моето мнение да дадат конкретни (или дори хипотетични) примери, в които биха използвали тензометричен (динамометричен) вагон и как точно се използва показанието на теглителната сила.

Иван
Титла: Измервателен вагон - измерване на наклони
Публикувано от: IvanC в 15 Април 2022, 21:50:47
Цитат на: pach link=topic=5564.msg123493#msg123493 date=1650021690
. . .

Но пък ако се направи усредняване (изчисляване)
на брой показания в единица време, може да се
"успокоят" крайните показания и така да се мери,
както наклона в макета, така и страничния такъв в трасетата.

. . .

Пацо,

Осредняване има. Вагонът прави определен брой измервания за наклоните по X, Y и Z (да има и по Z-координатата - вертикалната ос на датчика/вагона), които сумира и изпраща по BT (Bluetooth), както изпраща и броя измервания. Програмата и приложението правят самата сметка на осреднената стойност. Без това осредняване показанията изглеждат хаотични, дори и когато датчикът не е във вагон, а лежи залепен на работната ми маса. Това се дължи на голямата прецизност на датчика. Ако сте забелязали, наклоните се показват с точност от 0,1 промили (на хиляда), както това обикновено става в българските железници. Това е прекалено голяма прецизност, но понеже филтрирането се получи доста добро, реших да го оставя така. Мисля че вагонът на Пико показва наклоните с разрешаваща способност 0,1%, т.е. 10 ПЪТИ по-малка прецизност.

В програмата на вагона има един ред

const long maxSamples           = 610;            // accelerometer number of samples

където се задава броя измервания, преди сумираните стойности за наклоните да се изпратят по серийния интерфейс към BT. Който желае може да експериментира с тази стойност.

Що се отнася до меренето в движение - просто забрави! Правих експеримент с един от крановете на работа - това са кранове с товароподемност до 70 тона, монтирани на шаси на камион. Имаме цифрови нивелири, които мерят с прецизност от 0,1°, като сложих един такъв на крана. При нивелирането на крана, показанието на нивелира се мени "както си иска", а след преустановяване на командата е нужно да минат около 5 секунди, за да се стабилизира показанието на нивелира. Затова прецених, че осредняването, което съм направил е достатъчно и няма нужда да се мъча да правя допълнително филтриране за мерене в движение.

Иван
Титла: Re: Измервателен вагон - теглително усилие
Публикувано от: mitko0888 в 15 Април 2022, 22:10:41
Цитат на: IvanC link=topic=5564.msg123497#msg123497 date=1650047091
... Спокойно става с вагон, мерещ скоростта. Трябва скоростите на двата (трите и т.н.) локомотива, които ще са в състав да са еднакви за еднакви положения на тротъла. Няма нужда да се прави за всяко положение на тротъла, а през 2-3. ...

Може и въобще да не им мериш скоростта. Просто ги пускаш да обикалят заедно на една педя разстояние един от друг, и гледаш дали се приближават или раздалечават. На колкото скорости искаш. Ама като закачиш вагоните какво става - не е ясно колкото и да са еднакви скоростите.
Пък и това мерене нали се прави не защото трябва да се мери ... Влакчетата си вървят и без да ги мерим, ама с измерител си е друго.
Титла: Re: Измервателен вагон - теглително усилие
Публикувано от: IvanC в 15 Април 2022, 23:10:26
Цитат на: mitko0888 link=topic=5564.msg123499#msg123499 date=1650049841
Може и въобще да не им мериш скоростта. Просто ги пускаш да обикалят заедно на една педя разстояние един от друг, и гледаш дали се приближават или раздалечават. На колкото скорости искаш. Ама като закачиш вагоните какво става - не е ясно колкото и да са еднакви скоростите.
Пък и това мерене нали се прави не защото трябва да се мери ... Влакчетата си вървят и без да ги мерим, ама с измерител си е друго.

Може и на една педя един от друг, но трябва да се внимава повече при промяна на CV-тата в таблицата за скоростта, за да не се чукнат един в друг. Поотделно с измервателен вагон става по-лесно.

Да кажем, че сме настроили локомотивите един по един без товар (освен може би измервателен вагон). Закачаме единия локомотов към влака, а втория слагаме "на една педя" пред влаковия локомотив. Подкарваме ги заедно. Ако декодерите са с добра регулация по индуцирано ЕДН, скоростта на влаковия локомотив или ще се промени много малко или въобще няма да се промени (това е от личен опит). Всъщност е по-добре, ако скоростта на влака намалее. Тогава като закачим втория локомотив, той винаги ще допринесе с теглителната си сила към тази на първия локомотив, т.е. на първия (влаковия) локомотив няма да му се налага освен да тегли влака, но и да бута втория локомотив или ако сме закачили втория локомотив на опашката, да тегли и него.

Проблемът би съществувал, ако локомотивът, теглещ влака (т.е. влаковият локомотив), се движи по-бързо от втория локомотив. Тогава вторият локомотив ще е допълнителен товар на влаковия. Но именно затова трябва двата (или повече) локомотива да са настроени да се движат без товар с (приблизително) еднакви скорости на едни и същи позиции на тротъла.

Иван
Титла: Re: Измервателен вагон
Публикувано от: mitko0888 в 16 Април 2022, 08:53:42
Проблемът е винаги когато двата локомотива имат разлика в скоростта, а това винаги е така. Декодерът се стреми да поддържа една и съща скорост на локомотива. Ако локомотивът тръгне по-бързо, декодерът намалява напрежението на мотора за да се забави движението. И обратно.
Когато ги закачиш двата заедно какво става. Единият е малко по-бавен (колко малко, много малко ...?). Другият го подръпва или побутва да се движи леко по-бързо. Декодерът на по-бавния иска да му намали скоростта, намалява напрежението на моторчето. С по-бързия е обратно - другият го бави, декодерът му се мъчи да увеличи напражението за да си поддържа по-високата скорост и т.н. В крайна сметка по-бавничкият бръмчи колкото да си задвижи зъбчатките, а по-бързият поема всичко. Независимо кой е отпред и кой отзад.
Затова в декодерите има настройки скоростта да е "твърда" само за най-ниските скорости, а след това скоростта да не се поддържа съвсем постоянна, а да намалява при натоварване, за да може да се поемат такива разлики. А и при движение е по-истинско.
ПС: Сетих се - локомотивите обикновено не се чукат един в друг, при настигане просто се закачат и трябва да почваш отначало с настройките.
Титла: Измервателен вагон
Публикувано от: IvanC в 16 Април 2022, 18:01:50
Цитат на: mitko0888 link=topic=5564.msg123502#msg123502 date=1650088422
Проблемът е винаги когато двата локомотива имат разлика в скоростта, а това винаги е така. Декодерът се стреми да поддържа една и съща скорост на локомотива. Ако локомотивът тръгне по-бързо, декодерът намалява напрежението на мотора за да се забави движението. И обратно.
Когато ги закачиш двата заедно какво става. Единият е малко по-бавен (колко малко, много малко ...?). Другият го подръпва или побутва да се движи леко по-бързо. Декодерът на по-бавния иска да му намали скоростта, намалява напрежението на моторчето. С по-бързия е обратно - другият го бави, декодерът му се мъчи да увеличи напражението за да си поддържа по-високата скорост и т.н. В крайна сметка по-бавничкият бръмчи колкото да си задвижи зъбчатките, а по-бързият поема всичко. Независимо кой е отпред и кой отзад.
Затова в декодерите има настройки скоростта да е "твърда" само за най-ниските скорости, а след това скоростта да не се поддържа съвсем постоянна, а да намалява при натоварване, за да може да се поемат такива разлики. А и при движение е по-истинско.

Точно така! Затова писах, че е по-добре скоростта на локомотива да намалее при товар, т.е. когато тегли или бута влак. Тогава вторият локомотив ще поеме част от теглителното усилие на влака.


Цитат
ПС: Сетих се - локомотивите обикновено не се чукат един в друг, при настигане просто се закачат и трябва да почваш отначало с настройките.

Това зависи от вида на тегличите и къде ще се срещнат. Тегличите за работа с кулиса в кривата не могат да се закачат. Така е и при тегличите на Каде, които в крива не могат да се закачат. Аз използвам вече само "къси" тегличи на Роко за европейските модели и Кадета за американските и когато локомотиви (или вагони) се срещнат в крива, става "манджа с грозде".   ;D

Иван
Титла: Re: Измервателен вагон
Публикувано от: pach в 16 Април 2022, 20:25:35
Цитат на: IvanC link=topic=5564.msg123497#msg123497 date=1650047091
...
За меренето на това кой локомотив колко тегли - ами той тегли точно толкова, колкото може  :yes:.
Да кажем, че установим, че даден локомотивът не може да изтегли 15 4-осни пътнически вагона в хеликс
с наклон 5%. Какво правим тогава? Или сменяме локомотива с такъв, който може да ги изтегли на този участък
или намаляваме броя вагони или разваляме хеликса и го правим наново с наклон да речем 3% и/или с по-голям радиус.
Къде в цялата тази схема ще ни помогне тензометрията? Тя (тензометрията) няма да ни каже в кой хеликс кой локомотив
колко вагона може да изтегли. Вярно, може с тензометричен вагон да измерим усилието на куката от определена влакова
композиция на куката на локомотива в този хеликс, но най-лесно е да проверим опитно дали въпросният локомотив ще
 изтегли въпросната композиция във въпросния хеликс.

Иван

Еее... то, когато някой локомотив закъса на хеликса, май освен че ще е късно, ще е ..."гадно", както на душата, така и на самият
лок, заради натоварващото изнасилване. Остава само да го връщаме на зад и...със зверска засилка да го изкачим!
(никога не съм го разбирал, защо някои моделистти въобще го правят!?).
Тук някои може и да подскочат, но е хубаво дори и без измервателни вагони (различните модели) да имаме все пак някакъв
реализъм! Не върви на маневрен триосен локомотив да "окачим" 15 четириосни вагона и да го подгоним по хеликса.  А ако
искаме точно реализъм, не би трябвало модел на локомотив за равнинни трасета, въобще да го катерим по спиралата.
Спомням си подобен случай - БР 55 в ТТ от ПИКО, не само го пуснахме с пътническа (явно) тежка композиция по спиралата,
ами и дори го засилихме, като видяхме, че се задъхва. Може би в мерак да го качим поне веднъж де... :blush2:
То в конкретния случай, цялата композиция спря в средата между два етажа от спиралата, щото освен че не съобразихме,
за двигателчето на лока (този е в котела - тоест доста тънък/слаб двигател) ще е доста затруднено, въобще не пипахме
настройките на дешифратора, щото е звуков и си дойде с модела, на фабричните настройки. Абе въобще ...дори отворихме
 максимално радиусите в хеликса (двойно трасе в спирала) и урегулирахме наклона вече с прецизност  до милиметър
по височините на подпорите. Тоест нямахме "мерителен вагон" за улеснения в строежа на спиралата и мерихме
с рулетка при сглобяването (преди проблема). А за теглителните характеристики на лока, до тогава не се бяхме и сетили,
пък, че този модел не му е мястото в планината - съвсем!!! Мерак от новата покупка ни ослепи...тъпчовци сме си! :blush2:

Тоест за мен, вагон който мери теглителна сила си е необходим, при това точно толкова, колкото и да може да мери
наклоните и скоростта. Считам, че щом "се иска" моделна скорост, би трябвало да имаме и някакво реално замерване
както на моделни наклони, така и на теглителната сила. За мен това си е част от "гъдела" на хобито и
споделям лично мнение.  Знам хора, които се отказаха от спирали, с думите "че нещо на чертеж,
 не става точно  като на практиката при сглобяването". Особено като не вземат пред вид, щото моделните реборди
оказват доста по-различно триене в кривите по хеликса!

Цитат на: IvanC link=topic=5564.msg123498#msg123498 date=1650048647
...
Пацо,
Осредняване има. Вагонът прави определен брой измервания за наклоните по 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
Титла: Re: Измервателен вагон
Публикувано от: IvanC в 17 Април 2022, 04:01:51
Пацо,

Благодаря за коментарите!

Хеликсите не се правят за имитиране на планински участъци, а за достъп до големи гари за складиране на влакове и за "скриване" за известно време на влаковете от видимата част на макета, чрез което се постига по-голяма реалистичност на движението. Тези гари са под това, което се вижда на макета и подходите към тях се правят с хеликси (спирали). Затова всички локомотиви, които вървят по макета с определени композиции, трябва да могат да изкачат хеликсите.

В момента на мен ми харесва меренето на наклона така, както съм го направил. Сравнявам работата му със скъпите купешки ъгломери, които имаме на работа и при мен резултатът е идентичен, като при тях. Макет нямам, за да мога да кажа дали ще върши работа там, на макет де. Както показах, брат ми също направи измервателен вагон с мерене на наклони, но и той няма макет.

Значи възможностите са няколко, две от които са:

1. Брат ми отива с измервателния вагон (и може би с някои други самоделни "джаджи") на някоя сбирка или в някой от клубовете, където има макет с баири и пуска вагона за проверка на баирите и най-вече да се види как точно ще се държи вагонът по отношение на меренето на наклоните.

2. Ти се хващаш да направиш вагон, експериментираш, правиш проби на сухо и на макети (ако имаш достъп до такива) и си казваш личното мнение и даваш конкретни съвети или пожелания. Иначе така може до безкрай да си коментираме без да стигнем до нещо конкретно. Аз без конкретно задание не мога да работя. Аз си човъркам, но в един момент трябва да спра да работя по даден проект и да го "запечатам", за да мога да работя и по други проекти. При нужда за промени го "отпечатвам" и правя нова версия (revision) и пак така, докато го "запечатам" отново.

Вторият вариант работи за всеки съфорумец. Публикувал съм всичко необходимо за направата на вагона, както и софтуера за индициране. Всичко е тествано и работи. Ако все пак някой срещне затруднения, готов съм да помагам дистанционно през форума.

Ако някой реши да прави измервателен вагон и не може да намери някои от модулите и частите (като например датчиците на хол, магнитите и акселерометрите), да пише тук. Брат ми може да има все още някоя и друга бройка от тях, а аз мога да му изпратя още. Останалите модули и батериите са налични в България - питайте и брат ми ще каже откъде е купувал неговите.

Понеже (Пацо) попита: АЦП-тата на акселерометрите са 12-битов за MMA8452Q и 16-битов за MPU-6050. Аз (демек програмата във вагона) чета всичките битове и натрупвам 600 и горница измервания, така че прецизността на измерването е по-висока от индицираната.

Между другото проверих как вагонът на Пико показва наклоните и е така, както писах по-горе - мери с прецизност 0,1% (1 на хиляда), или 10 пъти по-ниска от моя вагон. При нужда мога много лесно да променя прецизността на индициране на наклоните от програмата и приложението на 1 на хиляда, но както писах, засега не виждам такава нужда. Десетата на показанието винаги може да се игнорира в главата на гледащия екрана с показанието.  :yes:

Иван
Титла: Re: Измервателен вагон
Публикувано от: pach в 17 Април 2022, 10:56:55
Абсолютно вярно!
Много благодаря, че споделяш тук с нас, опита  натрупан с човъркането, както и метода за сглобяването
на измервателен вагон. Това което ни показваш тук е безценно! В крайна сметка аз така разбирам
съществуването на форумите - всеки който желае, показва стъпките и проблемите с които се е срещнал,
та следващите го, да не повторят проблемите му или да намерят решението им по-лесно.
За частите и т.н. също си много точен. Нямаш си на идея как ме сърбят ръцете, но в момента нямам
нито физическа възможност, нито мога да отделя необходимото време. Приоритет са ми много други задачи,
произлизащи от едновременно действие по капитални ремонти на две жилища.
Но със сигурност щом имам новата работилничка (а тя ще е финала на ремонтите) и свободно време,
ще се опитам да реализирам твоят измервателен вагон. Тъй като ти предостави и необходимият софтуер
(от който не разбирам) за  него, ще се придържам плътно към съветите и насоките ти в темата.
За това и сега разсъждавам за евентуални допълнения и дори подобрения.
Сигурен съм, че каквито и проблеми да срещна, ще имам твоето съдействие, за което от сега съм ти благодарен.
Но дори тук темата само да я има - това е много за всеки моделист и винаги е едно добро начало в надграждането му.
 :hi: :clapping: :clapping: bg&flag
Титла: Измервателен вагон - захранване
Публикувано от: IvanC в 21 Април 2022, 01:59:15
Начертах "схемата" на захранването, което използвам в измервателните вагони и индикацията на скоростта с ATMega328P:

(https://cankov.com/modelrailroad/meascar/power_sch.png)

Схемата е с леки "вариации" в зависимост дали има конектор между ключа за захранването и модула, който конектор не е начертан на горната схема. От друга страна USB конекторът е на платката на модула, който съм означил като IC1. Означих USB конектора отделно за яснота, тъй като все още имам и друга идея, при която такъв конектор за зареждане на батерията няма да има. Все още не съм изпробвал тази идея напълно и ще я публикувам, ако излезе успешна.

Иван
Титла: Измервателен вагон номер 3 - захранване от релсите
Публикувано от: IvanC в 24 Април 2022, 05:56:04
Работи-и-и-и-и-и........ УРА!!! :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, евтиничко от Хоби серията - като на брат ми, но с друга "боя"... по-скоро почти няма боя, поради което прозира доста и на изкуствена светлина се виждат светлините на модулите, което не е лошо, защото вагонът си е за проба на схемата и така виждам кой модул какво точно прави.

Иван
Титла: Измервателен вагон номер 5
Публикувано от: IvanC в 21 Септември 2022, 03:37:45
Попадна ми още едно моделе на измервателен вагон на 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)


Иван
Титла: Re: Измервателен вагон
Публикувано от: pach в 22 Септември 2022, 17:03:50
Ай..... :wacko: :swoon: :swoon: :swoon:
Не стига, че е измервателен вагон...но  и с осветление!!!
 :clapping: :hi: :clapping: :hi:
Титла: Re: Измервателен вагон
Публикувано от: IvanC в 22 Септември 2022, 21:41:26
Цитат на: pach link=topic=5564.msg123853#msg123853 date=1663855430
Ай..... :wacko: :swoon: :swoon: :swoon:
Не стига, че е измервателен вагон...но  и с осветление!!!
 :clapping: :hi: :clapping: :hi:

Инженерите по измерването няма да седят на тъмно, я!
 :yes:

Иван
Титла: Re: Измервателен вагон
Публикувано от: pach в 23 Септември 2022, 17:58:13
 :lol: :lol: :lol: :hi:
Не се бях сетил... bg&flag
Титла: Преработка на измервателен вагон номер 3 - захранване от релсите
Публикувано от: IvanC в 13 Октомври 2022, 02:13:40
Последния път като реших да използвам измервателен вагон номер 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)


Иван