• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Silnik krokowy - wolne obroty
#1
Witajcie Smile
To mój pierwszy post na tym forum i moje pierwsze zabawy z Arduino. 
Postanowiłem zrobić sobie małe urządzenie do laboratorium a mianowicie taki mały młyn kulowy.
Znalazłem w internecie jak wykonać mechanizm sterowany Arduino. Zamówiłem wszystko, podłączyłem, wgrałem gotowy kod no i kilka rzeczy mnie zdziwiło:

1. Silniczek dość wolno się kręci, a na filmiku znacznie szybciej.
2. Jak dojadę potencjometrem do połowy to obroty zmieniają się w drugą stronę.

Czy da się jakoś to zmienić aby:

1. Silniczek kręcił się szybciej
2. Obroty się nie zmieniały?

Dziękuję za wyrozumiałość i przepraszam za pytania laika Smile

kod:

Kod:
/*
* Unipolar stepper motor speed and direction control with Arduino
*   and joystick
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
*/

// include Arduino stepper motor library
#include <Stepper.h>

// define number of steps per revolution
#define STEPS 32

// define stepper motor control pins
#define IN1  11
#define IN2  10
#define IN3   9
#define IN4   8

// initialize stepper library
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);

// joystick pot output is connected to Arduino A0
#define joystick  A0

void setup()
{
 
}

void loop()
{
  // read analog value from the potentiometer
  int val = analogRead(joystick);

  // if the joystic is in the middle ===> stop the motor
  if(  (val > 500) && (val < 523) )
  {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
  }

  else
  {
    // move the motor in the first direction
    while (val >= 523)
    {
      // map the speed between 5 and 500 rpm
      int speed_ = map(val, 523, 1023, 5, 500);
      // set motor speed
      stepper.setSpeed(speed_);

      // move the motor (1 step)
      stepper.step(1);

      val = analogRead(joystick);
    }

    // move the motor in the other direction
    while (val <= 500)
    {
      // map the speed between 5 and 500 rpm
      int speed_ = map(val, 500, 0, 5, 500);
      // set motor speed
      stepper.setSpeed(speed_);

      // move the motor (1 step)
      stepper.step(-1);

      val = analogRead(joystick);
    }

  }

}


Załączone pliki Miniatury
       
 
Odpowiedź
#2
Oj lenistwo się kłania...
Odnośnie silniczka 28BYJ i ULN2003 w necie można znaleźć chyba wszystko...

Nie będę się rozpisywał, ale sprawa wygląda następująco:
Ad.1. Za ustawienie prędkości odpowiedzialna jest linijka:
Kod:
stepper.setSpeed(speed_);
występuje ona w kodzie dwa razy - dla obrotów w lewo i w prawo. Poeksperymentuj zamiast speed_ podstawiając wartości liczbowe np. 200, 20, 10, 3, 1, 1000, 2000 i zobacz co się będzie działo. Będziesz mógł sprawdzić przy jakiej wartości parametru speed_ masz prędkość, która Ci odpowiada.

Ad.2. Żeby obroty się nie zmieniały trzeba napisać program na nowo, bo ten, który masz jest pod joystick.
Najprościej wgraj sobie przykład w ArduinoIDE - Plik>Przykłady>Stepper i pobaw się.

Gotowca nikt za Ciebie nie napisze, chyba że komuś to zlecisz za kasę.
 
Odpowiedź
#3
Analog read odczytuje wartości od 0-1023, w warunkach masz przydzielone, że do połowy kręci się w jedną stronę, jest obszar neutralny i potem w drugą.
Nie wiem czego oczekiwałeś, piszesz o laboratorium, a zamiast poczytać i poznać jakieś podstawy obsługi arduino wziąłeś pałkę i naparzasz.
Ten silnik ma przekładnię, reduktor 1:63 (około), przy prędkościach powyżej 500 może już przestać działać, nie osiągając jakiś znaczących prędkości obrotowych.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
Kod:
* Unipolar stepper motor speed and direction control with Arduino
*   and joystick
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
*/

// include Arduino stepper motor library
#include <Stepper.h>

// define number of steps per revolution
#define STEPS 32

// define stepper motor control pins
#define IN1  11
#define IN2  10
#define IN3   9
#define IN4   8

// initialize stepper library
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);

// joystick pot output is connected to Arduino A0
#define joystick  A0

void setup()
{

}

void loop()
{
  // read analog value from the potentiometer
  int val = analogRead(joystick);

  val = constrain(val,5,1024);
// if the joystic is in the middle ===> stop the motor
if(val < 10 )
{
digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

else[
  {
//
  while (val >= 10)
{
  // map the speed between 5 and 500 rpm
  int speed_ = map(val, 10, 1024, 5, 1000);
// set motor speed
stepper.setSpeed(speed_);

  // move the motor (1 step);
    stepper.step(1);

val = analogRead(joystick);
val = constrain(val,5,1024);
    }

  }

}




Do prędkości zmieniaj liczbę ostatnie 1000 gdyby nie działało to zmień jak było na 500. Poszukaj po prostu max prędkość jaka będzie działać. Ja już podkręciłem 2X

  int speed_ = map(val, 10, 1024, 5, 1000);
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości