Skocz do zawartości

Arduino, obracające się serwomechanizm, problem z UART oraz zapytanie o krańcówki


NotYet

Pomocna odpowiedź

Cześć, jestem początkujący i mam trzy problemy z którymi nie mogę się uporać.

1. Obracający się serwomechanizm
Zakupiłem serwo "Tower Pro MicroServo 99", działa one jedynie w przedziale 10-180 stopni (mimo wpisanego kąta nie obraca się o kąt w pełni oczekiwany). Ponadto dla wpisanych wartości obrotu 0-10 serwo nieustannie się obraca. Podobno występują dwa rodzaje serwomechanizmów i prawdopodobnie zamówiłem złe, czy jest to prawdą, czy może moje jest popsute?

2. Błędne działanie kodu
Stworzyłem program taki jak na poniższym przykładzie. Chcę tutaj wpisywać z komputera wartości obrotu do serwa oraz otrzymywać komunikat zwrotny o wpisanej wartości. Niestety po każdej wpisanej wartości następna automatyczna wartość to 0. Gdzie popełniłem błąd.
 

    #include <Servo.h>

    Servo myservo; 

    void setup() {
    myservo.attach(9); 
    Serial.begin(9600);
    Serial.setTimeout(100); 
    myservo.write(180);
    }
     
    void loop() {
      static int odebraneDane; 
      if(Serial.available() > 0) { 
        odebraneDane = Serial.parseInt();
        Serial.println(odebraneDane); 
            if(odebraneDane > 1 && odebraneDane < 181){
               myservo.write(odebraneDane); 
            }
            else{ 
              Serial.println("Wpisales zly kat mogles spalic servo(wpisz kat od 0-180 stopni): ");
            }
       delay(50);
      }
    }

Otrzymane wyniki:
70
0
Wpisales zly kat mogles spalic servo(wpisz kat od 0-180 stopni): 
90
0
Wpisales zly kat mogles spalic servo(wpisz kat od 0-180 stopni): 
180
0
Wpisales zly kat mogles spalic servo(wpisz kat od 0-180 stopni): 

3. Chciałbym kupić krańcówki do arduino. Na botlandzie znalazłem takie: https://botland.com.pl/pl/czujniki-krancowe/921-wylacznik-czujnik-krancowy-z-dzwignia-prosta-wk315.html
Czy będą one kompatybilne? Rozumiem, że na jeden koniec podam 5V na drugi GND, a środkowy pin będzie informował stanem wysokim/niskim o naciśnięciu krańcówki?

Z góry dzięki za każdą pomoc.

Edytowano przez NotYet
Link do komentarza
Share on other sites

AD 1

Jeżeli stwierdziłeś, że masz błędnie działający kod, to w jaki sposób stwierdziłeś błędne działanie serwa? O jaki kąt obraca się serwo, gdy brak jest zasilania? Wróć do kursu i poczytaj o sterowani  PWM. Sprawdź, jak działa serwo z kodem z kursu. Mógłbyś sam [bez biblioteki] spróbować sterować serwem bezpośrednio podając wypełnienie [PWM].

AD 2

Ewidentnie masz złe wczytywanie. Ja wyłączyłbym setTimeout [zakomentował] i zwiększył delay np do 1 sek [delay(1000)]. No i sprawdził czy monitor ma ustawioną taką samą prędkość jaką ustawiłeś w programie [9600].

Czy ustawienie złej wartości spowoduje spalenia serwa [ a na pewno szczególnie nastawienie 0]?

AD 3

Używasz podobnie jak zwykłego styku, wykorzystując tylko dwa złącza. Które z trzech? Wszystko zależy jaki wymyślisz układ w swoim projekcie. Wejście mikroprocesora zawsze musi być ustawione w jakimś konkretnym [ustalonym] stanie.  Np wysokim HIGH, za pomocą odpowiedniego opornika pullUp lub w stanie  niskim, [pullDown]. Stykiem możesz tylko zmienić stan wejścia na przeciwny a do tego wystarczy pojedynczy styk [tylko dwa złącza].  Podobnie jak przy diodach [koniecznie], przy stykach też warto dodać opornik zabezpieczający przed pomyłką [1~5 k].  

Edytowano przez narbej
Link do komentarza
Share on other sites

Dnia 2.02.2019 o 20:21, NotYet napisał:

Ponadto dla wpisanych wartości obrotu 0-10 serwo nieustannie się obraca. Podobno występują dwa rodzaje serwomechanizmów i prawdopodobnie zamówiłem złe, czy jest to prawdą, czy może moje jest popsute?

Tak, od jakiegoś czasu występują dwie wersje tych serw, które nawet nie różnią się opisem na etykiecie. Możliwe, że kupiłeś złe lub sprzedawca nie zauważył, że w nowej dostawie dostał inną wersję tego napędu.

Dnia 2.02.2019 o 20:21, NotYet napisał:

Stworzyłem program taki jak na poniższym przykładzie. Chcę tutaj wpisywać z komputera wartości obrotu do serwa oraz otrzymywać komunikat zwrotny o wpisanej wartości. Niestety po każdej wpisanej wartości następna automatyczna wartość to 0. Gdzie popełniłem błąd.

Jak masz skonfigurowany monitor portu szeregowego? Nie wysyłasz przypadkiem znaków końca linii? One mogą być traktowane jako 0 🙂

Dnia 2.02.2019 o 20:21, NotYet napisał:

 Rozumiem, że na jeden koniec podam 5V na drugi GND, a środkowy pin będzie informował stanem wysokim/niskim o naciśnięciu krańcówki?

Wystarczy masa i sygnał. Nie musisz podłączać 5V. Jeśli skonfigurujesz w Arduino wejście jako INPUT_PULLUP to wtedy będziesz mógł łatwo wykryć wciśnięcie tego przycisku.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.