• Szanowny Użytkowniku, serwisy w domenie modelarstwo.info wykorzystują pliki cookie by ułatwić korzystanie z naszych serwisów. Jeśli nie chcesz, by pliki cookies były zapisywane na Twoim dysku zmień ustawienia swojej przeglądarki.

Poradnik Arduino w modelarstwie kolejowym - sterownik urządzeń informacyjnych na makiecie

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#1
Witam forumowiczów.

W tym wątku, chciałbym się podzielić pomysłem na unowocześnienie makiety/dioramy.

Z góry zaznaczam, że nie jestem programistą a cały wykorzystany w moim urządzeniu soft napisał @ethanak – kolega z forum FORBOT. Autor kodu może być znany niektórym osobom pod nickiem BRAINTRON.
1705150135892.png

Logo FORBOT użyte w projekcie w późniejszym etapie.
1705150205650.png

To on jest autorem kodu i mam jego zgodę na dalsze rozpowszechnienie. Zaznaczam tylko, że nie ma zgody na wykorzystanie kodu do celów zarobkowych. Można wykorzystać kawałek lub całość, można też modyfikować ale tylko i wyłącznie na potrzeby własne.

1705149620564.png


Jakiś czas temu, wpadłem na pomysł by trochę unowocześnić swoje torowisko. Makietą tego nie nazwę, gdyż cały czas ewoluuje i słowo makieta jest w tej chwili na wyrost.

Założenie było takie by niewielkim kosztem zrobić proste sterowanie semaforów i/lub tarcz świetlnych. Postanowiłem wykorzystać kilka ogólnodostępnych elementów, takich jak Arduino czy klawiatura membranowa.

Jako, że z pisaniem kodu nie mam nic wspólnego i nigdy sam nie napisałem żadnego od początku do końca, zacząłem przerabiać już istniejące projekty na moje potrzeby. Wtedy też na forum www.forbot.pl natrafiłem na użytkowników, którzy dali mi cenne wskazówki (@farmaceuta oraz @ethanak).

Co jakiś czas zagadując kol. @farmaceuta udało mi się stworzyć pierwszy działający sterownik, za pomocą którego przy wybraniu odpowiednich komend z klawiatury, na sygnalizatorze wyświetlany był odpowiedni sygnał.

Podpiąłem semafor 5cio komorowy i wyświetlałem na nim następujące sygnały: S1, S2, S3, S4, S5, S10, S11, S12, S13, Sz

Apetyt rośnie w miarę jedzenia i było mi mało. Znów z pomocą kolegów uzyskałem możliwość sterowania już dwoma semaforami.

Tak to wyglądało na początku (korzystałem ze strony www.wokwi.com)
1705149871987.png

Można też było sterować np. czterema tarczami manewrowymi:
1705149887432.png

Kolejnym pomysłem było rozwinięcie układu do obsługi 4 semaforów. Zaczęła się dyskusja na forum. Koledzy już chyba nie mogli znieść mojej niewiedzy z programowania i tego jak kaleczę kod. @ethanak zaproponował, że napisze to dla mnie. Po zebraniu wymaganych informacji (co, jak, ile etc.) zaczęło się. Właściwie to @ethanak zaczął – ja od tej pory robiłem za testera, zdając za każdym razem relację z osiągniętych efektów. W sumie poza efektami, to borykałem się z przeróżnymi awariami i problemami.

Od tego momentu, chciałbym wszystkim przedstawić jak etapowo powstawało i ewoluowało moje urządzenie o roboczej nazwie „sterownik urządzeń informacyjnych na makiecie”. Zaczęło się od obsługi wszystkich 10 podstawowych sygnałów (bez linijki świetlnej) a finalnie mam możliwość obsługi:
4 semaforów pięcio komorowych
4 sygnalizatorów dwukomorowych (można podpiąć Tm, To, Tz, SBL)
wyświetlacz dworcowy z odjazdami pociągów
dźwiękowy „zapowiadacz” peronowy

Wszystko sterowane poprzez ekran dotykowy lub z poziomu przeglądarki na telefonie/tablecie.

Kod jest napisany w taki sposób, że można modyfikować wszystkie ustawienia w miarę potrzeb i pod siebie.
Nazwy stacji, nazwy pociągów, zostały użyte tylko i wyłącznie na cele programu (kodu) i mogą nie mieć odwzorowania w świecie realnym – dlatego proszę nie pisać, że taki pociąg nie istniał, czy że nie ma takiego połączenia.
Postaram się co 2-3 dni opisać kolejny etap – a tych jest kilkanaście – jak powstawało urządzenie, co było wykorzystane, kilka zdjęć z działania i link do odpowiedniego wątku na forum Forbot.

ZACZYNAMY

W każdym z etapów, wgrywanie kodu odbywać się będzie za pomocą oprogramowania Arduino IDE (dostępne tu - https://www.arduino.cc/en/software). Osobiście korzystam ze starszej wersji 1.8.19. W dalszej części poradnika używać będę skróconej nazwy „IDE” (wiadomo wtedy, że chodzi o oprogramowanie Arduino)

Będę również na początku zamieszczać informację co zostało użyte (lub wgrane jako nowe – sterowniki, biblioteki). Użytych w poprzednich krokach nie będę wymieniać – jeśli czegoś brakuje, IDE nas o tym poinformuje stosownym komunikatem.

Zanim przystąpimy do etapu pierwszego, sprawdzamy czy wszystko jest ok – podpinamy nasze UNO do komputera, ustawiamy odpowiednią płytkę i port (uwaga, każdy może mieć inny numer COM w zależności od tego do jakiego USB się podepnie kabelek. U mnie zazwyczaj jest COM3, COM4, COM6).

W IDE wchodzimy w:
  • Narzędzia -> Płytka -> Arduino Uno
  • Narzędzia -> Port -> COM (wybieramy odpowiedni do jakiego jest podpięta płytka)
Wgrywamy najprostszy kod jaki jest dostępny wraz z zainstalowanym IDE – celem sprawdzenia. Robiłem tak za każdym razem, gdy zmieniałem płytkę na inną o czym później.

Przechodzimy kolejno:
  • Plik -> Przykłady -> 01.Basics -> Blink
  • (jest to kod wywołujący miganie diody wbudowanej w płytkę w odstępach 1sek.)
Jeśli po zastosowaniu powyższego dioda na płytce miga, mamy wszystko skonfigurowane jak należy.

Możemy teraz przystąpić do kolejnych etapów.

Miłego czytania i zabawy.
 
Ostatnio edytowane:
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#2
Etap 1
  • Oprogramowanie:
    • Arduino IDE 1.8.19
    • Biblioteki – Keypad.h
    • Sterownik do Windows – CH340/341
    • Kod do wgrania w IDE – prezesedi2
  • Urządzenia
    • Płytka – Arduino UNO (ja wykorzystuję klon UNO)
    • Klawiatura membranowa
    • Przewody połączeniowe do płytek stykowych (męskie-męskie)
  • Forum FORBOT – strona 6 (13.06.2023) – wątek ma 20 stron, nie tylko czysto opisowych. To niejednokrotnie opisane moje męki oraz problemy (sprzętu i niezrozumienia autora kodu)
1705153201386.png

1705153234944.png

1705153252810.png

Podpięcie – patrząc na leżącą klawiaturę mamy od lewej numerację pinów od 1 do 8
Łączymy ją z płytką UNO następująco (Klawiatura – UNO )
1 – 9; 2 – 8; 3 – 7; 4 – 6; 5 – 5; 6 – 4; 7 – 3; 8 – 2;

Uruchamiany IDE wgrywamy program i sprawdzamy działania klawiszy w monitorze portu szeregowego - pamiętać należy by ustawić szybkość transmisji na 115200 bitów na sekundę (baud). Niejednokrotnie się na tym przejechałem zdziwiony, że nie działa – a zapomniałem przestawić z domyślnego 9600.

Klawiatura służy do wyświetlenia odpowiedniego sygnału z zakresu S1, S2, S3, S4, S5, S10, S11, S12, S13, Sz dla semaforów oraz S1/Ms1 Ms2 i Sz dla tarcz

Obsługa wygląda następująco: (w pierwszym etapie jest pomylona kolejność/kolory komór)

A – semafor 1
B – semafor 2
C – tarcza 1
D – tarcza 2
1 – sygnał S1 (sygnał Ms1)
2 – sygnał S2 (sygnał Ms2)
3 – sygnał S3
4 – sygnał S4
5 – sygnał S5
6 – sygnał S10
7 – sygnał S11
8 – sygnał S12
9 – sygnał S13
0 – sygnał Sz
* – zatwierdzenie sygnału po wprowadzeniu

Zgodnie z powyższym by ustawić na semaforze 1 sygnał S11 wybieramy A, 7, *,
By wybrać na tarczy 2 sygnał Sz wybieramy D, 0, *,

A tak wygląda symulacja w monitorze:
1705153420889.png

Od lewej mamy:
Semafor 1 – gwiazdka czyli zapalone górne światło i 4 kropki czyli wygaszone 4 kolejne komory
przerwa
Semafor 2 – gwiazdka czyli zapalone górne światło i 4 kropki czyli wygaszone 4 kolejne komory
przerwa
Tarcza 1 – gwiazdka czyli zapalone górne światło i kropkę czyli wygaszoną komorę dolną
przerwa
Tarcza 2 – gwiazdka czyli zapalone górne światło i kropkę czyli wygaszoną komorę dolną

Na powyższym mamy symulację działania dwóch semaforów (5cio komorowych) i dwóch tarcz – zapalone są wszędzie sygnały zasadnicze (Uwaga, w tej wersji kodu, zamienione są miejscami kolory w semaforach – wyjaśnione to jest na forum Forbot. Wiem, że jest błąd i został wykryty-poprawiony, jednak opisuję wszystko tak, jak to miało miejsce)

  • Po wciśnięciu na klawiaturze A, 7, *, dostajemy sygnał S11 na semaforze 1 a na monitorze:
1705153533358.png

1sza komora zgaszona, 2ga komora miga, 3cia komora zgaszona, 4ta komora zapalona, 5ta komora zgaszona

  • Po wciśnięciu na klawiaturze D, 0, *, dostajemy sygnał Sz na tarczy 2 a na monitorze:
1705153557973.png

1sza komora zapalona, 2ga komora miga (tarcza 2)
  • A teraz kombinacja A, 7, *, B, 5, *, C, 2, *, D, 0, *,
1705153600163.png

W efekcie mamy symulację:
Semafor 1 - 1sza komora zgaszona, 2ga komora miga, 3cia komora zgaszona, 4ta komora zapalona, 5ta komora zgaszona
przerwa
Semafor 2 – 1sza i 2ga komory zgaszone, 3cia komora zapalona, 4ta i 5ta komory zgaszone
przerwa
Tarcza 1 – 1sza komora zgaszona, 2ga komora zapalona
przerwa
Tarcza 2 – 1sza komora zapalona, 2ga komora miga

Możemy bawić się dalej

W kolejnych etapach nie będę już dawać kilku przykładów. Na podstawie powyższego, każdy może przetestować sam. Postaram się skupić na szczegółach, tak by wątek nie miał 100 stron.

c.d.n.
 

Załączniki

OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#3
Dzień dobry. Dziś wrzucam kilka etapów w bardziej telegraficznym skrócie

Etap 2 (diody tarczy)

PCF 8575:
1705241251856.png

W tym etapie możemy zobaczyć nazewnictwo sygnałów w monitorze. Wpisanie D, 2, *, pokazuje, że wyświetlony jest sygnał Ms2 (na tarczy 2); a wpisanie A, 8, *, wyświetla sygnał S12 (na semaforze 1):
1705241301982.png

Na tym etapie dalej borykamy się z zamienionym układem/kolorami komór. Zostanie to poprawione w najbliższym czasie.



Etap 3
W tej części układ łączymy następująco:
UNO pin A5 (SDA) – na płytkę i dalej – SDA OLED oraz SDA PCF
UNO pin A4 (SCL) – na płytkę i dalej – SCL OLED oraz SCL PCF
UNO pin GND – na płytkę i dalej GND OLED oraz GND PCF
UNO 5V – na płytkę i dalej VCC OLED oraz VCC PCF

PCF pin VDD do anod obu LED (czerwona, biała)
PCF pin P15 do rezystora (1kohm) i dalej do katody LED (czerwona)
PCF pin P16 do rezystora (1kohm) i dalej do katody LED (biała)

Po wgraniu kodu na wyświetlaczu widzimy napis „MAKIETA V4” i świeci czerwona dioda (sygnał S1).
1705242352288.png

Mamy podpięte diody symulujące tarczę 2 (wywoływaną literą D z klawiatury)
Wprowadzając kolejno D, 2, *, uzyskamy sygnał Ms2; a po wprowadzeniu D, 0, *, uzyskujemy sygnał Sz.
Po zadanym czasie, każdy z wybranych sygnałów wraca do zasadniczego S1 automatycznie.
Działanie możemy śledzić na diodach, w monitorze a wpisywane znaki wyświetlane są na OLEDzie.
1705242317587.png

1705242596368.png


Etap 4
Dzięki modyfikacjom kodu otrzymujemy zmianę oznaczenia sygnalizatorów na wyświetlaczu i w monitorze.
Na wyświetlaczu pojawia się napis "MAKIETA V5"

1705242632899.png

1705242653900.png


Ciekawostką jest wyświetlenie na OLEDzie wszystkich sygnałów z semaforów i tarcz. Uzyskujemy to poprzez wciśnięcie samej *
1705242766409.png


Etap 5

1705242884653.png

Wymiana płytki z UNO na ESP32 wiąże się z kilkoma zmianami w IDE. Najpierw musimy dodać obsługę w preferencjach programu (szczegółowa instrukcja jest tu - https://forbot.pl/blog/leksykon/esp32):
PLIK -> Preferencje -> Dodatkowe adresy URL…
Tu wklejamy poniższe dwie linijki, jedna pod drugą (obsługa ESP8266 przyda się później)
https://arduino.esp8266.com/stable/package_esp8266com_index.json
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

1705242914994.png

Następnie wchodzimy kolejno Narzędzia -> Płytka -> Menadżer płytek
Wpisujemy w wyszukiwarce ESP32 i instalujemy (uwaga, wersja 2.0.14 ma błąd, który przeszkadza w późniejszych etapach, dlatego polecam 2.0.13 lub późniejsze). Tak samo instalujemy ESP8266.

Teraz w IDE wybieramy Narzędzia -> Płytka -> ESP32 -> ESP32 Dev Module (jeśli masz inną płytkę to wybierz odpowiednią pozycję)
Narzędzia -> Upload Speed -> 115200
Narzędzia -> Port -> COM3 (lub odpowiedni u Ciebie)

Podłączenie:
Mostkujemy na PCF VDD z VCC
Podłączamy klawiaturę do ESP32 następująco (klawiatura – ESP32)
1 – D4; 2 – D5; 3 – D18; 4 – D19; 5 – D13; 6 – D12; 7 – D14; 8 – D27;
SCL to obecnie pin D22 a SDA to pin D21 (w ESP32)

Po wgraniu kodu prezesedi6 na wyświetlaczu pojawia się napis „MAKIETA V6”
1705242996594.png

W tym ustawieniu mamy semafory pod cyframi 1,2,3,4 a tarcze pod literami A,B,C,D.

Dla testów wpisujemy B, 0, *, (sygnał Sz na tarczy 2)
1705243068539.png

Otrzymujemy świecącą diodę czerwoną i migającą białą (sygnał Sz) na tarczy 2.

Na dzisiaj tyle.
c.d.n.
 

Załączniki

OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#4
Dzień dobry. Materiału jest dużo, więc lecimy dalej.

Etap 6
Po wgraniu kodu na wyświetlaczu pojawia się napis „MAKIETA V7a”.
1705317685805.png

Z poziomu urządzenia wyszukujemy sieć o nazwie „Kolejka”. Łączymy się używając hasła „PrezesEdi7”. W przeglądarce wpisujemy adres – http://192.168.4.1 i testujemy.
1705317797771.png

1705317835059.png



Etap 7

Ta wersja zawiera zmodernizowany kod oraz sposób wyboru urządzeń. Od tej pory pod A sa semafory , pod B są tarcze a pod C i D – zobaczymy w następnych etapach.

Po uruchomieniu pojawia się napis „MAKIETA V8 WiFi” i przystępujemy do testów.
1705318245027.png



Etap 8
Połączenia:
Ponieważ będziemy wykorzystywać zarówno czytnik, jak i wyświetlacz na jednym interfejsie SPI, a nie będziemy sterować podświetleniem, możemy na samej płytce wyświetlacza połączyć:

VCC i LED (diody będą zawsze zapalone)
SD_SCK i SCK (wspólna linia zegarowa)
SD_MOSI i SDA (wspólna linia odbioru danych)

Połączenie TFT – ESP8266

VCC - 3.3V
GND - GND
CS - GPIO4 (D2)
RESET - GPIO16 (D0)
AD - GPIO5 (D1)
SD_CS - GPIO15 (D8)
SD_MISO - GPIO12 (D6)
SD_MOSI - GPIO13 (D7)
SD_SCK - GPIO14 (D5)

Kod testowy wgrywamy na płytkę ESP8266, w tym celu wybieramy:
Narzędzia -> Płytka -> ESP8266 -> odpowiedni model.
W moim przypadku jest to LOLIN (WEMOS) D1 ESP-WROOM-02

Naszym oczom ukazuje się napis testowy „HELLO WORLD” – wiemy, że wszystko jest ok.
1705318371528.png


Na tym etapie musimy również podmienić plik odpowiedzialny za wyświetlanie polskich literek (taki literek % do picia, innym razem :cool:)
Opisane szczegółowo jest to w tym wpisie - https://forbot.pl/forum/topic/23063...apserdak-havliček-z-væsterås-na-wyswietlaczu/
Plik znajdziemy w Windows w poniższej lokalizacji – należy go podmienić.

1705318393233.png


Przystępujemy do wgrania kodu – kolejrozklad1

Pojawia nam się na wyświetlaczu rozkład jazdy:
1705318419753.png

Najważniejsze wyświetlone informacje to:
  • Typ pociągu (pospieszny, osobowy, express, co tam chcemy) - jedna litera
  • Nazwa stacji docelowej - max 30 liter
  • Informacja o torze i peronie - cyfra/cyfra
  • Informacja o godzinie odjazdu w formacie HH:MM
Teraz rozkład będzie co dwie minuty przesuwał się do następnej pozycji.

c.d.n.
 

Załączniki

OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#5
Dzień dobry po małym przestoju. Dziś postaram się wrzucić więcej materiału. No to lecimy.

Etap 9
W tym etapie autor skupił się na modyfikacjach kodu oraz przewijaniu długich nazw na wyświetlaczu.
Przygotowujemy plik txt z rozkładem jazdy (przykład poniżej), wgrywamy go na kartę pamięci i instalujemy w slocie wyświetlacza, ciesząc się nowszą wersją rozkładu.

!!! Uwaga. Na tym etapie napotkałem problem z „widzialnością” karty SD. Informacja poniżej:

„W tej chwili opiszę ostatni problem - spowodowany sprzętem.
Tak więc okazało się, że ESP nie widzi karty - w żaden sposób. Nie radził sobie z wczytywaniem kodu, gdy karta była w slocie (wyrzucał komunikat, że ESP nie jest podłączone - dziwne). Dzięki podpowiedzi kol. @ethanak spiąłem pin D8 poprzez rezystor 10k z masą - i nagle ESP zaczęło widzieć kartę podczas wczytywania kodu.
Żeby nie było łatwo, to mimo wgrania pliku .txt na kartę (8GB Nokia), ESP nie potrafiło go "przeczytać". Formatowanie karty na FAT32, potem na NTFS i powrotnie na FAT32 nie pomagało. Wziąłem kartę 64GB z systemem plików exFAT - to samo. Wpadłem na pomysł by programem do partycjonowania nadać karcie system plików FAT32. Program się burzył ale na wymusiłem na nim ten system, wgrałem plik z zapowiedziami - I DZIAŁA! Przywróciłem exFAT - nie działa. Tak więc znów na siłę FAT32 i możemy działać dalej.”


Etap 10, Etap 11,
Te etapy to również modyfikacje kodu, dzięki którym możemy zobaczyć zmiany w rozkładzie na wyświetlaczu.


Etap 12
1705840053885.png

W tym momencie wykorzystujemy chwilowo tylko układ ESP12

Lewa strona pokazuje połączenie bezpośrednie, prawa połączenie przez bufor. I tu uwaga: Oznaczenie Vz po prawej stronie oznacza napięcie zasilania, które może wynosić od 5 do nawet 24V (ULN2003 wytrzymuje do 50V, ale takich napięć w makiecie raczej nie będzie).

Do sprawdzenia połączenia diod możemy użyć krótkiego programu (w załączniku katalog "kolsemtest").

Widzimy jak zapalają się kolejne diody, zaczynając od zielonej (górne światło semafora).

Od tego momentu komunikacja między płytkami (wysyłanie komunikatu nt. wyświetlenia odpowiedniego sygnału na semaforze/tarczy) odbywa się bezprzewodowo.

Teraz na ESP12 wgrywamy kod kolsema1, a na ESP32 wgrywamy kod KolejSendTest. ESP32 jest sterownikiem układu ESP12 i wysyła mu drogą radiową losowy sygnał jaki ma się wyświetlić na semaforze.

Przede wszystkim uwaga: w poprzedniej wersji wkradł się błąd. W funkcji initWiFi zamiast skorzystać z definicji MY_ID omyłkowo została wpisana wartość 0x20. Należy zamienić linię:
Code:
    macadr[5]=0x20;
na
Code:
    macadr[5]=MY_ID;
Podobne postępujemy z wgraniem kodów zawartymi w paczce „semafor2”.


Etap 13
Kolejny etap w którym autor postanowił znacząco zmodyfikować kod. Otrzymaliśmy również możliwość sterowania wszystkimi sygnałami radiowo. Sygnały wywołujemy z klawiatury poprzez ESP32 (dla semafora A4 i tarczy B4 sygnały są dostępne pod klawiszami 0-9 i zatwierdzamy gwiazdką), a odbiornikiem jest ESP12 spięty z semaforem i tarczą na drugim końcu pokoju/makiety/biurka.
Wszystkie wywoływane sygnały widoczne są na wyświetlaczu OLED. Polecam testy np.:

A-4-4-* semafor 4 sygnał S4 (migająca górna pomarańczowa)
B-4-0-* tarcza 4 sygnał Sz (świeci czerwona i miga biała)

W następnych krokach, zarówno semafor jak i tarcza będą mieć numery 4 – każdy może sobie w danym momencie zmodyfikować kod tak, by były dostępne np. jako sem1 i tar1.

Możemy przystąpić do wgrania kodu kolejpan2 – kod zawiera sporo poprawek, dzięki którym nie powinny być gubione pakiety wysyłane drogą radiową pomiędzy nadajnikiem (ESP32) a odbiornikiem (ESP12)

Polecam wrzucić do kodu poprawki:

Dla semafora w pliku wifi.cpp trzeba dorzucić jedną linijkę w funkcji initWiFi, czyli:

Code:
esp_now_register_send_cb(onDataSent);
WiFi.setOutputPower(20.5); // dopisana linijka
// no i prosimy o dostarczenie ustawień
dataValid=false;
askData();
}
Dla panelu podobnie:

Code:
    startenow();class=pln>
    startWebServerclass=pun>();
class=pln>    WiFi.class=pln>setTxPower(WIFI_POWER_19_5dBmclass=pun>); // dopisana linijkaclass=pln>
}
c.d.n.
 

Załączniki

Ostatnio edytowane:
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#6
Dzień dobry, dziś kolejna porcja nowości w moim sterowniku.

Etap 14

Kolejna modyfikacja rozkładu jazdy i sterowania nim. Obserwując monitor serial można zobaczyć, że program odbiera plik rozkładu, a następnie co 15 sekund przesuwa rozkład o jedna pozycję.

ESP32
1706031406684.png

ESP8266
1706031419530.png

1706031432401.png

1706031438997.png


Etap 15
Po wgraniu kodu na wyświetlaczu widzimy napis „MAKIETA V10 WiFi)
1706031546414.png


Zgodnie z obietnicą, autor umożliwia sterowanie rozkładem jazdy z poziomu panela.
  • przycisk C będzie służył do ustawiania pozycji rozkładu;
  • jeśli rozkład będzie nieaktualny, wyświetlony zostanie napis "BŁĄD!" i klawiatura wróci do stanu początkowego;
  • wyświetlona zostanie aktualna pozycja rozkładu;
  • klawisze A, B, C i D służą do ustalania pozycji: A - przeskok o pięć w tył, B - poprzednia, C - następna, D - przeskok o pięć w przód.
  • po ustawieniu pozycji wciśnięcie gwiazdki spowoduje wysłanie polecenia do urządzenia.
1706031521900.png

1706031554706.png

1706031562623.png


Etap 16
Etap ten zaczynamy od poprawek w Arduino IDE.
Na początek musimy znaleźć miejsce, gdzie Arduino trzyma swoje wszystkie rzeczy potrzebne do kompilacji programu. W eksploratorze folderów w zakładce widok, musimy włączyć widoczność ukrytych elementów.
!!! UWAGA – WSZYSTKIE PONIŻSZE OPERACJE, NALEŻY WYKONAĆ NA WYŁĄCZONYM IDE !!!
Ścieżka dla Windows wygląda to tak:
c:\Users\Adam\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.13\tools\partitions\
1706031588290.png

Należy z załącznika wydobyć plik apponly.csv i przegrać go w to miejsce.
I jak @ethanak napisał – „To było prostsze, teraz trudniejsze.”
Cofamy się do folderu 2.0.13
1706031610893.png


W folderze do którego ścieżkę podałem jest plik boards.txt - należy go otworzyć w jakimś uczciwym edytorze tekstu (nie, notatnik nie jest uczciwym edytorem tekstu, MS Office takoż, a nawet LibreOffice się do tego nie nadaje). Warto przed zrobieniem zmian zrobić sobie kopię tego pliku, żeby nie trzeba było ponownie instalować IDE.
!!! Ja do otwarcia tego pliku użyłem ściągniętego programu NOTEPAD++
Do ściągnięcia np. tu - https://www.programosy.pl/program,notepad.html

W pliku trzeba znaleźć sekcję odpowiadającą płytce, którą masz ustawioną. Jest to dość łatwe, bo wszystkie sekcje zaczynają się od czegoś w stylu:
cośtam.name=Pełna nazwa
Np. dla ESP32 Dev Module będzie to:
Code:
esp32.name=ESP32 Dev Module
Jeśli już to znajdziesz, nieco niżej będą linijki typu:
esp32.menu.PartitionScheme.cośtamcośtam. Należy znaleźć ostatnią linijkę w sekcji (czyli zaczynającą się w tym przypadku od esp32.menu.PartitionScheme) i za nią wstawić następujące trzy linijki:
Code:
esp32.menu.PartitionScheme.apponly=4M Flash (Application only)
esp32.menu.PartitionScheme.apponly.build.partitions=apponly
esp32.menu.PartitionScheme.apponly.upload.maximum_size=4128768
Oczywiście jeśli korzystasz z innej płytki, zamiast esp32 operujesz na swojej.
Teraz po uruchomieniu powinna być możliwość ustawienia dla swojej płytki schematu partycji "4M Flash (Application only)":
1706031721479.png


1706031731060.png

Po powyższych operacjach i po wgraniu kodu, IDE nas poniższym komunikatem:

Code:
Szkic używa 919353 bajtów (22%) pamięci programu. Maksimum to 4128768 bajtów.

Zmienne globalne używają 52248 bajtów (15%) pamięci dynamicznej, pozostawiając 275432 bajtów dla zmiennych lokalnych. Maksimum to 327680 bajtów.
 

Załączniki

OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#7
I jeszcze jeden etap, dość istotny - uruchomimy "zapowiadacz" :eek:. No to jedziemy :cool::cool::cool:

Etap 17
  • Oprogramowanie:
    • Kod do wgrania w IDE – kolejpan4 (na ESP32)
UWAGA – PLIK KOLEJPAN4 JEST ZA DUŻY BY ZAMIEŚCIĆ NA NASZYM FORUM, DLATEGO PROSZĘ O ŚCIĄGNIĘCIE GO Z FORUM FORBOT.
1706032249684.png

1706032257034.png

Przede wszystkim - użycie zdalnych semaforów nie wyklucza użycia takowych podłączonych bezpośrednio do panela. Oczywiście nie należy podłączać ich do wyjść układu PCF8575 - potrzebny będzie bufor ULN2003 (tak jak w semaforze radiowym). Pojawia się tu jednak pewna trudność: otóż układ PCF8575 ma wyjścia typu open-drain co oznacza, że albo są zwarte do masy albo wiszą w powietrzu. ULN raczej wiszących wejść nie lubi, trzeba zastosować rezystory podciągające:

1706032273158.png


Drugą sprawą jest podłączenie modułu wzmacniacza/dekodera I2S. W projekcie użyty został popularny i niedrogi układ MAC98357a, ale można zastosować dowolny nie wymagający sygnału MCLK. Podłączyć należy jak na schemacie:

1706032287595.png

Trzeba pamiętać, że jest to wzmacniacz mocy (co prawda tylko 3W, ale trochę prądu potrafi użyć) i zasilanie z USB po prostu jest za słabe - układ nie będzie działać. W doświadczalnej wersji użyty został zewnętrzny zasilacz 5V, ale konkretne rozwiązanie trzeba znaleźć samemu. Pamiętać należy o połączeniu masy ESP32 oraz wzmacniacza (GND).

Wyjście układu nie może być połączone z żadną masą czy wejściem dodatkowego wzmacniacza.

Pozostaje tylko dodanie obsługi klawiatury. Założenia:
  • wciśnięcie D spowoduje wejście w tryb wyboru komunikatu;
  • klawisze A, B, C i D będą służyły do wyboru pociągu;
  • Klawisze 1 do 9 wybierają jeden ze stałych komunikatów;
  • Wciśnięcie '*' w trybie wyboru komunikatu powoduje wysłanie go do syntezatora;
  • Wciśnięcie '*' w trybie wyboru pociągu spowoduje wejście w tryb wyboru zapowiedzi;
  • W trybie wyboru zapowiedzi wciśnięcie klawiszy 1, 2 lub 3 spowoduje wysłanie zapowiedzi do syntezatora.
Po złożeniu wszystkiego zadowolony Autor napisał „program działa, semaforki na biurku migają zgodnie z tym co im wpiszę, rozkład jazdy wesoło świeci a z głośnika płyną wielce krzepiące komunikaty”. Ja trochę walczyłem ze sprzętem, ale również uzyskałem powyższy efekt – więc polecam.

Folder libraries z załącznika zawiera te same biblioteki które są na githubie - tyle że już skonfigurowane pod konkretną wersję płytki (4 MB Flash, difony Mbroli w formacie A-law wkompilowane w kod). Należy je po prostu wrzucić do swojego katalogu libraries.

Po wgraniu kodu, na wyświetlaczu widzimy poniższy komunikat „MAKIETA V11 TALK” oraz słyszymy komunikat powitalny.
1706032358807.png

Teraz mamy już sterowanie semaforami (A), tarczami (B), wyświetlaczem z odjazdami (C) oraz zapowiedziami (D)
1706032371915.png

1706032410527.png


No i przypominam, że wszystkim sterujemy z poziomu smartfona/tableta:

  • SSID: Kolejka
  • Hasło: PrezesEdi7
  • Serwer: 192.168.4.1
1706032431361.png

1706032437451.png

1706032444152.png

Do sterowania komunikatami uruchamiamy SERIAL MONITOR i wpisujemy HELP
1706032464643.png


Na dzisiaj tyle - miłej zabawy.
Przypominam - kod kolejpan4 proszę ściągnąć z forum FORBOT - link na górze postu.
c.d.n. :devil::devil::devil:
 

Lyntog

Znany użytkownik
Reakcje
1.080 6 2
#8
Pytanie za 200 punktów :D Czy taki moduł wyświetlacza można zakupić gdzieś gotowy? Fantastyczna robota, a bardzo by mi się przydał :)
 
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#9
Hej. Nie, nie można. To jest rozwinięcie mojego pomysłu przez @ethanaka czyli osobę która podjęła się napisania kodu. Części są ogólno dostępne. Kod jest. Trochę pracy manualnej i masz gotowy produkt.
 
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#12
Dzień dobry,
Powoli zbliżamy się do końca projektu, ale robi się coraz ciekawiej.

Etap 18
1706195797544.png

Kabelkologia:
ESP32 – wyświetlacz TFT 1,14”

3V3-VCC; GND-GND; D5-SCL; D7-SDA; D0-RES; D1-DC; D2-CS; 3V3-BLK

Małe streszczenie tego, co oferuje kolejna wersja:
  • rozszerzony rozkład jazdy (stacja początkowa i docelowa, nazwa przewoźnika, nazwa pociągu);
  • możliwość podłączenia wyświetlacza ST7789 (240 x 135, trochę bardziej wymiarami pasującego do skali H0, a przy okazji mającego nieco większą rozdzielczość);
  • rozszerzone komunikaty słowne (zróżnicowanie w zależności od tego, czy stacja początkowa/końcowa to nasza stacja czy nie).

Format rozszerzonego rozkładu jest kompatybilny z poprzednią wersją, Kolejne pola w linii to:
  • Typ pociągu - obowiązkowy, jeden znak O, S, P lub E;
  • Nazwa przewoźnika i pociągu - opcjonalny: znak '@', do trzech liter skrótu nazwy przewoźnika, opcjonalnie /nazwa_pociągu. Nazwa nie może zawierać spacji, należy w ich miejsce użyć znaku podkreślenia;
  • Stacja docelowa - obowiązkowa, nazwa lub znak '-' jeśli pociąg kończy bieg na naszej stacji;
  • Peron/tor - obowiązkowe, jednocyfrowe;
  • Godzina odjazdu - obowiązkowa jeśli pociąg nie kończy biegu na naszej stacji, w przeciwnym razie zabroniona, w formacie HH:MM lub H:MM
  • Godzina przyjazdu - obowiązkowa jeśli pociąg nie rozpoczyna biegu na naszej stacji, w formacie HH:MM lub H:MM;
  • Stacja początkowa - obowiązkowa jeśli pociąg nie rozpoczyna biegu na naszej stacji.
Przykładowo:
Ekspres Intercity "Marynarzyk", przyjazd ze Szczecina Głównego 10:30, odjazd do Katowic 10:40, tor 4 peron 2
E @IC/Marynarzyk Katowice 4/2 10:40 10:30 Szczecin Główny


Aby podłączyć ST7789 należy odkomentować pierwszą linię w pliku display.cpp w programie rozkładu, czyli zamienić:

Code:
//#define USE_7789
na
Code:
#define USE_7789
Jeśli chcecie obrócić wyświetlanie o 180 stopni to należy:
Linia 10 w display.cpp, zamienić:

Code:
#define _SROT 1
na
Code:
#define _SROT 3
I od razu uwaga od Autora:
No i errata... jako że w załączniku zabrakło pliku rozkładu do wgrania na kartę, podaję przykładową (nieco bezsensowną, ale działającą) zawartość:
# KS = Koleje Śląskie
# IC = PKP Intercity
# PR = Przewozy Regionalne
E @IC/Marynarzyk Katowice 4/2 10:40 10:30 Szczecin Główny
O @TLK Bielsko-Biała Komorowice 1/1 12:10 12:00 Częstochowa
P @PR - 2/1 12:20 Mamałygowice
S @TLK Český Těšín 2/1 13:50 13:40 Warszawa Wsch.
S @KS Żywiec 1/1 13:52 13:44 Katowice
E @IC/Riverator Šibenik 3/2 14:30 14:10 Warszawa Wsch.
E @IC/Górnik_dołowy Katowice Piotrowice 4/2 15:40
O @KS Bielsko-Biała Główna 1/1 16:10
E @IC/Zemsta_Brunnera Berlin Östbahnhoff 2/1 16:50
P @PR Kraków 1/1 16:52
P Tychy Lodowisko 3/2 17:30
E @IC/Havranek Hradec Králové 4/2 18:40 18:25 Gdańsk Główny
P @TLK Szczecin Dąbie 1/1 19:10
P @TLK Częstochowa 2/1 19:50
S @TLK Zamość 1/1 19:52 19:50 Żywiec
P @KS Tychy 3/2 20:30 20:25 Czeladź
Przypominam, że powinien być wgrany pod nazwą rozklad1.txt w głównym katalogu karty!



Etap 19
1706196543026.png

1706196630641.png

Na wstępie uwaga: ponieważ wzmacniacz audio wraz z głośnikiem pobiera dość duży prąd, zasilanie z USB przestaje wystarczać. Najprostszym sposobem jest podłączenie zewnętrznego zasilacza 5V.
Sposób podłączenia powinien być taki jak poniżej:
1706196663702.png

Dioda ma dwa zadania. Po pierwsze, ma odciąć zasilanie od wzmacniacza kiedy zasilamy urządzenie wyłącznie z gniazda USB na płytce ESP (np. w trakcie programowania), Wzmacniacz wtedy co prawda nie działa, ale przy zasilaniu z USB prawdopodobnie i tak nie zadziała. Po drugie - jeśli zasilacz jest odłączony od sieci i podłączony do płytki, ma nie dopuścić do podania mu napięcia na wyjście.

Podłączenie PCF8574 jest bardzo proste: SCL i SDA do właściwych pinów (tam już powinny być podpięte ekspandery semaforów i display OLED), zasilanie też we właściwe miejsca (Vcc do 3.3V, GND do GND), linie adresowe podłączone po prostu do Vcc

Dla PCF8575 układ będzie podobny, tyle że trzeba pamiętać o jednym: o ile PCF8574 ma wyjścia typu push-pull (umożliwiające podciągnięcie wejścia do Vcc, konieczne przy klawiaturze), o tyle PCF8575 to open drain (czyli pin albo jest zwierany do masy, albo wisi sobie w powietrzu). Stąd konieczność zastosowania dodatkowych rezystorów na liniach kolumn:
1706196710342.png


Wgrywamy kod testowy naszej klawiatury podpiętej pod PCF8574 i sprawdzamy czy „klawisze są na swoim miejscu. Po wciśnięciu mamy:
Klawiatura - Monitor portu szeregowego
1-1; 2-2; 3-3; 4-4; 5-5; 6-6; 7-7; 8-8; 9-9; 0-0; A-11; B-12; C-13; D-14; *-42; #-35

Jeśli wszystko ok, przystępujemy do wgrania kodu kolejpan6, jeśli nie – sprawdzamy co podłączyliśmy źle lub gdzie nie ma styku (płytki stykowe to nie najlepsze urządzenia na dłuższą metę).

Dzięki powyższemu działaniu uwolnione zostały piny w ESP32, które za chwilę wykorzystane zostaną do obsługi nowego wyświetlacza.

Po wgraniu kodu na wyświetlaczu pojawia się komunikat „MAKIETA V12 – I2C” a z głośnika dobiega komunikat powitalny.
1706197163705.png

Zbliżamy się do etapu, gdzie pierwszy raz będziemy używać ekranu dotykowego do sterowania urządzeniami. Oczywiście klawiatura zostaje (telefon/tablet również).
 

Załączniki

Ostatnio edytowane:
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#13
Dziś wrzucam jeszcze jeden etap - podłączenie i kalibracja ekranu dotykowego:

Etap 20
1706202383906.png

Połączenie ESP32 – Wyświetlacz dotykowy wygląda następująco:

GPIO4 -> CS
GPIO5 -> RST
GPIO18 -> DC
GPIO19 -> MOSI, T_DIN
GPIO13 -> SCK, T_CLK
GPIO12 -> MISO, T_DO
GPIO14 -> T_CS
GPIO27 -> T_IRQ (aktualnie niewykorzystany)
+3.3V -> VCC, LED
GND -> GND

Od tego momentu, autor kodu używa wyświetlacza opartego na układzie ST7789, natomiast ja na układzie ILI9341, dlatego w każdej kolejnej wersji kodu muszę odkomentować linijkę (usunąć dwa slashe „//”) - #define USE_ILI9341

Code:
// odkomentuj jeśli używasz ILI9341 a nie ST7789
// #define USE_ILI9341
Na
Code:
#define USE_ILI9341
Szukamy powyższego w kodzie w zakładce „CONFIG.H”

Dla wyświetlacza ILI9341 zmieniamy jeszcze w zakładce „DISPLAY.CPP” wiersz:

Code:
Adafruit_ILI9341 tft(&SPI,DISP_CS, DISP_DC, DISP_RST);
Na
Code:
Adafruit_ILI9341 tft(&SPI,DISP_DC, DISP_CS, DISP_RST);
Wgrywamy na ESP32 kod koltft

Jeśli pojawi się ekran z odbiciem lustrzanym:
1706202623723.png

Oznacza to, że podpięty został ekran ILI9341 i pominięty został jakiś krok wcześniej - należy odkomentować linijkę kodu w zakładce „CONFIG.H”
Z
Code:
//#define USE_ILI9341
Na
Code:
#define USE_ILI9341
Jeśli pojawi się ekran odwrócony o 180 stopni
1706202674401.png

to należy odkomentować linijkę (również w zakładce „CONFIG.H”):
z
Code:
//#define SCREEN_ROTATE
Na
Code:
#define SCREEN_ROTATE
Po ustawieniu właściwego wyświetlania obrazu, przechodzimy do kalibracji ekranu naciskając na klawiaturze „A” (tego „C” ze zdjęcia jeszcze nie macie – musicie zaliczyć kalibrację)

Kalibracja polega na naciśnięciu krzyżyka/plusika w rogu (nie należy naciskać „D”, bo przerwiemy kalibrację, bez której kolejne etapy będą niemożliwe).

Tak więc wszystkie kroki wyglądają następująco:
  • Wgranie kodu
  • Naciśnięcie „A” - kalibracja
  • Naciśnięcie krzyżyka/plusika w lewym górnym rogu
  • Naciśnięcie „C” - dalej
  • Naciśnięcie krzyżyka/plusika w prawym dolnym rogu
  • Naciśnięcie „C” – dalej
  • Naciśnięcie „C” – zapisz
  • Pojawi się na ekranie napis - „DANE ZOSTAŁY ZAPISANE”
Wyświetlacz powróci do ekranu początkowego, z tym że pod „A” kalibracja widzimy dodatkowo „C” Test
1706202831278.png


Tyle na dzisiaj. Dziękuję za uwagę :devil::devil::devil:
c.d.n.
 
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#14
Dzień dobry, dziś kolejna porcja treści nt. sterownika. Zaczynamy:

Etap 21
W etapie 7c Autor usuwa z kodu pozostałości obsługujące wyświetlacz OLED, oraz daje próbkę tego co zostanie wdrożone w kodzie w najbliższym czasie:

Po wgraniu kodu na wyświetlaczu dotykowym ukazuje się poniższy napis „MAKIETA V13-TFT”
1706526566443.png


Na razie dzięki wykorzystaniu klawiatury możemy uzyskać poniższy efekt:

A – semafory
1706526578210.png

B – tarcze
1706526589001.png

C – rozkład jazdy
1706526599825.png

D – pociąg lub komunikat
1706526608010.png


Kolejny kod kolejpan8a i uruchomienie sterowania dotykowego.
Po wgraniu kodu na ekranie pojawia się napis „MAKIETA V14 – TOUCH”
1706526632383.png


Na ekranie widać górne menu podzielone na 4 części części sterowania:
Semafory i Tarcze; Rozkład Jazdy; Komunikaty, Zapowiedzi peronowe.

Dla nieobsługiwanych (na razie) funkcji pokazuje się napis "NIE ZAIMPLEMENTOWANO":
1706526653405.png

Najprostsza do zaimplementowania pozycja to stałe komunikaty.
Możemy już na tym etapie sprawdzić ich działanie.
Uruchamiamy MONITOR PORTU SZEREGOWEGO
Wpisujemy HELP i widzimy dostępne polecenia:

1706526680523.png

Żeby zmienić komunikaty używamy polecenia „ANNO” w następujący sposób:
1706526699049.png

1706526703573.png


Po każdym wpisie anno… klikamy enter. Po uzupełnieniu interesujących Nas komunikatów ekran monitora prezentuje się następująco:
1706526713860.png

Należy teraz zapisać wszystko w pamięci poleceniem „STOREANN”
1706526724732.png


Robimy reset ESP32 i cieszymy się wgranymi komunikatami i tym co leci z głośnika.
Możemy także wykorzystać inne polecenia z powyższej listy i dostosować urządzenie do własnych potrzeb.
 

Załączniki

OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#15
Etap 22
Po wgraniu kodu na wyświetlaczu pojawia się napis „MAKIETA V15-TOUCH”.
1706526917722.png


Autor umożliwia uzyskanie informacji z jakiej funkcji obecnie się korzysta. Z racji braku miejsca na wyświetlaczu, odpowiednia pozycja będzie zaznaczona w menu.
1706526929988.png


Przede wszystkim w tej wersji kodu otrzymujemy rozkład jazdy. Bardziej funkcjonalny niż na małym OLEDzie. Z prawej strony widoczne są przyciski przewijania rozkładu. Dzięki nim możemy przesuwać rozkład o 1 lub o 5 pozycji w górę/dół.

To co ustawimy na ekranie dotykowym jest od razu widoczne na małym wyświetlaczu peronowym:
1706526947740.png

1706526952432.png

1706526958702.png


Robi się coraz ciekawiej, tak więc za jakiś czas kolejne usprawnienia.
c.d.n. :devil::devil::devil:
 

Załączniki

Lyntog

Znany użytkownik
Reakcje
1.080 6 2
#16
Podsunę pomysł :D Przydałoby się podłączenie dwóch ekranów - dotykowego jako master w nastawni i zwykłego jako slave na stacji, dzięki czemu można by sterować zdalnie tablicą na przystanku (zamiast używać do tego telefonu) co Ty na to? :)
 
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#17
Nie wiem czy się dobrze rozumiemy, ale właśnie ten efekt jest w etapie 22 - ostatnim jaki do tej pory zamieściłem.
Ustawiasz co chcesz na dotykowym w sterowniku a efekt jest prezentowany na małym (wymiarami pasującym do skali H0)
Duży ekran ze zdjęcia poniżej jest integralną częścią sterownika. Mały natomiast to wyświetlacz, który można zamontować jako rozkład jazdy na dworcu/peronach. Komunikacja między nimi odbywa się radiowo.
1706528633170.png

Telefon, telefonem. Jest to obsługa zdalna, np. siedząc wygodnie w fotelu.
 

Lyntog

Znany użytkownik
Reakcje
1.080 6 2
#18
Aaa, OK :D Ekstra, naprawdę świetna robota, będę chciał kiedyś kogoś pomęczyć, żeby mi właśnie coś takiego wykonał.

A jaki do tej pory wyszedł Ci koszt wszystkich użytych tu elementów? Mam na myśli wspomniany etap 22?
 
OP
OP
prezesedi

prezesedi

Aktywny użytkownik
Reakcje
359 2 0
#19
Aaa, OK :D Ekstra, naprawdę świetna robota
Dziękuję. Też jestem bardzo zadowolony.

A jaki do tej pory wyszedł Ci koszt wszystkich użytych tu elementów? Mam na myśli wspomniany etap 22?
Części użyte w etapie 22 po podsumowaniu dają koszt 151,77zł.

Nie są tu wliczone diody (semafory) i nie ma obudowy (bo jeszcze jej nie ma :cool:).
Po udostępnieniu ostatniego etapu, wstawię kosztorys każdego zakupionego przeze mnie elementu wraz z miejscem zakupu. Oczywiście ceny się zmieniają, więc będzie to cena z okresu zakupu.
 
Autor wątku Podobne wątki Forum Odpowiedzi Data
Dla początkujących 4

Podobne wątki