• Models
  • Contests
  • Slicer
  • Login
  • Start Here
    thingiverse-iconprintables-iconcults3d-iconmakerworld-iconmyminifactory-icon

    3D GO

    3D ModelsContestsCollectionsSaved ModelsOn a mobile device?

3D GO

Privacy Policy
STAY GREEN MACHINE 3D Printer File Image 1
STAY GREEN MACHINE 3D Printer File Image 2
STAY GREEN MACHINE 3D Printer File Image 3
STAY GREEN MACHINE 3D Printer File Image 4
STAY GREEN MACHINE 3D Printer File Image 5
STAY GREEN MACHINE 3D Printer File Image 6
STAY GREEN MACHINE 3D Printer File Thumbnail 1
STAY GREEN MACHINE 3D Printer File Thumbnail 2
STAY GREEN MACHINE 3D Printer File Thumbnail 3
STAY GREEN MACHINE 3D Printer File Thumbnail 4
STAY GREEN MACHINE 3D Printer File Thumbnail 5
STAY GREEN MACHINE 3D Printer File Thumbnail 6

STAY GREEN MACHINE

HarryC2297 avatarHarryC2297

July 2, 2026

makerworld-icon
DescriptionCommentsTags

Description

🟢STAY GREEN — Automatic Status Presser

😈Passive Aggressive Mode — Passive Aggressive Email Writing Aid

Keep your "active" status green. Let the machine handle it.

A small 3D-printed desk arm built around an ESP32 and a micro servo. It presses a key on a fixed interval so apps like Teams or Slack keep reading you as active — and if you reposition it over your Caps Lock key instead, it doubles as a passive-aggressive assistant for those emails.

⏱️ Build time: under an hour once printed — minimal supports, no soldering, 3 wires, 2 code uploads, and a 15-minute calibration pass to match it to your own laptop.

What It Actually Does

  • Powers on, waits 5 seconds so you can get your laptop positioned, then begins a repeating press-release motion on whatever key sits underneath it
  • Runs on a fixed rhythm: press, hold half a second, release, wait a second, repeat — indefinitely, as long as it's powered
  • Rack-and-pinion arm for a solid, repeatable press
  • Snap-fit printed parts, minimal supports needed

Two ways to use it, same firmware both times:

  1. Status mode — position it over a harmless key (Shift, Scroll Lock, etc.) near your normal typing area to keep presence status active
  2. Passive-aggressive mode — reposition it over Caps Lock instead, and it'll toggle Caps Lock on the same fixed interval while you're away from your keyboard

Nothing in the code changes between the two modes — it's the same loop either way, just aimed at a different key. Worth knowing: presses happen on a steady, predictable interval, not randomly, so if you're using passive-aggressive mode expect a metronomic toggle rather than occasional surprise chaos.

A quick honesty note: this works by physically pressing a key, not by touching Teams/Slack or your OS, so it won't trip anything network-side. That said, presence status is meant to signal real availability — worth being upfront with your team if you're relying on this daily.

🧰 What You'll Need

Electronics

  • 1x ESP32 dev board
  • 1x Bambu Lab micro servo with clutch
  • 3x Dupont wires (male-to-female)

Hardware

  • 3x servo screws (usually included with the servo)
  • A small dab of super glue

Printed Parts

  • Base, arm, and rack/pinion pieces (STLs attached) — snap-fit, minimal supports

Tools

  • Small screwdriver
  • USB cable + computer with Arduino IDE installed
  • USB power bank or wall adapter (for standalone use afterward)

🔧 Assembly — About 15 Minutes

1. Print the parts (not counted in build time) Minimal supports needed. Standard PLA, 0.2mm layers works fine.

2. Snap the frame together Base, upright arm, and rack all snap-fit. Test the rack-and-pinion motion by hand before you glue anything — it should slide smoothly.

3. Mount the servo Seat it in the arm housing, secure with the 3 servo screws. Only add a dab of super glue if a joint feels loose — never glue the gear teeth themselves, they need to move freely.

4. Wire it up (3 connections)

Servo WireESP32 Pin
Signal (orange/yellow)GPIO 18
Power (red)5V or VIN
Ground (brown/black)GND

That's the whole circuit — no breadboard, no soldering.

💻 Flashing & Calibration — About 20–30 Minutes

Every laptop is a slightly different height and keyboard depth, so this step tunes the arm to your setup. Do this once, and you're done.

Step 1: Upload the Calibration sketch

Flash the Calibration Code (included below) first — not the main program yet.

Step 2: Open Serial Monitor

In the Arduino IDE: Tools → Serial Monitor. Set the baud rate dropdown (bottom-right) to 115200 — it has to match Serial.begin(115200) in the code, or you'll see garbled text instead of readable output.

Step 3: Position the unit

Put the printed unit where it'll actually sit day-to-day, arm roughly over the key you plan to press.

Step 4: Find your two angles

Type a number from 0–180 into the Serial Monitor input box and hit Enter. The servo jumps to that angle immediately and echoes back:

Servo moved to: 80 degrees

Sweep through values — try 30, then 90, then narrow in — until you've found:

  • Release angle — arm lifted clear, not touching the key
  • Press angle — arm comes down and fully depresses the key

Write both numbers down. A typical pair might be 60 (release) and 85 (press) — yours will differ based on keyboard height.

Step 5: Enter your numbers into the Main Code

Open the main sketch and drop your two calibrated values into these three spots:

void setup() {  fingerServo.attach(servoPin, 500, 2400);  fingerServo.write(30);   // ← your RELEASE angle (starting position)  delay(5000);             // 5 sec pause to position your laptop } void loop() {  fingerServo.write(80);   // ← your PRESS angle  delay(500);  fingerServo.write(60);   // ← your RELEASE angle (same value as above)  delay(1000); }

Use the same release angle in both the setup() line and the loop() — that keeps the arm returning to one consistent resting spot instead of drifting between runs.

Step 6: Re-upload and go wireless

Flash the updated main code, then unplug from your computer and switch to a USB power bank or wall adapter. It'll run standalone from there.

How the Code Works

Calibration Code turns your Serial Monitor into a live remote for the servo — type an angle, it moves there and reports back. It exists purely so you can find your two numbers against your real hardware; it's not what runs day-to-day.

Main Code is what actually runs once flashed:

  • setup() connects to the servo, moves to the release angle, and waits 5 seconds — your window to slide the laptop into place
  • loop() then repeats forever: press down, hold 0.5s, lift up, wait 1s, press again

That's roughly one keypress every 1.5 seconds, nonstop, until it's unplugged. Same code whether it's sitting over Shift for status, or over Caps Lock for chaos — the only thing that changes is where you physically place the arm.

Print Settings

  • Minimal supports (small overhangs on the rack/gear area only)
  • 0.2mm layer height
  • Snap-fit tolerances built in — no post-print sanding should be needed

Questions or found an issue with the fit? Drop a comment and I'll help troubleshoot.

License:

Standard Digital File License - Community Use

Related Models

V29 preview image

V29

jzisa profile image

jzisa

81,490

Tiny Table Vise preview image

Tiny Table Vise

VC Design profile image

VC Design

4,326

LIE DETECTOR using Subconscious Movement preview image

LIE DETECTOR using Subconscious Movement

Model Magic profile image

Model Magic

1,373

The $30 3D scanner V7 updates preview image

The $30 3D scanner V7 updates

daveyclk profile image

daveyclk

75,875

Ryobi Battery Holder preview image

Ryobi Battery Holder

Jerrari profile image

Jerrari

1,866

Decorative Chunky Paper clip preview image

Decorative Chunky Paper clip

Ada & K 3DA profile image

Ada & K 3DA

716

Modular Mounting System preview image

Modular Mounting System

HeyVye profile image

HeyVye

69,197

Funnel Tray preview image

Funnel Tray

fifindr profile image

fifindr

3,558