Build a tiny cardboard Earth that spins forever — and change modes with one touch!
This little globe is made almost entirely from cardboard, but it hides real electronics inside: a motor that keeps it spinning non-stop, and a single touch button that cycles the base display through four modes — Weather, Countries, Time, and Night Lights. Here's exactly how to build it, with the full circuit and code.
How the spinning globe and touch button work together
The globe itself is simple: a slow motor turns an axle forever, so the cardboard Earth on top just keeps spinning like a real planet. All the "smart" parts live in the stationary base underneath — a small screen and a colorful light ring that never spin, plus one touch pad you tap to change what they show.
One slow motor
A small geared DC motor turns continuously, keeping the globe rotating smoothly and quietly.
Tap to cycle
Each tap on the touch pad moves to the next mode: Weather → Countries → Time → Night Lights → back to Weather.
Base does the display work
A tiny OLED screen shows text for each mode, while a ring of colorful LEDs glows up through the globe for the Night Lights mode.
What you'll need
Mostly cardboard and craft supplies, plus a small set of beginner electronics parts. Ask a grown-up to help with cutting and ordering parts.
Arduino Uno or Nano
Runs the code, reads the touch pad, and controls the motor, screen, and lights.
Small 5V geared DC motor
Turns the axle slowly and steadily so the globe spins forever without wobbling.
Motor driver (L293D or MOSFET)
Lets the Arduino safely run the motor without damaging its pins.
TTP223 touch sensor module
A simple touch pad that sends a signal each time you tap it — no physical button to wear out.
0.96" OLED display (I2C)
Shows the text and icons for whichever mode is currently active.
DS3231 RTC module
Keeps accurate real-world time and date, even when the Arduino is unplugged, for the Time mode.
8-LED WS2812 ring
Glows warm and twinkly under the globe for Night Lights mode, and different colors for other modes.
4×AA battery pack or 5V USB power bank
Powers the Arduino, which powers everything else.
Cardboard, foam ball, paper world map, glue
Builds the spinning globe itself and the base stand around the electronics.
How the circuit works
Everything electronic stays in the non-spinning base. The OLED screen and RTC clock share one I2C "conversation line," the touch pad sends a simple on/off signal, the LED ring gets its own data pin, and the motor gets its own driver so it doesn't overload the Arduino.
Arduino Uno / Nano
5V -----------------------> VCC rail (OLED, RTC, touch pad, LED ring)
GND -----------------------> GND rail (shared by everything + motor driver)
A4 (SDA) -------------------> OLED SDA + DS3231 SDA
A5 (SCL) -------------------> OLED SCL + DS3231 SCL
D2 ------------------------> TTP223 touch sensor OUT
D6 ------------------------> WS2812 LED ring DIN
D9 (PWM) --------------------> Motor driver IN (speed control)
Motor Driver (L293D / MOSFET)
OUT -------------------------> 5V Geared DC Motor -----> Axle -----> Cardboard Globe
VMOTOR ----------------------> Battery pack +
GND -------------------------> Shared GND
Step-by-step build
Follow these in order — the base electronics get built and tested before the globe goes on top.
Build the base stand
Cut a sturdy cardboard box or cylinder to hold the Arduino, breadboard, battery pack, OLED, and LED ring, with a hole in the center-top for the motor shaft to poke through.
Mount the motor and LED ring
Glue the geared motor upright in the center of the base with its shaft pointing up, and place the WS2812 ring around the shaft so light can shine upward.
Wire the OLED and RTC
Connect both to the shared A4/A5 (SDA/SCL) pins as shown in the circuit map — they can share the same two wires.
Wire the touch pad and motor driver
Connect the TTP223 to D2, and wire the motor driver between the Arduino's D9 pin, the battery, and the motor.
Upload and test the electronics
Paste in the code below and upload it. Confirm the motor spins, the OLED shows a mode, and tapping the touch pad changes it — before attaching the globe.
Build the cardboard globe
Wrap a foam ball or papier-mâché sphere with a printed world map, and push a short cardboard tube through its center so it fits snugly onto the motor shaft.
Attach the globe to the shaft
Slide the globe onto the motor shaft and secure it with a dab of glue so it spins smoothly without wobbling.
Decorate and finish
Add labels, paint the base, and trim any visible wires. Set the DS3231's time once using a quick setup sketch (see the FAQ) so Time mode is accurate.
The Arduino code
This sketch keeps the motor running all the time, watches the touch pad for taps, and redraws the OLED and LED ring whenever the mode changes.
// Rotating Globe — spins forever, touch button cycles 4 display modes // Beginner-friendly Arduino sketch #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <RTClib.h> #include <FastLED.h> #define TOUCH_PIN 2 #define LED_PIN 6 #define MOTOR_PIN 9 #define NUM_LEDS 8 Adafruit_SSD1306 oled(128, 64, &Wire, -1); RTC_DS3231 rtc; CRGB leds[NUM_LEDS]; const char* countries[4] = {"Japan", "Brazil", "Kenya", "Norway"}; const char* weatherIcons[4] = {"Sunny", "Rainy", "Cloudy", "Snowy"}; int mode = 0; // 0=Weather 1=Countries 2=Time 3=Night Lights bool lastTouch = false; void setup() { Wire.begin(); oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); rtc.begin(); pinMode(TOUCH_PIN, INPUT); pinMode(MOTOR_PIN, OUTPUT); analogWrite(MOTOR_PIN, 160); // motor spins at a steady gentle speed forever FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); drawMode(); } void loop() { bool touched = digitalRead(TOUCH_PIN); // only change mode on the moment of a new tap if (touched && !lastTouch) { mode = (mode + 1) % 4; drawMode(); delay(200); // simple debounce } lastTouch = touched; } void drawMode() { oled.clearDisplay(); oled.setTextColor(SSD1306_WHITE); oled.setCursor(0, 0); if (mode == 0) { // Weather oled.println("WEATHER MODE"); oled.println(weatherIcons[random(0,4)]); fillRing(CRGB::SkyBlue); } else if (mode == 1) { // Countries oled.println("COUNTRIES MODE"); oled.println(countries[random(0,4)]); fillRing(CRGB::LimeGreen); } else if (mode == 2) { // Time DateTime now = rtc.now(); oled.println("TIME MODE"); oled.print(now.hour()); oled.print(":"); oled.println(now.minute()); fillRing(CRGB::White); } else { // Night Lights oled.println("NIGHT LIGHTS"); twinkleRing(); } oled.display(); } void fillRing(CRGB color) { for (int i = 0; i < NUM_LEDS; i++) leds[i] = color; FastLED.show(); } void twinkleRing() { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = random(0,3) == 0 ? CRGB(255,210,120) : CRGB::Black; } FastLED.show(); }
160 in analogWrite(MOTOR_PIN, 160) to spin the globe faster or slower, or expand the countries list with fun facts you look up together.Frequently asked questions
How do I set the real time on the DS3231 clock?
Most RTC library examples include a one-time "set time" sketch that reads your computer's clock and writes it to the module. Run that once, then switch back to the main sketch above.
Do the wires twist up as the globe spins?
No — only the motor shaft and the cardboard globe rotate. The screen, lights, RTC, and touch pad all stay still in the base, so nothing twists.
Can Weather mode show real weather instead of random icons?
Yes, as an upgrade — swapping the Arduino for an ESP32 lets you connect to Wi-Fi and fetch real weather data from an online weather service instead of picking a random icon.
Is it safe for kids to build?
Yes, with a grown-up helping — especially for cutting cardboard, using a hot glue gun, and any wiring around the battery pack.

Comments
Post a Comment