Ten wpis dotyczy kolejowych modułów Arduino. Dowiesz się z niego:
- Jak przełożyć zwrotnicę wybranego rozjazdu?
- Jak wykonać przekładanie kilku zwrotnic na prostym przykładzie?
- Wideo-tutorial o przekładaniu zwrotnic
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:
#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:
#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:
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.
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!