Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

Pytanie: jaki parametr wbudowanego stabilizatora nie pozawala na podłączenie serwomechanizmu bezpośrednio do 5V arduino? Można gdzieś przeczytać jaki jest limit?

W dokumentacji arduino Uno jest:

Cytat

DC Current per I/O Pin20 mA

Natomiast w opisie serwomechanizmu dołączonego do zestawu, niestety nie ma ile prądu pobiera :https://botland.com.pl/serwomechanizmy/484-serwo-towerpro-sg-90-micro-180-stopni.html

Reasumując? Po czym poznać, że nie można podłączyć czegoś do arduino?

Link do komentarza
Share on other sites

@Roman28 Witam na forum 🙂

Nie jest to jawnie podane w kodzie Arduino jako wypełnienie czy angielskie duty. Wypełnienie oznacza wartość PWM czyli analogWrite. Wartość 0 to 0 wypełnienia - sygnał niski, 255 to 100% wypełniania - stan wysoki.

@pawelmb

6 godzin temu, pawelmb napisał:

Natomiast w opisie serwomechanizmu dołączonego do zestawu, niestety nie ma ile prądu pobiera

Z tym raczej się nie spotkasz, bo rozrzut jest dość duży. Zachowanie serwa zależy od tego jak je obciążysz, ciężko też o określenie biegu jałowego jak to jest w wielu silnikach DC. Zazwyczaj podaje się pewne orientacyjne wartości i stosuje się spory zapas.

Płytka Arduino UNO Rev3 ma ograniczenie dla zasilania z USB - 500mA bzpiecznik i drugie 800 mA narzucone przez układ 1117:

image.png.57c01ecac06ed6673ca4c2821726a8cc.png

Dodatkowy stabilizator ma większy maksymalny prąd, chyba 1,5 A. Oczywiście jest szansa, że nie wykorzystasz tego zapasu, albo tylko przez krótką chwilę gdy serwo się obraca - wtedy pobór jest największy.

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Witam, mam problem ze sterowaniem serwem, po wgraniu na Arduino programu z ćwiczenia reaguje ono raz na jakiś czas przestawieniem w losową pozycję. Samo serwo wydaje się być sprawne, korzystając z układu z kursu elektroniki II opartego o NE555 pracuje normalnie.

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

@Gieneq program jest aktualnie 1:1 przeklejony z artykułu, bo podejrzewałem że może coś po drodze źle zrobiłem. 
Na górze płytki jest generator PWM na NE555, zasilanie serwa przez step up-down, zasilanie Arduino z USB.

#include <Servo.h> //Biblioteka odpowiedzialna za serwa
 
Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 
int pozycja = 0; //Aktualna pozycja serwa 0-180
int zmiana = 6; //Co ile ma się zmieniać pozycja serwa?
 
void setup() 
{ 
  serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 9
  Serial.begin (9600);
} 
 
void loop() 
{  
  if (pozycja < 180) { //Jeśli pozycja mieści się w zakresie
    serwomechanizm.write(pozycja); //Wykonaj ruch
  } else { //Jeśli nie, to powrót na początek
    pozycja = 0;
  }    
  Serial.println(pozycja);
  pozycja = pozycja + zmiana; //Zwiększenie aktualnej pozycji serwa
  delay(1000); //Opóźnienie dla lepszego efektu                        
}

 

162478824_909819106497990_906911062788802529_n.jpg

  • Lubię! 1
Link do komentarza
Share on other sites

@jacokwasek  (uprzedzam, że jestem początkujący) na pierwszy rzut oka pomysły: nie masz połączonych mas obu zasilań - to źle - coś jakbyś nie miał zamkniętego obwodu z arduino. Tu pewnie pewnie przydałoby się jakieś dobre wytłumaczenie, nie znam, ale podobno tak się nie powinno robić.

I drugie, w kodzie masz serwo podłaczone do pin 11. Jak dobrze widzę, to na zdjęciu do 10.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Cześć

Czy też mieliście problem z zadaniem 5,4? 

Zadeklarowałem zmienna int dane = 0; potem if(Serial.available() > 0){ dane = Serial.read(); }

I właśnie z tym jest największy problem bo serwo zaczęło dziwnie pracować, przerobiłem program aby wyświetlał mi wartość zapisana w zmiennej 

Serial.println(dane); i np po wpisaniu 10 wyskakiwały głupoty rzedu 53 49 39 to tylko przykład, próbowałem też do zapisywania do zmiennej zapisać DEC ale nic to też nie dało, próbowałem wiele sposobow i mam problem z zapisaniem właściwej liczby do zmiennej, oraz jej prawidłowe wyświetlenie, czy wiecie jak zapisać liczbę do zmiennej przez UART?

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.