Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

Mam pytanie odnośnie samego połączenia 9V do Arduino, gdzieś było napisane w tym kursie że podłączenie napięc większych niż 5V może usmażyć wręcz nam płytkę, a teraz na ilustracji widnieje by podłączyć 9V do co też mnie zastanawia do Barrel Jack nier mam pojęcia jak to zrobić. Jestem totalnie zielony, a nie chce niczego spalić dlatego proszę o rady

Link do komentarza
Share on other sites

@Rychu2115 tak, bezpośrednio do wejść Arduino nie można podłączać wyższego napięcia. Jednak Arduino posiada złącze do zasilania (jak większość sprzętów elektronicznych) i tam można podłączyć większe zasilanie, które za pomocą stabilizatora wbudowanego w Arduino jest zamieniane właśnie na 5V. W zestawie do kursu jest odpowiednie złącze, którym można podłączyć Arduino do baterii. Na czym dokładnie polega Twój problem?

  • Pomogłeś! 1
Link do komentarza
Share on other sites

@Treker Ogólnie mi chodziło, że nie mam typowo zakupionego zestawu z Botland, a bardziej własny zestaw zaproponowany mi przez znajomych, a jest na tyle zgodny z zestawem z Botlandu, że nie patrzyłem na niego. Mój problem polegał na to, że nie bardzo mogłem sobie zobrazować podłączenie baterii do Arduino, ale to już się wyjaśniło dzieki Tobie i mojemu znajomemu. Zamierzam podłączyć 9V do płytki stykowej i na niej podłączyć resztę czyli stabilizator i servo.

Link do komentarza
Share on other sites

praca domowa 5.3

#include <Servo.h> 

Servo serwomechanizm;
int pozycja = 0;
int zmana = 6;
int czas = 200;

void setup() 
{
serwomechanizm.attach(9);
Serial.begin(9600);
}

void loop() 
{

  Serial.println(czas);
  czas = czas + 25;
  if (pozycja < 180) {
    serwomechanizm.write(pozycja); 
  
  } else {
    pozycja = 0;
  }    

  pozycja = pozycja + zmana;
  delay(czas);  
}


nie jestem pewien jak zrobić aby czas po przekroczeniu 1000 spadał do 200 
próbowałem ale kod mi źle działał:

  }else if (czas = 1000){
  czas = czas - 800; 

 
może ktoś podpowie w czym zrobiłem błąd ?

Edytowano przez virurs
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

24 minuty temu, Rychu2115 napisał:

@TrekerZamierzam podłączyć 9V do płytki stykowej i na niej podłączyć resztę czyli stabilizator i servo.

Szybko się rozczarujesz...bateria 9v to tylko do szybkich testów więc Ardu na tym odpalisz, ale serwo podziała tylko chwilkę i zje baterię...serwa te sg90 potrafia wziasc nawet do 1 ampera prądu w porywach więc to o wiele za dużo dla baterii 9v...musisz sobie sprawić lepsze zasilanie..albo zasilacz albo jakaś lepsza baterie 2s lub 3s, i wtedy przez przetwornice zasilać całość lub  osobno

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

7 minut temu, farmaceuta napisał:

Ty przypisujesz w warunku 1000 do zmiennej czas, a nie poruwnujesz... Ma być tak 

else if (czas == 1000){
  czas = czas - 800; 

 


nie działa mi, program zachowuje  się jak by komenda nie została wpisana w kod 

image.thumb.png.873f7acfebcce3519dece55353dbf082.png

Link do komentarza
Share on other sites

#include <Servo.h> 

Servo serwomechanizm;
int pozycja = 0;
int zmana = 10;
int czas = 200;

void setup() 
{
serwomechanizm.attach(9);
Serial.begin(9600);
}

void loop() 
{

  Serial.println(czas);
  czas = czas + 25;
  if (pozycja < 180) {
    serwomechanizm.write(pozycja); 
 
  } else if (czas == 1000) {
  czas = czas - 800;
  
  } else {
    pozycja = 0;
  }    

  pozycja = pozycja + zmana;
  delay(czas);  
}

@farmaceuta , tutaj jest cały kod 

 

Edytowano przez virurs
Link do komentarza
Share on other sites

5 minut temu, farmaceuta napisał:
void loop() 
{

  Serial.println(czas);
  czas = czas + 25;
  
  if (pozycja < 180) {
    serwomechanizm.write(pozycja); 
  } else {
    pozycja = 0;
  }    

  pozycja = pozycja + zmana;
  delay(czas); 
  
  if (czas == 1000) {
  czas = czas - 800;
   }
}

 

dzięki, sam bym raczej na to nie wpadł 

Link do komentarza
Share on other sites

Moje propozycje rozwiązań dla 5.4 i 5.5

5.4

#include <Servo.h> //Dołączenie biblioteki 
Servo serwomechanizm; //Stworzenie obiektu
int pozycja = 0; //Zmienna Int dla pozycji
String Pozycja = ""; //Zmienna String dla odczytu z UART
void setup() {
  serwomechanizm.attach(9); //Przypisanie pinu do operowania serwem
  Serial.begin(9600); //Rozpoczęcie komunikacji
  Serial.println("Wprowadź liczbę z zakresu 0 - 180"); //Komunikat wstępny dla użytkownika
}

void loop() {
    if(Serial.available() > 0){ //Czy Arduino odebrało dane
    Pozycja = Serial.readStringUntil("\n");//Możliwość wpisania i odebrania wiadomości od użytkownika
    pozycja = Pozycja.toInt();//Zamiana String na Int
  }
  if(0<= pozycja && pozycja <= 180) { //Zabepiezpieczenie przed zbyt wysoką wartością
    serwomechanizm.write(pozycja); //Ustawienie pozycji przez serwo
  }else{
    Serial.println("Nie prawdiłowa liczba, podaj liczbę z zakresu 0 - 180 !");//Jeśli wartośc niezgodna z zakresem wysyła komunikat
  }
  delay(200);//Nie wiem czy delay jest tu potrzebny
}

5.5

#include <Servo.h> //Dołączenie biblioteki
Servo serwomechanizm; //Stworzenie obiektu
int pozycja = 0; //Utworzenie zmiennej pozycja

void setup() { //Przypisanie pinu do operowania servo
  serwomechanizm.attach(9);
}

void loop() {
  pozycja = analogRead(A5); //Przypisanie zmiennej pozycja wartości dzielnika napięcia
  pozycja = map(pozycja, 0, 1023, 0, 180); //Przeskalowanie wartości potencjometru do wartości z zakresu 0-180
  serwomechanizm.write(pozycja); //Wywołanie pozycji na servo
}

 

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

Dzień dobry! Mam kilka pytań.

  1. Mam serwomechanizm SG90 i chciałbym wiedzieć jak określić maksymalny prąd. Wg różnych źródeł są różne prądy. Tutaj np. takie. https://protosupplies.com/product/servo-motor-micro-sg90/ A tu inne. https://nettigo.eu/products/sg90-small-hobby-servo
  2. Czy "stall" znaczy maksymalny moment obrotowy?
  3. Mam stary zasilacz od telefonu, który generuje output 4.75 V/0.55A wg tabliczki, jednak pomiar multimetrem wykazuje niemal 6 V. Dlaczego?
  4. Zasilenie SG90 za pomocą Arduino zadziałało, jednak za pomocą w. w. zasilacza nie. Dlaczego?

Z góry dziękuję za odpowiedzi.

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.