Stránka 1 z 1
Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 03 úno 2022, 10:44
od Martin82
Zdravím, najde se zde někdo, kdo by bych ochotný pomoci s ovládáním dvou servo motorů pomocí Arduina?
Cíle jsou dva. Ovládání pomocí dvou tlačítek a vzdáleně přes remote. (U obou variant se musí otáčet serva inverzně)
Bohužel jsem na internetu nenašel nic podobného, co by mi poradilo (nejspíš je to tím, že jsem úplný laik

. Uvítám každou pomoc.
Poradíte, prosím, jak na to?
Re: Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 03 úno 2022, 14:41
od kiRRow
Asi uplně dobře nerozumím tomu "inverzně". To jako zmáčknu tl. doleva a ony se oba budou točit doprava, nebo se jeden vždy musí točit v opačném směru ? Že v podstatě ovládám jeden krokový motor a ten druhý dělá naprostý opak ? To by pak stačilo znát maximální pozici serva a od ní odečíst pozici prvního serva a zapsat ji do druhého. Maximální pozice je např 180 ... servo1 je na pozici 20, takže servo2 je na pozici 180-20=160
Re: Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 03 úno 2022, 15:39
od Martin82
Špatně jsem to napsal, ale pochopil jste to správně - při stisknutí tlačítka se vždy jeden musí točit v opačném směru. Servo motory jsou to tyto
https://www.bighobby.cz/jx-servo-pdi-11 ... gIesPD_BwE
Re: Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 03 úno 2022, 18:11
od kiRRow
No, tak to potom, když si třeba vemeš tenhle example :
https://docs.arduino.cc/learn/electronics/servo-motors tak je tam kód co čte potenciometr a podle něj točí servem.
Kód: Vybrat vše
#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 1023)
val = map(val, 0, 1023, 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
}
Když v tom example vytvoříš ještě jedno Servo myservo2, v setupu ho attachneš na jinačí pin (ale musí být PWM) a za myservo.write(val) hodíš řádek myservo2.write(180-val), tak by to mělo dělat přibližně to co myslíš, akorát to bude číst potenciometr místo dvou tlačítek. Ale to se pořeší příště ...
PS: Moje zkušenosti ze stavby robota ottíka - serva nenapájet z arduino desky, při rychlejším pohybu více serv najednou dochází k restartu, nebo zaseknutí procesoru
Re: Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 05 úno 2022, 19:02
od Martin82
Super, diky, funguje, potenciometr mi se servy toci presne jak potrebuju... Poradis jak tam ted dostat ty tlacitka, aby se to pri jejich stisknuti otacelo po triceti stupnich doleva a doprava?
Re: Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 05 úno 2022, 19:12
od kiRRow
Jen při stisknutí ? ... tzn, stisknu, držím a ono se to pootočí o 30° a i kdybych to půl roku držel tak nic dalšího ? Co se má stát, když se budeš chtít dostat tlačítky mimo rozsah hodnot motoru ?
Re: Prosba o pomoc - Inverzní otáčení servo motorů pomocí dvou tlačítek
Napsal: 05 úno 2022, 19:26
od kiRRow
int val; // variable to read the value from the analog pin je třeba nahradit int val = 0; ( 0 je původní hodnota a musíš si ji změnit dle potřeby )
v setupu si musíš určit dva piny, co nastavíš jako INPUT_PULLUP, a oproti zemi je připojíš zkrz tlačítko ...
Kód: Vybrat vše
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
tento kod musí jít pryč a být nahrazen kodem
Kód: Vybrat vše
if(tady si musis precist tlacitko1==LOW){
val = val + 30;
}
if(tady si musis precist tlacitko2==LOW){
val = val - 30;
}
nejsou ošetřeny zákmity tlačítek, využívá se delay na konci loopu
a neni osetren stisk ... to by pak bylo
Kód: Vybrat vše
if(tady si musis precist tlacitko1==LOW){
if(zmenil se stav tlacitka1?){
val = val + 30;
}
}
if(tady si musis precist tlacitko2==LOW){
if(zmenil se stav tlacitka2){
val = val - 30;
}
}