Arduino - analogové ovládání pro servo přestavníky

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 - analogové ovládání pro servo přestavníky

Příspěvekod amirinda » čtv 10 kvě, 2018 7:54 pm

mám UNO, ale piny jsem pochopitelně změnil, no přidám jen dvě ledky podle polohy a mám to :-)

Edit: nemám to, po připojení arduina ke zdroji se serva stejně pohnou, takže zase na začátku asi neřešitelného problému.

Edit2: tak oni se ty serva pohnou sami už jenom tím, že jim připojím napětí. To je teda asi tím že mám ty obyč SG90, nebo to nějak lze vyřešit? Pokud udělám jen restart tak to funguje jak má.
popojedem bo zme v utlumu...
Uživatelský avatar
amirinda
 
Příspěvky: 546
Registrován: pon 12 pro, 2016 4:00 am
Bydliště: Planá

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod hopeter » pát 11 kvě, 2018 5:20 am

Aha, tak to já budu mít asi stejný problém. Taky jsem jen resetoval a napětí to mělo z USB pořád připojené. Večer se na to kouknu...
TT a G , epocha III / IV , jen si tak hraju ... HOnza PETERa
Uživatelský avatar
hopeter
 
Příspěvky: 1516
Registrován: pát 20 pro, 2013 3:03 pm
Bydliště: Červený Kostelec

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod JenikPluto » pát 11 kvě, 2018 5:28 am

To je v mem puvodnim sketchi (tedy pokud se tu bavime o nem, posilal jsem ho hopeterovi) reseno tak, ze pri startu programu se serva nastavi na posledni polohu ulozenou v EEPROM (prave proto, ze pri zapojeni napajeni "cuknou"). Pokud je system porad pod napetim a jen se resetuje Arduino, tak se zdanlive nestane nic. Ovsem pri zapnuti "natvrdo" se serva srovnaji (ta, u kterych doslo k prekmitu). Pripadne SZ nebo email, at tu neplevelime...

JP
JenikPluto
 
Příspěvky: 121
Registrován: pát 08 lis, 2013 10:19 am
Bydliště: Kladno

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod belgarat » pát 11 kvě, 2018 5:35 am

levna serva cuknou VZDY. Nahodou jsem koupil jakasi z HobbyKingu, asi $3.5/ks ktere to nedelaji - ty si setrim na zavory a dvere vytopny :-D u vyhybek to neva - struna to vypruzi. Prave proto je nutne je po zapnuti Arduina srovnat. V provozu predpokladam ze napajeni Arduina bude odvozene od napajeni serv (plus mozna nejaky kondenzator), takze se budou zapinat naraz.

Chces-li omezit (ne odstranit!) cuknuti, spinej napajeni serv Arduinem pres nejaky tranzistor; viz sidlo, spina MOSFETem (maly ubytek napeti). MOSFET ti muze zapnout vsechna serva naraz, v Arduinu musis akorat vsem Servo objektum nastavit nejprve hodnotu a PAK zapnout napajeni serv, a PAK pockat (delay). Nakonec na vsech servech detach(). Ma-li servo pri zapnuti ridici signal, cukne take, ale i blby cinsky klon SG90 asi jenom 0,5-1mm (pro peclivky: neplati asi univerzalne, ale alespon pro 4 serie 3 ruznych Aliexpress "dodavatelu")
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 787
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod amirinda » pát 11 kvě, 2018 5:50 am

JenikPluto: ano je to ten tvůj kod. Jak píšeš, pokud jsou serva a arduino připojená a udělám zkušebně restart tak je vše v pořádku. Ovšem po připojení na tvrdo serva cuknou, jenže to jak jsem zkoušel je vlastnost mých serv jako takových. Ve finále teda nemusím vymýšlet kdoví-jakej kod, protože serva po zapnutí stejně cuknou...

Teď ale jestli to mají nějaká z těch levnějších serv ošetřeno nebo ne, protože pak se asi můžu stavět na zadní a stejně to udělá :-)

Edit: co tohle? https://www.aliexpress.com/item/High-Sp ... 262.z5HNzd
popojedem bo zme v utlumu...
Uživatelský avatar
amirinda
 
Příspěvky: 546
Registrován: pon 12 pro, 2016 4:00 am
Bydliště: Planá

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod JenikPluto » pát 11 kvě, 2018 6:26 am

belgarat píše:Chces-li omezit (ne odstranit!) cuknuti, spinej napajeni serv Arduinem pres nejaky tranzistor; viz sidlo, spina MOSFETem (maly ubytek napeti). MOSFET ti muze zapnout vsechna serva naraz, v Arduinu musis akorat vsem Servo objektum nastavit nejprve hodnotu a PAK zapnout napajeni serv, a PAK pockat (delay). Nakonec na vsech servech detach(). Ma-li servo pri zapnuti ridici signal, cukne take, ale i blby cinsky klon SG90 asi jenom 0,5-1mm (pro peclivky: neplati asi univerzalne, ale alespon pro 4 serie 3 ruznych Aliexpress "dodavatelu")


Ja jsem to vyresil "na hulvata", tzn. serva maji napajeni extra a zapinaji se jako prvni. Arduino nabehne vzapeti po nich a srovna si je. Puvodne jsem je zapinal manualne, tzn. zasunutim adapteru do zasuvky :-), ale casem se ukazalo, ze s ohledem na male zpozdeni nabehu Arduina to muze byt vsechno pripojene do jednoho psa a zapinat se naraz. Pak uz to beha jak ma. Podotykam ze nijak neresim modelovost prestavovani, to me v Nku fakt netrapi, je to vicemene mzikove sem-tam s tim, ze uhly prestaveni serva jsou predimenzovane a tlaci na pruzinu, ktera prestavuje jazyky vymeny. Serva jsem pouzil v podstate ta nejlevnejsi cinska z eBaye (SG90).

JP
JenikPluto
 
Příspěvky: 121
Registrován: pát 08 lis, 2013 10:19 am
Bydliště: Kladno

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod amirinda » stř 16 kvě, 2018 7:33 pm

tak zas problém s nastavením serv, pokud v codu pohnu hodnotama abych nastavil serva jak potřebuji, tak přestanou fungovat a nevím proč :-(
Když místo hodnot 45 a 25 dám třeba 40 a 20 tak už se serva nehýbou...

je to tady v loopu:

switch (Servo1Position) { //...v zavislosti na poloze prvniho serva zmen polohu obou serv...
case 25:
Servo1.write(45);
delay(300); //...pozadovanou rychlosti (cim vyssi hodnota, tim nizsi rychlost prestaveni)
Servo2.write(45);
delay(300);
Servo1Position = 45;
EEPROM.update (1, 45); //...zapis nove polohy do EEPROM...
EEPROM.update (2, 45);
break;

case 45:
Servo1.write(25);
delay(300);
Servo2.write(20);
delay(300);
Servo1Position = 25;
EEPROM.update (1, 25);
EEPROM.update (2, 20);
break;
popojedem bo zme v utlumu...
Uživatelský avatar
amirinda
 
Příspěvky: 546
Registrován: pon 12 pro, 2016 4:00 am
Bydliště: Planá

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod belgarat » stř 16 kvě, 2018 8:57 pm

amirinda píše:Když místo hodnot 45 a 25 dám třeba 40 a 20 tak už se serva nehýbou...

Kam "dam 40 a 20" ? konstanty jsou pouzite na vice mistech. Pastni presny zmeneny kod, co "nefunguje", nejlepe cely, aby bylo jasne kde vsude a co jsi menil.

amirinda píše:[b][i]switch (Servo1Position) { //...v zavislosti na poloze prvniho serva zmen polohu obou serv...
...
Servo1.write(45);
delay(300); //...pozadovanou rychlosti (cim vyssi hodnota, tim nizsi rychlost prestaveni)
Servo2.write(45);

Nesouvisi s nefunkcnosti serva, ale ten komentar u "delay" je hloupost. Servo1.write(45) posle instrukci "postav se na uhel 45" a servo tam dojede jak muze nejrychleji, jinak to jaksi neumi. Ten delay zvysuje prodlevu mezi posunem serva1 a serva2, rozhodne nemeni RYCHLOST POSUNU serva1. To bys musel jinak - vystavit o par stupnu jinak nez ted - pockat - zas o par stupnu jinam - pockat. Az bys dosahl koncove pozice.
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 787
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod amirinda » stř 16 kvě, 2018 9:12 pm

na to delay se podívám a ty komenty ber s rezervou, vycházím z toho původního codu. Některé hodnoty když zadám tak to jde a u jiných zase ne. Momentálně to mám viz. níže a serva se nehýbou.
https://pastebin.com/z0haJPxW
popojedem bo zme v utlumu...
Uživatelský avatar
amirinda
 
Příspěvky: 546
Registrován: pon 12 pro, 2016 4:00 am
Bydliště: Planá

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod look23 » stř 16 kvě, 2018 9:40 pm

Co používáš za serva?

Mě tohle začala dělat SG90
Řešil jsem to tak, že každému servu jsme musel napsat rozsah hodnot, které je schopné zvládnout.
Další vývoj zatím odložen.
H0, ČSD epocha IV
look23
 
Příspěvky: 278
Registrován: ned 17 lis, 2013 2:20 pm

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod amirinda » stř 16 kvě, 2018 9:43 pm

jo tyhle sg90, ale je mi divné, že jednou to jde a jednou ne.
popojedem bo zme v utlumu...
Uživatelský avatar
amirinda
 
Příspěvky: 546
Registrován: pon 12 pro, 2016 4:00 am
Bydliště: Planá

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod belgarat » stř 16 kvě, 2018 9:45 pm

No ... takze pokud jsi mel nahrany puvodni sketch, tak jsou v EEPROM(1) a (2) hodnoty 25 nebo 45. Takze se ti po startu arduina serva nastavi na zapamatovane hodnoty, a protoze Servo1Position neni ani 40, ani 20 (je budto 25 nebo 45), tak ti switch nic neudela - chybi varianta "default" resp. "neni to ani 20, ani 40". Tak se obe vetve preskoci a preskakuji se donekonecna. Pokud je teorie spravna, tak Ti nejen nefunguji serva, ale nerozsviti se Ti ani jedna LED.

S prominutim, ten program je napsany dost zvlastne, mam-li byt kulantni. Vsimni si, ze mas pouze 2 stavy. V jednom jsou serva 40/45, v druhem 20/30. Kdyby puvodni autor zvolil pro zapis do EEPROM cislo stavu, a pozadovane pozice serv zapsal do nejake konfigurace nebo - kdyz uz musi copy-pastovat radky pouzival konstanty, stacilo by zmenit definice poloh na jednom miste. A navic by informace v EEPROM (stav #1, stav #2) platila pro jakekoliv prirazeni poloh.

Jeste bych do switche pridal default: vetev - to pro pripad, ze EEPROM obsahuje neco JINEHO nez 20/40 -- prechod serv do jednoho ze stavu + zapis do EEPROM. Dal bych se zamyslel nad moznymi prekmity tlacitka Button1State. A naposledy, behem prestavovani serv (2x delay) je arduino mrtve - nereaguje na pripadne rozpojeni/sepnuti tlacitka. Ver mi, ze za provozu te bude 0,6sec mrtvola opravdu dost otravovat ;)
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 787
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod amirinda » stř 16 kvě, 2018 9:57 pm

no je mi to více-méně jasné jak píšeš od začátku, ale nebyl jsem si jist, jestli to není jen nějakou blbostí. Takže zkusím předělat ten zápis do EEPROM a uvidím.
popojedem bo zme v utlumu...
Uživatelský avatar
amirinda
 
Příspěvky: 546
Registrován: pon 12 pro, 2016 4:00 am
Bydliště: Planá

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod JenikPluto » čtv 17 kvě, 2018 11:45 am

belgarat píše:S prominutim, ten program je napsany dost zvlastne, mam-li byt kulantni. Vsimni si, ze mas pouze 2 stavy. V jednom jsou serva 40/45, v druhem 20/30. Kdyby puvodni autor zvolil pro zapis do EEPROM cislo stavu, a pozadovane pozice serv zapsal do nejake konfigurace nebo - kdyz uz musi copy-pastovat radky pouzival konstanty, stacilo by zmenit definice poloh na jednom miste. A navic by informace v EEPROM (stav #1, stav #2) platila pro jakekoliv prirazeni poloh.

No tak on ten soft nebyl puvodne urcen ke zverejneni a nebyl ani duvod ho nijakym zpusobem ladit, tak jak je, funguje, byt to neni zadna programatorska krasa, to uznavam. Vznikl prostym zkopirovanim funkcniho kusu pro jedno servo pro vsechna dalsi (to je, myslim, dost videt ;-) ). Zapis do EEPROM je udelany tak, jak je, protoze kazde servo ma svou vlastni dvojici stavu, ktera neni pouzitelna pro ostatni (kvuli ruznemu umisteni serva pod vymenou, podle ruzneho uchyceni ramene na ose apod.), a jak jsem je nastavil v te male casti, tak jsme to pastnul do vysledneho kodu. A ano, slo by to udelat polem promennych, ale proc? Za dobu provozu (asi 2 roky, pokud se nemylim), jsem je nemenil...

belgarat píše:Nesouvisi s nefunkcnosti serva, ale ten komentar u "delay" je hloupost. Servo1.write(45) posle instrukci "postav se na uhel 45" a servo tam dojede jak muze nejrychleji, jinak to jaksi neumi. Ten delay zvysuje prodlevu mezi posunem serva1 a serva2, rozhodne nemeni RYCHLOST POSUNU serva1. To bys musel jinak - vystavit o par stupnu jinak nez ted - pockat - zas o par stupnu jinam - pockat. Az bys dosahl koncove pozice.


Ja uz si to presne nepamatuju, ale mam pocit, ze ten koment tam je jeste z varianty, ve ktere se servo prestavovalo cyklem, nez mi doslo, ze rizeni rychlosti prestavovani vymeny je pro me zbytecny luxus.

belgarat píše:Dal bych se zamyslel nad moznymi prekmity tlacitka Button1State. A naposledy, behem prestavovani serv (2x delay) je arduino mrtve - nereaguje na pripadne rozpojeni/sepnuti tlacitka. Ver mi, ze za provozu te bude 0,6sec mrtvola opravdu dost otravovat ;)


Prekmity ma cenu resit v momente, kdy tam neni delay, pokud tam delay je, tak arduino zareaguje na prvni stisk, prekmity by mu dorazily az behem delaye, kdy je, jak pises, mrtve; to jsem resil u Freduina. Prehozeni vymeny za 200 ms mi nepripada zadna katastrofa, pri ovladani tlacitky ti normalne 200 ms ani nestaci k tomu, abys presunul prst z jednoho na druhe. :-)

amirinda píše:tak zas problém s nastavením serv, pokud v codu pohnu hodnotama abych nastavil serva jak potřebuji, tak přestanou fungovat a nevím proč :-(
Když místo hodnot 45 a 25 dám třeba 40 a 20 tak už se serva nehýbou...


Pro tenhle ucel je na zacatku setupu podminka pro zapis novych hodnot do eeprom. Kdyz zmenim krajni hodnotu pro servo (nebo serva), zmenim i hodnotu na adrese 1024 tak, aby vyhovela podmince, pak se pri startu programu cely list nejdrive zapise do eeprom.



JP
JenikPluto
 
Příspěvky: 121
Registrován: pát 08 lis, 2013 10:19 am
Bydliště: Kladno

Re: Arduino - analogové ovládání pro servo přestavníky

Příspěvekod belgarat » čtv 17 kvě, 2018 11:59 am

JenikPluto píše:No tak on ten soft nebyl puvodne urcen ke zverejneni a nebyl ani duvod ho nijakym zpusobem ladit, tak jak je, funguje, byt to neni zadna programatorska krasa, to
...
(asi 2 roky, pokud se nemylim), jsem je nemenil...

Sorry, jasne -- neuvedomil jsem si kde/proc to vlastne vzniklo.

belgarat píše:Prekmity ma cenu resit v momente, kdy tam neni delay, pokud tam delay je, tak arduino zareaguje na prvni stisk, ...

Rozumim, pravda.
Belgarat (nemodelar, greenhorn, pseudoprogramator, pindac nesmyslu)
belgarat
 
Příspěvky: 787
Registrován: čtv 27 pro, 2012 9:36 pm
Bydliště: Hřebeč u Kladna

PředchozíDalší

Zpět na Elektrika a elektronika

Kdo je online

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