Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki

Autor Wiadomość
Lukaszm 



Posty: 625
Pomógł: 27 razy
Otrzymał 29 piw(a)
Skąd: Warszawa
Programuję w:
C, C++, MATLAB
Wysłany: 13-01-2018, 12:58   

Kod programu: Zaznacz cały
wypelnienie < 255;

Co robi ta linijka?

Postaw piwo autorowi tego posta
 
 
mistus 



Posty: 23
Otrzymał 3 piw(a)
Skąd: OPOLE
Wysłany: 13-01-2018, 20:01   

zezwala dodawać tylko do 255

[ Dodano: 13-01-2018, 20:06 ]
zadanie 5.2 Miałem mały problem z while nie sądziłem ze arduino tak szybko zlicza i ciągle świeciła mi dioda ;d ale Serial.begin pomógł ;)
Kod programu: Zaznacz cały

#define czerwona 3
int wypelnienie = 0;
int czas = 200;
int zmiana = 5;

void setup() {
  pinMode(czerwona, OUTPUT);
  Serial.begin(9600);// sprawdzam czy wszystko dzala
 }

void loop() {
 while (wypelnienie < 255){
  Serial.println(wypelnienie);
  analogWrite(czerwona, wypelnienie);
  wypelnienie = wypelnienie + zmiana;// rozswietlamy diode
  delay(czas);
 }
 while(wypelnienie > 0){
  Serial.println(wypelnienie);
  analogWrite(czerwona, wypelnienie);
  wypelnienie = wypelnienie - zmiana;// gasimy diode
  delay(czas);
 }
}

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8506
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 13-01-2018, 20:49   

mistus napisał/a:
zezwala dodawać tylko do 255

Oj to chyba coś Ci ucięło przy wklejaniu programu. Czy nie powinno tam być żadnego warunku ;) ?


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
mistus 



Posty: 23
Otrzymał 3 piw(a)
Skąd: OPOLE
Wysłany: 13-01-2018, 21:25   

no właśnie działało bez warunku co mnie zaskoczyło skoro źle to jeszcze pomyśle a tu rozwiązanie na zadanie 5.3
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int pozycja = 0;
int zmiana = 6;
int czas = 200;//ustawiamy wstępny czas
int minuty = 10;//wydłużamy czas
void setup() {
  serwomechanizm.attach(9);// włączamy jako wyjście 9 serwomechanizmowi
}

void loop() {
  if (pozycja < 180){// zlicza od 0 do 180 stopni
    serwomechanizm.write(pozycja);// o ile ma wykonać ruch
  }
  else {
    pozycja = 0;// ustawia pozycje znów na początek
  }
  pozycja = pozycja + zmiana;//przesuwa serwomechanizm
  delay(czas);// wstępny czas
  czas = czas + minuty;// wydłużamy czas reakcji serwomechanizmu
}


[ Dodano: 13-01-2018, 22:10 ]
odpowiedz na zadanie 5.4
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int pozycja = 0;
String dane = "";// wpisanie z komputera dane pozycji

void setup() {
  Serial.begin(9600);// połączenie z komputerem
  serwomechanizm.attach(9);// włączamy jako wyjście 9 serwomechanizmowi
}

void loop() {
  Serial.flush();// wykasowanie danych z bufora
  if(Serial.available() > 0){// sprawdzenie czy są jakieś dane w buforze
    dane = Serial.readStringUntil('\n');// odczytanie danych i wpisanie w nową linie
    pozycja = dane.toInt();// zmiana danych na pozycje i danie zmiennej int
    if (pozycja < 181){
      serwomechanizm.write(pozycja);// przesuniecie serwa o pozycje nadana przez nas
    }
    else {
       Serial.println(" zły zakres");
    }
  }
 

}


[ Dodano: 14-01-2018, 10:36 ]
Nie wiedziałem o co do końca chodzi w zadaniu 5.5 wiec zrobiłem na 3 sposoby
1.
Kod programu: Zaznacz cały

#include <Servo.h>//ustawiamy bibliotekę
#define machina 9 //nadaje pinowi 9 nazwę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int pozycja = 0;
int dane = 0;
float napiecie = 0;
int zmiana = 6;
float dzielnik = 3.0;// nasz dzielnik napięcia
void setup() {
  serwomechanizm.attach(machina);// ustawienie machiny jako output
 }

void loop() {
  dane = analogRead(A5);// odczytanie danych z potencjometru
  napiecie = dane *(5.0/1023.0);// zamieniamy na napięcie
  if (napiecie > dzielnik){
    serwomechanizm.write(pozycja);//ustawiamy wstępnie serwomechanizm
    pozycja = pozycja + zmiana;// przesuwamy w lewo
    delay(200);
  }
  else if (napiecie < dzielnik){
    serwomechanizm.write(pozycja);//ustawienie wstępne serwomechanizmu
    pozycja = pozycja - zmiana;// przesuwamy w prawo
   delay(200);
  }
}

2.
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
#define machina 9// nadajemy pinowi 9 nazwę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int dane = 0;
float napiecie = 0;
float pozycja = 0;
void setup() {
  Serial.begin(9600);// połączenie z komputerem
  serwomechanizm.attach(machina);
}

void loop() {
  dane = analogRead(A5);// odczytanie danych z potencjometru
  napiecie = dane * (5.0/1023.0);// zamieniamy na napięcie
  pozycja = napiecie;
  pozycja = map(pozycja ,0,5,1,180);// dziele napięcie na odcinki
    Serial.println(pozycja);// sprawdzam czy wszystko hula
    serwomechanizm.write(pozycja);//przesuwanie skokowo (na odcinki)
    delay(100);
}

3. ta opcja najbardziej mi się podobała :)
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
#define machina 9// nadaje pinowi 9 nazwę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int dane = 0;
float pozycja = 0;
void setup() {
  Serial.begin(9600);// połączenie z komputerem
  serwomechanizm.attach(machina);
}

void loop() {
  dane = analogRead(A5);// odczytanie danych z potencjometru
  pozycja = dane;
  pozycja = map(pozycja ,0,1023,1,180);// dziele pozycje by mieściły się od 0 - 180 stopni
    Serial.println(pozycja);// sprawdzam czy wszystko hula
    serwomechanizm.write(pozycja);//przesuwam w lewo lub prawo
    delay(100);
}

Ostatnio zmieniony przez mistus 14-01-2018, 19:07, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
PawełD 



Posty: 4
Wysłany: 18-01-2018, 18:18   

Zadanie 5.4



wiem ze to było ponad 2 lata temu na topie, ale jako że to moje pierwsze w 100% samodzielnie zrobione zadanie domowe ;) to muszę je tutaj wrzucić. :mrgreen:

__________
Komentarz dodany przez: Treker
Kod programu, dla lepszej czytelności, należy umieszczać w tagach [code]. Proszę to poprawić.
Kod programu: Zaznacz cały
#include <Servo.h> // dodanie biblioteki odpowiedzialnej za serwa

Servo serwomechanizm; // obiekt serwomechanizmu aby moc sie do niego
//odwoływać

String pozycja = "";
int pozycjaint = 0;



void setup() {

Serial.begin(9600);
serwomechanizm.attach(9); // deklaracja podlaczenia serwa

}

void loop() {

if(Serial.available()>0) {
pozycja = Serial.readStringUntil('n');
Serial.println(pozycja);
pozycjaint = pozycja.toInt();
if(pozycjaint>=0 && pozycjaint<=180){
serwomechanizm.write(pozycjaint); // komenda do wykonania ruchu serwa
}else{
Serial.println("zla wartosc, podaj wartosc w zakresie 0-180");
}
}}

Ostatnio zmieniony przez PawełD 18-01-2018, 19:15, w całości zmieniany 3 razy  
Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8506
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 18-01-2018, 18:55   

PawełD, witam na forum :) Kurs jest cały czas aktualny, więc śmiało można się chwalić swoimi programami! Pamiętaj tylko, aby kody wklejać wewnątrz tagów [code]. Dzięki temu inni będą mogli łatwiej analizować Twoje programy - popraw to proszę ;)


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
PawełD 



Posty: 4
Wysłany: 19-01-2018, 11:32   

zadanie 5.5

widzę, że if-a mogłem opuścić, ale jak już dałem to niech zostanie
Kod programu: Zaznacz cały
#include <Servo.h> // biblioteka serwa
Servo serwo; // obiekt serwa
int potencjometr = 0;

void setup() {

serwo.attach(9); //deklaracja podlaczenia serwa do pinu 9

}

void loop() {

  potencjometr = analogRead(A5);//odczytanie wartosci potencjometru
  potencjometr = map(potencjometr, 0, 1015, 0, 180);
  //przeskalowanie zmiennej potencjometr z zakresu 0-1015 na 0-180
  if(potencjometr>=0 && potencjometr <=180){
     serwo.write(potencjometr); //komenda do wykonania ruchu
  }
  delay(100);
}

Postaw piwo autorowi tego posta
 
 
Matas 



Posty: 2
Wysłany: 06-02-2018, 13:41   

Cześć. :)
W zestawie, który kupiłem, razem ze stabilizatorem napięcia są dwa kondensatory - jeden ceramiczny (0.1 uF), drugi elektrolityczny (10uF). Czy ma jakieś znaczenie to gdzie podłącze który?

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8506
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 10-02-2018, 14:12   

Matas, witam na forum :) Na tym etapie testów nie zrobi to większej różnicy - możesz na początku podłączyć oba na wyjściu stabilizatora.


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
Matas 



Posty: 2
Wysłany: 12-02-2018, 11:24   

Ok, dzięki za pomoc. ;)

Postaw piwo autorowi tego posta
 
 
Marcin9405 



Posty: 1
Wysłany: 14-02-2018, 01:38   

Cześć, proszę o wyjaśnienie jak zrobic zadanie domowe 5.1 i 5.2 bo jestem ciekaw jak to zrobic i nie chce isc dalej bez tej wiedzy. Pozdrawiam :)

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8506
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 15-02-2018, 17:13   

Marcin9405, witam na forum :) Chętnie pomogę, ale sprawdź może najpierw programy innych czytelników (znajdziesz ich wiele w tym temacie). Powinny naprowadzić Cie na rozwiązania. Jak utkniesz w jakimś konkretnym miejscu to daj wtedy znać i będziemy razem myśleć.


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
dexu 



Posty: 2
Wysłany: 19-02-2018, 18:26   

zadanie domowe 5.4
Witam mam takie pytanie dlaczego po wpisaniu małego kąta o jaki ma się obrócić serwomechanizm (<12) wykonuje on ciągłe obroty o 360 stopni zamiast o kat ustalonej wartości?
Ponizej kod programu.


Kod programu: Zaznacz cały
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
 
Servo serwo;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa

int zmiana = 0; //Co ile ma się zmieniać pozycja serwa?

String odbior = "";

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

  Serial.println(" Podaj kat przesuniecia ramienia sweromechanizmu");
  while(Serial.available()==0){}
  odbior = Serial.readStringUntil('\n');
   zmiana = odbior.toInt();
 
   if(zmiana > 180 || zmiana < 0){
    Serial.println(" Kąt przesuniecia ramienia sweromechanizmu musi znajdowac sie w przedziale od 0 do 180");
 
  } else {
   
 
   serwo.write(zmiana); //Wykonaj ruch
 
  }   
 
 
}

Ostatnio zmieniony przez dexu 19-02-2018, 18:29, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8506
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 20-02-2018, 13:09   

dexu, widocznie otrzymałeś serwo inne od tego, które jest opisywane w kursie (bez blokady mechanicznej). Jeśli kupiłeś zestaw w Botlandzie to poproś o wymianę - nie będzie z tym żadnego problemu :)


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
MrauMrauChan 



Posty: 1
Wysłany: 20-02-2018, 15:21   

Dzień dobry

Mam pewien problem odnośnie serwa. Po wpisaniu polecenia jego obrotu o kąt >175 stopni (ale mniejszy niż 180) dociera do tego punktu, przez chwilę się trzęsie a następnie zaczyna obracać się o 360 stopni. Czy to znaczy, że serwomechanizm jest uszkodzony ?
Edit: Zauważyłem również , że kąty nie przebiegają prawidłowo, tj, różnica pomiędzy pozycją 0 stopni a pozycją 174 stopnie daje obrót o ponad 180 stopni

Ostatnio zmieniony przez MrauMrauChan 20-02-2018, 16:04, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs Arduino - #9 - ... Kurs STM32 - #4 - St... Kurs STM32 - #2 - Po... Kurs STM32 - #1 - Za...
lub przeszukaj forum po wybranych tagach: artykulow, do, komentarze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki