Arduino Polska Forum
Program do ramienia robota - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Program do ramienia robota (/watek-program-do-ramienia-robota)

Strony: 1 2


Program do ramienia robota - Van Bob - 20-04-2018

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


RE: Program do ramienia robota - Robson Kerman - 20-04-2018

Jeśli program jest w postaci źródeł, to oczywiście, że możesz z niego wszystko wyczytać.
Pokaż kod.


RE: Program do ramienia robota - Van Bob - 20-04-2018

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);
}
}



RE: Program do ramienia robota - Robson Kerman - 22-04-2018

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.


RE: Program do ramienia robota - Van Bob - 22-04-2018

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


RE: Program do ramienia robota - Van Bob - 22-04-2018

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


RE: Program do ramienia robota - Robson Kerman - 22-04-2018

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.


RE: Program do ramienia robota - Van Bob - 22-04-2018

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


RE: Program do ramienia robota - Robson Kerman - 23-04-2018

Tak z ciekawości. Możesz podać linka do tego projektu?


RE: Program do ramienia robota - Van Bob - 23-04-2018

Jasne link do Youtube :
https://www.youtube.com/watch?v=0mt3tUfT5n4&list=PL4ckUg3tiJzXbhIuEzuE6eNmDLH9f72FK&index=5
Może jak zobaczysz to zrozumiesz o co mi chodzilo Smile
Pozdrawiam