Ten wpis dotyczy kolejowych modułów Arduino. Dowiesz się z niego:
- Co to jest adresowanie sterowników?
- Jak odbywa się adresowanie?
- Co to są kanały?
- Jak zadeklarować urządzenie przytorowe w kodzie programu?
Co to jest adresowanie sterowników?
Każdy sterownik urządzeń przytorowych musi posiadać przypisany adres. Dzięki temu można komunikować się z konkretnym urządzeniem.
Sterownik przechowuje swój adres na jeden z dwóch sposobów:
- w pamięci, dzięki czemu adresowanie wystarczy wykonać jeden raz;
- fizycznie, dzięki ustawieniu przełączników na płytce.
Jak odbywa się adresowanie?
Urządzenia wyposażone w mikroprzełączniki suwakowe adresowane są poprzez ustawienie odpowiedniej konfiguracji przełączników. Adres ustawiany jest w kodzie dwójkowym.
Urządzenia niewyposażone w mikroprzełączniki suwakowe, adresowane są poprzez wysłanie polecenia adresującego.
Zakres adresów
Zakres adresów sterowników to od 10 do 127.
Domyślny adres
Domyślnie każdy nowy moduł ma przypisany adres, zależnie od rodzaju urządzenia:
Typ urządzenia | Kod produktu | Adres |
---|---|---|
Moduł semafora | 00xx | 10 |
Moduł rozjazdów | 03xx | 20 |
Moduł niezajętości torów | 02xx | 30 |
Moduł pulpitu | 22xx | 50 |
Co to są kanały?
Sterowniki oraz czujniki mogą obsługiwać jedno lub kilka urządzeń przytorowych. Określane jest to liczbą kanałów. Liczba kanałów odpowiada liczbie wejść lub wyjść danego sterownika.
Dozwolony zakres kanałów zależy od konkretnego modelu urządzenia, zazwyczaj od 1 do 4.
Adresowanie obiektów urządzeń przytorowych w kodzie programu
Adresowanie sterowników odbywa się poprzez wysłanie do urządzenia odpowiedniej ramki danych. Można to zrobić z wykorzystaniem odpowiedniego programu w urządzeniu, do którego podłączony jest sterownik.
Przykład
W tym przykładzie wykorzystamy płytkę Arduino Uno z podłączonymi sterownikami. Do napisania programu do adresującego sterowniki wykorzystamy bibliotekę trainbrains SDK. W tym celu należy pobrać bibliotekę i dołączyć ją do projektu. Zależnie od środowiska 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 rozjazdów:
- Jednokanałowy sterownik punktu pod adresem 20
- Dwukanałowy sterownik punktowy 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;
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 adresującego
Polecenia adresujące są rozsyłane do wszystkich podłączonych urządzeń.
Aby uniknąć sytuacji, w której wszystkie podłączone urządzenia zostaną zaadresowane w ten sam sposób, urządzenie musi pracować w trybie adresowania.
W tym celu należy jednokrotnie nacisnąć przycisk na wybranym urządzeniu. Dopiero wówczas poleceni adresujące zostanie przyjęte.
Najprostszym (choć niekoniecznie najlepszym 😉 ) sposobem na zaadresowanie urządzeń jest:
- przygotowanie pętli programu tak, aby wysyłała polecenie adresujące do wskazanego urządzenia;
- wgrać programu do urządzenia nadrzędnego;
- powtórzenie tego procesu dla kolejnych urządzeń.
void loop()
{
modules->addressDevice(point1);
//modules->addressDevice(point2);
//modules->addressDevice(point3);
// Give it some brake as the adressing will be performed only once;
delay(2000);
}
W przypadku kilku urządzeń przytorowych podłączonych do tego samego sterownika, adresowanie wystarczy wykonać tylko raz, dla jednego z obiektów.
Pełny kod tego przykładu możesz pobrać tutaj.
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!