Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

@Danyeru dokładnie tak, to kwestia baterii. W kursie jest ona dodania głównie do zasilania samego Arduino, a eksperyment z serwomechanizmem to dodatek. Na krótko działa to dobrze, ale przy dłuższych testach mogą być problemy. Stąd właśnie w kolejnym kursie pojawił się już zasilacz.

Jeśli chodzi o programy to widzę, że wszystko robisz starannie - dobra robota 🙂 Ładnie komentujesz, uważaj tylko, aby nie przesadzić ze zbyt dużą liczbą komentarzy, bo to też czasami może być problematyczne. Warto odpuścić komentowanie linii, które są naprawdę oczywiste. Przykładowo:

while(wypelnienie > 0) { //Jezeli wypelnienie jest wieksze od 0

Właściwie komentarz nie wnosi tutaj zbyt wiele, bo warunek jest prosty i mówi to samo co komentarz. Można z tego komentarza zrezygnować lub ewentualnie, jeśli chcesz komentować dokładnie każdą linię, to mógłbyś zrobić to na zasadzie "//Do momentu, gdy serwo nie dotarło do skrajnej pozycji".

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

@Treker

Cytat

@Danyeru dokładnie tak, to kwestia baterii. W kursie jest ona dodania głównie do zasilania samego Arduino, a eksperyment z serwomechanizmem to dodatek. Na krótko działa to dobrze, ale przy dłuższych testach mogą być problemy. Stąd właśnie w kolejnym kursie pojawił się już zasilacz.

Jak wspomniałem, podłączenie zasilacza nie zniosło objawów.

Aktualnie sobie wyjechałem, jak powrócę to wrzucę fotki jak to pospinałem, może gdzieś zrobiłem błąd i go nie dostrzegam, a może trafił mi się taki egzemplarz. 🤔 A może za długo leżakował, wszak od zakupu minęły cztery lata. 😅

 

 

Cytat

uważaj tylko, aby nie przesadzić ze zbyt dużą liczbą komentarzy

Popracuję nad tym, bo tak jakoś podświadomie dodaję. 😄

Link do komentarza
Share on other sites

To jeszcze pytanie kontrolne: czy "padaczka" występuje również przy wprowadzaniu kąta z monitora serial? Jeśli tak to pewnie serwo (też mam takie jedno i to wcale nie z tych najtańszych), ale dużo bardziej prawdopodobne jest padnięcie potencjometru.

Link do komentarza
Share on other sites

1 godzinę temu, ethanak napisał:

To jeszcze pytanie kontrolne: czy "padaczka" występuje również przy wprowadzaniu kąta z monitora serial? Jeśli tak to pewnie serwo (też mam takie jedno i to wcale nie z tych najtańszych), ale dużo bardziej prawdopodobne jest padnięcie potencjometru.

Tak, przy zestawieniu z wprowadzeniem kąta przez monitor, jak i przy tych lekcjach i ćwiczeniach, gdzie kąty były zadane przez program, występowała padaczka.

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

@Danyeru w takim razie pozostaje reklamacja, bo chyba niestety faktycznie trafiłeś na uszkodzony element 😞 Napisz proszę na adres reklamacje@botland.com.pl, na pewno szybko uda się wymienić element na nowy. Przepraszam za problem, mam nadzieję, że dalej obejdzie się już bez takich niespodzianek!

Link do komentarza
Share on other sites

Witam,

to moj pierwszy post choc juz kilka lekcji przerobiłem. 

wielkie dzieki za materiał - fajny kurs, nawet laik (jak ja) moze sie nauczyc podstaw (przynajmnie poki co:))

Mam pytanie do zad 5.5. Wszystko działa dobrze z tym, ze wyglada jakby potencjometr "konczyl" zakres mniej wiecej w polowie (na wysokosci srodkowego wyprowadzenia).  Skrajne nozki mialem podlaczone do GND i VIN a srodek do A5. Po jakims czasie zmienilem podlaczenie z VIN do 5v i teraz działa cały zakres. 

Pytanie czy VIN jest dedykowany do stabilizatorów? dlaczego podlaczenie do niego spowodowało, ze tylko czesc zakresu potencjometru działało? napiecie na potencjometrze przy podlaczeniu do VIN bylo ok 7V (vs 5 z pinu 5V) ale to chyba nie powinno robic roznicy?

 

kod programu mam jak reszta ale wklejam - chetnie poczytam komentarze

#include <Servo.h> // biblioteka serwa

Servo serwomechanizm; // towrzymy obiekt serwa
int pozycja_int = 0; // aktualna pozycja serwa 0-180
int pozycja_ADC = 0; // aktualny odczyt ADC

void setup() {
  serwomechanizm.attach(9); // podlaczenie serwa do pinu 9
  Serial.begin(9600);
}

void loop() {
  pozycja_ADC = analogRead(A5);
  Serial.println(pozycja_ADC);
  pozycja_int = map (pozycja_ADC,0,1023,0,180); // zmien na zakres 0-180
  Serial.println(pozycja_int);
    if (pozycja_int<180) { //jesli pozycja miesci sie w zakresie
    delay(10);
    serwomechanizm.write(pozycja_int); // zrob ruch
                         }
     else {};
  delay(1000);
}
             
Edytowano przez Loczkins
Link do komentarza
Share on other sites

21 godzin temu, Loczkins napisał:

to moj pierwszy post choc juz kilka lekcji przerobiłem. 

wielkie dzieki za materiał - fajny kurs, nawet laik (jak ja) moze sie nauczyc podstaw (przynajmnie poki co:))

@Loczkins witam na forum i dziękuję za miły komentarz. Cieszę się, że kurs jest pomocny 🙂

21 godzin temu, Loczkins napisał:

Pytanie czy VIN jest dedykowany do stabilizatorów? dlaczego podlaczenie do niego spowodowało, ze tylko czesc zakresu potencjometru działało? napiecie na potencjometrze przy podlaczeniu do VIN bylo ok 7V (vs 5 z pinu 5V) ale to chyba nie powinno robic roznicy?

Jeśli dobrze rozumiem to co zrobiłeś to masz całkiem sporo szczęścia, że nie uszkodziłeś Arduino 🙂

Arduino działa na 5 V i to jest maksymalne napięcie jakie może być podane bezpośrednio na jego wejścia. Jeśli podłączyłeś potencjometr do Vin (i zasilałeś Arduino z baterii lub zasilacza) to po pewnym przekręceniu potencjometru dostarczałeś do wejścia Arduino zbyt duże napięcie.

21 godzin temu, Loczkins napisał:

Pytanie czy VIN jest dedykowany do stabilizatorów?

Nie, ten pin nie jest dedykowany do niczego to po prostu takie "przedłużenie" przewodu zasilającego - jakie napięcie podłączysz w roli zasilacza do Arduino, to takie pojawi się na tym pinie. Przydaje się to do zasilania różnych shieldów i modułów, ale absolutnie nie można go podawać wprost na piny Arduino 🙂

Link do komentarza
Share on other sites

@Treker

dzieki za odpowiedź. Musze poczytac jak działa miernik bo jak widze nim tez mozna zrobic 'krzywde' 🙂

moje pytanie było jednak inne - jak miałem zasilenie potencjometru z VIN (zgodnie z rysunkiem na stronie byl tylko podpiety tam stabilizator) to czesc zakresu potencjometru byla nieaktywna (działała tylko trochę ponad połowa). Dopiero jak dodałem zasilanie z 5v pod potencjometr to zadziałało na całym zakresie.

 

 

Link do komentarza
Share on other sites

@Loczkins ciężko tutaj coś doradzić zdalnie, bo jeśli był tam stabilizator i to on zasilał potencjometr, to nie powinno być takich problemów. Możliwe, że jednak miałeś coś źle podłączone. W takiej sytuacji najlepiej zawsze zrobić od razu wyraźne zdjęcie układu i wrzucić je na forum - wtedy możemy podpowiedzieć coś więcej 🙂

Link do komentarza
Share on other sites

Dnia 4.10.2022 o 07:53, Treker napisał:

@Loczkins ciężko tutaj coś doradzić zdalnie, bo jeśli był tam stabilizator i to on zasilał potencjometr, to nie powinno być takich problemów. Możliwe, że jednak miałeś coś źle podłączone. W takiej sytuacji najlepiej zawsze zrobić od razu wyraźne zdjęcie układu i wrzucić je na forum - wtedy możemy podpowiedzieć coś więcej 🙂

@Treker

dzieki, wszystko jasne, potencjometr byl podłaczony bezposrednio do Arduino, bez stabilizatora. Pod stabilizator podlaczylem tylko serwo.

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

Kolejna bardzo ciekawa lekcja 👍

Gdyby ktoś potrzebował pomocy, poniżej podrzucam własne spostrzeżenia oraz działające kody programów do zadań domowych 😉

1️⃣ Zadanie domowe 5.1

# define diodaPIN 3

byte wypelnienie = 0; //Zakres od 0 do 255
int zmiana = 5;

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

void loop() {
  analogWrite(diodaPIN, wypelnienie);

  wypelnienie = wypelnienie + zmiana;
  
  delay(50);
}

2️⃣ Zadanie domowe 5.2

Do rozwiązania tego zadania wykorzystałem jeden z operatorów logicznych: LUB ("||"). Więcej na ten temat możecie znaleźć na oficjalnej stronie Arduino ("||") [link] :

# define diodaPIN 3

int wypelnienie = 0; 
int zmiana = 5;

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

void loop() {
  wypelnienie = wypelnienie + zmiana;
  
  analogWrite(diodaPIN, wypelnienie);

  if (wypelnienie <=0 || wypelnienie >= 255) {
    zmiana = -zmiana;
  }
  delay(20);
}

3️⃣ Zadanie domowe 5.4

#include <Servo.h>

String liczbaPodana = "";

Servo serwomechanizm;

int pozycja = 0;

void setup() {
  Serial.begin(9600);
  serwomechanizm.attach(9);
}

void loop() {
  
  Serial.println("Podaj liczbe od 0 do 180");
  Serial.println();

  while (Serial.available() == 0) {} //Czekaj do momentu podania liczby
  delay(50);

  if (Serial.available() > 0) {
    liczbaPodana = Serial.readStringUntil('\n');
    pozycja = liczbaPodana.toInt(); //Zmiana znaków na wartość (int)
  }
  
  if ((pozycja > 0) && (pozycja < 180)) {
    serwomechanizm.write(pozycja);
    Serial.println("Pozycja serwomechanizmu:");
    Serial.println(pozycja);
    Serial.println();
  } else {
    Serial.println("Niewlasciwa liczba");
  }

  delay(50);
  
}

4️⃣ Zadanie domowe 5.5

#include <Servo.h>

Servo serwomechanizm;

int potencjometr = 0;
int pozycja = 0;

void setup() {
  serwomechanizm.attach(9);
}

void loop() {

  potencjometr = analogRead(A5);
  pozycja = map(potencjometr, 0, 1023, 0, 180);

  serwomechanizm.write(pozycja);

  delay(50);
  
}
  • Lubię! 1
Link do komentarza
Share on other sites

Witam,
Na zdjęciu przedstawiam mój setup. Arduino podłączone na USB, jedynie wysyła PWM do serwa. Serwo podłączone do połączonych szeregowo baterii z zestawów do kursów elektroniki, czyli bateria 9V + 4x1.5V, razem dają 12.8V. Napięcie na wyjściu stabilizatora równiutkie 5V. Serwo niestety z nieznanego mi powodu nie działa tak, jak powinno, tzn. cały czas "wibruje" (nie wiem jak to inaczej opisać), czasem poruszy się o dość spory kawałek i znowu stoi w miejscu i drży (zakładam, że próbuje dokonać korekty swojej pozycji). Na zdjęciu widoczna podróba Arduino natomiast posiadam też oryginał i efekt był na nim ten sam. Czy coś tutaj robię źle? Czy może serwo z zestawu jest wadliwe?

IMG_20221127_012437.jpg

Edytowano przez Torianen
Link do komentarza
Share on other sites

@Torianen zacznę może trochę od drugiej strony - dlaczego połączyłeś dwa źródła zasilania w taki sposób? Czy to wynik jakiś innych, wcześniejszych eksperymentów i prób rozwiązania tego problemu? Czy sprawdzałeś jakie jest napięcie na wyjściu stabilizatora, gdy silnik próbuje się poruszać?

Link do komentarza
Share on other sites

1 godzinę temu, Treker napisał:

@Torianen zacznę może trochę od drugiej strony - dlaczego połączyłeś dwa źródła zasilania w taki sposób? Czy to wynik jakiś innych, wcześniejszych eksperymentów i prób rozwiązania tego problemu? Czy sprawdzałeś jakie jest napięcie na wyjściu stabilizatora, gdy silnik próbuje się poruszać?

Baterie połączyłem, żeby uzyskać większe napięcie, sama 9V w rzeczywistości miała 6V (trochę ją przetyrałem i chyba miałem szczęście, bo chyba zostawiłem ją na jakiś czas ze zetkniętymi biegunami, była bardzo ciepła), więc nie wystarczyłoby ani na puszczenie przez stabilizator, ani na zasilenie arduino. Co ciekawe, dzisiaj spróbowałem ponownie uruchomić cały układ i serwo działa o wiele lepiej. Napięcie na wyjściu oscyluje zawsze w okolicach 4.4 - 5 V (w zależności czy silnik się porusza czy nie). Jednak co ciekawe - serwo nie wydaje się poruszać w zakresie 180 stopni tylko minimalnie mniej. Napisałem program, który co 3 sekundy zmienia wychylenie na 0 lub 180 i efekt jest taki, jak na zdjęciach. Gdy orczyk (chyba tak się nazywa to ramię) jest równolegle do dłuższej krawędzi obudowy serwa to jest wychylenie jest równe 0, drugie zdjęcie przedstawia 180 po obrocie przeciwnie do ruchu wskazówek zegara. Zdjęcia zrobiłem w momencie, gdy serwo nie próbowało się już dokładniej ustawić - było bezczynne. Czy to normalne?

IMG_20221127_123155.jpg

IMG_20221127_123157.jpg

Link do komentarza
Share on other sites

4 minuty temu, Torianen napisał:

Co ciekawe, dzisiaj spróbowałem ponownie uruchomić cały układ i serwo działa o wiele lepiej. Napięcie na wyjściu oscyluje zawsze w okolicach 4.4 - 5 V (w zależności czy silnik się porusza czy nie).

To bardzo duże wahania, szczególnie, że i tak miernik nie jest w stanie pokazać szybkich zmian. Na wyjściu stabilizatora powinno być 5 V niezależnie od sytuacji.

5 minut temu, Torianen napisał:

Baterie połączyłem, żeby uzyskać większe napięcie, sama 9V w rzeczywistości miała 6V (trochę ją przetyrałem i chyba miałem szczęście, bo chyba zostawiłem ją na jakiś czas ze zetkniętymi biegunami, była bardzo ciepła), więc nie wystarczyłoby ani na puszczenie przez stabilizator, ani na zasilenie arduino.

Jeśli bateria 9 V ma 6 V to już się praktycznie do niczego nie nadaje. Takie łączenie wiele nie pomoże, bo i taks traciła ona już swoje właściwości. Najlepiej zrób test po prostu na nowej baterii i uważaj, aby w przyszłości nie robić zwarcia 😉

6 minut temu, Torianen napisał:

Czy to normalne?

Tak, w tego typu serwomechanizmach takie różnicę są w normie 🙂

  • 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.