Skocz do zawarto┼Ťci
Komentator

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki

Pomocna odpowied┼║

Tak, pisalem do autora zadania domowego ­čÖé Bo mam wrazenie, ze program dziala tylko dla niektorych wartosci zmiennej "zmiana".

Udost─Öpnij ten post


Link to post
Share on other sites

Cze┼Ť─ç wszystkim,
mam ma┼éy problem ze swoim serwomechanizmem. Wszystko pod┼é─ůczone jak na schemacie, program w desperacji, skopiowa┼éem ze strony, a serwo dzia┼éa "zacinaj─ůco", tzn. rusza na chwil─Ö, potem zwalnia i si─Ö zatrzymuje i stoi przez kilka sekund, potem znowu rusz i znowu staje. Jakie┼Ť porady i pomys┼éy o co mo┼╝e chodzi─ç? ­čÖü

Udost─Öpnij ten post


Link to post
Share on other sites

komorov, czy pod┼é─ůczy┼ée┼Ť kondensatory przy stabilizatorze? Zerknij jeszcze na schematy z kolejnej cz─Ö┼Ťci kursu. Jak masz pod r─Ök─ů, to mo┼╝esz te┼╝ sprawdzi─ç jak zachowuje si─Ö uk┼éad na innej baterii. Jak sposoby nie pomog─ů, to b─Ödziemy dalej radzi─ç ­čśë

Udost─Öpnij ten post


Link to post
Share on other sites

Je┼╝eli poprawnie zrozumia┼éem polecenia, programy powinny by─ç OK. Co do zadania 5.2 powiem szczerze, ┼╝e przerobi┼éem tylko troch─Ö przyk┼éadowy kod znajduj─ůcy si─Ö na stronie, wi─Öc zadanie by┼éo rozwi─ůzane dla konkretnego przypadku. Zaznaczam, ┼╝e nie jestem mistrzem programowania, ale wydaje mi si─Ö, ┼╝e tak jest dobrze :

#define LED 9 

int wypelnienie = 0; 
int zmiana = 4; 

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

void loop() 
{ 
analogWrite(LED,wypelnienie); 
 if(wypelnienie<255) 
 { 
   wypelnienie+= zmiana; 
 } 
 if( wypelnienie>=255) 
   { 
     while(wypelnienie!=0 && wypelnienie>0) 
         { 
         wypelnienie-=zmiana; 
         analogWrite(LED,wypelnienie); 
         delay(50); 
         } 
   } 
delay(50); 

} 

A i dzi─Öki Treker za uwag─Ö co do tag├│w ­čśő

Udost─Öpnij ten post


Link to post
Share on other sites

damian11, a gdzie komentarze!? ­čÖé

Udost─Öpnij ten post


Link to post
Share on other sites
komorov, czy pod┼é─ůczy┼ée┼Ť kondensatory przy stabilizatorze? Zerknij jeszcze na schematy z kolejnej cz─Ö┼Ťci kursu. Jak masz pod r─Ök─ů, to mo┼╝esz te┼╝ sprawdzi─ç jak zachowuje si─Ö uk┼éad na innej baterii. Jak sposoby nie pomog─ů, to b─Ödziemy dalej radzi─ç ­čśë

a o jakiej pojemno┼Ťci te kondensatory?

Udost─Öpnij ten post


Link to post
Share on other sites

komorov, zale┼╝y jakie masz pod r─Ök─ů 100nF ceramiczne b─Öd─ů ok, jakie┼Ť elektrolity 100uF te┼╝ si─Ö nadadz─ů ­čÖé

Udost─Öpnij ten post


Link to post
Share on other sites

Tu by się przydała jeszcze informacja że

serwomechanizm.attach(9);

blokuje mo┼╝liwo┼Ť─ç u┼╝ywania PWM na pinach 9, 10 i 11.

Udost─Öpnij ten post


Link to post
Share on other sites

MateuszW, dzi─Öki za sugesti─Ö ­čÖé

Udost─Öpnij ten post


Link to post
Share on other sites

Zadanie 5.4

Zastanawiam si─Ö tylko, czy mo┼╝na w jaki┼Ť lepszy ┼éatwiejszy spos├│b spowodowa─ç, aby na pocz─ůtku komunikat z pro┼Ťb─ů o podanie k─ůta pojawi┼é si─Ö tylko raz, srednio podoba mi si─Ö korzystanie z false i true, a informatykiem nie jestem, raczej mechanikiem ­čśâ

#include <Servo.h> //Biblioteka serwa 

Servo serwomechanizm;  //Obiekt odwołania do serwa 
int pozycja1 = 0; //pozycja wst─Öpna 
String odebraneDane=""; //dane wprowadzone przez UART
int odebraneDane_int;
boolean pauza=false;

void setup() 
{ 
 serwomechanizm.attach(9);  //Serwomechanizm pod┼é─ůczony do pinu 9 
 Serial.begin(9600);
 serwomechanizm.write(pozycja1);
} 

void loop() 
{  
 if (pauza==false){
   Serial.println("Podaj kat od 0-180");
   pauza=true;
 }

 if(Serial.available() > 0) { 
   odebraneDane = Serial.readStringUntil('\n');
   odebraneDane_int=odebraneDane.toInt();
   if (odebraneDane_int<=180 && odebraneDane_int>=0){
     Serial.println("Podano kat:" + odebraneDane);
     delay(1000);
     serwomechanizm.write(odebraneDane_int);
     Serial.println("Obecny kat to:");
     Serial.println(odebraneDane_int);
     delay(100);
   } else {
     Serial.println("Podano zla wartosc. Podaj kat 0-180");
     delay(100);
   }
 }
}  

ZADANIE 5.5

Tutaj wysz┼éo mi to jako┼Ť bardzo prosto mam nadzieje, ┼╝e wszystko poprawnie, martwi mnie tylko, ┼╝e przy kr─Öceniu potencjometrem, w jednym skrajnym po┼éo┼╝eniu, zanim silnik zacznie reagowa─ç, musz─Ö najpierw obr├│ci─ç pokr─Öt┼éem potencjometru o jakie┼Ť 100-120 stopni, natomiast w 2 skrajnym po┼éo┼╝eniu reaguje on natychmiastowo... :/

#include <Servo.h> //Biblioteka serwa 

Servo serwomechanizm;  //Obiekt odwołania do serwa 
int pozycja1 = 0; //pozycja wst─Öpna 
float odebraneDane=0; //wartosc ustawiona na potencjometrze


void setup() 
{ 
 serwomechanizm.attach(9);  //Serwomechanizm pod┼é─ůczony do pinu 9 
 serwomechanizm.write(pozycja1);
} 

void loop() 
{  
 odebraneDane=analogRead(A5); //odczytanie wartosci z A5 potencjometru
 odebraneDane=map(odebraneDane, 0, 1024, 0, 180);//Przeskalowanie warto┼Ťci

   serwomechanizm.write(odebraneDane);
   delay(5);
}

Udost─Öpnij ten post


Link to post
Share on other sites

PukiSlu, aby komunikat by┼é wy┼Ťwietlany tylko raz mo┼╝esz przenie┼Ť─ç go do sekcji setup(). Jednak Twoje rozwi─ůzanie ze zmienn─ů jest r├│wnie┼╝ dobre.

Udost─Öpnij ten post


Link to post
Share on other sites

damian11,

Nie rozumiem niestety co oznaczaj─ů Twoje elementu kodu:

a) wypelnienie+= zmiana;

b) while(wypelnienie!=0 && wypelnienie>0)

c) wypelnienie-=zmiana;

Wiem, ┼╝e zapis co┼Ť++ jest to inkrementacja, wiem, ┼╝e wykrzyknij przed zmienn─ů zmienia jej warto┼Ť─ç na przeciwn─ů, ale nie mam poj─Öcia ( nie by┼éo chyba tego w kursie ) co oznacza wykrzyknik po zmiennej oraz te zapisy z punktu a) i c)

Bardzo prosz─Ö o pomoc / wskaz├│wki

Pozdrawiam MrShadow:)

Udost─Öpnij ten post


Link to post
Share on other sites

MrShadow, racja informacji tych nie by┼éo w kursie, bo na pocz─ůtek nie s─ů konieczne. Wyt┼éumacz─Ö Ci jednak zapisy, zanim zrobi to autor kodu ­čśë

wypelnienie+= zmiana;

To jest zapis skr├│cony od:

wypelnienie = wypelnienie + zmiana;

while(wypelnienie!=0 && wypelnienie>0)

To nie jest wykrzyknik po zmiennej, tylko operator !=, czyli "r├│┼╝ne". Warunek ten sprawdza wi─Öc, czy wype┼énienie jest r├│┼╝ne od 0 i jednocze┼Ťnie wi─Öksze od zera. Og├│lnie mo┼╝na by┼éo zapis ograniczy─ç tylko do drugiego warunku. Je┼Ťli co┼Ť jest wi─Öksze od zera, to na pewno nie jest mu r├│wne.

wypelnienie-=zmiana;

analogicznie, jest to:

wypelnienie = wypelnienie - zmiana;

Udost─Öpnij ten post


Link to post
Share on other sites

Witam.

Serwo chodzi pi─Öknie.

Mam Jeszcze pytanie. Czy mo┼╝emy zmniejszy─ç r├│wnocze┼Ťnie szybko┼Ť─ç obracania si─Ö serwo z pozycji 0 do 180 i z powrotem?

Udost─Öpnij ten post


Link to post
Share on other sites

Marnyx, niestety nie mo┼╝emy wp┼éywa─ç na pr─Ödko┼Ť─ç serwomechanizmu. Nale┼╝a┼éoby zrobi─ç to r─Öcznie, czyli dzieli─ç zadany obr├│t na mniejsze i wprowadza─ç pomi─Ödzy ka┼╝dy etap op├│┼║nienia. Uzyskanie p┼éynno┼Ťci b─Ödzie jednak bardzo trudne.

Udost─Öpnij ten post


Link to post
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─Ö ┬╗

×