SmartCat Toilet by DominikMakerWorld: Download Free 3D Models (2025)

SmartCat Toilet – simple to build, surprisingly smart

How it works:
Once powered on, the litter box automatically searches for its home position. After that, it waits for input. You can now fill in the cat litter and use the website (on your phone or PC) to calibrate it to zero.

When your cat enters, you can see its live weight on your phone or PC via the built-in web interface. After the cat finishes its business and leaves the litter box, the system waits 10 seconds and then automatically starts cleaning. Through a smart rotating motion, the waste is moved into the rear container. After that, it returns to the home position, ready for the next visit.

If the cat re-enters during those 10 seconds or while cleaning, the process stops immediately and resets the timer for maximum safety. Once the cat has left again, the system waits another 10 seconds before restarting the cleaning cycle.

The litter box runs quietly and uses a safe 24V system – no electrical hazard for maximum safety. Don’t overfill it with litter, or the motor might struggle. A good amount is enough to cover around 16 cm width, reaching all the way to the back. You can experiment with the best amount. Overfilling may also prevent the waste from reaching the side pouch properly.

Boost Me (for free)

I've spent countless hours developing this project – from the design and electronics to the step-by-step guide. If you like what I’ve built and want to support me, leaving a free boost would be an amazing help! It doesn’t cost you anything, but it really motivates me and makes it possible for me to keep creating big, detailed projects like this one. Thank you!

Why 3D print a cat litter box instead of buying one?
Because it’s cheaper, fully repairable, customizable – and honestly, building it yourself is just way more fun!

After more then - 800 hours - of development, my automated litter box is finally ready.
I made sure it's also beginner-friendly, both in terms of setup and understanding.


The parts are easy to print, the electronics are simple, and the system works entirely without a cloud or app – just via WiFi in your browser.

During this project, I learned more than I ever expected:
I realized how important capacitors are in real-life circuits – not just in theory like we learned in technician school.
I also had to teach myself how to build websites using HTML, CSS, and JavaScript, and how to program microcontrollers using C++ for the ESP32.
It was a steep learning curve, but an amazing experience!

The entire build uses around ~12 kg of filament ( ~11,5 Days printtime) and is designed to be modular, reliable and beginner-friendly:
There's no glue needed (except magnets) – all components are screwed together, making it super easy to replace parts if something breaks – no hassle, no frustration.
In this project you'll find step-by-step instructions:


What parts you need, how to assemble everything, and how to bring your own smart litter box to life.

Cats are only detected once they weigh around 1.5 kg or more, assuming the system is properly calibrated.
So it's not suitable for kittens. If needed, you can manually trigger the cleaning cycle by briefly pressing on the platform yourself.

A Quick Note Before We Start

If you’re interested, I also offer a fully assembled version of the Smart Cat Toilet.


That means I will print all the parts, purchase all required components, assemble the entire system, and ship the finished product to you.
We can discuss the final price individually – but I wanted to let you know that this option is available.

If you don’t own a 3D printer or only have a small one, I can also offer to print all the parts for you and ship them. You would just cover the material and shipping costs.

As an alternative, I can prepare a complete DIY kit:


I would order all non-printed parts, solder the electronics, and include all necessary screws and hardware. You would then only need to print the plastic parts and assemble the litter box yourself. Think of it as a convenient, ready-to-go maker kit.

If you're interested in any of these options, feel free to reach out to me directly here on the platform or contact me directly via email at

dominikhoffmann1999@gmail.com

– I'm sure we can find a solution that works for you, or if you'd like a different option, feel free to contact me.

📩 Interested in commercial use?
If you would like to print, build, and sell this project yourself, I also offer a commercial license. Just send me a message!

Got ideas to improve the code or spotted something? I'd love to hear your feedback!

Thank you for your interest – and now, let’s get building! 😺

Enjoy building it! 🐾

Part 1

Parts List for the SmartCat Toilet

PartDescriptionQtyTotal PriceSource
1Gear Motor 24v 16RPM117,99€AliExpress
210P Terminal Block36,75€AliExpress
3Buck Converter (LM2596)11,35€AliExpress
4Load Cell Sensor 20KG47,56€AliExpress
5HX711 Module11,19€AliExpress
6L298N Dual Motor Driver11,69€AliExpress
7Power Supply 24V 3A115,99€Amazon
8Silicone Cable Kit (20AWG, 6 colors)123,99€Amazon
9Push Button Switch (LED, 16mm)17,49€Amazon
10ESP32 Dev Boards (set of 3)115,99€Amazon
11Hall Effect Sensor (Magnet Sensor set of 5)15,99€Amazon
12Electrolytic Capacitor Set (100uF used)110,99€Amazon
13Screw Set (M2–M5 sizes)116,99€Amazon
14BT2x5 Screws (set of 20: AA191)11,06€Bambu Lab
15BT3x5 Screws (set of 20: AA199)11,10€Bambu Lab
16BT3x10 Screws (set of 20: AA200)11,12€Bambu Lab
17BT3x14 Screws (set of 20: AA201)33,36€Bambu Lab
18BT3x18 Screws (set of 10: AA202)66,54€Bambu Lab
19Magnet 4x2mm (set of 20: CA001)12,06€Bambu Lab
20Magnet 8x2mm (set of 20: CA005)12,68€Bambu Lab
21Steel Bearings (set of 2: EA041)27,24Bambu Lab
Filament ABS white (my choice)12203,88€Bambu Lab
Filament ABS white Bundle Eleg oo3149,97€Amazon
=Total cost without Filament~160€

1: 5840-31ZY Schneckengetriebemotor DC 12 V/24 V 7 U/min ~ 470 U/min Geschwindigkeit einstellbarer Gleichstrom-Getriebemotor Miniatur kleiner Motor hohes Drehmoment hohe Leistung 5.0 - AliExpress 13

2: Elektrischer Schraubklemmenblock, zweireihiger Streifen, feste Verdrahtungsplatine, Drahtverbinder, 600 V, 15 A, Box-Anschluss, Kabelkontakte, 3/4/5/8p - AliExpress 13

3: 1/5/10 Stück LM2596 DC zu DC Buck Converter 3,0–40 V auf 1,5–35 V Netzteil Step-Down-Modul - AliExpress 502

4/5: Wägezelle 1KG 5KG 10KG 20KG HX711 AD Modul Gewichtssensor Elektronische Waage Aluminiumlegierung Wägedrucksensor für Arduino - AliExpress 502

6: L298N Schrittmotor Treiber Controller Board Dual H Bridge Modul für Smart Car Power MEGA R3 Mega2560 - AliExpress 502

7: GPJYD 24V Netzteil 72W 3A, AC 100-240V auf dc 24V steckernetzteil LED Trafo, mit DC-Steckverbinder 24V LED Netzteil Adapter Transformatoren für 5050 2835 LED-Streifen: Amazon.de: Elektronik & Foto

8: 0,52mm² Silikon Elektrokabel 20 AWG verzinnte Kupferdrahtspule,6 Farben,10 Meter pro Kabel,Litzendraht,flexibel und weich, ideal für elektrische Anwendungen : Amazon.de: Baumarkt

9: Aiqeer 2 Stück 16 mm Rastend Druckschalter, 12V / 24V 5A Auto Zündung Starter Schalter, IP67 Wasserdichter Edelstahl Druckschalter, mit Vorverdrahteter Steckdose (Weiß LED) : Amazon.de: Baumarkt

10: ESP32 mit CH340 Entwicklungsplatine Binghe 3 Stück ESP32 30 Pins ESP-32S ESP32-WROOM-32D Modul 2.4 GHz WiFi + Bluetooth 2-in-1 geringer Stromverbrauch Typ-C Stecker Kompatibel mit Arduino: Amazon.de: Gewerbe, Industrie & Wissenschaft

11: Hailege 5pcs 3144E A3144 Hall-Effekt-Sensor Hall-Effekt-Magnetsensor-Modul KY-003 DC 5V PIC AVR : Amazon.de: Gewerbe, Industrie & Wissenschaft

12: ALLECIN 24 Wert Elko Kondensator Set Elkos Kondensatoren Sortiment Kit Aluminium Elektrolytkondensator von 0,1uF bis 1000uF 10V 16V 25V 50V Electrolytic Capacitors : Amazon.de: Gewerbe, Industrie & Wissenschaft

13: 1407 Stück Schrauben Set Edelstahl, M2/M3/M4/M5 Maschinenschrauben Zylinderkopfschrauben Gewindeschrauben Set Sechskantschrauben Set für Elektronikprodukte Autoreparatur : Amazon.de: Baumarkt

14: eu.store.bambulab.com/de/collections/self-tapping-screws/products/bt2-socket-head-cap-selbstschneidende-schrauben-shcs-neu

15: eu.store.bambulab.com/de/collections/self-tapping-screws/products/bt3-socket-head-cap-selbstschneidende-schrauben-shcs-neu

16: eu.store.bambulab.com/de/collections/self-tapping-screws/products/bt3-socket-head-cap-selbstschneidende-schrauben-shcs-neu

17: eu.store.bambulab.com/de/collections/self-tapping-screws/products/bt3-socket-head-cap-selbstschneidende-schrauben-shcs-neu

18: eu.store.bambulab.com/de/collections/self-tapping-screws/products/bt3-socket-head-cap-selbstschneidende-schrauben-shcs-neu

19: eu.store.bambulab.com/de/collections/magnets/products/rundmagnet

20: eu.store.bambulab.com/de/collections/magnets/products/rundmagnet

21: eu.store.bambulab.com/de/collections/bearings/products/steel-deep-groove-ball-bearings-1

If you'd like, you can scroll down to the description – I've listed all the Bambu Lab items there. You can simply select everything at once and order directly. That way, you don’t have to search for each item individually, and you'll also be supporting me. Thank you!

📦 Notes:

Items are sourced from AliExpress, Amazon, and Bambu Lab for the best price-performance ratio.

You could buy everything from Amazon only, but that would cost significantly more.

Screws from Bambu Lab may already be in your collection if you're using a Bambu 3D printer.

You'll also need ~12 kg filament (e.g., PETG or PLA+).

Assembly is fully screw-based – no glue needed!

Damaged parts can be replaced easily.

Required Tools

  • Phillips screwdriver (standard size)
  • Small flathead screwdriver (for terminals)
  • Allen keys (M2/M3 sizes – e.g. for Bambu Lab screws)
  • Wire stripper or sharp knife
  • Side cutters
  • Soldering iron and solder
  • Heat shrink tubing or electrical tape (optional)
  • Ferrules (for clean terminal connections)
  • Optional: small drill or tweezers

Part 2

Pre-Assembly Preparation

Before starting the build, it’s smart to prepare everything properly.
This avoids mistakes and saves time later.

✅ What to do before assembly:

  1. Unpack and sort all parts: Organize screws by sizeCheck if all electronics and components are present
  2. Inspect 3D printed parts: Make sure everything printed correctly. Look out for warping, missing layers or weak areas
  3. Pre-test the power setup: Set the buck converter to 5 V using a multimeter. Power up the ESP32 once to verify functionality
  4. Flash the ESP32 with a test sketch: For example, upload a simple Blink sketch. This helps ensure the USB connection is working
  5. Check and clean holes and threads: Make sure all screw holes are clean. Tap or widen holes if needed
  6. Prepare your workspace: Clean and well-lit desk. Keep tools and parts sorted and ready

Part 3

Prepare the ESP32 & Test the Website

Before starting the build, test if your ESP32 connects to WiFi and serves the live web interface and Adding the Required Libraries.

#include <WiFi.h>
#include <WebServer.h>
#include “HX711.h”

These are called libraries – they give your program the tools it needs to host a website or read weight from the HX711 chip.

How to install them:

  • Open the Arduino IDE
  • Go to Sketch → Include Library → Manage Libraries
  • Search for "HX711"
  • Install it (e.g. the one by "Bogde")
  • Repeat the search for "WebServer" (this one is often pre-installed)
  • WiFi.h is already included with the ESP32 board package

Connect the ESP32

  • Plug the ESP32 into your PC via USB.
  • Go to Tools → Board → ESP32 Dev Module -esp32
  • Then Tools → Port → COM5 (or whichever COM your ESP32 uses)
  • Enter your WiFi name and password
    At the top of the code, edit:

const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASSWORD";

Upload and test

  • Upload the sketch
  • Open the Serial Monitor (115200 baud)
  • Look for the IP address the ESP32 prints – e.g.:

Connected! IP address: 192.168.178.32 ( or 192.168.178.35 or 192.168.178.60 etc. )

During the upload process to the ESP32, you might see the message "Connecting..."
Sometimes, the board doesn't connect automatically. In that case, you need to press the "BOOT" button on the ESP32 exactly at the time when there is a connection….
You’ll usually find it on the right side of the board. Keep it pressed for a few seconds until the upload starts.

Open the website

  • Type that IP into your browser (PC or smartphone).
    You should now see the live interface.

Add the page to your home screen

On Android (e.g. Chrome):

  • Open the page in Chrome
  • Tap the 3 dots menu
  • Select “Add to Home screen”
  • Name it → Done!

On iPhone (Safari):

  • Open the page in Safari
  • Tap the Share icon
  • Select “Add to Home Screen”
  • Name it → Add → Done!

Here is the complete code.
You can see the scroll bar on the left – it shows how far the code goes down.
Please copy and paste the entire code exactly as it is, without changing (except of course your wifi name and password) or skipping anything.
If you run into any issues: Just ask – I’ll be happy to help!

Line 15 (const float amplification = 120.0;) controls the weight accuracy.
If you place 3 kg in the litter box but it only shows 2.6 kg, try increasing this value slightly.
If the displayed weight is too high, reduce it.

Would you like a German version? Just leave a comment and I'll send it to you.

#include <WiFi.h>

#include <WebServer.h>

#include "HX711.h"

// WLAN

const char* ssid = "YOUR_WIFI_NAME";

const char* password = "YOUR_WIFI_PASSWORD";

// HX711

#define HX711_DT 22

#define HX711_SCK 21

HX711 scale;

float calibration_factor = 4500.0;

const float amplification = 120.0;

// Motor

const int MOTOR_ENA = 32;

const int MOTOR_IN1 = 27;

const int MOTOR_IN2 = 26;

// Magnetic sensor

const int MAGNET_SENSOR = 4;

// Weight buffer

const int BUFFER_SIZE = 10;

float weightBuffer[BUFFER_SIZE] = {0};

int bufferIndex = 0;

bool bufferFull = false;

float lastDisplayKg = 0.0;

// Cleaning logic

bool tare_done = false;

bool catPresent = false;

bool cleaningPending = false;

unsigned long startTime = 0;

unsigned long leaveTime = 0;

const float THRESHOLD = 1.5; // in kg

const unsigned long CLEANING_DELAY = 10000;

// Webserver

WebServer server(80);

// Web page

const char MAIN_page[] PROGMEM = R"rawliteral(

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Smart Cat Toilet</title>

<style>

body { font-family: sans-serif; background: #f3f4f6; display: flex; justify-content: center; align-items: center; flex-direction: column; height: 100vh; margin: 0; }

.box { background: white; padding: 30px; border-radius: 20px; box-shadow: 0 0 20px rgba(0,0,0,0.1); text-align: center; margin-bottom: 20px; }

h1 { margin: 0 0 20px; font-size: 2em; color: #1f2937; }

#weight { font-size: 3em; color: #2563eb; }

.btn { margin-top: 20px; padding: 12px 24px; background: #3b82f6; color: white; font-size: 16px; border: none; border-radius: 12px; cursor: pointer; transition: background 0.3s ease; }

.btn:hover { background: #2563eb; }

.author { font-size: 14px; cursor: pointer; color: #3b82f6; margin-top: 12px; }

.links-popup { display: none; position: fixed; top: 100px; left: 50%; transform: translateX(-50%); background: white; padding: 20px; border-radius: 16px; box-shadow: 0 8px 20px rgba(0,0,0,0.15); z-index: 100; text-align: center; width: 90%; max-width: 350px; }

.links-popup h3 { margin-top: 0; }

.links-popup a { display: flex; align-items: center; justify-content: center; margin: 8px 0; color: #1e293b; text-decoration: none; font-size: 15px; }

.links-popup img { width: 22px; height: 22px; margin-right: 8px; }

.links-popup .btn { margin-top: 16px; background: #e5e7eb; color: #111827; }

.links-popup .btn:hover { background: #d1d5db; }

</style>

</head>

<body>

<div class="box">

<h1>Smart Cat Toilet</h1>

<div id="weight">Loading...</div>

<button class="btn" onclick="calibrate()">Calibrate</button>

</div>

<div class="author" onclick="toggleLinksPopup(true)">Made by <span style="color:#3b82f6">Dominik &#8250;</span></div>

<div class="links-popup" id="linksPopup">

<h3>Dominik's Links</h3>

<a href="https://makerworld.com/de/@Dododomme" target="_blank"><img src="https://o1m.cn/wp-content/uploads/2024/02/2f739-makerworld.com.png">Makerworld</a>

<a href="https://www.printables.com/@Dododomme_3020836" target="_blank"><img src="https://www.printables.com/favicon.ico">Printables</a>

<a href="https://www.instagram.com/dm_n_k/?next=%2F" target="_blank"><img src="https://cdn-icons-png.flaticon.com/512/2111/2111463.png">Instagram</a>

<a href="https://buymeacoffee.com/dododomme" target="_blank"><img src="https://cdn-icons-png.flaticon.com/512/649/649931.png">Buy Me a Coffee</a>

<button class="btn" onclick="toggleLinksPopup(false)">Cancel</button>

</div>

<script>

async function updateWeight() {

try {

const res = await fetch('/weight');

const text = await res.text();

document.getElementById('weight').innerText = text + ' kg';

} catch (e) {

document.getElementById('weight').innerText = 'Error';

}

}

function calibrate() {

fetch('/tare')

.then(() => { alert('Calibration successful!'); })

.catch(err => { alert('Error during calibration.'); });

}

function toggleLinksPopup(show) {

document.getElementById("linksPopup").style.display = show ? "block" : "none";

}

setInterval(updateWeight, 1000);

updateWeight();

</script>

</body>

</html>

)rawliteral";

void motorStop() {

analogWrite(MOTOR_ENA, 0);

digitalWrite(MOTOR_IN1, LOW);

digitalWrite(MOTOR_IN2, LOW);

}

void motorForward(int speed = 180) {

digitalWrite(MOTOR_IN1, HIGH);

digitalWrite(MOTOR_IN2, LOW);

analogWrite(MOTOR_ENA, speed);

}

void motorReverse(int speed = 180) {

digitalWrite(MOTOR_IN1, LOW);

digitalWrite(MOTOR_IN2, HIGH);

analogWrite(MOTOR_ENA, speed);

}

void driveToHome() {

Serial.println("↔ Searching for home position with oscillation...");

int maxSteps = 10; // Max. 10 Fahrzyklen

int duration = 1000; // Startdauer in ms

bool forward = true;

for (int i = 1; i <= maxSteps; i++) {

Serial.print("🔁 Step ");

Serial.print(i);

Serial.println(forward ? " → Forward" : " ← Reverse");

// Starte Motor in entsprechender Richtung

if (forward) {

motorForward(180);

} else {

motorReverse(180);

}

unsigned long startTime = millis();

while (millis() - startTime < duration) {

if (digitalRead(MAGNET_SENSOR) == LOW) {

motorStop();

Serial.println("✅ Home position found!");

return;

}

delay(10);

}

// Stoppe nach Ablauf der Zeit, wenn kein Sensor ausgelöst wurde

motorStop();

delay(300); // kurze Pause vor Richtungswechsel

forward = !forward; // Richtung wechseln

duration += 1000; // Dauer um 1 Sekunde erhöhen

}

Serial.println("❌ Home position not found after full search.");

}

void safeTare() {

if (scale.is_ready()) {

scale.tare();

Serial.println("📏 Tare completed.");

lastDisplayKg = 0.0;

} else {

Serial.println("⚠ HX711 not ready for tare.");

}

}

void setup() {

Serial.begin(115200);

WiFi.begin(ssid, password);

Serial.print("Connecting to WiFi");

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("\nConnected! IP address: " + WiFi.localIP().toString());

server.on("/", []() { server.send(200, "text/html", MAIN_page); });

server.on("/weight", []() {

server.send(200, "text/plain", String(lastDisplayKg, 1));

});

server.on("/tare", []() {

safeTare();

server.send(200, "text/plain", "OK");

});

server.begin();

Serial.println("🌐 Webserver started.");

scale.begin(HX711_DT, HX711_SCK);

scale.set_scale(calibration_factor);

pinMode(MOTOR_ENA, OUTPUT);

pinMode(MOTOR_IN1, OUTPUT);

pinMode(MOTOR_IN2, OUTPUT);

pinMode(MAGNET_SENSOR, INPUT_PULLUP);

delay(500);

driveToHome();

delay(500);

safeTare();

tare_done = true;

startTime = millis();

}

void loop() {

server.handleClient();

if (!tare_done) return;

if (scale.is_ready()) {

float w = scale.get_units(1);

if (abs(w) < 100.0) {

w = -w;

weightBuffer[bufferIndex] = w;

bufferIndex = (bufferIndex + 1) % BUFFER_SIZE;

if (bufferIndex == 0) bufferFull = true;

int n = bufferFull ? BUFFER_SIZE : bufferIndex;

float sum = 0;

for (int i = 0; i < n; i++) sum += weightBuffer[i];

float avg = sum / n;

float kg = max((avg * amplification) / 1000.0, 0.0);

lastDisplayKg = kg;

Serial.print("📊 Avg Weight (");

Serial.print(n);

Serial.print("): ");

Serial.print(kg, 2);

Serial.println(" kg");

// Cat detected

if (!catPresent && kg > THRESHOLD) {

catPresent = true;

leaveTime = 0;

Serial.println("😺 Cat detected!");

}

// Cat has left

if (catPresent && kg < THRESHOLD) {

if (leaveTime == 0) {

leaveTime = millis();

Serial.println("🚶 Cat left, waiting...");

} else if (millis() - leaveTime > CLEANING_DELAY) {

catPresent = false;

cleaningPending = true;

leaveTime = 0;

Serial.println("🧼 Starting cleaning...");

}

} else if (catPresent && kg > THRESHOLD) {

// Cat returned — reset leave timer

if (leaveTime != 0) {

leaveTime = 0;

Serial.println("⏱ Cat returned – cleaning timer reset.");

}

}

}

}

if (cleaningPending) {

cleaningPending = false;

Serial.println("➡ Cleaning: reverse (7s)");

motorReverse(180);

delay(7000);

motorStop();

delay(2000);

Serial.println("↩ Driving forward (9s)");

motorForward(180);

delay(9000);

motorStop();

delay(2000);

driveToHome(); // sucht Magnet-Sensor

delay(500);

safeTare();

}

}

Part 4

Mechanical Assembly Starts Here

This is where the fun begins: assembling your smart litter box.

In the following sub-chapters (Part 4.1 to 4.8), I’ll show and explain step by step how to build everything.

For each section, I’ve recorded videos so you can follow along easily.
All videos are in real time (1x speed) and completely uncut, so you can watch and build at the same time – just like we’re doing it together.

One thing to mention:
🎥 The videos aren’t super professional – I’m not a YouTuber or filming expert –
but I did my best to keep it clear and honest, so you can build this project without confusion.
And most importantly: It works!

I printed everything with 2% infill, and increased it to 10% in areas where screws go, around curves, or on visible surfaces – just because it was originally meant as a test. You can see in the videos that a lot of light shines through.
Later, I printed one part with 15% infill, and in my opinion, it turned out perfect.
Even with my light test settings, I still used about 8.5 kg of filament. So compared to the 11.3 kg you'd need for everything at 15% infill, it's not a huge difference – but the results and stability are significantly better.

You might notice that some parts look slightly different than in the videos – these are just visual improvements and don’t affect the overall construction.
During testing, I made a few cosmetic adjustments. For example, the bearing holders now have a small pause so you can insert the bearings mid-print.
All other parts are printed in one go.

Part 4.1

Rotating Unit: Assemble Parts 1 to 16

In this step, you build the rotating unit, which is the part where the cat enters and that will later rotate to clean the box.

You’ll need:

  • All printed parts from 1 to 16
  • 55 screws M3 x 18
  • 24 screws M3 x 5
  • 1 screw M3 x 10
    (for the small recess on the back side near the gears)
  • The small rectangular inserts (printed)

Assembly:

  • Carefully screw together all 16 parts of the rotating unit – just as shown in the full-length video.
  • Inside the structure (where the cat enters), there are small gaps between the parts.
    You insert the small rectangular pieces into those gaps to stabilize the structure.

In the video, I didn’t include those rectangles because my printer was broken at the time–
but you should definitely print and use them. No glue needed – just drop them in.

  • The one M3 x 10 screw goes on the back side near the gears, into a small recessed hole. Don’t use a longer one there – it will poke out on the other side and doesn’t look clean.

Optional Tip:

If you want, you can gently melt the seams between the parts on the inside using a soldering iron.
This will make the unit more or less watertight.
However, if you always use enough litter, that’s usually not necessary, since it absorbs everything anyway

Part 4.2

Assembling the Lid

The lid consists of two parts that are simply screwed together.
You’ll need eight M3 x 14 screws for this step.

The two parts only fit together in one correct orientation, so it’s almost impossible to mess up.
Just align them properly and insert the screws into the provided holes.

There’s no glue required and nothing complicated to adjust.
It’s a super quick and easy step that takes just a few minutes.

Part 4.3

Connecting the Weight Sensors

In this step, you’ll connect the four load cells to the HX711 module.

Each sensor is mounted using four screws (M4 x 16 or similar).
Depending on the sensor model, screw size may vary –
I once had a set from Amazon that required M5 screws.
That’s why I included a screw assortment kit in the parts list – it’s super useful here.

The HX711 board is mounted with two M3 x 5 screws.

Wiring the load cells:

Each sensor has four wires. Connect them like this:

  • Red → E+
  • Black → E-
  • Green → A+
  • White → A-

Also check for a small arrow engraved on the metal body of each sensor –
it shows the force direction and must face the correct way, otherwise the readings will be wrong.
I also show that in the video.

⚠ Important:

The wires on the HX711 output side will be soldered later.

Part 4.4

Mounting Electronics on 3 Stacked Boards

In this step, you’ll mount all electronic components onto the three printed mounting plates.
These plates will later be stacked vertically inside the enclosure – not side by side.
This keeps the design compact and tidy.

Required screws:

  • 10 × M3 x 10
    → For the terminal blocks and power input bracket
  • 2 × M3 x 5
    → For the step-down converter (e.g. LM2596)
  • 8 × M2 x 10
    → For the ESP32 base board and the L298N motor driver

In the video, I show exactly which board each part goes on.
You can follow my layout exactly, or rearrange it if you prefer.

The three boards are designed to stack on top of each other

This stacked structure saves space while still being easy to access for maintenance.

All you have to do in this part is screw everything down – wiring comes in the next step.

Part 4.5

Power Supply & Main Switch Wiring

In this step, we wire the entire power supply up to the Step-Down Converter.

This includes:

Connecting the 24 V power supply

Routing the main power through terminal blocks

Wiring the main ON/OFF switch

in the second video I show you how to connect and properly set the step-down converter to 5.0 V.


▶ In the video, I walk you through the setup step by step.

Part 4.6

Wiring Overview

The table below shows exactly how all components are connected.
In the videos, I walk you through every wiring step so you can follow along without making mistakes.

FromToDescription
1Power supply 24 V +Main ON/OFF switch (input)Main power is controlled via switch
2Switch outputTerminal block 24 V (bottom)Feeds power to the rest of the system
3Power supply GNDTerminal block GND (bottom)Ground for entire system
4Power supply 24 V +LED in the switchPowers the built-in LED in switch
5Power supply GNDLED in the switchGround for switch LED
6Terminal 24 VStep-Down VIN +Power input for step-down converter
7Terminal GNDStep-Down GNDGround for step-down converter
8Step-Down OUT +Terminal block 5 V (middle)5 V output for ESP32 and sensors
9Terminal GND (bottom)ESP32 GNDGround connection
10Terminal 5 V (top)ESP32 5VESP32 power
11HX711 DTESP32 GPIO 22Data from load cell
12HX711 SCKESP32 GPIO 21Clock
13HX711 VCC5 VPower supply
14HX711 GNDGNDGround
15L298N IN1ESP32 GPIO 26Motor direction
16L298N IN2ESP32 GPIO 27Motor direction
17L298N ENAESP32 GPIO 32PWM speed control
18L298N VCC 24V24 VPower for driver
19L298N VCC 5V5VPower for logic driver
20L298N GNDGNDGround for driver
21OUT1Motor + & -Motor drive outputs
22Magnet sensor signalESP32 GPIO 4Detects home position
23Magnet sensor VCC5 VPower supply
24Magnet sensor GNDGNDGround

Part 4.7

Stack the Electronics & Install Everything into the Base

In this step, we stack the three electronic boards and install the entire module into the base of the smart litter box.

You might notice in the video that one printed part has a slightly rough surface – this happened because I used too little filament at the time. But after that, I optimized everything, and all other parts were printed cleanly and smoothly.

Yes, this project does require quite a bit of filament – but keep in mind: the litter box is built to be durable, strong, and long-lasting. Compared to smart litter boxes you can buy online, this one is still much more affordable, fully repairable, and doesn’t rely on expensive electronics.

If you really want to experiment with lower infill to save filament, you can – but be aware that you might need to reprint some parts if they break or warp.

The main thing to watch out for in this step is that no wires get pinched during assembly, and that you use the correct screw lengths.

Also, don't forget: the gear that connects to the rotating part must be placed in position before closing the body. Once everything is screwed together, there’s no way to fit it in afterward.

Screw Overview

To screw the three electronics boards together, you’ll need 8 screws M3x10. These connect the stacked layers firmly and ensure that everything stays aligned.

To mount this assembled board block into the base frame, you’ll insert 4 screws M3x14 from underneath. These hold the entire electronics module securely in place.

For the final assembly of the main body, you’ll use two different types of screws as well:
First, you’ll need 6 screws M3x5, which are used to attach the two thin side walls at the sides.
Then, you’ll need approximately 53 screws M3x14 to fully secure the remaining outer parts of the body. This combination gives the structure its full strength and stability.

Video Guide

Video 1: Mounting the electronics into the frame and screwing everything up to the load cells

Video 2: Soldering the HX711 board to the four load cells, including the 100 µF capacitor
→ This capacitor is extremely important: it filters out electrical noise. Without it, your scale won’t give stable readings.

Video 3: Mounting the final parts
→ Make sure the gear is already inserted – once the body is fully assembled, it can’t be added anymore.

Part 4.8

Adding the magnets


In this step, we insert the magnets.
In the first video, I used 8×2 mm magnets – one is glued in place, and the other one simply sits on top. You might have to test what works best for you, as it can depend on your print quality.

The key is: when the cat toilet rotates, the magnet should reliably trigger the sensor.
For me, using two magnets worked perfectly.

Additionally, you’ll insert like in video two 4×2 mm magnets into the lid and the main frame to keep everything nicely in place – and that’s it!

Now all that’s left is to attach the lid and the rotating cylinder where the cat enters – and you’re done! Have fun, and I hope you like the result. If you have any feedback or suggestions, feel free to reach out. 😺

SmartCat Toilet by DominikMakerWorld: Download Free 3D Models (1)
SmartCat Toilet by DominikMakerWorld: Download Free 3D Models (2025)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Aron Pacocha

Last Updated:

Views: 6054

Rating: 4.8 / 5 (68 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Aron Pacocha

Birthday: 1999-08-12

Address: 3808 Moen Corner, Gorczanyport, FL 67364-2074

Phone: +393457723392

Job: Retail Consultant

Hobby: Jewelry making, Cooking, Gaming, Reading, Juggling, Cabaret, Origami

Introduction: My name is Aron Pacocha, I am a happy, tasty, innocent, proud, talented, courageous, magnificent person who loves writing and wants to share my knowledge and understanding with you.