Od kiedy zacząłem parać się Mindstorms'em nachodziło mnie na zobienie marsjańskiego łazika. I stało się. Po rozłożeniu wyścigówki 42000 i dokupieniu paru elementów zabrałem się do składania.
Oto co powstało:
Wymiary:
długość - 50s
szerokość - 37s
wysokość - 34s
Napęd:
jazda - 2 serwomotory Mindstorms
skręt - 1 silnik pf medium
Sterowanie:
RobotC z PADa
I do tego filmik:
[youtube]http://www.youtube.com/watch?v=COI1Eg04Qnw[/youtube]
[MOC] Mars Rover
Moderatorzy: Mod Team, Mod Team
- legosamigos
- VIP
- Posty: 3941
- Rejestracja: 2012-04-11, 07:01
- Lokalizacja: Gdańsk
- brickshelf: legosamigos
- Kontakt:
-
Tak, to prawda można by napędzać taki łazik samymi PFami, ba ... zapinając PF XL wewnątrz byłoby więcej miejsca niż przy serwo NXT, ale ...legosamigos pisze:Tak szczerze mówiąc, znając możliwości mindstormsa, to trochę mało funkcji jest wykorzystane w tym łaziku. Myślę, że to samo można by zrobić zwykłymi PF
ten łazik w przeciwieństwie do bezmindstormsowego może jeździć autonomicznie (program poruszający go po pomieszczeniu z użyciem sensora odległości jest banalny zarówno w NXT-G jak i RobotC). Możliwości dodania kolejnych funkcji wiązałaby się z zapięciem multipleksera serwomotorów (którego nie posiadam, a druga kostka zwyczajnie nie zmieści się do środka), które mogłyby np. sterować ramieniem, wiercić wiertłem, czy obracać skanerem.
Zapomniałem dodać, że światłami steruje 8 bitowy expander, który za pomocą programu może nie tylko świecić ciągle, ale zapalać i gasić 8 LED w dowolnych sekwencjach.
- legosamigos
- VIP
- Posty: 3941
- Rejestracja: 2012-04-11, 07:01
- Lokalizacja: Gdańsk
- brickshelf: legosamigos
- Kontakt:
-
Przyznaję się, że zupełnie nie znam się na mindstormsie, jednak wiem, że daje naprawdę ogromne możliwości. Ze zwykłymi PF nie ma co prawda sensora odległości, ale pilotem IR też możesz zatrzymać lub uruchomić pojazd :)Neo pisze:Tak, to prawda można by napędzać taki łazik samymi PFami, ba ... zapinając PF XL wewnątrz byłoby więcej miejsca niż przy serwo NXT, ale ...legosamigos pisze:Tak szczerze mówiąc, znając możliwości mindstormsa, to trochę mało funkcji jest wykorzystane w tym łaziku. Myślę, że to samo można by zrobić zwykłymi PF
ten łazik w przeciwieństwie do bezmindstormsowego może jeździć autonomicznie (program poruszający go po pomieszczeniu z użyciem sensora odległości jest banalny zarówno w NXT-G jak i RobotC). Możliwości dodania kolejnych funkcji wiązałaby się z zapięciem multipleksera serwomotorów (którego nie posiadam, a druga kostka zwyczajnie nie zmieści się do środka), które mogłyby np. sterować ramieniem, wiercić wiertłem, czy obracać skanerem.
Zapomniałem dodać, że światłami steruje 8 bitowy expander, który za pomocą programu może nie tylko świecić ciągle, ale zapalać i gasić 8 LED w dowolnych sekwencjach.
Moje życie jest jak klocki Lego, nigdy nie wiem, co zbuduję
Program nie jest bardzo skomplikowany, więc to parę godzin pisania plus kolejne parę testowania i poprawek.
Składa się z 3 podprogramów: jazda, skręcanie kół i włączanie LED
Ciekawostką jest ustawienie progu minimalnego wychylenia joysticka PADa, do którego nic się nie dzieje. Zapobiega to "wariowaniu" serwomotorów.
Drugą ciekawostką jest steowanie jednym joistickiem z użyciem zmiennej, która po skręcie kół zmienia kierunek obotu kół prawej i lewej strony ze zgodnego na przeciwny.
Poniżej cały progam:
Składa się z 3 podprogramów: jazda, skręcanie kół i włączanie LED
Ciekawostką jest ustawienie progu minimalnego wychylenia joysticka PADa, do którego nic się nie dzieje. Zapobiega to "wariowaniu" serwomotorów.
Drugą ciekawostką jest steowanie jednym joistickiem z użyciem zmiennej, która po skręcie kół zmienia kierunek obotu kół prawej i lewej strony ze zgodnego na przeciwny.
Poniżej cały progam:
#pragma config(Motor, motorA, , tmotorNormal, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
#include "JoystickDriver.c"
const tSensors port = S1; //wybor portu S1
const byte kI2CAddress = 0x040; //Wybor adresu
byte i2cconfg[3];
const short Size = 0;
const short Address = 1;
const short led = 2;
int threshold = 20;
int n = -1;
task swiatlo()
{
while (true)
{
SensorType[port] = sensorI2CCustom;
i2cconfg[Size] = 2;
i2cconfg[Address] = kI2CAddress;
i2cconfg[led] = 0; //wartosci pomiedzy 0-255
sendI2CMsg(port, i2cconfg[0] ,0);
i2cconfg[Address] = kI2CAddress;
sendI2CMsg(port, i2cconfg[0], 1);
}
}
task jazda()
{
while(true) // Start petli:
{
getJoystickSettings(joystick);
if(abs(joystick.joy1_y2) > threshold) // Jezeli prawy joystick przesuwamy powyzeli minimum progu:
{
motor[motorB] = ((joystick.joy1_y2)*n*(-1)); // Serwomotor B pracuje
motor[motorC] = (joystick.joy1_y2); // Serwomotor C pracuje
}
else // W przypadku nie osiagniecia progu:
{
motor[motorB] = 0; // Serwomotor B jest w stanie STOP.
motor[motorC] = 0; // Serwomotor C jest w stanie STOP.
}
}
}
task obrot()
{
while (true)
{
getJoystickSettings(joystick); // Przycisk 1 na padzie
if(joy1Btn(1) == 1)
{
motor[motorA] = (n*100);
wait1Msec(2500);
n = n*(-1); // Zmiana kierunku obrotu
}
if(joy1Btn(1) == 0)
{
motor[motorA] = 0;
}
}
}
task main()
{
StartTask(swiatlo);
StartTask(jazda);
StartTask(obrot);
while(true)
{
wait1Msec(10);
}
}
Twój MOC traci przez prezentację, filmik nie prezentuje nic ciekawego, zdjęć też mało. Pokazałbyś jak to jeździ po pokoju, bo konstrukcja ciekawa.
Ostatnio zmieniony 2013-10-08, 16:16 przez Nerevar, łącznie zmieniany 2 razy.