Метка: stepper motor

  • Rotating Display Table with Arduino Control

    Rotating Display Table with Arduino Control

    This is a motorized rotating table designed for displaying models, small products, or for photography setups. The table rotates automatically at one of four selectable speeds, controlled by an Arduino and a button. It’s compact, quiet, and fully 3D-printable.

    🛠️ Features

    • 180mm rotating platform
    • 4 speed levels (adjustable by button press)
    • Power switch to turn the system on/off
    • Smooth rotation using stepper motor and bearings
    • Clean electronics enclosure
    • Fully 3D printable design

    📦 Required Components

    ItemQuantityNotesLink
    Arduino Uno1Any compatible clone will work
    https://sl.aliexpress.ru/p?key=tkvx3Sm
    Stepper Motor 28BYJ-48 (5V)1With 5-wire connector
    https://sl.aliexpress.ru/p?key=rjvx3Cq
    ULN2003 Driver Board1Usually comes with the motor
    https://sl.aliexpress.ru/p?key=rjvx3Cq
    6803 Bearings3For smooth platform support

    https://sl.aliexpress.ru/p?key=Jwax3Qh
    M3x8mm bolts2For mounting the stepper motor
    https://sl.aliexpress.ru/p?key=MOax3Cy
    M4x12mm bolts3For securing the bearings
    https://sl.aliexpress.ru/p?key=MOax3Cy
    M4 nuts3For the M4 bolts
    https://sl.aliexpress.ru/p?key=JGax3LO
    Toggle switch KCD11 (14.9 × 9.9 mm)1Fits the panel slot
    https://sl.aliexpress.ru/p?key=Lsax3JX
    Jumper Wires (Male–Female)1 setFor connecting components
    https://sl.aliexpress.ru/p?key=53ax3R0
    5V 2A Power Adapter1External power is highly recommended
    https://sl.aliexpress.ru/p?key=Diax3qd
    Required Components Table

    ⚙️ Electronics & Functionality

    • When the power switch is turned on, the table starts rotating at the first speed.
    • Pressing the button cycles through 4 pre-set speeds.
    • After the 4th speed, the next button press resets it back to the first.
    • The rotating top is mounted directly on the motor shaft and rests on three 6803 bearings, ensuring stable and low-friction rotation.

    🧰 Assembly Instructions

    1. Insert the Arduino Uno and ULN2003 driver
      Place both boards into their dedicated slots inside the printed base. Make sure they sit securely.
    2. Mount the stepper motor
      Insert the 28BYJ-48 motor onto the positioning pins in the center of the base, so that the shaft is aligned perfectly in the middle.
    3. Install M4 nuts into the bearing holders
      Press the M4 nuts into the hexagonal cutouts of the bearing brackets. Then attach the brackets to the side walls using the M4x12mm bolts.
    4. Place the bearings
      Slide the three 6803 bearings onto their holders. These will support the rotating platform smoothly.
    5. Mount the button and power switch
      Insert the momentary button and the KCD11 toggle switch into their designated panel slots.
    6. Assemble and solder the electronics
      Connect the motor, driver, Arduino, button, and switch using jumper wires. Solder the power lines securely and connect to a 5V 2A external power adapter.

    🔌 Wiring Diagram (Text Version)

    🧠 ULN2003 Driver → Arduino Uno

    ULN2003 PinArduino Pin
    IN1D8
    IN2D9
    IN3D10
    IN4D11
    VCC5V
    GNDGND

    🔸 The stepper motor connects directly to the ULN2003 via the 5-pin header.


    🔘 Momentary Button

    Button PinConnection
    One contactGND
    Other contactArduino D2
    • Use pinMode(D2, INPUT_PULLUP); in your code.
    • When pressed, the button pulls the pin LOW.

    Toggle Switch (SPDT or SPST)

    Switch PinConnection
    COM (middle pin)GND
    One side pinArduino D3
    • Use pinMode(D3, INPUT_PULLUP); in your code.
    • The switch will pull D3 LOW when ON (closed).

    🧠 Arduino code

    #include <Stepper.h>
    
    const int stepsPerRevolution = 2048;
    Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
    
    const int buttonPin = 2;
    const int switchPin = 3;
    
    const int numSpeeds = 4;
    int speedSteps[numSpeeds] = {1, 3, 5, 8};
    int currentSpeedIndex = 0;
    
    bool lastButtonState = HIGH;
    
    void setup() {
      pinMode(buttonPin, INPUT_PULLUP);
      pinMode(switchPin, INPUT_PULLUP);
      myStepper.setSpeed(speedSteps[currentSpeedIndex]);
    }
    
    void loop() {
      if (digitalRead(switchPin) == LOW) {
        bool buttonState = digitalRead(buttonPin);
    
        if (lastButtonState == HIGH && buttonState == LOW) {
          currentSpeedIndex = (currentSpeedIndex + 1) % numSpeeds;
          myStepper.setSpeed(speedSteps[currentSpeedIndex]);
    
          Serial.print("Скорость изменена: ");
          Serial.println(speedSteps[currentSpeedIndex]);
        }
        lastButtonState = buttonState;
    
        myStepper.step(1);
      } else {
        delay(100);
      }
    }