Skocz do zawartości
Komentator

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki

Pomocna odpowiedź

MateuszW, zgadza się, brak, ale z premedytacją. Po ostatniej części kursu Arduino dotyczącej praktycznego wykorzystania serwomechanizmów oraz dodatkowych informacji o UART nie pojawiły się jeszcze żadne rozwiązania zadań domowych. Daje wszystkim czas na nadrobienie lekcji, widocznie niektórych dopadło wakacyjne lenistwo 🙂 W międzyczasie polecam najnowszą, ostatni a już część kursu podstaw elektroniki - omawiającą przekaźniki oraz inne elementy stykowe.

Udostępnij ten post


Link to post
Share on other sites

Ja obecnie staram się "wrzucić" mojego omijacza przeszkód z arduino na płytkę uniwersalną (ATmega8A 16Mhz + L293DNE), ale ponieważ elektronika u mnie na dość średnim poziomie to i średnio mi idzie 😃 Dlatego też nie zajmowałem się zadaniami domowymi jeszcze.

Udostępnij ten post


Link to post
Share on other sites

MateuszW, a z czym masz największy problem?

Udostępnij ten post


Link to post
Share on other sites

Treker,

w tej chwili zdaje się że z zakłóceniami w układzie z L293D. A raczej napewno bo uC "dziwnie" się zachowuje, jak serwa zaczynają działać i dość spore spadki napięcia zaobserwowałem. Chyba za prosty układ zrobiłem 🙂

Udostępnij ten post


Link to post
Share on other sites

MateuszW, no niestety bez odpowiedniego filtrowania oraz osobnego zasilania dla silników będzie ciężko 🙂

Udostępnij ten post


Link to post
Share on other sites

Treker, właśnie nie chcę dwóch źródeł ciągnąć 🙂 ale pogrzebałem trochę na forum, znalazłem kompendium mostków H, sekcja o zakłóceniach pomogła, użyłem diody, dodałem kondensator i dzielnik napięcia, wpiąłem się przed stabilizator i podłączyłem do VCC silników w L293D i już widać poprawę. Trzeba przyznać, że znajduję tu bardzo dużo przydatnych informacji 🙂

Pozdrawiam.

Udostępnij ten post


Link to post
Share on other sites

MateuszW, dzielnik napięcia? To raczej nie brzmi dobrze... Opisz dokładnie, co teraz z robiłeś. Zamiast dwóch źródeł zasilania możesz zastosować dwa osobny regulator napięcia dla silników i kondensatory.

Udostępnij ten post


Link to post
Share on other sites

Treker, no właśnie dzielnik nie zdał egzaminu 😃 Zasadniczo chciałem zasilić wszystko z 6xAA czyli +/- 9V przy czym przez stabilizator układy logiczne a bez stabilizacji napęd, ale obawiam się że dla przerobionych SG90 na dłuższą metę nie wyjdzie to na dobre 😃 więc chciałem obniżyć napięcie rezystorami ale wydaje mi się, że wydajność prądowa "padła". Przy okazji zaobserwowałem ciekawe zjawisko:D a mianowicie rezystory dawały ponad 6V ale jak wpiąłem L293 to napięcie spadło do 2,5V. Dlatego zrobię chyba jak mówisz, po prostu dam 2 stabilizatory 5V. 🙂

Udostępnij ten post


Link to post
Share on other sites

L293D to proste, ale stare układy. Jedną z głównych Wad tej konstrukcji jest właśnie wysoki spadek napięcia 🙁

Udostępnij ten post


Link to post
Share on other sites

Zadanie domowe 5.1

Wystarczy zamienić typ zmiennej wypełnienie na byte i usunąć warunek 🙂

Zadanie domowe 5.2

Pewnie da się prościej, ale proszę :

#define LED 9

int wypelnienie = 0;
int zmiana = 5;

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

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

}

Liczę, że pojawi się kolejna część kursu o wyświetlaczu LCD 🙂

[ Dodano: 16-07-2015, 12:58 ]

Zadanie domowe 5.3 🙂

#include <Servo.h> //Biblioteka odpowiedzialna za serwa

Servo serwo;  //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?
int przerwa = 200;

void setup() 
{ 
 serwo.attach(9);  //Serwomechanizm podłączony do pinu 9
} 

void loop() 
{  
 if (pozycja < 180) { //Jeśli pozycja mieści się w zakresie
   delay(przerwa);
   serwo.write(pozycja); //Wykonaj ruch

 } else { //Jeśli nie, to powrót na początek
   pozycja = 0;
   przerwa = 0;
 }    

 pozycja += zmiana; //Zwiększenie aktualnej pozycji serwa
 przerwa += 50;

} 

[size=9][ [i][b]Dodano[/b]: 16-07-2015, 16:37[/i] ][/size]
Zadanie domowe 5.4

#include <Servo.h>

String katS;
byte kat;
Servo servo;

void setup() 
{
 servo.attach(9);
 Serial.begin(9600);
 Serial.println("Podaj kat jaki chcesz ustawic :)");

}

void loop() 
{
   if(Serial.available()>0)
   {
   katS = Serial.readStringUntil('\n');
   kat = katS.toInt();
     if(kat<=180 && kat>=0)
     {
     servo.write(kat);
     Serial.println("Gotowe! Ustawiony kat to: "+ katS);
     }
     else Serial.println("Kat powinien miec wartosc <0:180> !");  
   }

delay(50);
}

Udostępnij ten post


Link to post
Share on other sites

Zadanie domowe 5.5

#include <Servo.h>
#define SERVO_PIN A5


int odczytADC;
int kat;
Servo servo;

void setup() 
{
servo.attach(9);
Serial.begin(9600);
Serial.println("Zmien kat za pomoca potencjometru");
}

void loop() 
{
  odczytADC = analogRead(SERVO_PIN);
  kat = map(odczytADC,0,1023,0,180);
  //Serial.println(kat);
  servo.write(kat);
  delay(50);
}

Udostępnij ten post


Link to post
Share on other sites

damian11, gratuluje rozwiązań. Rozumiem, że programy działają poprawnie? Na przyszłość umieszczaj kody programów w tagach , tym razem poprawiłem je za Ciebie 🙂 Nie zapominaj o komentarzach, brakuje ich przy 1 i 3 programie. Warto mieć taki nawyk.

Oczywiście kolejna część kursu się pojawi, tylko tak jak pisałem ciągle czekam, aż chociaż kilka osób pokaże rozwiązania do ostatniej części kursu (czyli 6). Chyba wszystkich kursantów ogarnęło wakacyjne lenistwo 😉

Udostępnij ten post


Link to post
Share on other sites

Co do zadania 5.2 - program działa dla zmiennej "zmiana" = 5. Ale czy będzie działał dla innej wartości? Np. zmiana = 4? Co zrobić, żeby nadal działał poprawnie?

Udostępnij ten post


Link to post
Share on other sites

Elvis, rozumiem, że to pytanie sprawdzające dla autora kodu 🙂?

Udostępnij ten post


Link to post
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!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć 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...