Arduino - jednoduché aplikace pro malá kolejiště.

Schémata, zapojení, návody, dotazy a postupy k využití v železničním modelářství.

Moderátoři: Michal Dalecký, Jarda H., Rudolf, 123.marek

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod fulda » pon 11 čer, 2018 7:38 am

Kajinek11 píše:Díky, ano to mi nedošlo. Spínače polohy výhybek jsou jasné. Tam musím dát např: V1==HIGH.

Poradím ti jednu vychytávku pro nás programátorské amatéry. Namísto "if (a==3) .." piš "if (3==a) ..". Je to taková prasárna, která ma za následek to, že pokud se uklepneš a napíšeš "if (3=a) ..", tak ti to překladač vyhodí jako chybu že do konstanty nelze přiřadit proměnnou.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Uživatelský avatar
fulda
 
Příspěvky: 4091
Registrován: pon 09 srp, 2010 8:08 am
Bydliště: Praha - Uhříněves

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod belgarat » pon 11 čer, 2018 7:43 am

Kajinek11 píše:To znamená, že za každé tlačítko musím tedy dát odpor 45k Ohm? Pokud nechci připojit odpory a chci použít interní tak musím tlačítka společně připojit na GND? Chápu to dobře?

Omlouvam se, jsem elektro-lama. Toliko vim, ze nozicka nema "zustat ve vzduchu" (rozpojene tlacitko, noha nespojena nikam). V zapojenich napr. Fuldy se pouzivaji odpory 47k, 22k. Arduino ma interni odpory proti VCC ("pull up"), pak ale pouzij "pinMode(xxx, INPUT_PULLUP).

Současně by měla být zmáčknutá maximálně 2.
Může nastat více stavů najednou. Ale neměli by se navzájem ovlivňovat. Zkusím to popsat.

Rozmysli, zda "mela by byt" plati vzdy, napr. v pripade decek, co se o panel budou tahat (jestli je to Tvuj pripad). Na krouzku mi dokazali najednou zmacknout tlacitek 6 a vubec nechapu jak se jim tam vlezly ruce. A zda se takove stavy "musi resit" nebo holt muzou na navestidlech problikavat ruzne svetylka pripadne se prehazovat vyhybky.

Vzhledem k mnozstvi podminek budu kod prolezat az podle casu / v noci / ...
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 788
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod sidlo » pon 11 čer, 2018 8:11 am

Povídání o Arduinu a tlačítkách je tady https://www.arduino.cc/en/Tutorial/Button

Snímací pin Arduina musí být přes odpor připojen buď na zem nebo +5V odporem 10k - 22k - 47k, na hodnotě moc nezáleží.
Obrázek

Výše uvedený příklad je velmi triviální. V aplikaci bychom měli ještě řešit zákmity, jako třeba tady https://www.arduino.cc/en/Tutorial/Debounce
Uživatelský avatar
sidlo
 
Příspěvky: 1590
Registrován: ned 27 dub, 2014 7:32 am

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod sidlo » pon 11 čer, 2018 8:15 am

fulda píše:
Kajinek11 píše:Díky, ano to mi nedošlo. Spínače polohy výhybek jsou jasné. Tam musím dát např: V1==HIGH.

Poradím ti jednu vychytávku pro nás programátorské amatéry. Namísto "if (a==3) .." piš "if (3==a) ..". Je to taková prasárna, která ma za následek to, že pokud se uklepneš a napíšeš "if (3=a) ..", tak ti to překladač vyhodí jako chybu že do konstanty nelze přiřadit proměnnou.


IDE Arduino - okno Vlastnosti se dá zapnout volba Zobrazit více informací výstupu během: kompilace a překladač potom sám upozorňuje na místa ke se použilo přiřazení a pravděpodobně by tam mělo být porovnání.
Uživatelský avatar
sidlo
 
Příspěvky: 1590
Registrován: ned 27 dub, 2014 7:32 am

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod Kajinek11 » pon 11 čer, 2018 8:30 am

Počkej, u Fuldy teda odpory 47k, nebo 22k?

Ano děti mám, vím co dovedou. Ale s tím se nedá nic dělat. Pokud zmáčknou všechna tlačítka na Arduinu, tak nevím co to udělá, ale nestane si nic jiného, než se se problikají návěstidla a zůstane tam nějaký režim. Mohu do programu vložit kód, který při současném zmáčknutí vícero tlačítek neudělá nic. Funkčně se budou mačkat jen dvě tlačítka najednou Po (posun) + příslušné návěstidlo. Výhybky před Arduino ovládané nejsou, takže to je v pohodě. Zatím děkuju za pomoc a moc ocením když se na to podíváš hlouběji. Budu totiž ještě kupovat druhé Arduino Mega a programovat skryťák.
Kajinek11
 
Příspěvky: 296
Registrován: stř 07 pro, 2011 11:12 pm

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod belgarat » pon 11 čer, 2018 8:58 am

Kajinek11 píše:Počkej, u Fuldy teda odpory 47k, nebo 22k?

Je to dost jedno, cokoliv kde proud neprekroci povoleny na portu (a pripadne soucet proudu uvolnenych tlacitek neprekroci celkovy povoleny proud). Ja pouzivam 47k, ale od zapojeni jsou zde jini ;) ja se citim "na vysi" v sw.

Kajinek11 píše: Mohu do programu vložit kód, který při současném zmáčknutí vícero tlačítek neudělá nic. Funkčně se budou mačkat jen dvě tlačítka najednou Po (posun) + příslušné návěstidlo.

"Neresit" je Tvoje volba, a veci to obvykle zjednodusi
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 788
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod fulda » pon 11 čer, 2018 10:31 am

Kajinek11 píše:Počkej, u Fuldy teda odpory 47k, nebo 22k?

Jestli je to otázka mna mne, tak odpovím, že čím menší hodnota, tím větší odolnost proti rušení, ale zároveň větší spotřeba a větší proudová zátěž pro tlačítko.
Já používám 10k, protože na kolejišti je rušení poměrně velké. Ale je to empirická hodnota.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Uživatelský avatar
fulda
 
Příspěvky: 4091
Registrován: pon 09 srp, 2010 8:08 am
Bydliště: Praha - Uhříněves

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod hopeter » pon 11 čer, 2018 11:22 am

Skoro všude v příkladech tlačítka je použitý 10k. Používám taky 10k co jsem měl v setu arduina a v pohodě. Když jsem jednou zapoměl odpor k tlačítku zapojit , dělalo si to co chtělo... :wink:
TT a G , epocha III / IV , jen si tak hraju ...,V jednoduchosti je síla... HOnza PETERa
Uživatelský avatar
hopeter
 
Příspěvky: 1518
Registrován: pát 20 pro, 2013 3:03 pm
Bydliště: Červený Kostelec

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod Kajinek11 » pon 11 čer, 2018 11:55 am

Ok odpory k tlačítkům vyřešeny. 10k mám doma skladem. Dám je tam..
Kajinek11
 
Příspěvky: 296
Registrován: stř 07 pro, 2011 11:12 pm

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod look23 » úte 12 čer, 2018 5:59 pm

sidlo píše:Povídání o Arduinu a tlačítkách je tady https://www.arduino.cc/en/Tutorial/Button

Snímací pin Arduina musí být přes odpor připojen buď na zem nebo +5V odporem 10k - 22k - 47k, na hodnotě moc nezáleží.
https://www.arduino.cc/en/uploads/Tutorial/button_schem.png

Výše uvedený příklad je velmi triviální. V aplikaci bychom měli ještě řešit zákmity, jako třeba tady https://www.arduino.cc/en/Tutorial/Debounce


Já používám na tlačítka analogy. Šetří to digitální vstupy a navíc můžu přes analogRead() volit jemnost stisku tlačítka.
Podmínkou je rychlý proces co čte tlačítka. Na analogu nejdou vyvolávat přerušení, to je tak jediná nevýhoda.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
H0, ČSD epocha IV
look23
 
Příspěvky: 279
Registrován: ned 17 lis, 2013 2:20 pm

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod belgarat » úte 12 čer, 2018 7:11 pm

look23 píše:Podmínkou je rychlý proces co čte tlačítka. Na analogu nejdou vyvolávat přerušení, to je tak jediná nevýhoda.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/


Neni to tak uplne pravda, muzes prepnout AD prevodnik, aby udelal preruseni ve chvili, kdy nameri. Prerusi, ty vezmes data, a on pak rovnou meri dal.
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 788
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod look23 » úte 12 čer, 2018 10:15 pm

belgarat píše:
look23 píše:Podmínkou je rychlý proces co čte tlačítka. Na analogu nejdou vyvolávat přerušení, to je tak jediná nevýhoda.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/


Neni to tak uplne pravda, muzes prepnout AD prevodnik, aby udelal preruseni ve chvili, kdy nameri. Prerusi, ty vezmes data, a on pak rovnou meri dal.


Mohl bys uvést příklad. Třeba se mi rozšíří obzory. Ještě nikdy jsem to nepotřeboval, ale kdo ví, třeba se to někdy bude hodit. Díky
H0, ČSD epocha IV
look23
 
Příspěvky: 279
Registrován: ned 17 lis, 2013 2:20 pm

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod belgarat » úte 12 čer, 2018 10:35 pm

look23 píše:
Mohl bys uvést příklad. Třeba se mi rozšíří obzory. Ještě nikdy jsem to nepotřeboval, ale kdo ví, třeba se to někdy bude hodit. Díky


http://yaab-arduino.blogspot.com/2015/0 ... input.html
https://github.com/svatoun/Reflexshield ... d.ino#L254
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 788
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod belgarat » čtv 14 čer, 2018 3:14 pm

Takze ... co bych doporucil je zavistlosti, kdy z pozice vyhybek shazujes konfliktni navestidla na cervenou dat dopredu. Zaroven bych zavedl pomocne promenne, neco jako Kolej2L = true tehdy a jen tehdy, je-li postavena cesta levym zhlavim na kolej 2 (tzn. vyhybky 14,12, 10). Ty pak muzes vyuzit v dalsi rozhodovaci casti a usetrit si spoustu && podminek na vyhybky.

Pak bych doplnil nahozeni odjezdovych navestidel podle nastavenych cest a tlacitek, je-li cesta. Pak shozeni navestidel na cervenou. A az uplne nakonec vjezdove navestidlo podle cesty a odjezdoveho (to je uz tou dobou nastavene, opet si usetris podminky na vyhybky ktere uz se pretavily do navestnich znaku).

Shazovani na cervenou podle vyhybek mas IMHO nekompletni -- napr. L1 se shodi na cervenou (L1b) jen pokud je V12 LOW, ale co V14 ? Da se to resit konfiguraci (zaverova tabulka :-D) nebo napr.
Kód: Vybrat vše
boolean Cesta1L = true;
boolean Cesta2L = true;
boolean Cesta3L = true;

// vyhodnoceni vyhybek na cesty
if (V14 == LOW) {
  Cesta1L = Cesta2L = false;
} else {
  Cesta3L = false;
}
if (V12 == LOW) {
  Cesta2L = false;
} else {
  Cesta1L = false;
}

// shozeni navestidel
if (!Cesta1L) {
        digitalWrite(L1a, LOW);
        digitalWrite(L1b, HIGH);
        digitalWrite(L1c, LOW);
        digitalWrite(L1d, LOW);
}
if (!Cesta2L) {
        digitalWrite(L2a, LOW);
        digitalWrite(L2b, HIGH);
        digitalWrite(L2c, LOW);
        digitalWrite(L2d, LOW);
}
// a tak dale


ve Tvych podminkach na odjezdy pak jde namisto
Kód: Vybrat vše
if ((digitalRead(L)) &&(V1 = LOW) && (V2 = LOW)&& (V3 = HIGH)&& (V12 = HIGH) && (V14 = HIGH)&&(V15 = HIGH) &&(S13 = LOW) && (L1a = HIGH)){

psat
Kód: Vybrat vše
if ((digitalRead(L)) && Cesta1L &&  Cesta1R && (V15 = HIGH) &&(S13 = LOW) && (L1a = HIGH)){


Dale, pokud by sis zavedl princip, ze odjezdova navestidla jsou 4 znakova, a obsazuji vzdy 4 po sobe nasledujici piny ... tak si muzes usetrit psani
Kód: Vybrat vše
void cervena(int pin) {
        digitalWrite(pin++, LOW);
        digitalWrite(pin++, HIGH);
        digitalWrite(pin++, LOW);
        digitalWrite(pin++, LOW);
}

// shozeni celeho L2
cervena(L2a);

Analogicky pro nastaveni zelene/zlute na odjezdovku

Pak si myslim, ze pokud maji tlacitka Lx prepinat "odjezd / stuj" (odjezd samozrejme v zavislosti na vyhybkach), tak musis po zpracovani tlacitla Lx VZDY nejakou dobu (do uvolneni tlacitka) pockat - resp. tlacitko zcela ignorovat. Jinak se Ti pri prvnim pruchodu cyklem navestidlo nastavi (treba) na zelenou a pri bezprostredne nasledujicim pruchodu, zatimco jeste tlacitko nestihnes pustit se Ti prenastavi zpet na cervenou. Proto je lepsi necpat vsude primo digitalRead, ale udelat si nejakou cteci pomucku, ktera precte/vyignoruje a pak jen pouzivat vysledky.

Edit: pojd na to zalozit samostatne diskusni tema - mam takovy pocit, ze vysledny kod bude zajimat i dalsi a tohle diskusni vlakno melo byt spis "odkaznik".
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 788
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - jednoduché aplikace pro malá kolejiště.

Příspěvekod Kajinek11 » úte 03 črc, 2018 4:43 pm

Dekuju belgarate,

budu se tím řídit a poupravím zdroják. Nyní ještě dodělávám nějaké koleje a krajinu a pak až dojde na automatizaci, tak bych se případně ještě ozval.

S těmi tlačítky si měl pravdu, to mě vůbec nenapadlo :-) Navíc mám ještě druhé arduino co bude řídit SN, tak bych se případně také poradil.
Kajinek11
 
Příspěvky: 296
Registrován: stř 07 pro, 2011 11:12 pm

PředchozíDalší

Zpět na Elektrika a elektronika

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník