Ovládání servomotoru do tří definovaných poloh

Přijímače, serva, regulátory, BEC, palubní napájení, ale i telemetrie
Zpráva
Autor
Míšánek
Příspěvky: 21
Registrován: úte 07.12.2021 19:59
Bydliště: Uherský Brod

Re: Ovládání servomotoru do tří definovaných poloh

#46 Příspěvek od Míšánek »

igorb píše:
OK, takze aby som zase nevyrabal co som si sam dovymyslel:

1/ zapnes geret, v pameti mas hodnoty neutralu, zhasnutia a maxima tak ako si si ich urcil v texte programu a vychodzia poloha je neutral

2/ stlacis tlacitko max, servo vybehne na max pokym to drzis, ked pustis, padne na neutral ... to isne so zhasinacim tlacitkom

3/ ak stlacis tlacitko + tak neutral sa pomaly pohybuje do plusu, ked pustis, zostane tam ... to iste s tlacitkom - na opacnu stranu

4/ ak tlacis max alebo min, tak po pusteni sa servo vrati do novo definovaneho neutralu podla 3/

chapem dobre?

Přeeesně! Už jsme téměř tam :D

Vše co jsi napsal výše souhlasí ale až ještě na jednu funkci:
5/ držím max (popřípadě min) servo vyjede do maxu co je napsaný v programu, ale v okamžiku kdy drží tlacitko pro tuto polohu a do toho ještě zmáčknu +/- tak servo v tuto polohu změní a bude se chovat stejně jako při změně neutrální polohy pomocí tlačítek +/-, tzn. že do této polohy zase vyjede do té doby dokud nebude znovu změněna nebo arduino restartováno a znovu načtení hodnoty napsané v programu.

Jaj je to v tom případě s eprom pamětí? Nedochází zbytečně k jejímu přepisování, že?
Uživatelský avatar
igorb
Příspěvky: 4956
Registrován: čtv 22.03.2007 0:00
Bydliště: SK Bratislava

Re: Ovládání servomotoru do tří definovaných poloh

#47 Příspěvek od igorb »

Cize chces tlacitkami + a - menit aj maximum a minimum? ake tam potom budu dorazy? alebo minimum len do plusu a maximum do minusu? cize dorazy 1000us a 2000us zostanu v platonosti? Pytam sa preto ze dorazy pre tu strednu hodnotu su max a min.

S tou epromkou si nelam hlavu, 1/ vobec ju program nepouziva 2/ este sa mi nestalo aby som vycerpal jej zivotnost - ta je zarucena na 100 000 zapisov takze ked si to spocitas tak to prakticky nejde v takejto aplikacii vycerpat a 2/ ani v aplikaciach kotre tu epromku pouzivaju prakticky stale som sa este s odpalenou epromkou nestretol a to som si urobil specialne program ktory sa ju snazil znicit :- )))
Míšánek
Příspěvky: 21
Registrován: úte 07.12.2021 19:59
Bydliště: Uherský Brod

Re: Ovládání servomotoru do tří definovaných poloh

#48 Příspěvek od Míšánek »

Ano, přesně tak. Nepředpokládám totiž že servo v definovaných polohách "zvýšené otacky" a "chcípnutí motoru" bude na své hranici posuvu, tzn. 180° a 0°. Proto bych si rád nastavit defaultni polohy zvýšených otáček a chcípnutí, které bych zapsal do programu a byly by vždy po restartu načteny. A neutrální poloha by odpovídala volnoběhu.
Ovšem když bych chtěl na dálku tyto otáčky zvýšit nebi snížit, tak pomocí tlačítek +/- bych si ty otáčky upravil, třeba když bych chtěl navíjet pomaleji nebo naopak rychleji
Uživatelský avatar
igorb
Příspěvky: 4956
Registrován: čtv 22.03.2007 0:00
Bydliště: SK Bratislava

Re: Ovládání servomotoru do tří definovaných poloh

#49 Příspěvek od igorb »

nerozumiem (preco by si potreboval posuvat bod zhasnutia a maxima - to je predsa dane mechanicky raz na vzdy) ... ale verim ti, to uz bude na tebe, vecer skusim tem program prekopat a potom si uz vyberies ktory z nich je ten spravny :- ))
Míšánek
Příspěvky: 21
Registrován: úte 07.12.2021 19:59
Bydliště: Uherský Brod

Re: Ovládání servomotoru do tří definovaných poloh

#50 Příspěvek od Míšánek »

Předpokládám že bod zvýšených otáček nebude zároveň fyzické maximum natočení servomotoru. A jak říkám - rád bych si ty zvýšené otáčky na dálku případně ještě zvýšil co naopak snížil.

Díky moc, Igor :wink:
Uživatelský avatar
igorb
Příspěvky: 4956
Registrován: čtv 22.03.2007 0:00
Bydliště: SK Bratislava

Re: Ovládání servomotoru do tří definovaných poloh

#51 Příspěvek od igorb »

Musis si uvedomit, ze bezne servo nema ziadny elektronicky doraz, takze ho kludne mozes poslat az na jeho mechanicky doraz co moze to servo odpisat. Takze na to davaj pozor, v programe som dal doraz na 600 a 2400us co by bezne servo mohlo zvladat, ak sa aj tak dostanes na mechanicky doraz (servo zacne vrcat) tak tie hodnoty uprav.

Otazka je, ci to vrcanie za behu motora rozoznas :mrgreen: to uz zacina vyzerat na ulozenie do eeprom

Kód: Vybrat vše

#include <Servo.h>

Servo servo;

int next_pos;
int pos1 = 1000;
int pos2 = 1500;
int pos3 = 2000;

void setup() {
  servo.attach(A0);
  servo.writeMicroseconds(pos2);
}

void loop() {
  if (digitalRead(A3)) {                                     
    // max
    if (digitalRead(A1)) if (pos2 > 600) pos3 -= 1;     //-
    if (digitalRead(A2)) if (pos2 < 2400) pos3 += 1;    //+
    next_pos = pos3;
  } else if (digitalRead(A4)) {                               
    // min
    if (digitalRead(A1)) if (pos2 > 600) pos1 -= 1;     //-
    if (digitalRead(A2)) if (pos2 < 2400) pos1 += 1;    //+
    next_pos = pos1;
  } else {                                                   
    // neutral
    if (digitalRead(A1)) if (pos2 > pos1) pos2 -= 1;    //-
    if (digitalRead(A2)) if (pos2 < pos3) pos2 += 1;    //+
    next_pos = pos2;
  }

  servo.writeMicroseconds(next_pos);
  delay(20);
}
Míšánek
Příspěvky: 21
Registrován: úte 07.12.2021 19:59
Bydliště: Uherský Brod

Re: Ovládání servomotoru do tří definovaných poloh

#52 Příspěvek od Míšánek »

Děkuju moc za Tvé úsilí Igor :wink:

Jakmile mi dorazí hardware tak to zkusím a uvidíme co to bude dělat.

Zatím ještě jednou moc děkuju :wink:
Míšánek
Příspěvky: 21
Registrován: úte 07.12.2021 19:59
Bydliště: Uherský Brod

Re: Ovládání servomotoru do tří definovaných poloh

#53 Příspěvek od Míšánek »

Tak posílám zpětnou vazbu Igor.

Využil jsem základ Tvého kódu který v podstatě fungoval tak, jak by měl.

Nicméně nakonec jsem si ho změnil a funguje to uplně přesně tak, jak jsem chtěl.

Kód: Vybrat vše

#include <Servo.h>

Servo servo;

int next_pos;
int pos1 = 1250;
int pos2 = 1600;
int pos3 = 1850;

void setup() {
  servo.attach(8);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  servo.writeMicroseconds(pos2);
}

void loop() {
  if (digitalRead(11)==LOW) {                                     
    // max
    if (digitalRead(9)==LOW) if (pos3 > 600) pos1 -= 1;     //-
    if (digitalRead(10)==LOW) if (pos3 < 2400) pos1 += 1;    //+
    next_pos = pos1;
  } else if (digitalRead(12)==LOW) {                               
    // neutral
    if (digitalRead(9)==LOW) if (pos3 > 600) pos2 -= 1;     //-
    if (digitalRead(10)==LOW) if (pos3 < 2400) pos2 += 1;    //+
    next_pos = pos2;
  } else {                                                   
    // min
    if (digitalRead(9)==LOW) if (pos3 > pos2) pos3 -= 1;    //-
    if (digitalRead(10)==LOW) if (pos3 < pos1) pos3 += 1;    //+
    next_pos = pos3;
  }

  servo.writeMicroseconds(next_pos);
  delay(20);
}



Ještě jednou díky moc za obrovskou pomoc! :wink:

Ještě řeším ovládání dvou diod, ale to už snad nějak sám zmáknu.

Děkuju moc všem za pomoc a ať se vám daří :)
Uživatelský avatar
igorb
Příspěvky: 4956
Registrován: čtv 22.03.2007 0:00
Bydliště: SK Bratislava

Re: Ovládání servomotoru do tří definovaných poloh

#54 Příspěvek od igorb »

Míšánek píše: ... kódu který v podstatě fungoval tak, jak by měl.
... jsem si ho změnil a funguje to uplně přesně tak, jak jsem chtěl.


:mrgreen: :mrgreen: :mrgreen:

to si asi niekde zaramujem :mrgreen:

v kazdom pripade mi to pripomenulo 3 zakladne poucky softveroveho inziniera:

1/ zakaznik nikdy nevie co chce
2/ ak nahodou vie co chce, urcite to nevie povedat
3/ keby sa mu to aj povedat podarilo, tak vyskusanim prvej verzie urcite zmeni nazor

tak nech sa dari, ked vies do toho kodu zasiahnut, je to uz len vec usilia dokoncit to ako potrebujes 8)
Míšánek
Příspěvky: 21
Registrován: úte 07.12.2021 19:59
Bydliště: Uherský Brod

Re: Ovládání servomotoru do tří definovaných poloh

#55 Příspěvek od Míšánek »

No,ono by to i fungovalo tak jak mělo nicméně v okamžiku kdy dorazilo DO tak výstup na běh a stop tlačítko fungoval trochu jinak než jsem předpokládal, proto jsem zalaboroval v programu a povědlo se :D

Díky, díky, díky!!! :wink:
Odpovědět

Zpět na „Palubní elektronika“