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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.