Lego Mindstorms i NXC sterowanie serwomotorem: Różnica pomiędzy stronami
imported>Admin Nie podano opisu zmian |
imported>Admin Nie podano opisu zmian |
||
| Linia 1: | Linia 1: | ||
==Przykład 1== | |||
Zakładamy, że robot sterowany jest dwoma serwomotorami. W moim przypadku B i C. W pierwszym przykładzie robot pojedzie prosto przez 5 sekund, następnie cofnie się na miejsce startowe. | |||
<pre> | |||
task main() | |||
{ | |||
OnFwd(OUT_B, 75); | |||
OnFwd(OUT_C, 75); | |||
Wait(5000); | |||
OnRev(OUT_BC, 75); | |||
Wait(5000); | |||
Off(OUT_BC); | |||
} | |||
</pre> | |||
'''Przeanalizujmy''' | |||
<pre> | |||
task main() | |||
{ | |||
[[ | } | ||
</pre> | |||
Zadanie główne, może być ich oczywiście więcej. | |||
<code>OnFwd(OUT_B, 75);</code> '''serwomotor B''' ma ruszyć '''naprzód''' z siłą '''75%''' mocy. | |||
<code>Wait(5000);</code> Czekaj 5000 milisekund, czyli 5 sekund, czyli wcześniejsze zadanie będzie trwało 5 sekund. | |||
<code>OnRev(OUT_BC, 75);</code> '''serwomotory B i C''' mają ruszyć '''do tyłu''' z siłą '''75%''' | |||
<code>Off(OUT_BC);</code>Zatrzymanie serwomotorów B i C | |||
'''Poniżej filmik ilustrujący przykład 1 i 2''' | |||
<html> | |||
<object width="560" height="315"><param name="movie" value="//www.youtube.com/v/pzqUQvu1p9s?hl=pl_PL&version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="//www.youtube.com/v/pzqUQvu1p9s?hl=pl_PL&version=3" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object> | |||
</html> | |||
==Przykład 2== | |||
Robot pojedzie przez 5 sekund do przodu. Następnie obróci się i wróci przodem na miejsce. | |||
<pre> | |||
task main() | |||
{ | |||
OnFwd(OUT_B, 75); | |||
OnFwd(OUT_C, 75); | |||
Wait(5000); | |||
OnRev(OUT_C, 75); | |||
Wait(2000); | |||
OnFwd(OUT_BC, 75); | |||
Wait(5000); | |||
Off(OUT_BC); | |||
} | |||
</pre> | |||
'''Przeanalizujmy''' | |||
Skupimy się tylko na różnicach w stosunku do poprzedniego przykładu. | |||
<pre> | |||
OnRev(OUT_C, 75); | |||
Wait(2000); | |||
</pre> | |||
Proszę zauważyć, że uruchamiamy '''tylko jeden serwomotor'''. W rezultacie robot obróci się. | |||
==Przykład 3== | |||
Efekt identyczny jak w przykładzie 1 | |||
<pre> | |||
task main() | |||
{ | |||
OnFwd(OUT_BC, 75); | |||
Wait(5000); | |||
OnFwd(OUT_BC, -75); | |||
Wait(5000); | |||
Off(OUT_BC); | |||
} | |||
</pre> | |||
'''Przeanalizujmy''' | |||
<code>OnFwd(OUT_BC, -75);</code> Do jazdy do tyłu wykorzystujemy polecenie do jazdy naprzód z mocą -75. | |||
==Przykład 4== | |||
Efekt podobny do przykładu 1. Czas jazdy zależny jest od podanej w stopniach liczby obrotów. '''1 rotacja = 360 stopni'''. | |||
<pre> | |||
RotateMotor(OUT_BC, 75, 3600); | |||
RotateMotor(OUT_BC, -75, 3600); | |||
</pre> | |||
'''Przenalizujmy''' | |||
<code>RotateMotor(OUT_BC, 75, 3600);</code> Uruchamiamy serwomotory B i C z mocą 75% na 10 pełnych obrotów '''do przodu''' (1 obrót = 360 stopni). | |||
<code>RotateMotor(OUT_BC, -75, 3600);</code> Uruchamiamy serwomotory B i C z mocą 75% na 10 pełnych obrotów '''do tyłu''' (1 obrót = 360 stopni). Ruch wsteczny uzyskujemy poprzez '''-75''' | |||
==Przykład 5== | |||
Rozszerzona wersja wcześniejszego polecenia. | |||
<pre> | |||
RotateMotorEx(OUT_BC, 75, 360, 45, true, true); | |||
</pre> | |||
Użyto <code>RotateMotorEx(port serwomotoru, moc 0 - 100, obrót w stopniach, kąt skrętu, synchronizacja serwomotorów, serwomotory zatrzymują się po rotacji);</code> | |||
[[Category:Lego Mindstorms]] | |||
Aktualna wersja na dzień 20:10, 25 sty 2014
Przykład 1
Zakładamy, że robot sterowany jest dwoma serwomotorami. W moim przypadku B i C. W pierwszym przykładzie robot pojedzie prosto przez 5 sekund, następnie cofnie się na miejsce startowe.
task main()
{
OnFwd(OUT_B, 75);
OnFwd(OUT_C, 75);
Wait(5000);
OnRev(OUT_BC, 75);
Wait(5000);
Off(OUT_BC);
}
Przeanalizujmy
task main()
{
}
Zadanie główne, może być ich oczywiście więcej.
OnFwd(OUT_B, 75); serwomotor B ma ruszyć naprzód z siłą 75% mocy.
Wait(5000); Czekaj 5000 milisekund, czyli 5 sekund, czyli wcześniejsze zadanie będzie trwało 5 sekund.
OnRev(OUT_BC, 75); serwomotory B i C mają ruszyć do tyłu z siłą 75%
Off(OUT_BC);Zatrzymanie serwomotorów B i C
Poniżej filmik ilustrujący przykład 1 i 2
Przykład 2
Robot pojedzie przez 5 sekund do przodu. Następnie obróci się i wróci przodem na miejsce.
task main()
{
OnFwd(OUT_B, 75);
OnFwd(OUT_C, 75);
Wait(5000);
OnRev(OUT_C, 75);
Wait(2000);
OnFwd(OUT_BC, 75);
Wait(5000);
Off(OUT_BC);
}
Przeanalizujmy
Skupimy się tylko na różnicach w stosunku do poprzedniego przykładu.
OnRev(OUT_C, 75); Wait(2000);
Proszę zauważyć, że uruchamiamy tylko jeden serwomotor. W rezultacie robot obróci się.
Przykład 3
Efekt identyczny jak w przykładzie 1
task main()
{
OnFwd(OUT_BC, 75);
Wait(5000);
OnFwd(OUT_BC, -75);
Wait(5000);
Off(OUT_BC);
}
Przeanalizujmy
OnFwd(OUT_BC, -75); Do jazdy do tyłu wykorzystujemy polecenie do jazdy naprzód z mocą -75.
Przykład 4
Efekt podobny do przykładu 1. Czas jazdy zależny jest od podanej w stopniach liczby obrotów. 1 rotacja = 360 stopni.
RotateMotor(OUT_BC, 75, 3600); RotateMotor(OUT_BC, -75, 3600);
Przenalizujmy
RotateMotor(OUT_BC, 75, 3600); Uruchamiamy serwomotory B i C z mocą 75% na 10 pełnych obrotów do przodu (1 obrót = 360 stopni).
RotateMotor(OUT_BC, -75, 3600); Uruchamiamy serwomotory B i C z mocą 75% na 10 pełnych obrotów do tyłu (1 obrót = 360 stopni). Ruch wsteczny uzyskujemy poprzez -75
Przykład 5
Rozszerzona wersja wcześniejszego polecenia.
RotateMotorEx(OUT_BC, 75, 360, 45, true, true);
Użyto RotateMotorEx(port serwomotoru, moc 0 - 100, obrót w stopniach, kąt skrętu, synchronizacja serwomotorów, serwomotory zatrzymują się po rotacji);