Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

@Vova tak jak juz kolega @Gieneq wspomnial, nie da sie upchnac w jeden kurs wszystkiego bo jest to nie mozliwe...pamietaj ze jak by nie byl napisany taki kurs zawsze pojawi sie ktos komu czegos bedzie brakowac...w gruncie rzeczy nie ma tych "opcji" wiele w jezyku do nauczenia, ale nauczyc sie tym "czarowac" i wykorzystywac rozne kombinacje to juz inna bajka...nie zniechecaj sie tylko szukaj kazdej informacji ktorej Ci brakuje aktualnie i tyle...😉 mozesz kupic jakas ksiazke do C na poczatek i wiele kwestii sie rozwieje...pamietaj ze dzis i tak mamy o niebo lepiej, bo jesli cos chcesz wiedziec to klikasz w interneta i po minucie juz to masz...😉 z czasem bedzie Ci coraz latwiej i szybciej jak juz zalapiesz ogolny "zarys"...

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

@farmaceuta dokładnie 🙂 Ostatnio czytam Opus magnum C++11 (tylko 4 tomy, raptem 1600 stron) i podoba mi się, że autor ma świadomość, że ciężko jest wszystko przekazać więc wiele tematów oznaczył jako te do których wrócisz jak dowiesz się więcej. Na samym początku zaznaczył że książkę trzeba przeczytać 2x żeby ją całą zrozumieć. 

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

Bardzo dziękuję za szybką odpowiedź a przede wszystkim wyrozumiałość. Już w trakcie pisania poprzedniej wiadomości pomyślałem o tym żeby  najpierw przeczytać wszystkie części kursu od deski do deski a później wrócić do zadań domowych. Zobaczę czy  się nie po gubię od większej ilości informacji na raz...

Link do komentarza
Share on other sites

Dnia 9.03.2016 o 16:55, mechanik napisał:

Zadanie 5.1

Zmienna byte może przyjmowac wartosci jedynie od 0 do 255zatem wystarczy zapis:


#define niebieska 3       //definicja wyjścia
byte wypelnienie =0;  //zmienne
int zmiana = 5;  

void setup() {
pinMode(niebieska, OUTPUT);  //konfiguracja pinu

}

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

 delay(20);
 

Nie zmienia to faktu ze mocno się zdziwiłem, że tak sama z siebie się zeruje po osiągnięciu swojej max wartości.

Zad 5.2

Najciekawszy efekt? Jak dla mnie to jest on nudny lub mniej nudny 🙂

Tak poważnie to zdziwiło mnie jak duża jest różnica pomiędzy 0ms a 1ms. Najciekawiej dioda pracuje przy zmianie ustawionej na 1 i czasach poniżej 10ms.


#define niebieska 3       //definicja wyjścia
byte wypelnienie =0;  //zmienne
int zmiana = 1;  

void setup() {
pinMode(niebieska, OUTPUT);  //konfiguracja pinu

}

void loop() {
analogWrite(niebieska, wypelnienie);                 //zapal diode z określonym wypełnieniem
   if( wypelnienie<255){                            //jeśli wypełnienie mniejsze od 255
       wypelnienie = wypelnienie + zmiana;          // to wypełnienie równe swojej wartosci plus zmiana
   }else{                                           // jesli wypelnienie równe 255 wykonaj pętle:
         while(wypelnienie > 0){                    //dopóki warunek spełniony
               wypelnienie = wypelnienie - zmiana;  //wygaszaj diode
               analogWrite(niebieska, wypelnienie);  
               delay (10);                          //opóżnienie
         }
     }
delay(10);

}
 

Witam. Dziala u ciebie ten kod? Jak wgrałem go do Arduino to dzilła tylko do momentu narastania wypełnienie a z powrotem już nie

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

@Treker

Potrzebuję pomocy - chciałbym podpiąć do Arduino parę diod i przycisków oraz serwo. Wiem już, że serwo podpinamy do złącza Vin poprzez stabilizator napięcia. I tutaj dwa pytania:

1) Czy dobrze myślę, że po podłączeniu do Arduino baterii 9V poprzez klips wystarczy serwo podpiąć do Vin przez stabilizator (tak jak w kursie) a diody i przyciski zwyczajnie do pinów 1-13 i wszystko będzie działać? Załóżmy, że celuję w 4 diody i 3 przyciski.

2) Dlaczego w kursie budujemy na płytce osobny stabilizator napięcia do zasilenia serwomechanizmu, skoro mamy wyjście 5V z lewej strony Arduino, gdzie - wg #1 części kursu - napięcie z wejścia nr 2 (czyli tego gdzie podpinamy baterię) jest automatycznie obniżane do 5V? Innymi słowy, czym różni się wbudowany w Arduino stabilizator od tego, który musieliśmy sami zbudować na płytce i czemu musieliśmy skorzystać z tego drugiego? Chodzi o kondensatory lub wartość dropoutu?

Link do komentarza
Share on other sites

1 godzinę temu, ITSYNOTJ6 napisał:

@Treker

Potrzebuję pomocy - chciałbym podpiąć do Arduino parę diod i przycisków oraz serwo. Wiem już, że serwo podpinamy do złącza Vin poprzez stabilizator napięcia. I tutaj dwa pytania:

1) Czy dobrze myślę, że po podłączeniu do Arduino baterii 9V poprzez klips wystarczy serwo podpiąć do Vin przez stabilizator (tak jak w kursie) a diody i przyciski zwyczajnie do pinów 1-13 i wszystko będzie działać? Załóżmy, że celuję w 4 diody i 3 przyciski.

2) Dlaczego w kursie budujemy na płytce osobny stabilizator napięcia do zasilenia serwomechanizmu, skoro mamy wyjście 5V z lewej strony Arduino, gdzie - wg #1 części kursu - napięcie z wejścia nr 2 (czyli tego gdzie podpinamy baterię) jest automatycznie obniżane do 5V? Innymi słowy, czym różni się wbudowany w Arduino stabilizator od tego, który musieliśmy sami zbudować na płytce i czemu musieliśmy skorzystać z tego drugiego? Chodzi o kondensatory lub wartość dropoutu?

1).tak, dobrze myślisz

2). To servo sg90 mozesz zasilać od 4-6V, więc możesz się równie dobrze podpiąć gdzies do 5V. Być może to takie ćwiczenie, aby oswajać się z różnymi elementami, jak podłączać itp 😛 A stabilizator w arduino różni się rozmiarem tylko, bo to wersja smd, ale tez 7805. 

Link do komentarza
Share on other sites

Cześć wszystkim! Chciałem się podzielić z Wami moimi zadaniami 5.3-5.5. Jeśli macie jakieś uwagi lub pytania to śmiało piszcie, ponieważ sam się dopiero uczę i może czegoś nie zrozumiałem poprawnie :). 

5.3 


#include <Servo.h> //Biblioteka odpowiedzialna za serwa
 
Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 
int pozycja = 0; //Aktualna pozycja serwa 0-180
int zmiana =18;  //Co ile ma się zmieniać pozycja serwa?
int opoznienie =0;
int czasopozniania =200;

void setup() 
{ 
  Serial.begin(9600);
  serwomechanizm.attach(9);  //Serwomechanizm podłączony do pinu 9
} 
 
void loop() 
{  
  if (pozycja < 180) { //Jeśli pozycja mieści się w zakresie
    if (opoznienie >=1){ //Jesli opoznienie jest wieksze lub rowne jeden
      delay(czasopozniania); //Zwieksz czas opoznienia
    }
    serwomechanizm.write(pozycja); //Wykonaj ruch 
  pozycja = pozycja + zmiana; //Zwiększenie aktualnej pozycji serwa
  delay(200); //Opóźnienie dla lepszego efektu 
  }
  if (pozycja == 180) { //Jeslie serwo osiągnie max wychylenie (180 stopni)
    pozycja = 0; //Cofnij go na pozycje startowa
    opoznienie ++; //Zwieksz wartosc opoznienie o 1
    czasopozniania= czasopozniania +50; //Zwieksz czas opoznienia obrotu walu o 50 ms
  }
                      Serial.println(czasopozniania);
}

5.4 

#include <Servo.h>
int pozycja = 0 ;
Servo serwo;
String odczytane = "";
boolean prawda = 1;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
serwo.attach(9);
serwo.write(0);
}

void loop() {
  // put your main code here, to run repeatedly:
if (Serial.available() > 0) {
  odczytane = Serial.readStringUntil('\n');
}
if (odczytane.toInt() >=0 & odczytane.toInt() <= 180) {
  serwo.write(odczytane.toInt());
} else {
  if (prawda == 1) {
  Serial.println("Podana wartosc jest niepoprawna. Wpisz ponownie");
  prawda =0;
}
}
}

5.5

#include <Servo.h>
int potencjometr = 0;
Servo serwo;
float wartosc = 0;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
serwo.attach(9);
}

void loop() {
  // put your main code here, to run repeatedly:
potencjometr = analogRead(A5); //Odczyt z ADC 5
wartosc = (potencjometr*0.18); //Przelicznik wartosci bitowej z ADC na stopnie
Serial.println(potencjometr); //Wyswietlenie konunikatu

serwo.write(wartosc); //Polozenie serwa w zaleznosi od polozenia potencjometru
}

 

 

Edytowano przez Bartroz
  • 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.