Forum LUGPOL Strona Główna Forum LUGPOL
www.lugpol.pl

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj

Poprzedni temat «» Następny temat
[MOC] Wiatraczek
Autor Wiadomość
aro_kal 
Arek

Wiek: 41
Dołączył: 07 Lut 2006
Wpisy: 436
Skąd: Warszawa
Wysłany: 2008-09-21, 14:08   [MOC] Wiatraczek

W ramach walki z nudą i podczas oczekiwania na nowe klocki, które posłużą mi do budowy nowej trialówki, sięgnąłem po dawno zapomniane mindstorms. Pomijając fakt, że ledwo zadziałało mi to oprogramowanie na windows xp, cała reszta to czysta przyjemność.

Wiatraczek napędzają dwa silniki. Śmigiełkiem z zestawu 8855 kręci stara kostka 9V przy przełożeniu 1:1. Oficjalnie kręcić się umie nawet do 4000 obrotów na minutę, ale sądzę, że przy tym obciążeniu redukuje to się znacznie. Gdyby nie psiknięcie WD40 na ośkę śmigła, nie kręciłoby to się wcale, bo tak "mocny" jest ten silnik.

Drugi silnik 9V nieco nowszego typu kręci obrotnicą, na której wiatraczek się znajduje. Przełożenie 57:8 (czy aby na pewno obrotnica ma aż 57 zębów?).

Podstawę stanowi kostka RCX 2.0 na której umieściłem trzy guziki. Wymieniam je od lewej:
1 - włącza i wyłącza całość; zaraz po włączeniu obroty śmigła są na pierwszym biegu, a wieża nie obraca się
2 - zmienia prędkość obrotów śmigła; w sumie są trzy biegi
3 - zmienia prędkość wahadłowych obrotów wieży; są dwa biegi ruchu oraz bieg spoczynku

Dotknięciu guzika towarzyszy bip-bip, czego prawie nie słychać bo hałasuje to niemal jak suszarka, przy czym prawie wcale nie dmucha ;-). Czuć powiewik do 30 cm od wiatraczka.

ZDJĘCIA









FILM



KOD

A na deser kod dla każdego kto chciałby to skopiować. Nazwy wątków, funkcji i zmiennych są w naszym ojczystym języku, dzięki temu każdy pojmie w mig co funkcja ta robi.

Kod:
///// Autor - Arkadiusz Kalecinski /////
////////////////////////////////////////

int wlaczone_dmuchanie, predkosc_dmuchania, predkosc_obrotow, kierunek_obrotow;

void dzwiek ()
{
     PlaySound(SOUND_DOUBLE_BEEP);
}

///////////////////////////////////////////////
////// funkcja odpowiedzialna za //////////////
////// regulacje obrotow silnika C ////////////
///////////////////////////////////////////////

void predkosc_silnika (int czas_pracy, int czas_spoczynku, int moc_silnika)
{
     SetPower(OUT_C, moc_silnika);
     On(OUT_C);
     Wait(czas_pracy);
     Float(OUT_C);
     Wait(czas_spoczynku);
}

///////////////////////////////////////////////
////// glowny watek ///////////////////////////
///////////////////////////////////////////////

task main()
{
    wlaczone_dmuchanie = 0; // przyjmuje wartosc 0 lub 1 i oznacza wlaczony/wylaczony
    predkosc_dmuchania = 0; // przyjmuje wartosc 0, 1 i 2 oznacza predkosc obrotow smigla
    predkosc_obrotow = 0; // przyjmuje wartosc 0, 1 i 2 oznacza predkosc ruchow wahadlowych wiezy, 0 oznacza wylaczony
    kierunek_obrotow = 0; // obroty w lewo 0, obroty w prawo 1
    SetSensorType(SENSOR_1, SENSOR_TYPE_TOUCH);  // wlacznik, gniazdo 1
    SetSensorType(SENSOR_2, SENSOR_TYPE_TOUCH);  // zmienia predkosc obrotow smigla, gniazdo 2
    SetSensorType(SENSOR_3, SENSOR_TYPE_TOUCH);  // zmienia predkosc ruchow wahadlowych wiezy, gniazdo 3
    start obsluga_przycisu_start_stop;
    start obsluga_dmuchania;
    start obsluga_przycisu_predkosci_dmuchania;
    start obsluga_przycisu_predkosci_obrotow;
    start obsluga_obrotow;
    start zmiana_kierunku_obrotow;
   
}

///////////////////////////////////////////////
///////// przycisk 1 //////////////////////////
//////// wlaczanie/wylaczanie//////////////////
///////////////////////////////////////////////

task obsluga_przycisu_start_stop ()
{

    while (true)
    {
         if ((SENSOR_1==1) && (wlaczone_dmuchanie==0))
         {
            wlaczone_dmuchanie=1;
            dzwiek ();
            Wait(50); // przytrzymanie klawisza start/stop wlaczaloby i wylaczalo natychmiast, czas potrzebny na odsuniecie palca od guzika
         }
         else if ((SENSOR_1==1) && (wlaczone_dmuchanie==1))
         {
            wlaczone_dmuchanie=0;
            dzwiek ();
            Wait(50); // przytrzymanie klawisza start/stop wlaczaloby i wylaczalo natychmiast, czas potrzebny na odsuniecie palca od guzika
         }
    }
}

///////////////////////////////////////////////
///////// przycisk 2 //////////////////////////
//////// predkosc wirowania smigla ////////////
///////////////////////////////////////////////

task obsluga_przycisu_predkosci_dmuchania ()
{
    while (true)
    {
         if (wlaczone_dmuchanie==1)
         {
            if ((SENSOR_2==1) && (predkosc_dmuchania==0))
            {
               predkosc_dmuchania=1;
               dzwiek ();
               Wait(50);
            }
            else if ((SENSOR_2==1) && (predkosc_dmuchania==1))
            {
               predkosc_dmuchania=2;
               dzwiek ();
               Wait(50);
            }
            else if ((SENSOR_2==1) && (predkosc_dmuchania==2))
            {
               predkosc_dmuchania=0;
               dzwiek ();
               Wait(50);
            }
         }
    }
}

///////////////////////////////////////////////
///////// przycisk 3 //////////////////////////
//////// predkosc obrotow wiezy  //////////////
///////////////////////////////////////////////

task obsluga_przycisu_predkosci_obrotow ()
{
    while (true)
    {
         if (wlaczone_dmuchanie==1)
         {
            if ((SENSOR_3==1) && (predkosc_obrotow==0))
            {
               predkosc_obrotow=1;
               dzwiek ();
               Wait(50);
            }
            else if ((SENSOR_3==1) && (predkosc_obrotow==1))
            {
               predkosc_obrotow=2;
               dzwiek ();
               Wait(50);
            }
            else if ((SENSOR_3==1) && (predkosc_obrotow==2))
            {
               predkosc_obrotow=0;
               dzwiek ();
               Wait(50);
            }
         }
    }
}

///////////////////////////////////////////////
///////// silnik A ////////////////////////////
//////// wirowanie smigla /////////////////////
///////////////////////////////////////////////

task obsluga_dmuchania ()
{
    while (true)
    {
          if (wlaczone_dmuchanie==1)
          {
             if (predkosc_dmuchania==0)
             {
                SetPower(OUT_A, 1);
                OnFwd(OUT_A);
             }
             else if (predkosc_dmuchania==1)
             {
                SetPower(OUT_A, 4);
                OnFwd(OUT_A);
             }
             else if (predkosc_dmuchania==2)
             {
                SetPower(OUT_A, 7);
                OnFwd(OUT_A);
             }
          }
          else if (wlaczone_dmuchanie==0)
          {
               Float(OUT_A);
          }
    }
}

///////////////////////////////////////////////
///////// silnik C ////////////////////////////
//////// obroty wiezy  ////////////////////////
///////////////////////////////////////////////

task obsluga_obrotow ()
{
    while (true)
    {
          if (wlaczone_dmuchanie==1)
          {
             if (predkosc_obrotow==0)
             {
                Off(OUT_C); //pozwala natycmiast zatrzymac wieze w czasie obrotow
             }
             else if (predkosc_obrotow==1)
             {
                if (kierunek_obrotow==0)
                {
                   OnFwd(OUT_C);
                   predkosc_silnika(3, 4, 0);
                }
                else if (kierunek_obrotow==1)
                {
                    OnRev(OUT_C);
                    predkosc_silnika(3, 4, 0);
                }
             }
             else if (predkosc_obrotow==2)
             {
                if (kierunek_obrotow==0)
                {
                   OnFwd(OUT_C);
                   predkosc_silnika(2, 5, 1);
                }
                else if (kierunek_obrotow==1)
                {
                    OnRev(OUT_C);
                    predkosc_silnika(2, 5, 1);
                }
             }
          }
          else if (wlaczone_dmuchanie==0)
          {
               Off(OUT_C);
          }
    }
}

///////////////////////////////////////////////
/// cykliczna zmiana kierunku obrotow wiezy////
///////////////////////////////////////////////

task zmiana_kierunku_obrotow ()
{
     while (true)
     {
           if ((kierunek_obrotow == 0) && (predkosc_obrotow == 1))
           {
              Wait(550);
              kierunek_obrotow=1;
           }
           else if ((kierunek_obrotow == 1) && (predkosc_obrotow == 1))
           {
              Wait(550);
              kierunek_obrotow=0;
           }
           else if ((kierunek_obrotow == 0) && (predkosc_obrotow == 2))
           {
              Wait(180);
              kierunek_obrotow=1;
           }
           else if ((kierunek_obrotow == 1) && (predkosc_obrotow == 2))
           {
              Wait(180);
              kierunek_obrotow=0;
           }
      }
}
_________________

Ostatnio zmieniony przez aro_kal 2008-09-21, 14:22, w całości zmieniany 3 razy  
 
 
 
 
Sariel 
VIP
My other ride is a tank


Wiek: 38
Dołączył: 28 Mar 2007
Wpisy: 5322
Skąd: Warszawa
Wysłany: 2008-09-21, 14:29   Re: Wiatraczek

aro_kal napisał/a:
Oficjalnie kręcić się umie nawet do 4000 obrotów na minutę


Sorry, ale to bzdura. Specyfikacja Philo jasno podaje 2000 RPM przy 9V.
A sam wiatraczek interesujący, na pewno przyda Ci się na te jesienne upały ;)
_________________
Kalkulator przełożeń | Generator miniaturek z BSa/Majhosta
 
 
 
Robson 


Wiek: 30
Dołączył: 31 Sie 2006
Wpisy: 709
Skąd: Łódź-Bałuty
Wysłany: 2008-09-21, 16:01   

aro_kal napisał/a:
Sorry, ale to bzdura. Specyfikacja Philo jasno podaje 2000 RPM przy 9V.
A sam wiatraczek interesujący, na pewno przyda Ci się na te jesienne upały ;)

Ale jest chyba przełożenie to bedzie szybciej?
_________________
Cb1100RR
 
 
 
 
Jakub
[Usunięty]

Wysłany: 2008-09-21, 16:14   

Wiatraczek przydatny ,ale nie w tej porze roku :P
Dopracuj i sprzedaj patent .
Jako całość patrząc na funkcje i wygląd to bardzo ładny .
Pozdrawiam
 
 
 
V3speer 


Wiek: 31
Dołączył: 25 Lut 2008
Wpisy: 66
Skąd: Dobre Miasto
Wysłany: 2008-09-21, 18:19   

I nie bałeś się tam palców pchać jak to się kręciło? :P
 
 
 
 
Sariel 
VIP
My other ride is a tank


Wiek: 38
Dołączył: 28 Mar 2007
Wpisy: 5322
Skąd: Warszawa
Wysłany: 2008-09-21, 21:15   

Ok, poprawiam się, kostka faktycznie wyciąga ok. 4000 RPM. A o palce nie ma się co bać, ten silnik jest tak słaby że zatrzymuje się od przysłowiowego kichnięcia.
_________________
Kalkulator przełożeń | Generator miniaturek z BSa/Majhosta
 
 
 
aro_kal 
Arek

Wiek: 41
Dołączył: 07 Lut 2006
Wpisy: 436
Skąd: Warszawa
Wysłany: 2008-09-21, 21:16   

Cytat:

Sorry, ale to bzdura. Specyfikacja Philo jasno podaje 2000 RPM przy 9V.
A sam wiatraczek interesujący, na pewno przyda Ci się na te jesienne upały ;)


Specyfikacja Philo wyraźnie mówi, że jest to 4100 obrotów, z tym że ja już w tekście powyżej uwzględniłem wpływ oporów i napisałem, że obrotów jest na 100% mniej. Zakładam, że okolicach 2500-3000 powinno zostać. Jak będzie trzeba to czujnikiem światła sprawdzi się jak szybko się kręci.



Cytat:
Ale jest chyba przełożenie to bedzie szybciej?


Jest 1:1.

Cytat:
I nie bałeś się tam palców pchać jak to się kręciło? :P


Nie, bo ten silnik ma zerową siłę. Pies dostał trzy razy w nos i żyje.
_________________

 
 
 
 
V3speer 


Wiek: 31
Dołączył: 25 Lut 2008
Wpisy: 66
Skąd: Dobre Miasto
Wysłany: 2008-09-21, 21:36   

aro_kal napisał/a:

Nie, bo ten silnik ma zerową siłę. Pies dostał trzy razy w nos i żyje.


Ahh, to dobrze, ale te śmigło i tak wygląda groźnie ^^
 
 
 
 
Jakub350
[Usunięty]

Wysłany: 2008-09-23, 23:22   

Interesujące śmigło. Szkoda, że nie potrafi np. włączyć się automatycznie pod wpływem zwiększonej temperatury, ale do tego potrzebny jest czujnik temperatury. Ogólnie podoba mi się.
 
 
 
Wyświetl wpisy z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich wpisów
Nie możesz usuwać swoich wpisów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

phpBB by przemo  
Strona wygenerowana w 0,126 sekundy. Zapytań do SQL: 9