Arduino Polska Forum

Pełna wersja: Program do ramienia robota
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam
Piszę mam nadzieje w dobrym miejscu.
Mam pytanie odnośnie programu pod Arduino który obsługuje ramie robota 6 serwowe program napisał ktoś inny bo ja zajmuje się modelarstwem RC i zachciało mi się umieścić ramie robota na przodzie mojego pojazdu czołgo podobnego :Smile pytanie brzmi :
Czy na podstawie programu po odczytaniu można dowiedzieć się jakie porty zostały użyte ?
Dobra mianowicie chodzi mi o to że gość napisał program żeby podłączyć Aparature Flysky do Arduino Uno żeby sterować zdalnie tym ramieniem.Wiem jak podłączyć  PWM i z tego co odczytałęm jest on ujęty w programie , nie wiem tylko gdzie na płytce Arduino podłączyć 6 kabelków sterowania z odbiornika RC.
Mam nadzieję że za bardzo nie namotałem i rozumiecie o to mi chodzi.
Proszę o odpowiedź
Pozdrawiam
Jeśli program jest w postaci źródeł, to oczywiście, że możesz z niego wszystko wyczytać.
Pokaż kod.
Tak to wygląda Smile
Kod:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
int i = 361;
int i2 = 347;
int i3 = 378;
int i4 = 269;
int i5 = 326;
int i6 =198;
int a = 290;
int a2 = 200;
int a3 = 300;
int a4 = 300;
int a5 = 300;
int a6 =130;
void setup()
{
 Serial.begin (9600);
 pwm.begin();
 pwm.setPWMFreq(60);
 yield();
 pwm.setPWM(0, 0, i);
 pwm.setPWM(13, 0, i2);
 pwm.setPWM(11, 0, i3);
 pwm.setPWM(3, 0, i4);
 pwm.setPWM(4, 0, i5);
 pwm.setPWM(5, 0, i6);

}
void loop()
{
int CC1 = pulseIn(A3,INPUT);
int CC2 = pulseIn(A1,INPUT);
int CC3 = pulseIn(A2,INPUT);
int CC4 = pulseIn(A0,INPUT);
int CC5 = pulseIn(3,INPUT);

Serial.print (i);
Serial.print ("   ");
Serial.print (i2);
Serial.print ("   ");
Serial.print (i3);
Serial.print ("   ");
Serial.print (i4);
Serial.print ("   ");
Serial.print (i5);
Serial.print ("   ");
Serial.println (i6);
Serial.print ("   ");

int CC1Val = map(CC1,17120,16180,0,100);
int CC4Val = map(CC4,17130,16680,0,100);
int CC2Val = map(CC2,17120,16160,0,100);
int CC3Val = map(CC3,17110,16160,0,100);
int CC5Val = map(CC5,16200,17130,0,100);
Serial.println(CC3Val);








if ( (CC4Val < 50) && (i<530)&& (CC4Val>-20)&& (CC4Val<200) && (CC5Val>50))
{
 int Value = map(CC4Val,50,-9,1,20);
 i=i+Value;
  pwm.setPWM(0, 0, i);
}
if ((CC4Val > 120) && (i>120) && (CC4Val<200)&& (CC4Val>-20)&& (CC5Val>50))
{
 int Value = map(CC4Val,120,194,1,20);
 i=i-Value;
  pwm.setPWM(0, 0, i);
}
if ((CC3Val > 65) && (i2>170) && (CC3Val<110)&& (CC3Val>-10)&& (CC5Val>50))
{
 int Value = map(CC3Val,65,90,1,20);
 i2=i2-Value;
 pwm.setPWM(13, 0, i2);
}
if ((CC3Val < 25) && (i2<540) && (CC3Val<110)&& (CC3Val>-10)&& (CC5Val>50))
{
 int Value = map(CC3Val,25,-5,1,20);
 i2=i2+Value;
 pwm.setPWM(13, 0, i2);
}
if ((CC1Val > 78) && (i3<580) && (CC1Val<120)&& (CC1Val>0)&& (CC5Val>50))
{
 int Value = map(CC1Val,78,108,1,20);
 i3=i3+Value;
 pwm.setPWM(11, 0, i3);
}
if ((CC1Val < 37) && (i3>100) && (CC1Val<120)&& (CC1Val>0)&& (CC5Val>50))
{
 int Value = map(CC1Val,37,6,1,20);
 i3=i3-Value;
 pwm.setPWM(11, 0, i3);
}
//-------------------------------------
if ((CC3Val > 65) && (i4>120) && (CC3Val<110)&& (CC3Val>-10)&& (CC5Val<50))
{
 int Value = map(CC3Val,65,100,1,20);
 i4=i4-Value;
 pwm.setPWM(3, 0, i4);
}
if ((CC3Val < 25) && (i4<480) && (CC3Val<110)&& (CC3Val>-10)&& (CC5Val<50))
{
 int Value = map(CC3Val,25,-5,1,20);
 i4=i4+Value;
 pwm.setPWM(3, 0, i4);
}
if ((CC1Val > 78) && (i5<500) && (CC1Val<120)&& (CC1Val>0)&& (CC5Val<50))
{
 int Value = map(CC1Val,78,108,1,20);
 i5=i5+Value;
 pwm.setPWM(4, 0, i5);
}
if ((CC1Val < 37) && (i5>120) && (CC1Val<120)&& (CC1Val>0)&& (CC5Val<50))
{
 int Value = map(CC1Val,37,6,1,20);
 i5=i5-Value;
 pwm.setPWM(4, 0, i5);
}
if ( (CC4Val < 50) && (i6<330)&& (CC4Val>-20)&& (CC4Val<200) && (CC5Val<50))
{
 int Value = map(CC4Val,50,-9,1,10);
 i6=i6+Value;
 pwm.setPWM(5, 0, i6);
}
if ((CC4Val > 120) && (i6>180) && (CC4Val<200)&& (CC4Val>-20)&& (CC5Val<50))
{
 int Value = map(CC4Val,120,194,1,20);
 i6=i6-Value;
 pwm.setPWM(5, 0, i6);
}
}
Kod programu umieszczaj w znacznikach.

Kod:
int CC1 = pulseIn(A3,INPUT);
int CC2 = pulseIn(A1,INPUT);
int CC3 = pulseIn(A2,INPUT);
int CC4 = pulseIn(A0,INPUT);
int CC5 = pulseIn(3,INPUT);

Z powyższego wynika, że te sześć kabelków masz podpięte pod A3, A1, A2, A0, D3.
To znaczy pięć, bo szósty to masa.
Witam
Dziękuje za odp.
Tylko to trochę dziwne bo te 6 kabelkow to jest 6 kanalow wiec żadnej masy tam nie ma to jest 6 sygnałów Sad
I teraz nie wiem nic Sad  ten program działa osoba która go udostępniła na internecie dodała też filmik i steruje robotem
Hmm czyli kabelki idą do pinów analog i jeden do digital na płytce UNO tak ? o ile dobrze zrozumiałem to gdzie szósty ?
Sad
Pozdrawiam
Patrzyłem wiele razy na ten kod i oczywiście na logike RC te sześć kabelków podłączył bym pod i ; i1 ; i2 ... i6 do Digital na UNO ale nie wiem jak to się ma do tego programu w Arduino niestety Sad
Pozdrawiam
Sterowanie PWM w modelarstwie RC wygląda tak, że położenie serwa na MIN jest równoznaczne z szerokością impulsu 1ms, neutral 1.5ms MAX 2ms.
Idąc tym tropem, naszym zadaniem jest zmierzenie czasu tego impulsu.
Tym pomiarem zajmuje się funkcja pulseIn(PIN,VALUE);
Taka funkcja występuje w powyższym programie, w miejscu podanym przeze mnie.
Wygląda na to, że pobieranych jest pięć kanałów.
Na przykład, masz 
Kod:
int CC1 = pulseIn(A3,INPUT);

CC1 mapowane jest na CC1Val

Kod:
int CC1Val = map(CC1,17120,16180,0,100);

Potem mamy pętle, kolejne mapowania na Value i ostatecznie wysyłamy sygnał do sterowania serwami.
Choć bym nie wiem, jak się przyglądał, to nie wypatrzę tu szóstego kanału.
Witam
Ok
Jak przyjdą wszystkie części to podłącze jak mówisz i zobaczymy Smile
Tylko ciekawy jestem dlaczego gościu tak to napisał skoro jest 6 serw ? Smile
Ciekawe czy to zadziała Smile
Dziekuje za pomoc jeszcze się odezwe
Pozdrwaim
Tak z ciekawości. Możesz podać linka do tego projektu?
Jasne link do Youtube :
https://www.youtube.com/watch?v=0mt3tUfT...FK&index=5
Może jak zobaczysz to zrozumiesz o co mi chodzilo Smile
Pozdrawiam
Stron: 1 2