Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

Nic się nie dzieje, bo jak 'val' będzie miało wartość 0 to żaden z warunków z if-ów nie będzie spełniony 🙂 masz wszędzie warunki val>0 lub val<0, nigdzie 0 się nie łapie.

Dzięki. Właściwie to już mi się przypomniało (po Twojej odpowiedzi), dlaczego nie przypisałem zera dla val 🙂 (miałem tygodniową przerwę).

Link do komentarza
Share on other sites

Zadanie 5.2

Próbowałem sterować częstotliwością pulsowania diody poprzez zmianę danej "zmiana". Niestety program działa tylko dla dzielników liczby 255, ponieważ z wiadomych przyczyn np. dla 19 :

wypełnienie = 247 + 19 nie równa się 255, ale przeskakuje na 11, więc się rozświetla i gaśnie i tak w kółko. Jak rozwiązać ten problem. Z góry dziękuję za odpowiedź 🙂

#define LED 5

short wypelnienie = 0;
int zmiana = 5;
int opoznienie = 30;

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

void loop() {

   while (wypelnienie != 255) {        //Rozjaśnianie
     analogWrite(LED, wypelnienie);
     wypelnienie += zmiana;

     delay(opoznienie);
   }

   while (wypelnienie != 0) {          //Przyciemnianie
     analogWrite(LED, wypelnienie);
     wypelnienie -= zmiana;

     delay(opoznienie);
   }
}
Link do komentarza
Share on other sites

Zamiast jako warunek sprawdzać równość:

while (wypelnienie != 255)

znacznie bezpieczniej jest używać porównywać operatorem większe/mniejsze, np.:

while (wypelnienie <= 255)

Program będzie wymagał kilku mniejszych zmian, ale ogólnie lepiej jest używać < niż !=. Dzięki temu jeśli licznik z jakiegoś powodu "przeskoczy", program ma szansę wrócić do poprawnego stanu.

Link do komentarza
Share on other sites

Witam,
pozwolę sobie zacytować jedno zdanie: "Oczywiście konieczne są również kondensatory filtrujące. ". Czy rzeczywiście konieczny jest kondensator skoro stosujemy stabilizator? Czy on sam w sobie nie działa trochę jak kondensator? Jeżeli kondensator jest konieczny to podłączamy go równolegle między IN i GND stabilizatora czy jak? Z góry dziękuję za odpowiedź.

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

Informacje gdzie i jakie kondensatory podłączać do stabilizatora najlepiej poszukać w dokumentach "data sheet", czyli kartach katalogowych danego producenta. Dobór odpowiednich kondensatorów jest szczególnie ważny przy stabilizatorach LDO, gdzie są one niezbędne do poprawnej pracy.

Link do komentarza
Share on other sites

Wojciech_M, kondensatory są konieczne - tak jak napisał grg0 potwierdzenie znajdziesz w nocie katalogowej LM7805. Producent podaje jakie minimalnie kondensatory należy podłączyć, aby zapewnić jego poprawną pracę.

Link do komentarza
Share on other sites

Cześć,

Moje serwo dziwnie się zachowuje, mianowicie :

Przy bezpośrednim podłączeniu do arduino ( zastosowany program z kursu ) wszystko jest OK. Natomiast przy podłączeniu przez stabilizator serwo zaczyna wariować tzn. : samo z siebie przechodzi z jednej skrajnej pozycji do drugiej ( niezgodnie z programem ) przy czym dotarcie do skrajnej pozycji powoduje spadek napięcia z ~11V do ~5.5V. Przy poruszaniu się ramienia serwa napięcie jest w porządku. Proszę o jakieś sugestie.

Pozdrawiam 🙂

Link do komentarza
Share on other sites

RybaSG, jeśli masz możliwość sprawdzenia układu z nową baterią 9V, to powtórz eksperyment 😉 Jeśli zasilałeś układ z niej wcześniej, to mogła się już trochę rozładować i nie daje rady zasilić teraz serwa. Baterie 9V nie są idealne do zasilania takich układów - tutaj są używane demonstracyjnie, jeśli chciałoby się zasilać takie serwo dłużej, to trzeba pomyśleć np. o akumulatorach.

damianmyszko, UART w Arduino operuje na ciągach tekstowych dlatego liczbę należy wczytać jako string. Aby było możliwe wykorzystanie jej później w programie można skorzystać np. z funkcji, która dokona za nas takiej zamiany: https://www.arduino.cc/en/Tutorial/StringToIntExample

Link do komentarza
Share on other sites

Używałem zasilacza 12V, 500mA. Spróbuje z innym źródłem, może on był winowajcą skoro bezpośrednio z arduino wszystko było dobrze.

@EDIT : Zmieniłem zasilacz, wszystko gra 🙂

Link do komentarza
Share on other sites

witam chodzi o zadanie domowe 5.4 to jest kod i on nie działa co jest tu nie tak?

#include <Servo.h> 

Servo serwomechanizm;  
String inString = ""; 
int pozycja;

void setup() 
{ 
 serwomechanizm.attach(9);  
 Serial.begin(9600);
 Serial.println("Podaj liczbe od 0 do 180:");
} 

void loop() 
{  
 if(Serial.available() > 0)
 {
   inString = Serial.readStringUntil('\n'); 
 }

 inString.toInt() = pozycja;

 if(pozycja >= 0 && pozycja <= 180);
 {
   serwomechanizm.write(pozycja);
 }

 delay(200);
}
Link do komentarza
Share on other sites

Na początek dzień dobry wszystkim, to mój pierwszy post na forum 🙂

Mam pytanie odnośnie mojego rozwiązania zadania domowego 5.4

#include <Servo.h>
#include <stdlib.h>

#define servoPin 9

Servo servo;
int newPosition = 0;

void setup() 
{
 Serial.begin(9600);
 Serial.println("Communication started");
 servo.attach(servoPin);
}

void loop() 
{
 SetupNewPosition();
 ChangePhysicalPosition();
 delay(2000);
}

void SetupNewPosition()
{
 if(Serial.available() > 0) SetupPositionFromConsole();
}

void SetupPositionFromConsole()
{
 newPosition = SerialReadStringAsInt();
 ValidatePosition();
}

int SerialReadStringAsInt()
{
 return atoi(Serial.readStringUntil('\n').c_str());
}

void ValidatePosition()
{
 if(newPosition > 180 || newPosition < 0) newPosition = 0;
}

void ChangePhysicalPosition()
{
 servo.write(newPosition);
}

Na niektórych pozycjach serwo cały czas "bzyczy", na innych zaś jest spokojne (ciche). Ktoś wie dlaczego?

Link do komentarza
Share on other sites

MaciejBurchardt, "buczenie" serwa na niektórych pozycjach to raczej normalna sprawa. W kursach korzystamy z małego i taniego serwa (w sam raz do pierwszy eksperymentów) i mogą zdarzać się takie drobne "wahania" jego orczyka 🙂

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.