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

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *