Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

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 😉

Link do komentarza
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 😉

Link do komentarza
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.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.

Link do komentarza
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.

Link do komentarza
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 🙂

Link do komentarza
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
Link do komentarza
Share on other sites

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).
Link do komentarza
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
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.