Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


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

@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

@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.

(edytowany)

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
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
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

(edytowany)
#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
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;
   }
}

 

  • Pomogłeś! 1
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ł 

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
  • 2 tygodnie później...

@MMJ5XD jeśli pytasz o elementy, które są obok stabilizatora napięcia to są to kondensatory ceramiczne. Jeśli w tym ćwiczeniu je pominiesz to nic się nie stanie.

  • 3 tygodnie później...

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.

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ę »
×
×
  • Utwórz nowe...