Arduino Polska Forum
Silnik krokowy - wolne obroty - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Silnik krokowy - wolne obroty (/watek-silnik-krokowy-wolne-obroty)



Silnik krokowy - wolne obroty - ion.liq - 28-12-2022

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);
    }

  }

}



RE: Silnik krokowy - wolne obroty - MadMrQ - 28-12-2022

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


RE: Silnik krokowy - wolne obroty - kaczakat - 28-12-2022

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.


RE: Silnik krokowy - wolne obroty - Jarewa0606 - 29-12-2022

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