Mega a 20 serv
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Mega a 20 serv
Zdravím,
mám v plánu projekt "pavouk". Deska Mega, servo board pro 32 serv, několik senzorů ...
Servo Board by se měl ovládat přes UART (RX,TX) např. příkazem :
SoftSerial.print("#9P1500T500\r\n"); kde #9 je číslo serva, P je pozice, T je rychlost
Tento příkaz s konstantama funguje, ale já bych potřeboval ty konstanty nahradit proměnnýma. A nevím jak.
Můžete někdo prosím poradit?
Díky moc
mám v plánu projekt "pavouk". Deska Mega, servo board pro 32 serv, několik senzorů ...
Servo Board by se měl ovládat přes UART (RX,TX) např. příkazem :
SoftSerial.print("#9P1500T500\r\n"); kde #9 je číslo serva, P je pozice, T je rychlost
Tento příkaz s konstantama funguje, ale já bych potřeboval ty konstanty nahradit proměnnýma. A nevím jak.
Můžete někdo prosím poradit?
Díky moc
Re: Mega a 20 serv
Kód: Vybrat vše
SoftSerial.print("#");
SoftSerial.print(ovladanyMotor);
SoftSerial.print("P");
SoftSerial.print(poziceMotoru);
SoftSerial.print("T");
SoftSerial.print(rychlostMotoru);
SoftSerial.print("\r\n");
Kód: Vybrat vše
void ovladejMotor(int ovladanyMotor, int poziceMotoru, int rychlostMotoru) {
SoftSerial.print("#");
SoftSerial.print(ovladanyMotor);
SoftSerial.print("P");
SoftSerial.print(poziceMotoru);
SoftSerial.print("T");
SoftSerial.print(rychlostMotoru);
SoftSerial.print("\r\n");
}
ovladejMotor(9, 1500, 500);
ovladejMotor(8, 1200, 400);
ovladejMotor(7, 1000, 300);
Re: Mega a 20 serv
Díky moc, vyzkouším.
Momentálně testuji jiný způsob, ale je to na mě dost složité.
Jedná se o plynulý pohyb serva z jedné polohy do druhé.
Servo se sice hýbe, ale cuká sem a tam. Někdy se uklidní a pomalu otáčí. Prostě pokaždé jinak.
Momentálně testuji jiný způsob, ale je to na mě dost složité.
Jedná se o plynulý pohyb serva z jedné polohy do druhé.
Kód: Vybrat vše
SoftwareSerial SoftSerial(14, 15); // RX, TX
char buffer[50];
int servoNum=11;
//int position=1500;
int speed=1500;
void setup() {
SoftSerial.begin(9600);
delay(100);
for (int i=500;i<=1500;i++)
{
snprintf(buffer, sizeof(buffer), "#%dP%dT%d\r\n", servoNum, i, speed);
Serial.print(buffer);
delay(50);
}
}
void loop() {
}
Re: Mega a 20 serv
Tak jsem vyzkoušel i tu vaši metodu. Je pro mě(začátečníka) srozumitelná. Jenom ty serva pořád cukají a skáčou jak kozy. Pak se uklidní a už jedou normálně. Nevíte co s tím ?
Nepoužívám už smyčku for.... ale jen přímé příkazy Serial.Print
Díky
Nepoužívám už smyčku for.... ale jen přímé příkazy Serial.Print
Díky
Re: Mega a 20 serv
Ukaž jak vypadá celý program.
Re: Mega a 20 serv
Zjistil jsem zajímavou věc - i když vůbec nezapojím Megu (připojím jen samotný servo board k napájení) tak se stejně serva pohnou a uspořádají se do nějakých středních hodnot. Jako by měl něco předdefinované a to asi dělá ten bordel.
Kód: Vybrat vše
void loop() {
nohaPZ(); // noha pravá zadní ---------------------------
SoftSerial.print("#");
SoftSerial.print(servoZL2);
SoftSerial.print("P");
SoftSerial.print(poziceZL2);
SoftSerial.print("T");
SoftSerial.print(rychlostZL2);
SoftSerial.print("\r\n");
delay(1000);
nohaPS();
SoftSerial.print("#");
SoftSerial.print(servoZL2);
SoftSerial.print("P");
SoftSerial.print(poziceZL2);
SoftSerial.print("T");
SoftSerial.print(rychlostZL2);
SoftSerial.print("\r\n");
delay(1000);
}
// -------------------------------------------------------------------
void nohaPZ() {
//poziceZL2 =Serial.parseInt(); // nactena hodnota pozice srva
servoZL2 = 17; // servo č.1
poziceZL2 = 750; // rozsah pozice 750-1100
rychlostZL2 = 800;
}
void nohaPS() {
//pozice =Serial.parseInt(); // nactena hodnota pozice srva
servoZL2 =17 ;
poziceZL2 = 1100;
rychlostZL2 = 800;
}
Re: Mega a 20 serv
No to je docela pochopitelné, že bez příkazu bůh ví jaký servoboard nastaví serva do středové pozice ... problém je v programu. Běhá ti to v loopu a každou vteřinu přepisuje a odesílá nové parametry tomu servoboardu. Musíš je posílat jen, když chceš tím motorem opravdu hnout.
Re: Mega a 20 serv
Myslím že ta smyčka je v pořádku. Potřebuji vidět že se servo hýbe sem a tam. Tento způsob ovládání není vhodný pro současný pohyb dvou a více serv. Vždy jede jen jedno. Možná by to šlo vložit do smyčky for .... s postupným nabýváním hodnoty pozice, ale to se mi zdá krkolomné a složité. Servoboard sice umožňuje skupinové ovládání více serv, ale hodnoty tam nejdou vložit jako proměnné (aspoň si myslím).
Re: Mega a 20 serv
Ten servoboard má vlastní procesor ... tomu řekneš, kterým motorem, kam a jak rychle má hnout ... pokud ten pohyb v důsledku pomalé rychlosti trvá například 10s a ty do něj celou dobu budeš furt hustit to samé, že má jít na tu pozici a takhle rychle, tak se bude kousat ... musí zpracovat novou informaci, vypočíst nové hodnoty a začít je znova zapisovat do toho motoru.
Jednoduše otestuješ tak, že tam dáš naschvál delay jak kráva ... aby jsi předešel tomu, že loop odešle ten samý příkaz ještě dříve, než ho servoboard dokončí.
Jednoduše otestuješ tak, že tam dáš naschvál delay jak kráva ... aby jsi předešel tomu, že loop odešle ten samý příkaz ještě dříve, než ho servoboard dokončí.
Re: Mega a 20 serv
Ti robopavouci přece fungují . Taky jedou přes Megu a board. Jenom přijít na to jak.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti