Skocz do zawartości
Komentator

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki

Pomocna odpowiedź

Wepnij dwa kondensatory ceramiczne i będzie dobrze. Możesz też wpiąć jeden ceramiczny, a drugi elektrolityczny. W tym układzie, przy prostym teście działania serwa nie będzie to robiło większej różnicy 😉

Udostępnij ten post


Link to post
Share on other sites

@Treker Wow, naprawdę? Nie spodziewałem się tego. A jest różnica między takimi układami? Czy efekt będzie taki sam? (Części układu są na zdjęciach.)IMG_20190424_231914.thumb.jpg.70f8bcd8afbea5cadd1abf1b039bd706.jpgIMG_20190424_232043.thumb.jpg.d6d0698f36a895cf1ee0841d1d86d908.jpg

Na jednym z nich jest duży kondensator z przodu, a na drugim z tyłu. Możliwe, że ich kolejność jest obojętna, ale wolę się spytać. Ogólnie to sory za tyle pytań, ale taką mam naturę, że jak czegoś nie rozumiem, to pytam się do skutku. Pozdrawiam 😉

Udostępnij ten post


Link to post
Share on other sites

Witam, mam małe pytanie, otóż wykonałem zadanie 5.4 i zastanawia mnie jedna rzecz. Oto mój kod:

#include <Servo.h>

Servo servo;

void setup(){
  Serial.begin(9600); 
  servo.attach(9);
  servo.write(0); //napisałem tak bo zauważyłem że domyślne położenie to 90 stopni. 
}
 
void loop() {

  if(Serial.available()){
    
     int rotate = Serial.parseInt();

     if(rotate>180){
        Serial.println("Rotacja musi być <= 180");
     }
     else{
        Serial.println("Ok!");
        servo.write(rotate); 
        delay(200);
        Serial.println("Powrót...");
        servo.write(0);   
     }
  }
}

Myślałem że problemy z kodem mnie tu nie dotyczą bo jakieś tam lekkie doświadczenie z programowaniem już mam, a jednak "kajam się w prochu i popiele" 😕 Otóż po wpisaniu wartości w monitorze warunek wykonuje się zawsze dwa razy, czyli dostaje informacje zwrotną:

Ok!

Powrót...

Ok!

Powrót...

Patrzę na kod i nie wiem co jest grane, z góry dziękuję za pomoc i pozdrawiam.

Udostępnij ten post


Link to post
Share on other sites

Dopisz zaraz za linią pobierającą rotate:

Serial.println(rotate);

Zobacz co Ci zwróci.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@Panda jest, ale w tym wypadku nie będzie żadnej odczuwalnej różnicy. Możesz zostawić dowolną wersję i będzie dobrze.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
Dnia 25.04.2019 o 09:36, ethanak napisał:

Dopisz zaraz za linią pobierającą rotate:


Serial.println(rotate);

Zobacz co Ci zwróci.

@ethanak Dziękuje za odpowiedź, przepraszam że piszę dopiero teraz ale wzięła mnie choroba i dopiero teraz jestem w stanie odpisać. To dodatkowe zero na końcu ( widocznie zalegające w danych wejściowych ) to koniec łańcucha, znak nowego wiersza? Bo nie jestem pewien skąd się bierze.

Udostępnij ten post


Link to post
Share on other sites

@JAKPAD zmień ustawienia podczas wysyłania danych to się przekonasz 😉 Najpewniej właśnie ten znaki końca linii wprowadzają u Ciebie takie zamieszanie.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Witam, mam pewien problem z serwomechanizmem. Gdy podłączyłem go tak jak na schemacie to tylko słychać jak chodzi na różnych obrotach, ale nic się nie przekręca. I mam pytanie, w jaki sposób można to zmienić ??
Z góry dzięki za pomoc.

Udostępnij ten post


Link to post
Share on other sites

@Adampi314 witam na forum 🙂 Jeśli słychać, że coś się kręci, ale nic się nie dzieje to znak, że serwo jest uszkodzone. Był tu niedawno podobny przypadek, widocznie trafiła się jakaś seria serw z takim defektem. Zgłoś reklamację do Botlandu, na pewno szybko wymienią serwo na nowe 🙂

Udostępnij ten post


Link to post
Share on other sites

5.1  
Usunąłem wszystko z if oprócz polecenia ,, wypelnienie = wypelnienie + zmiana; " i działa bez problemu. 
Przeczytałem  komentarze i faktycznie logiczna była zmiana z int na byte ale bez tej zmiany też wszystko działa poprawnie. Gdzie tkwi rozwiązanie? 😛

5.2
Najlepszy efekt przy  delay(10);

#define diodaPIN 3
byte wypelnienie = 0;
int zmiana = 5;

void setup() {
pinMode(diodaPIN, OUTPUT);
}

void loop() {
  analogWrite(diodaPIN, wypelnienie); //punkt startwoy = 0
 if (wypelnienie < 255){  // jeżeli  to
  wypelnienie = wypelnienie + zmiana;  //zwiekszac  wypelnienie
 delay(10);
  } else {
while(wypelnienie > 0);  //jeżeli wypelnienie powyżej 0 to
wypelnienie = wypelnienie  zmiana   // odjąć  5
 analogWrite(diodaPIN, wypelnienie);  //wykonac
delay(10);
}
}
}


 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Mój serwomechanizm obraca się w kółko tak jak na gifie poniżej, wszystko jest podłączone w porządku, 
czy to jego wina czy ja coś sknociłem? 😉 

Pozdrawiam 

Edytowano przez Treker
Usunąłem gif (ponad 19MB).

Udostępnij ten post


Link to post
Share on other sites

@krzym2 niestety trafił Ci się trochę inny serwomechanizm. Nie jest uszkodzony, to zwyczajnie inny model, który potrafi obracać się o więcej niż 180*. Zgłoś reklamację do Botlandu, na pewno szybko pomogą i wymienią serwo 😉

  • Lubię! 1

Udostępnij ten post


Link to post
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!

Gość
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...