• Ten serwis używa "ciasteczek" (cookies). Korzystając z niego, wyrażasz zgodę na użycie plików cookies. Learn more.
  • 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.

Układ sterowania semafora KLUBA z Arduino UNO

MarGe

Aktywny użytkownik
Reakcje
10 1 0
#1
Cześć, chciałbym zrobić układ sterowania semaforem KLUBA za pomocą Arduino UNO. Niestety problemem (być może nie jedynym) jest fakt, że Arduino daję max. napięcie 5V DC zaś semafory KLUBA są zasilane napięciem ~16V (DC?). Czy ktoś z Was ma pomysł jak można to rozwiązać?
 

Marqus

Moderator Poznańskiego Klubu Modelarzy Kolejowych
PKMK
Reakcje
434 8 0
#2
Nic nie stoi na przeszkodzie, by zasilać je z 5V.
Stosując zasilanie 12V zmieniałem rezystory na większą rezystancję, bo przy oryginalnych miałem wrażenie, że świecą za mocno.
A jak przy 5V będą świecić za słabo, to wymienisz na rezystory o mniejszej rezystancji.
 
OP
OP
MarGe

MarGe

Aktywny użytkownik
Reakcje
10 1 0
#3
ah rzeczywiście, nie pomyślałem, że mniejszy prąd będzie związany z jasnością - tym bardziej, że dla mnie również oryginalnie te diody świecą za mocno.
 

r-mik

Pan Chlewik
Reakcje
145 30 0
#5
Iloma semaforami ma sterować UNO?
Czy UNO to nie rozrzutność? Ma mostek USB-UART, stabilizator 3,3V, kwarc. Te elementy wydają się być niepotrzebne chyba, że je wykorzystujesz w jakiś sposób. W jaki?
 

r-mik

Pan Chlewik
Reakcje
145 30 0
#7
5-6 semaforów po 5 komór, to 25 lub 35 GPIO na same semafory, UNO ma za mało GPIO.
Sterowanie przeglądarką? Dokładniej jak? UNO ma być serwerem HTTP?
 
OP
OP
MarGe

MarGe

Aktywny użytkownik
Reakcje
10 1 0
#8
UNO tylko pośredniczy, serwerem jest komp a przeglądarka klientem. Teraz muszę znaleźć info jak potroić ilość wyjść PWA na płytce i gotowe :)
 

r-mik

Pan Chlewik
Reakcje
145 30 0
#10
UNO tylko pośredniczy, serwerem jest komp a przeglądarka klientem.
UNO pośredniczy a jak odbiera dane z serwera? DCC?

Teraz muszę znaleźć info jak potroić ilość wyjść PWA na płytce i gotowe :)
Można programowo ale ma to swoje ograniczenia. Jeśli sterownik ma dekodować DCC to programowe PWM beda miały swoje ograniczenia. Najlepiej wybrać uC z większą liczbą wyjść PWM.
 

Mateusz B

Moderator Grupy KKMK
Zespół forum
KKMK
H0e
Reakcje
327 2 0
#11
Układy PCF8574 sterowane magistralą I2C pozwalają zwiększyć ilość pinów cyfrowych o 8, a układy PCA9685 dają 16 wyjść PWM. Na Arduino są dostępne wygodne biblioteki do ich obsługi, a w internecie jest pełno tutoriali. Układy PCA9785 mają minimalną częstotliwość 40Hz, więc miganie zielonego i pomarańczowego sygnału trzebaby rozwiązac programowo.
 
Ostatnio edytowane:

r-mik

Pan Chlewik
Reakcje
145 30 0
#12
Układy PCF8574 sterowane magistralą I2C pozwalają zwiększyć ilość pinów cyfrowych o 8
Pokaż soft, który realizuje PWM na PCF8574, napisz jakie ma parametry (rozdzielczość i częstotliwość) i jak obciąża mikrokontroler. To, że sie da wycisnąć ponad 40Hz przy 8-bit PWM to ja wiem. Pytam jednak o gotowca, bo obsługa I2C w Arduino na przerwaniach jest dla wielu ściana nie do przebicia. Inna sprawa, dlaczego używać archaicznego PCF8574 skoro sa nowsze, lepsze układy? Mają 16-wyjśc, pracują na 400kHz a nie na 100. Mają wyjścia PP a nie pseudo dwukierunkowe jak w 8051 gdzie podłączenie np ULN2803 wymaga dodatkowych elementów. Przy 400kHz i ośmiu wyjściach uzyskam nie 43Hz a ponad 170 lub 43Hz ale 12-bit.
40Hz to trochę za mało na PWM dla LED, min to 80...100Hz nieosiągalne dla PCF8574 , chyba, że zmniejszy się rozdzielczość to np 6-bit, wtedy PCF wyciągnie ponad 170Hz. 6-bit dla LED przy płynnej zmianie intensywności świecenia to w zasadzie dolna granica, poniżej zmiany będą w pewnym zakresie skokowe, co wynika z nieliniowej charakterystyki oka ludzkiego i nieliniowej zależności prądu LED do intensywności świecenia.
Ostatecznie można użyć PCF ale to tak jakby używać Z-80 z EEPROM/RAM/CTC/ zamiast AVR lub ARM.
Na przyszłość proponowałbym przeprowadzić podstawowe obliczenia zanim zaproponuje się jakieś rozwiązanie popularne w "sieci" to sterowania przekaźników w roli PWM.

Układy PCA9785 mają minimalną częstotliwość 40Hz, więc miganie zielonego i pomarańczowego sygnału trzebaby rozwiązac programowo.
Co ma miganie do częstotliwości PWM? Jeśli PWM-em chcesz zrealizować miganie światła, to chyba nie wiesz co to jest, do czego służy i jak działa PWM. Teoretycznie, ustawiając PWM na 50% i częstotliwość na np 1Hz uzyska się efekt migania światła, ale będą to dwa stany, świeci/nie świeci a powinno być rozjaśnia się, świeci, ściemnia się, jest wygaszone, itd.

Płynne rozjaśnianie i ściemnianie świateł trzeba zrealizować programowo. Sprzętowo to można zrobić na mikrokontrolerze, który ma DMA. Zewnętrzne PWM jak PCA9785, nie mają mikrokontrolera, tym samym DMA. Ich budowa jest dość prosta i sprzętowo potrafią wygenerować PWM o zadanych parametrach. Jeśli ma sie on zmieniać w czasie, to trzeba do PCA9785 wysyłać zmienne w czasie nastawy. W sumie jest to proste (np dla mnie) ale dla wielu ściana nie do przebicia, wysyłać na przerwaniach dane do PCA9785 a w innym przerwaniu realizować płynne rozjaśnianie i ściemnianie. Może zaproponujesz RTOS? Jest na Arduino, tyle, że pisanie na RTOS tylko pozornie jest łatwe. Semafory, mutexy itp wymagają pewnego sposobu pisania softu, gdzie tylko można trzeba zwalniać czas CPU dla innych zadań a i tak pewnie nie uniknie się napisania obsługi I2C na przerwaniach zwłaszcza na AVR, bo na ARM może by się nawet to udało, tyle, ze dla ARM, npSTM32, CubeMX wygeneruje gotowy kod do komunikacji po I2c na przerwaniach a nawet i na DMA więc problemu nie ma.

Inna sprawa, to po co dodawać zewnętrzny układ zamiast dać inny mikrokontroler z większą liczbą PWM? Kombinacja mikrokontroler + PCA9785 wyjdzie drożej niż mikkrokontroler z większą liczba PWM. Program na "większy" mikrokontroler pisze się łatwiej i szybciej niż na mikrokontroler + PCA9785.


Podsumowując:
Hasło "weź PCF8574, pełno przykładów w Internecie", to porada jak zbuduj wielki piec i wypal sobie żeliwo. Nie sądzę aby autor wątku był ekspertem od mikrokontrolerów skoro pisze o Arduino. Stara sie pomagać osoba, też nie za bardzo znająca mikrokontrolery. W takiej sytuacji jedynym wyjściem jest konkretny link do rozwiązania.
 
Ostatnio edytowane:

Mateusz B

Moderator Grupy KKMK
Zespół forum
KKMK
H0e
Reakcje
327 2 0
#13
Przepraszam za moją mało profesjonalną wypowiedź, ale z tych kilku postów nie domyśliłem się że chodziło o rozjaśnie i ściemnie. W tym kontekście moja wypowiedź nie jest użyteczna. Spodziewałem się że chodzi o podstawową funkcjonalność wyświetlania poprawnych sygnałów(w tym migające).

Pokaż soft, który realizuje PWM na PCF8574, napisz jakie ma parametry (rozdzielczość i częstotliwość)
Kiedyś coś podobnego pisałem, ale korzystając ze wspomagania sprzętowego(czyli łatwo). Osiągnałem czestotliwość zmiany sygnału 50Hz, a po podniesieniu częstotliwości do 400kHz(archaiczne PCF8574 taką obsługują), udało mi się wyciągnąć zaledwie 83Hz. Do sterowania jasnością diody to za mało, do generowania sygnału migającego by wystarczyło.

Co ma miganie do częstotliwości PWM? Teoretycznie, ustawiając PWM na 50% i częstotliwość na np 1Hz uzyska się efekt migania światła.
No właśnie tak chciałem zaproponować światło migające, Wypełnienie na 50% i częstotliwość np. 1Hz. Faktycznie, brak tu modulacji szerokości, więc nie jest to czysty PWM.

Inna sprawa, to po co dodawać zewnętrzny układ zamiast dać inny mikrokontroler z większą liczbą PWM?
Choćby po to, żeby każdy taki zewnętrzy układ umieścić pod makietą zaraz pod semaforem. Zamiast ciągnąć pod makietą przewody do każdej komory świetlnej, pociągnąć magistralę I2C. U kolegi MarGe mamy 5 semaforów po 5 komór, co daje 25 przewodów, magistrala I2C to 2 przewody. Na makiecie modułowej to kolosalna różnica.
 
Ostatnio edytowane:

r-mik

Pan Chlewik
Reakcje
145 30 0
#14
Choćby po to, żeby każdy taki zewnętrzy układ umieścić pod makietą zaraz pod semaforem. Zamiast ciągnąć pod makietą przewody do każdej komory świetlnej, pociągnąć magistralę I2C. U kolegi MarGe mamy 5 semaforów po 5 komór, co daje 25 przewodów, magistrala I2C to 2 przewody. Na makiecie modułowej to kolosalna różnica.
Jaka max dopuszczalna jest długość I2C przy 400kHz bez dodatkowych, drogich driverów?
Skoro po obliczeniach wiadomo, że nawet na jeden moduł makiety I2C to za dużo (o argumentach u mnie działa na 3 metry, napiszę później) to jedyne wyjście magistrala DCC i jedne przewód a nie dwa jak w I2C.
Jeśli już kombinować odbiór DCC i kilka "satelitów", to nie I2C, która się do tego bez drogich driverów nie nadaje, tylko prędzej:
- OneWire
- UART z pętlą prądową
- RS485
Można rozpatrzyć drivery SPI i transmisję driverami od RS485/422 ale albo kilka tanich układów kompatybilnych z MAX485 albo drogie oryginały MAX-ima (np 4 nadajniki 2 odbiorniki w jednej obudowie). Obawiam się jednak, że w końcowym rozliczeniu, będzie to droższe niż osobny sterownik do każdego semafora.

Najrozsądniej jest dać jeden, dwa lub kilka sterowników semaforów na jeden moduł, każdy obsługujący kilka semaforów, taki kompromis cena/ilość przewodów.
Właściwie, to nie wiem czy jest sens kombinować z Arduino skoro w necie są rozwiązana sterowników 4x2-komory, 2x3, 2x4, 1x5 + tarcza. Są też uniwersalne sterowniki semaforów 8 wyjść (5komór+tarcza, 5komór + pas + dodatkowe sygnały, itp), wszystko na stronie PACO.


PS
Argumenty, w stylu "PCF8574 działa także na 400kHz" są tak samo dobre, jak zmuszanie pracowników do pracy 80 godzin tygodniowo albo promowanie przechodzenia na czerwonym świetle "bo mnie się udaje". Prędzej czy później pojawi sie problem, choćby inna seria układów. W konsekwencji takie 400kHz dla PCF zadziała u jednej osoby, u innej już nie. Może nawet być tak, że podłączamy taki wynalazek do innej makiety i przestaje działać, bo temperatura w pomieszczeniu inna, bo napięcie zasilania trochę inne.
 
OP
OP
MarGe

MarGe

Aktywny użytkownik
Reakcje
10 1 0
#15
Cześć, po dłuższej przerwie wróciłem do tematu i znalazłem rozwiązanie na powielenie portów PWM. Z tego co widzę, rozwiązaniem powinno być zamontowanie dodatkowej płytki (lub kilku płytek) PCA9685. Niestety trafiłem na kolejny problem mianowicie nie wiem jak podłączyć inne diody z semafora tak aby dało się nimi niezależnie sterować za pomocą wyjść PWM z Arduino. W załączeniu przesyłam schemat połączenia. Dla czerwonej diody - wszystko ładnie działa jednak gdy w podobny sposób podłączam kolejne diody, np. zieloną to zmieniając napięcie PWM tej czerwonej inne tak samo się zmieniają. Czy ktoś z Was ma pomysł jak to prawidłowo podłączyć? Może nie jest to w ogóle możliwe bez dodatkowych układów scalonych..
1.jpg
2.jpg
 

r-mik

Pan Chlewik
Reakcje
145 30 0
#16
płytki (lub kilku płytek) PCA9685
Złą drogę wybrałeś!
Pakujesz się niepotrzebnie w koszty, zamiast mnożyć niepotrzebnie mikrokontrolery, mostki USB, PWM po I2C, weź płytkę NUCLEO z STM32 z wymaganą ilością PWM. Będzie bardziej niezawodnie, taniej i szybciej.

płytki (lub kilku płytek) PCA9685
W załączeniu przesyłam schemat połączenia.[/QUOTE]
Gdzie bo nie widzę.

Dla czerwonej diody - wszystko ładnie działa jednak gdy w podobny sposób podłączam kolejne diody, np. zieloną to zmieniając napięcie PWM tej czerwonej inne tak samo się zmieniają.
Tu raczej jasnowidzów nie ma.
Nie sadzę aby bez kodów źródłowych ktokolwiek mógł pomóc.
 
OP
OP
MarGe

MarGe

Aktywny użytkownik
Reakcje
10 1 0
#17
Złą drogę wybrałeś!
Złą drogę wybrałeś!
Pakujesz się niepotrzebnie w koszty, zamiast mnożyć niepotrzebnie mikrokontrolery, mostki USB, PWM po I2C, weź płytkę NUCLEO z STM32 z wymaganą ilością PWM. Będzie bardziej niezawodnie, taniej i szybciej.

W załączeniu przesyłam schemat połączenia.
Gdzie bo nie widzę.

Arduino nie stanowi dla mnie problemu - mnie chodzi o sam sposób podłączenia. Na zdjęciu widać jakie przewody jak są połączone. Starałem się tak wykonać zdjęcie aby było to w miarę jasno widoczne. Na schematach się nie znam ponieważ nie jestem elektronikiem. Niestety nie wiem jak podłączyć semafor do Arduino poprzez płytkę stykową tak bym mógł kontrolować za pomocą złącz PWM każdą diodę osobno. Kod do sterowania jest bardzo prosty nie trzeba do tego być jasnowidzem:
zakładając, że dioda czerwona jest podłączona pod styk PWM nr 6 mamy np.:
led[6].pulse() - tu może być dowolna funkcja z API , przykładowo pulse oznacza pulsowanie diody nr 6
To działa ale przy takim podłączeniu przewodów jak na zdjęciu pulsuje również dioda zielona i tu jest sedno sprawy.
 

r-mik

Pan Chlewik
Reakcje
145 30 0
#18
Arduino nie stanowi dla mnie problemu - mnie chodzi o sam sposób podłączenia. Na zdjęciu widać jakie przewody jak są połączone. Starałem się tak wykonać zdjęcie aby było to w miarę jasno widoczne. Na schematach się nie znam ponieważ nie jestem elektronikiem.
W tej wypowiedzi są przeciwności "Arduino nie stanowi dla mnie problemu" a "Na schematach się nie znam ponieważ nie jestem elektronikiem."
Arduino to zarówno program jak i sprzęt!!!

Niestety nie wiem jak podłączyć semafor do Arduino poprzez płytkę stykową tak bym mógł kontrolować za pomocą złącz PWM każdą diodę osobno. Kod do sterowania jest bardzo prosty nie trzeba do tego być jasnowidzem:
zakładając, że dioda czerwona jest podłączona pod styk PWM nr 6 mamy np.:
led[6].pulse() - tu może być dowolna funkcja z API , przykładowo pulse oznacza pulsowanie diody nr 6
Ten opis kompletnie mi nic nie mówi, przemawia do mnie kod źródłowy programu z jasnymi komentarzami.
Jeśli o mnie chodzi, to:
brak schematu + brak programu = brak pomocy.

PS
HTML to też programowanie a nawet poprawnie nie potrafisz zacytować treści.
 

r-mik

Pan Chlewik
Reakcje
145 30 0
#20
Kolejny raz, zamiast pomocy, to pokazywanie, jaki to jesteś super kolego @r-mik , nie pomogłeś, a mogłeś zniechęcić autora. Słabo.
Jak sobie wyobrażasz, że mam pomóc bez kodu programu, gdzie z opisu wynika, że jest błąd, jak i bez schematu? Jak jesteś jasnowidzem to pomóż! Chyba jednak nie, bo nie pomogłeś! Raczej nikt nie pomoże bo niby skąd wiedzieć którymi wyprowadzeniami steruje program? Nie znając programu wiesz, które to wyprowadzenia? Ja nie wiem!
Co do schematu, w wypowiedzi jesat mowa o płytce z PCA9685, której na fotografii nie widać. Gdyby był schemat, wszystko byłoby jasne a tak muszę zgadywać, nie ma PCA9685, do jakiś tam pinów podłączony jest semafor, szukaj w dokumentacji co to właściwie za pin i zgaduj do jakiego wyprowadzenia semafora podłączony, cze diody są połączone w układzie WA czy WK.
Mamy równanie z kilkunastoma niewiadomymi i jedną wiadomą - nie działa. Takie równania mają albo nieskończenie wiele rozwiązań abo żadnego.

Prosta reguła elektroników: "Bez schematu nie ma wspólnego tematu".
Będzie schemat, będzie kod programu wraz z źródłami bibliotek, wtedy będzie łatwo pomóc a tak "Czekaj tatka latka" bo biblioteki Arduino są "skopane" od początku do końca i obsługa PWM nie jest tu wyjątkiem, zwłaszcza, że w wielu przepadkach PWM koliduje z czasem systemowym.
Jeśli mamy taki przypadek, to życzę powodzenia w udanej pomocy, bez kody, bez schematu.
Nie ukrywam, że jestem na nie jeśli chodzi o Arduino, ale nie dlatego, że jest to jakaś konkurencja, bo ten bubel nie jest żadną konkurencją dla mnie. Bardzo dobrze znam Arduino na AVRmega/tiny, dosyć dobrze ESP8266 trochę ESP32 bo czasem ich używam i nie mam ochoty poznawać kolejnych Arduinowych bubli na ARM i innych CPU bo szkoda czasu i nerwów w szukaniu błędu tam gdzie go nie ma.

Z jednym się zgadzam, "słabo", że zadając pytanie nie daje się niezbędnych informacji, oczekuje pomocy a gdy chcę pomóc i o brakujące informacje się upominam to autor daje "Jestem na nie" co nie najlepiej o nim świadczy i mam przeczucie, że będzie sobie musiał radzić sam bo charakter jego wypowiedzi/zachowania jest roszczeniowy.
 
Ostatnio edytowane:
Autor wątku Podobne wątki Forum Odpowiedzi Data
Elektryka 9
Elektryka 36
Elektryka 25
Elektryka 2
Elektryka 29

Podobne wątki