• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Program do ramienia robota
#1
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
 
Odpowiedź
#2
Jeśli program jest w postaci źródeł, to oczywiście, że możesz z niego wszystko wyczytać.
Pokaż kod.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
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);
}
}
 
Odpowiedź
#4
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.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
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
 
Odpowiedź
#6
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
 
Odpowiedź
#7
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.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#8
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
 
Odpowiedź
#9
Tak z ciekawości. Możesz podać linka do tego projektu?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#10
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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości