Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

#include <Servo.h>  //biblioteka serwo

Servo serwomechanizm;  //zmienna serwo

int serwo = 6;
int dt = 200;
String msg = "What position do you want? ";
int myPosition;

String msg2="Your position doesn't exist";
void setup() {

  serwomechanizm.attach(serwo);  //podłączenie serwo
  Serial.begin(9600);
}

void loop() {
  Serial.println(msg);  //Ask
  while (Serial.available() == 0) {}//Wait
  myPosition = Serial.parseInt();//Read
  if (myPosition<=180){//Jesli mieści się w zakresie
    serwomechanizm.write(myPosition);//Porusz o podaną liczbe
  } else {//Jak sie nie mieści
    myPosition=0;
    Serial.println(msg2);
  }delay(dt);

  
}

Moje rozwiązanie do zadania 5.3:)

Edytowano przez hhube
  • Lubię! 1
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

Cytat

Wejście stabilizatora łączymy z pinem Vin Arduino, masę z GND, a do wyjścia podłączamy czerwony przewód serwomechanizmu. Oczywiście konieczne są również kondensatory filtrujące.

Na rysunku przykładowego schematu nie ma żadnych kondensatorów. Zostały pominięte?

Screenshot_1.png

Link do komentarza
Share on other sites

3 godziny temu, Krigor napisał:

A jak zrobię bez nich to coś się stanie?

Bez kondensatorów... tak. Układ najprawdopodobniej nie zadziała (chociaż płytka stykowa ma dość dużą pojemność własną, więc to loteria). Zastąp te niebieskie kondensatorki elektrolitami pamiętając o polaryzacji (o ile korzystasz z zestawu z kursu). Wszystko powinno być OK 😉

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

Zadanie 5.1

#define dioda 3
int wypelnienie = 0;
int zmiana = 5;

void setup() {
pinMode(dioda, OUTPUT);  // put your setup code here, to run once:
}

void loop() {
  analogWrite(dioda, wypelnienie);
  wypelnienie = wypelnienie + zmiana;
  delay(50); 
}

 

Link do komentarza
Share on other sites

Zadanie 5.4

#include <Servo.h> //biblioteka serwo
Servo serwo;
int zero = 0; //wyzerowanie serwo
String komendaS; //komenda zmiany wychylenia serwo - wiadomość użytkownika
byte komenda; //komenda zamieniona na wartość liczbową

void setup() {
serwo.attach(9); //serwo podłączone do pin 9
Serial.begin(9600);
Serial.println("Podaj kąt serwa od 0 do 180"); //wiadomość początkowa
}

void loop() {
if (Serial.available() > 0) { //jeżeli wiadomość od użytkownika jest wysłana
  komendaS = Serial.readStringUntil('\n'); //czytaj wiadomość aż do końca linii
  komenda = komendaS.toInt(); //konwersja ciągu znaków na liczby
  if (komenda >= 0 and komenda <= 180) { //jeżeli skonwertowana wiadomość mieści się między 0-180, to:
    serwo.write(komenda); //wykonaj ruch serwo o wartość z wiadomości
    Serial.println("Ustawiona pozycja to: " + komendaS); //komunikat tekstowy z wartością wychylenia
    delay(3000); //czas na zadanym wychyleniu
    serwo.write(zero); //wyzerowanie serwo
    Serial.println("Wyzerowano kąt serwo"); //komunikat o wyzerowaniu
  } 
  else {
  Serial.println("Podano złą wartość"); //komunikat o błędzie, jeżeli wiadomość nie spełni warunku
  }
}
}

Program ustawia wychylenie serwo o kąt wpisany przez użytkownika. Po wychyleniu serwo wraca do pozycji zerowej po 3 sekundach i komunikuje o tym  użytkownikowi. W przypadku złej wartości pojawia się stosowny komunikat. 

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

Zadanie 5.5

#include <Servo.h> //biblioteka serwo
Servo serwo; //nazwa serwo
int pozycja = 0; //pozycja serwo 0-180
int odczyt = 0;
 
void setup() {
serwo.attach(9); //serwo sterowane z pin 9
Serial.begin(9600);
Serial.println("Aktualna pozycja");
}

void loop() {
odczyt = analogRead(A1); //odczyt z potencjometru pin A1 0-1023
pozycja = map(odczyt, 0, 1023, 180, 0); //przeskalowanie pomiaru z potencjometru na wychylenie serwo

serwo.write(pozycja); //praca serwo

Serial.println(pozycja); //komunikat o pozycji
delay(100);

}

 

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

@Sito89 bardzo ładne programy, dobra robota 🙂 W drugim warto byłoby dodać jedynie wcięcia w całych funkcjach setup/loop, ale to drobiazg.

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

Cześć wszystkim!

Ostatnio pracowałem nad ćwiczeniem w ramach kursu, w którym używam serwa do sterowania pewnym mechanizmem. Niestety, natrafiłem na problem, którego nie jestem w stanie rozwiązać, dlatego postanowiłem się z Wami podzielić i zapytać o Waszą pomoc.

Oto link do krótkiego filmu prezentującego problem: Link do filmu

Mam problem z dziwnym zachowaniem serwa, zwłaszcza podczas zmiany obciążenia. Wydaje się, że nie zachowuje się ono poprawnie. Napięcie baterii w moim układzie wynosi 8.67V.

Próbowałem z kondensatorami o pojemności 100nF, ale niestety sytuacja nie poprawiła się. Czy moglibyście rzucić okiem na film i podzielić się swoimi spostrzeżeniami? Czy to zachowanie serwa jest normalne, czy może coś jest nie tak z moim układem?

Dodam, że nie jestem pewien, czy dobrałem odpowiednie kondensatory. Może to być problem z ich pojemnością lub typem. 

Bardzo Was proszę o pomoc i rady! Może ktoś miał podobny problem i zna rozwiązanie?

Z góry dzięki za każdą wskazówkę!

Jakub

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.