Ovládání serva - nastavení krajních poloh - snížení rychlosti

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Gun_Mun
Příspěvky: 1
Registrován: 15 pro 2019, 15:35
Reputation: 0

Ovládání serva - nastavení krajních poloh - snížení rychlosti

Příspěvek od Gun_Mun » 15 pro 2019, 16:00

Vymýšlím, jak ovládat několik serv na sobě nezávisle tak, abych pro každé mohl nastavit krajní polohy a rychlost pohybu. Nejjednodušeji si to představte jako ovládání závory na modelovém kolejišti. Přepínačem se dvěma polohami přepínám polohu závory nahoře / dole. Abych se nemusel moc trápit s mechanickým provedením, chci si krajní polohy nastavit a to nejlépe potenciometrem/potenciometry (ne v programu arduina). A ještě je potřeba pohyb závory zpomalit protože pohyb standardního serva je ve srovnání s pohybem závory sakra rychlý. Kdybych chtěl být hračička, tak pohyb závor nebývá jen z jedné krajní polohy do druhé, ale vlivem setrvačnosti s sebou závora při dojezdu do krajní polohy trochu zacuká (při dojezdu na konec se zarazí, zakýve a postupně se pohyb zastaví).
Ještě je potřeba zachovat polohu závor při opětovném zapnutí celé elektroniky, aneb v nějaké poloze přepínačů celou elektroniku vypnu a když ji znovu zapnu mělo by vše (všechny závory) zůstat v polohách jak jsou, ne že se po zapnutí všechny začnou hýbat.

Program je bez řešení rychlosti pohybu jednoduchý, vlastně jeden z těch úplně základních vzorových:

#include <Servo.h>

Servo myservo; // create servo object to control a servo

int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin

void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object

}

void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1035)
val = map(val, 0, 1035, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}

Nenapadá mě, jak do pohybu včlenit ještě to zpomalení. Jsou sice dostupné knihovny, které pohyb serv řeší komplexněji, ale nyní bych raději vystačil jen s tou knihovnou Servo.h
Nakonec úvaha: Jestliže mám na Arduinu 6 analogových vstupů, tak to znamená, že mohu mít max 6 na sobě nezávislých okruhů pro zmíněné závory, je tak?

Alternativně lze vynechat nastavování jedné krajní polohy s tím, že ji nastavím mechanicky a pohyb (výchylku serva) si doladím jen v druhé krajní poloze.

závory_01.jpg

Uživatelský avatar
gilhad
Příspěvky: 784
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Ovládání serva - nastavení krajních poloh - snížení rychlosti

Příspěvek od gilhad » 15 pro 2019, 16:44

Pomaly pohyb serva udelas jako serii mensich rychlych (kdyz budou dost kratke, bude to vypadat skoro plynule), jeste to muzes vylepsit tezssi zavorou uchycenou pruzne (takze se to bude prumerovat mechanicky)

Asi budes chtit ty krajni polohy nastavit jednou a pouzivat opakovane, takze je nebudes muset cist pred kazdym pohybem serva.

Pokud ti nestaci 6 analogu, muzes pouzit i par digitalnich vstupu, na kterych si nastavis, jakou sestici analogu zrovna nastavujes (nebo jeste lip pouzit jen jeden analog a ty ostatni dat jako vstupy pro vyber - s 6 analogy tak budes moct nastavit az 2^5=32 ruznych hodnot misto pouhych 6).

Pro zachovani stavu si to asi budes muset ulozit do EEPROM (nebo mit moznost ten stav nejak nacist, coz je mnohem vic prace a obvodu okolo), pri startu nejdriv "nahodit" Arduino, nechat ho nastavit serva do aktualnich pozic a az pak "nahodit" napajeni tech serv (treba prez nejaky MOSFET ovladany tim Arduinem), jinak ti pri zapojeni napajeni sjedou do nejakeho stavu podle (v tu chvili jeste neosetrenych) ovladacich vstupu.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů