Przekładanie zwrotnic

Ten wpis dotyczy kolejowych modułów Arduino. Dowiesz się z niego:

Przełożenie zwrotnicy w kodzie programu

Przekładanie zwrotnic wybranego rozjazdu odbywa się poprzez wysłanie do urządzenia odpowiedniej ramki danych. Możesz to zrobić z wykorzystaniem odpowiedniego programu w urządzeniu do którego podłączony jest sterownik.

Aby wysłać ramkę danych do przełożenia zwrotnicy wykonujemy polecenie switchPointPosition podając wybrany rozjazd oraz oczekiwaną pozycję po przełożeniu:

C++
#include <Arduino.h>
#include "TrainbrainsModules.h"
#include "Point.h"

TrainbrainsModules *modules = new TrainbrainsModules();
PointRef point1 = new Point(20, "Point 1");

void setup()
{
  modules->init();
  modules->switchPointPosition(point1, PointPosition::POSITION_PLUS);
}

Definicje pozycji zwrotnic przewidują kilka możliwości, natomiast zadać możemy tylko dwie z nich.

Położenie plusowe oznacza bezpieczne ułożenie zwrotnic, zgodnie z warunkami technicznymi konkretnego posterunku. Położenie minusowe, to stan przeciwny.

Pozostałe dwie wartości przydadzą się do kontrolowania rzeczywistego stanu rozjazdów w terenie.

Położenie nieznane wykazywane jest gdy nie można jednoznacznie określić położenia zwrotnic lub odczyt informacji nie był możliwy.

Ostatnią możliwością jest wykazanie tzw. rozprucia rozjazdu, gdy czujniki jednocześnie wykazują pozycję plusową i minusową.

Przykład

W tym przykładzie wykorzystamy płytkę z podłączonymi sterownikami. Do napisania programu sterującego napędami zwrotnic wykorzystamy bibliotekę trainbrains SDK. W tym celu należy pobrać bibliotekę i dołączyć ją do projektu. Zależnie od środowiska programistycznego (IDE) będzie się to odbywało nieco inaczej.

Pełny kod do tego przykładu możesz pobrać z repozytorium trainbrains.

Projekt

Załóżmy, że budujemy makietę z 3 rozjazdami. Wykorzystamy 2 moduły sterowników napędów zwrotnic:

  • Jednokanałowy sterownik napędów zwrotnic pod adresem 20
  • Dwukanałowy sterownik napędów zwrotnic pod adresem 21

Napędy zwrotnic są podłączone do sterowników w następujący sposób:

  • Napęd zwrotnicy 1 jest podłączony do sterownika pod adresem 20, kanał 1;
  • Napęd zwrotnicy 2 jest podłączony do sterownika pod adresem 21, kanał 1;
  • Napęd zwrotnicy 3 jest podłączony do sterownika pod adresem 21, kanał 2;

Cel

Celem programu niech będzie naprzemienne przekładania zwrotnic wybranych rozjazdów. Mało realistyczne, ale to tylko ćwiczenie 😉

Krok 1. Deklaracja urządzeń przytorowych

Deklarujemy w kodzie programu jakimi urządzeniami przytorowymi będziemy sterować. Można to zrobić na przykład w ten sposób:

C++
#include <Arduino.h>
#include "TrainbrainsModules.h"

TrainbrainsModules *modules = new TrainbrainsModules();

PointRef point1 = new Point(20" Point 1");
PointRef point2 = new Point(21, 1, "Point 2");
PointRef point3 = new Point(21, 2, "Point 3");

void setup()
{
  modules->init();
}

Domyślnym numerem kanału jest 1. W tym przypadku nie trzeba podawać go ręcznie

Krok 2. Wysłanie polecenia przełożenia zwrotnicy

Cykliczne przekładanie zwrotnic zrealizujemy w najprostszy sposób. Na początek wyślemy polecenia przełożenia wszystkich zwrotnic w pozycje plusowe do każdego sterownika:

C++
void setup()
{
  modules->init();

  modules->switchPointPosition(point1, PointPosition::POSITION_PLUS);
  modules->switchPointPosition(point2, PointPosition::POSITION_PLUS);
  modules->switchPointPosition(point3, PointPosition::POSITION_PLUS);  
}

A następnie, w pętli głównej programu wykonamy:

  • wysłanie poleceń przełożenia zwrotnicy do wybranych urządzeń;
  • odczekanie kilku sekund;
  • powtórzenie tego procesu dla kolejnych rozjazdów.
C++
void loop()
{
// Switching points 1 and 3
  modules->switchPointPosition(point1, PointPosition::POSITION_PLUS); 
  modules->switchPointPosition(point3, PointPosition::POSITION_MINUS);
  delay(4000);

  // Switching points 2 and 1
  modules->switchPointPosition(point2, PointPosition::POSITION_PLUS); 
  modules->switchPointPosition(point1, PointPosition::POSITION_MINUS);
  delay(4000);

  // Switching points 3 and 2
  modules->switchPointPosition(point3, PointPosition::POSITION_PLUS); 
  modules->switchPointPosition(point2, PointPosition::POSITION_MINUS);
  delay(4000);
}

Pełny kod tego przykładu możesz pobrać tutaj.

Wideo-tutorial

Poniżej znajdziesz kliku odcinkowy wideo-tutorial pokazujący jak jeszcze można wykorzystać moduły sterowania napędami zwrotnic.

To już prawie wszystko

Hej!

Mam nadzieję, że ten wpis jest dla Ciebie wartościowy. Może chcesz pomóc w rozwoju tych materiałów? Wystarczy, że zostawisz poniżej komentarz co o nim myślisz, czego Ci zabrakło lub co Twoim zdaniem trzeba poprawić albo dasz mu łapkę w gorę 👍

Otrzymuj informacje o nowych ciekawych materiałach. Dołącz do newslettera trainbrains!

Leave a Reply