09-10-2019, 13:22
Witam,
Mam problem z precyzyjnym sterowaniem serwem AR - 3603 HB. Problem polega,że w tym serwie jest możliwa tylko praca ciągła, a wiec po podaniu krotkiego impulsu serwo obraca się w dajmy na to w lewo a przekroczeniu danej długości impulsu w prawo. Gdy ustawimy długość graniczną serwo się zatrzymuje. Problem polega na tym iż chce wysterować odpowiednio w czasie taką samą drogę w jedną jak i w drugą strone, ale nigdy mi sie to nie udaje.
mój program działa w następujacy sposób po przekroczeniu danej wartosci na przetworniku analogowym serwo obraca się w jedną strone przez dany okres czasu a po ponownym przekroczeniu wartosci progowej w tym samym czasie w drugą strone. Jednak widać iż drogi te są różne a nie równe. Z górzy dziękuje za pomoc.
Mam problem z precyzyjnym sterowaniem serwem AR - 3603 HB. Problem polega,że w tym serwie jest możliwa tylko praca ciągła, a wiec po podaniu krotkiego impulsu serwo obraca się w dajmy na to w lewo a przekroczeniu danej długości impulsu w prawo. Gdy ustawimy długość graniczną serwo się zatrzymuje. Problem polega na tym iż chce wysterować odpowiednio w czasie taką samą drogę w jedną jak i w drugą strone, ale nigdy mi sie to nie udaje.
mój program działa w następujacy sposób po przekroczeniu danej wartosci na przetworniku analogowym serwo obraca się w jedną strone przez dany okres czasu a po ponownym przekroczeniu wartosci progowej w tym samym czasie w drugą strone. Jednak widać iż drogi te są różne a nie równe. Z górzy dziękuje za pomoc.
Kod:
#include <Servo.h>
Servo moje_serwo; // stworz obiekt moje_serwo do kontroli serwa
int potencjometr = A2; // pin analogowy do odczytu potencjometra
int wartorsc; // zmienna przechowujaca odczyt z potencjometru
int i = 0;
int g = 0;
int k = 0;
void setup() {
moje_serwo.attach(9); // serwo podlaczone jest do pinu 11
Serial.begin(9600);
}
void loop() {
wartorsc = analogRead(potencjometr);
Serial.print(wartorsc);
if ( wartorsc > 510 && k==0) {
k=1;
}
if ( wartorsc < 500 && k==1) {
k=2;
}
if ( wartorsc > 510 && k==2) {
k=3;
}
if ( wartorsc < 500 && k==3) {
k=0;
}
if(( k == 1) && (i == 0) && (g == 0)){
g=1;
moje_serwo.write(180);
delay(500);
moje_serwo.write(90);
delay(500);
i = 1;
g=0;
}
if((k == 3) && (i == 1) && (g == 0)){
g=1;
moje_serwo.write(0);
delay(500);
moje_serwo.write(90);
delay(500);
i = 0;
g=0;
}