Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - lcddisplay

Strony: 1 [2] 3
31
Na warsztacie / Odp: Drawinowo od nowa (rozmowy RT).
« dnia: 18 Sierpnia 2022, 13:32:21 »
Kiedy będą realizowane pozostałe nagrania? Mam kwestię w misji 13, nagrałbym już dziś, ale nie ma wszystkich danych.

32
Super! Teraz działa wszystko jak należy. Bardzo Ci dziękuję i jestem Ci winny duże piwo ;)

Nie cytuj ostatniego postu w całości.
Matek123

33
Wg. pliku excel, który mi podlinkowałeś nie mogę uruchomić przełączenia kanału radia.

bitWrite(doPC[9], 1, digitalRead(52));
Nic się nie dzieje. Niektóre przełączniki np, światła, wyłącznik szybki - działają dobrze. Natomiast radio nie.

Domyślam się, że mogę korzystać z 8-bitowej tablicy, a sterowanie radiem będzie się odbywało w 16-bitowej?

34
Większość informacji i narzędzi znajdziesz w tym wątku.
Ja sobie zrobiłem jeszcze takie zestawienie.

O dziękuję Ci bardzo za ten plik. Natomiast w podlinkowanym wątku nie ma wszystkich informacji. Plik excel, który udostępnił maciek001 zawiera tylko odwołania do grup przełączników, nie ma tam wyszczególnionych konkretnie jaki bit za co odpowiada przy komunikacji doPC.

35
Ale o jakie adresy Ci chodzi? Szukasz opisu bitów w ramkach komunikacyjnych doPC i zPC, czy coś innego masz na myśli?

Tak, szukam opisów doPC.

36
Dobra tak zrobię, pobawię się bocznikiem najpierw. Będę próbował z odczytami oporności.

Jeszcze tylko zapytam, skąd wziąć aktualną tablicę jeśli chce wiedzieć, którymi adresami wysterować konkretnie przełączniki?

37
Dobra, a z tym nastawnikiem to jak najlepiej? Odczytaną określoną oporność z kolumny nastawnika stosować jako numer pozycji? Jeżeli np. Arduino odczyta oporność 1K to ustawi pozycję 21?

38
Dobra, no to jestem w domu z przyciskami impulsowymi.

To teraz kolejne pytanie do Was jak mają być kodowane przyciski, które mają kilka pozycji, np. takie od kanału radia?


39
Dobra Panowie to teraz tak, miałem to wpięte do GND i PIN52 i sterowałem stanem niskim. Teraz przepiąłem do +5V i PIN52 i dodatkowo PIN52 puściłem przez rezystor do GND. W ten sposób działa prawidłowo. W takiej konfiguracji mam PULLDOWN.

Pytanie czy Wy się bawicie w rezystory czy korzystacie właśnie z funkcji PULLUP?

40
Dziękuję za rzeczową odpowiedź. Natomiast jeśli ustawię wartość maksymalnego wychylenia w stosunku do maksymalnego wskazania na manometrze to wtedy wskazówka pokazuje bzdury.
Dlatego moje pytanie brzmi, czy maksymalna wartość w bitach, tudzież 255 dla zbiornika głównego to 1,6 Mpa czy raczej 0,8 Mpa według symulatora?
Patrząc na to co mam w kodzie testowym, gdy sobie ćwiczyłem zastosowanie tych silniczków to mam tak jak pisałem wcześniej:
motor3.setPosition(map(TankPress, 0, 1023, 0, 3318));gdzie TankPress to wartość z exe, a konkretnie ciśnienie w zbiorniku głównym z obu bajtów 15 i 16, żeby mieć zakres 10 bitowy (do 1023).
zPC_TankPress = zPC[15];
zPC_TankPress1 = zPC[16];
TankPress = (zPC_TankPress << 0) | (zPC_TankPress1 << 8);
Jeśli chcesz na jednym bajcie to po prostu bierzesz sobie tylko bajt 15 i robisz mapowanie nie do 1023 tylko do 255.
Odpowiadając na pytanie, to ciśnienie z exe chyba jest w barach i max czyli 255 (lub 1023) to jest max na skali manometru. Ja to sobie robiłem tak, że odpalałem ten program testujący od @maciek001. Tam ustawiam rozdzielczość, którą wykorzystuje (8 lub 10 bitów) i suwakiem od danego manometru szukam maksymalnej wartości wskazywanej na skali manometru. To oczywiście gdy w kodzie dla silnika jest pełen zakres i mapowanie wtedy jest 0, 1023, 0, 3780. Wtedy wychodzi, że maksymalne wskazanie nie jest oczywiście na końcu zakresu silniczka tylko wcześniej i ograniczam wtedy zakres pracy silniczka (liczbę kroków) tak aby mapowanie zakresu 0-1023 (lub jak wolisz 0-255) odpowiadało zakresowi kroków 0-X, gdzie X będzie maksymalną wartością na skali manometru (1,6 dla ZG lub 1,0 dla PG i CH) dlatego w moim przypadku zakres dla ZG to 0-3318 i takie mapowanie mam w finalnym kodzie. Oczywiście użyteczny zakres pracy musisz podać w eu07.ini w linii uarttune, gdzie podaje się wartości ciśnienia i odpowiadające im wartości przesyłane po UART. Dla 10 bitów i ZG powinno tam być 1.6 1023 (lub dla 8 bitów 1.6 255). To powoduje, że exe wysyła wartość z podanego w ini zakresu 0-1023 lub 0-255 i tę wartość wykorzystujesz w kodzie, żeby przemapować na kroki silniczka w zakresie od 0 do wartości odpowiadającej maksimum na skali. Po tym wszystkim bawiąc się suwaczkiem w programie diagnostycznym powinieneś mieć wskazania od 0 do maksimum skali. Zatem zakres tego co wysyła exe zależy od wpisu uarttune w eu07.exe.

Edit1: Policzyłem sobie jeszcze jak to wszystko działa i wyszło mi, że użyteczny kąt dla pełnych skali manometrów to około 276°. Jeśli użyjemy 10 bitów to wychodzi ok 0,3° na bit co daje 3 kroki na 1°. W związku z tym Używając tego specjalizowanego układu AX1201728SG i 10 bitów z exe to i tak wracamy do rozdzielczości podstawowej zamiast 12 kroków na 1°. Ten 1° na ok. 50 mm długości wskazówki daje prawie 0,9 mm na jej końcu. Przy pewnej bezwładności silniczka to raczej nie daje szans na płynne wskazania. Niby 1 bit powoduje przesunięcie liniowe ok 0,3 mm na końcu wskazówki i to powinno nie być bardzo widoczne jednak dane z exe zanim trafią do silnika to pewnie chwilę trwa i on nie wskazuje wartości co 1 bit tylko skokowo co kilka i stąd drgający ruch wskazówek. Muszę się jeszcze pobawić parametrami w bibliotece Switec i może to coś poprawi.

Edit2: Pobawiłem się jeszcze raz tymi silniczkami i zaktualizowałem swój opis na https://baur.pl/manometry-naped-alternatywny/ Może komuś się przyda.

Wyczerpałeś temat, dziękuję Ci bardzo. Naprowadziłeś mnie po raz kolejny. Zakres pracy definiuje kod Arduino, ale również plik INI.

Ja również spróbuję pobawić się płynnością wskazań i dam znać co mi wyszło.

Jeszcze trochę z innej beczki, próbuję podłączyć przycisk pod kasowanie CA/SHP. Pomiędzy PIN52 i GND mam obwód, który jest zamykany poprzez naciśnięcie przycisku.

Dlaczego mimo tego, że obwód jest otwarty to w symulatorze mam wciśnięty przycisk?

Oto kod:

bitWrite(doPC[4], 7, digitalRead(52));
Kiedy natomiast zastouję taki kod:

    if(digitalRead(52) == LOW)
    {
      bitWrite(doPC[4], 7, 1);
    }
    else{
      bitWrite(doPC[4], 7, 0);
    }

wtedy wszystko działa jak należy. Ale dlaczego tak jest?

41
Dziękuję za rzeczową odpowiedź. Natomiast jeśli ustawię wartość maksymalnego wychylenia w stosunku do maksymalnego wskazania na manometrze to wtedy wskazówka pokazuje bzdury.
Dlatego moje pytanie brzmi, czy maksymalna wartość w bitach, tudzież 255 dla zbiornika głównego to 1,6 Mpa czy raczej 0,8 Mpa według symulatora?


42
Którego exe mam używać, żeby wysterować manometry 10 bitami? Na standardowym działa tylko 8 bitowe sterowanie.

43
Dziękuje za naprowadzenie. Elektronikę ogarniam, zrobię PCB, polutuję. Natomiast Arduino dopiero się uczę na potrzeby budowy pulpitu.

Widzę, że masz rozdzielczość 10 bitową. Maszyna obsługuje 8 bitową tylko, tak?

Odnośnie tego:

Cytuj
map jest po to, żeby dopasować wartość z exe (od 0 do 1023) do użytecznego zakresu wskazań na skali manometrów (od 0 do 3xxx zależnie od manometru).

U mnie to wygląda tak:

- użyteczny zakres silnika krokowego to 315 stopni
- 12 kroków na stopień = 315 * 12 = 3780

Jeśli ciśnienie maksymalne w zbiorniku głównym na manometrze to 1,6Mpa, a maksymalne wskazanie w symulatorze kiedy zbiornik jest pełny to 0,8Mpa to skaluję z proporcji:

3780 = 1,6
x = 0,8

x= 1890

Wobec tego:

motor1.setPosition(map(zPC[11], 0, 255, 0, 1890));
motor1.update();

I takie właśnie rozwiązanie u mnie funkcjonuje prawidłowo.

Bo w sumie skąd mam wziąć informację o maksymalnym ciśnieniu dla wartości bitowej 255?

Teraz mam tą informację z obserwacji i dopasowania pracy fizycznej wskazówki silniczka do wskazania manometru na symulatorze.

No bo 255 to raczej nie jest 1,6Mpa w głównym zbiorniku, prawda?

44
Jakie potencjometry najlepiej wykorzystać do hamulców?
Liniowe 10K

Dzięki za pomoc.

A teraz mam jeszcze pytanie do ekspertów Arduino.

Do wysterowania wskazówek manometrów chciałbym wykorzystać silniki krokowe x27.168.

Podłączyłem wszystko poprzez sterownik AX1201728SG:

https://guy.carpenter.id.au/gaugette/resources/2017-04-29/AX1201728SG_bb.png

No i teraz autor rozwiązania proponuje taki kod, żeby wskazówki się poruszały:

Cytuj
#include <SwitecX12.h>

const int STEPS = 315 * 12;
const int A_STEP = 8;
const int A_DIR = 9;
const int RESET = 10;

SwitecX12 motor1(STEPS, A_STEP, A_DIR);


void setup() {
  digitalWrite(RESET, HIGH);
  Serial.begin(9600);
  motor1.zero();
  motor1.setPosition(STEPS/2);
}

void loop() {
  static bool forward = true;
  static int position1 = STEPS * 3/4;
  static int position2 = STEPS * 1/4;
  if (motor1.stopped) {
    motor1.setPosition(forward ? position1 : position2);
    forward = !forward;
  }
  motor1.update();
}

Nie znam się kompletnie na programowaniu. Jak to przerobić, żeby ten silnik reagował na ciśnienie w przewodzie głównym?

45
Jakie potencjometry najlepiej wykorzystać do hamulców?

46
Dzwoniłem wszędzie. Nigdzie nic nie załatwiłem. Może coś będzie w ZNKT do modernizacji, ale mam dzwonić w wakacje.

47
No to będę jutro dzwonił. Zobaczymy co załatwię.

48
Dziękuję, napiszę kilka maili i podzwonię. Dam znać jak mi poszło.

49
Koledzy,

możecie doradzić skąd zdobyć kolumnę nastawnika od siódemki?

Próbowałem kontaktować się z firmą Olmet, która złomuje lokomotywy, ale oni nie odsprzedają takich rzeczy, w ogóle nic od nich nie idzie odkupić do prywatnego zastosowania.

Na OLX i Allegro to raczej jakaś drobnica, typu krany, haslery i tak dalej.

Doradźcie coś proszę.

50
Widok z okna na Bałtyku.

51
Na warsztacie / Odp: Drawinowo od nowa (rozmowy RT).
« dnia: 20 Stycznia 2022, 11:46:24 »
Cześć Wam,

gdyby ktoś odpadł to jestem chętny do nagrań komunikatów radiowych.

52
Na warsztacie / Odp: Drawinowo od nowa
« dnia: 19 Stycznia 2022, 22:11:35 »
Dziękuję kolego, zgłoszę się we wspomnianym poście.

53
Na warsztacie / Odp: Drawinowo od nowa
« dnia: 19 Stycznia 2022, 10:46:23 »
Można jeszcze pomóc w nagraniu dialogów radiowych?

54
Bocznica / Zaczątek shadera wycieraczek - co z tym?
« dnia: 10 Października 2021, 22:01:39 »
Czy jest jakaś nadzieja, że temat działających wycieraczek powróci?

55
Inne niekolejowe / Odp: SimRail2021 - Czyli Polski Symulator PKP
« dnia: 10 Października 2021, 13:18:27 »
Wszystko fajnie, mam nawet 50 fps na RTX 3070. Dźwięki są ok, ale faktycznie syrena Elfa brzmi jak z syntezatora MIDI. Grafika jest przekombinowana, za dużo wszelkich efektów. Natomiast jednego mi bardzo brakuje i wydaje mi się, że tylko Maszyna to odwzorowuje. Mianowice, polskiego klimatu. W Maszynie to czujesz ten ciężki poniedziałkowy poranek. W SimRail tego nie ma.

56
A co byłoby najlepiej zastosować? Może być Arduino? Tzn, osobne Arduino, np NANO, albo UNO? Czy może być to samo Arduino co do reszty komponentów?

57
Cześć,

mógłby mi ktoś poradzić jakie komponenty potrzebuję do uruchomienia Haslera (aktualnie posiadam model A16). Wiem, że musi być falownik i odpowiedni zasilacz. Może ktoś podzieli się linkiem co dokładnie zakupić, żeby go uruchomić?

Wiem, że na stronie www.baur.pl są gotowe schematy, jednak opisane tam rozwiązania dotyczą głównie PoKeys'a, a nie Arduino.

Czy może w kwestii hardware'u nic się nie zmienia i muszę sam zrobić ten falownik i kupić ten zasilacz: https://www.tme.eu/pl/details/lrs-150-48/zasilacze-do-wbudowania/mean-well/

Dziękuję!

58
Kolego, już wszystko uruchomiłem, moim błędem były różne wartości prędkości transmisji danych (różna w kodzie, różna w ini i testerze). Teraz wszystko działa jak należy. Mam podłączony czuwak, shp i na pinie 9 miernik, który wskazuje napięcie sieci po podniesieniu pantografu.

Filmik z działania czuwaka i shp:

https://streamable.com/njm1c3

Praca przekaźników:

https://streamable.com/wd3bn1

Dotychczasowy kod:

volatile uint8_t zPC[52] = {0}; // standardowe bajty przekazywane do kodu Arduino
  volatile uint8_t doPC[20] = {0xEF, 0xEF, 0xEF, 0xEF, 0}; // standardowe bajty przyjmowane z kodu Arduino
         
  void setup() {
    pinMode(2, OUTPUT);     //ustawienie pinu 2 jako wyjście cyfrowe
    pinMode(3, OUTPUT);     //ustawienie pinu 3 jako wyjście cyfrowe
    pinMode(9, OUTPUT);     //ustawienie pinu 9 jako wyjście cyfrowe
    digitalWrite(2, LOW);     //ustawienie stanu niskiego na pinie 2
    digitalWrite(3, LOW);     //ustawienie stanu niskiego na pinie 3
    digitalWrite(9, LOW);     //ustawienie stanu niskiego na pinie 9
    Serial.begin(115200);     //nawiązanie komunikacji z prędkością 115200b/s
    Serial.setTimeout(10);
    while(!Serial){};     //czekanie do nawiązania komunikacji z komputerem
  }
 
  void loop() {

    digitalWrite(2, (bitRead(zPC[8], 6)));     //czuwak
    digitalWrite(3, (bitRead(zPC[8], 7)));     //shp
    analogWrite(9, zPC[17]);                   //amperomierz 1
   
    while (!Serial.available()) {};
    Serial.readBytes((char*)zPC, 52);
    Serial.write((char*)doPC, 20);
   
  }

Powoli zaczynam ogarniać wszystko.

59
W przerwie od nauki Arduino zrobiłem sobie czuwak. 4 diody LED 10mm czerwone, przekaźniki (żeby klikało), obudowa z blachy.

60
No to teraz mam tak:

  volatile uint8_t zPC[52] = {0}; // standardowe bajty przekazywane do kodu Arduino
  volatile uint8_t doPC[20] = {0xEF, 0xEF, 0xEF, 0xEF, 0}; // standardowe bajty przyjmowane z kodu Arduino
         
  void setup() {
    pinMode(2, OUTPUT);     //ustawienie pinu 2 jako wyjście cyfrowe
    pinMode(3, OUTPUT);     //ustawienie pinu 3 jako wyjście cyfrowe
    pinMode(9, OUTPUT);     //ustawienie pinu 9 jako wyjście cyfrowe
    digitalWrite(2, LOW);     //ustawienie stanu niskiego na pinie 2
    digitalWrite(3, LOW);     //ustawienie stanu niskiego na pinie 3
    digitalWrite(9, LOW);
    Serial.begin(115200);     //nawiązanie komunikacji z prędkością 115200b/s
    Serial.setTimeout(10);
    while(!Serial){};     //czekanie do nawiązania komunikacji z komputerem
  }
 
  void loop() {

    digitalWrite(2, (bitRead(zPC[8], 6)));     //czuwak
    digitalWrite(3, (bitRead(zPC[8], 7)));     //shp
    analogWrite(9, zPC[19]);                   //amperomierz 1
    byte zPC[19] = {0};
   
    while (!Serial.available()) {};
    Serial.readBytes((char*)zPC, 52);
    Serial.write((char*)doPC, 20);
   
  }

Dobrze?

zPC[19] powinno sterować amperomierzem, a reaguje na ciśnienie w zbiorniku głównym…

Strony: 1 [2] 3