Schrodinger-Clock-PCB-Watch-

Public

@nithinmathewjoji

Download board files

Files for version 1. Pick what you came for.

Share Schrodinger-Clock-PCB-Watch-

Check access before sharing the link.

Who can open this board

Anyone can open this board. No sign-in is required.

This link opens the latest version. Copying it does not grant additional access.

Loading 3D model… large boards can take a moment.

README

Schrödinger Clock - Open Source Smartwatch (Prototype⚠️)

Sponsored By

PCBWay

A compact, open-source smartwatch powered by the ESP32-S3-WROOM with real-time clock, battery monitoring, and USB charging.


📑 Index

  1. Introduction
  2. Features
  3. Hardware Overview
  4. Sponsorship and Support
  5. Schematic & PCB Design
  6. Known issues & Fix
  7. Bill of Materials (BoM)
  8. Firmware & Software
  9. Assembly & Soldering Guide
  10. Usage Guide
  11. Power Management
  12. Downloads
  13. Firmware
  14. Visit Interactive BOM
  15. Contributing
  16. License
  17. Acknowledgments

Introduction

The Schrödinger Watch is an ESP32-S3-based open-source smartwatch designed with a focus on compact PCB layout, low power consumption, and modular features. It integrates RTC, I2C display, battery monitoring, and a USB charging circuit, making it a versatile platform for wearable tech enthusiasts.


Features

FeatureDescription
MicrocontrollerESP32-S3-WROOM (40-pin)
DisplayI2C OLED
RTC ModuleDS3231 (with alarm)
Buttons3 push buttons (pull-up)
BuzzerIncluded for alarms and notifications
Battery3.7V Li-Po battery
Charging CircuitTP4056 for Li-Po charging
Battery MonitoringVoltage divider for ADC measurement
USB CommunicationCP2102 USB programmer
Power Switching*P-MOSFET for auto power control
Protection CircuitSchottky diode for USB protection
  • *feature will be added on the next revision

Hardware Overview

The smartwatch is designed with SMD components for compactness. Below is the pin mapping:

ComponentESP32 GPIOFunction
OLED SDAGPIO 20I2C SDA
OLED SCLGPIO 21I2C SCL
RTC SDAGPIO 20I2C SDA
RTC SCLGPIO 21I2C SCL
RTC AlarmGPIO 11SQW/INT to ESP32
Battery ADCGPIO7Voltage divider to ESP32 Analog Pin
LEDGPIO 2Status Indication
LEDGPIO 3Status Indication
LEDGPIO 4Status Indication
Push Button 1GPIO 12User Input
Push Button 2GPIO 13User Input
Push Button 3GPIO 22User Input

Sponsorship and Support

PCBWay

🙏 Thank You, PCBWay!

This project was proudly sponsored by PCBWay.

Their support in fabricating the custom PCB for the Schrödinger Watch has been invaluable. The quality, precision, and delivery speed were exceptional — and I’m extremely grateful for their contribution to the maker and open-source community.

If you're looking for reliable PCB prototyping, assembly, or 3D printing services, I highly recommend PCBWay.

Schematic & PCB Design

The Schrödinger Watch PCB was designed using KiCad. The schematic consists of:

  • ESP32-S3-WROOM microcontroller
  • RTC DS3231 with backup battery support
  • Power management with TP4056 and P-MOSFET
  • I2C OLED display
  • Battery voltage detection circuit
  • USB programmer (CP2102)

PCB Highlights:

  • 2-layer compact design
  • Optimized power trace routing
  • Thermal relief for heat dissipation
  • Dedicated test points for debugging

Known issues and Fix

Schrödinger Watch ⌚ – ESP32-S3 DIY Smartwatch

This is the Schrödinger Watch, a DIY smartwatch powered by the ESP32-S3-WROOM. It's a fully open-source hardware project, designed and assembled from scratch, with a focus on learning, hacking, and creativity.

⚠️ Note: This is Rev 1 of the hardware. While functional, it contains some known hardware issues listed below. A refined Rev 2 is under development and will be released by September 2025 with additional features and improved reliability.

These are hardware issues identified after assembly and testing:

  1. Missing CE Connection on TP4056:

    • ⚠️ The CE (Chip Enable) pin was left floating, causing the charging IC to remain disabled.
    • ✅ Fix: A patch wire has been added to tie CE to GND manually.
  2. AMS1117 3.3V LDO Lacks Input/Output Capacitors:

    • ⚠️ Without these caps, voltage regulation is unstable (outputting ~2.4V instead of 3.3V).
    • ✅ Fix: Patch capacitors (10µF input, 22µF output) have been manually added close to the LDO pins.
  3. No Pull-Down Resistors for Pushbuttons:

    • ⚠️ Causes GPIO pins to float, leading to erratic behavior.
    • ✅ Fix: External 10kΩ pull-down resistors were added to stabilize the inputs.
  4. Soldering Considerations:

  • The board is fully designed with SMD components for a compact layout.
  • All components were hand-soldered using a soldering iron, without hot air or reflow equipment. Minor imperfections exist, but the board is fully functional.

What's Coming in Rev 2 (ETA: September 2025)

Rev 2 will be a major update with all hardware issues addressed and new features, including:

  • ✅ Proper power rail decoupling and CE management
  • ✅ Integrated MPU6050 IMU for motion sensing
  • ✅ Improved button input system
  • ✅ Compact routing
  • ✅ Better power management and battery indication
  • ✅ Optional haptic feedback (planned)
  • ✅ Additional user-customizable GPIOs

📌 Disclaimer

This is a learning-oriented DIY project and should not be considered a finished consumer product. Use with care and contribute to make it better!

Bill of Materials (BoM)

ComponentQuantitySpecification
ESP32-S3-WROOM140-pin module
OLED Display1I2C, 128x64
DS3231 RTC1Real-time clock module
Li-Po Battery13.7V, 500mAh
TP4056 Module1Battery charger
CP21021USB-to-serial
Buzzer13V piezo
Push Buttons3Momentary switch
Resistors & CapacitorsVariousSMD components

Firmware & Software

The firmware is written in Arduino using the ESP32 library. It supports:

  • RTC time synchronization
  • OLED display updates
  • Battery monitoring
  • Button interactions
  • Alarm system with buzzer

Assembly & Soldering Guide

Tools Required:

  • Soldering iron with fine tip
  • SMD soldering paste
  • Hot air reflow station (optional)
  • Multimeter for testing

Assembly Steps:

  1. Solder the ESP32-S3-WROOM module first.
  2. Attach RTC DS3231 and connect alarm pin to ESP32.
  3. Solder resistors, capacitors, and power circuits.
  4. Mount OLED display and ensure I2C connectivity.
  5. Connect battery and charging module.
  6. Flash firmware and test.

Usage Guide

Powering On:

Press and hold the power button. The watch will display the time, battery status, and active alarms.

Setting Time:

Use the serial monitor to set the time in RTC using setTime().

Battery Monitoring:

Battery percentage is displayed on-screen and can be accessed through the serial monitor.

Alarm Function:

The RTC alarm triggers a buzzer sound at the set time.


Power Management

  • Automatic Power Switching: P-MOSFET allows seamless switching between USB and battery.
  • USB Protection: Schottky diode prevents reverse current flow.
  • Low Power Mode: ESP32 enters deep sleep when inactive to conserve power.

Downloads


Firmware

🛠️ Libraries Used

Install via Arduino Library Manager or PlatformIO.

🚧 Known Hardware Issues (Rev 1)

  • ❌ No CE connection to TP4056 (manually patched)
  • ❌ No input/output capacitors on MIC39100/AMS1117 LDO (caused unstable voltage)
  • ❌ No pull-down resistors for switches (using INPUT_PULLDOWN in firmware)

The current version of the firmware is a minimal working build to demonstrate the core functionality of the Schrödinger Watch. Several features are not yet implemented:

  • ❌ Push Buttons are read but not interfaced with any logic or user interaction yet.
  • ❌ RTC Alarm Interrupt is connected (GPIO 11), but not yet used in the firmware.
  • ❌ ESP32 Deep Sleep functionality is not implemented.

These features will be added in the next firmware updates as part of the development toward Rev 2 and in between the current development , revision 2 of this watch expected by September 2025.

💾 Firmware Code

#include <Wire.h>
#include <U8g2lib.h>
#include <RTClib.h>

// this code works but to be honest there is a lot of places to improve , like switch are just interfaced but not given any function , but can be done like to set time etc etc ......
// all issues will be fixed as a progress please bare with me , but if you have the knowledge then happy to recieve help 

// I2C Pins
#define SDA_PIN 20
#define SCL_PIN 21

// GPIO Definitions
#define LED_PIN       2
#define BATTERY_ADC   7
#define RTC_ALARM_PIN 11

#define BUTTON1 12
#define BUTTON2 13
#define BUTTON3 14

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
RTC_DS3231 rtc;

void setup() {
  Serial.begin(115200);

  Wire.begin(SDA_PIN, SCL_PIN);
  u8g2.begin();

  pinMode(LED_PIN, OUTPUT);
  pinMode(RTC_ALARM_PIN, INPUT);
  pinMode(BATTERY_ADC, INPUT);

  pinMode(BUTTON1, INPUT_PULLDOWN);
  pinMode(BUTTON2, INPUT_PULLDOWN);
  pinMode(BUTTON3, INPUT_PULLDOWN);

  if (!rtc.begin()) {
    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_ncenB08_tr);
    u8g2.drawStr(0, 20, "RTC Not Found");
    u8g2.sendBuffer();
    while (1);
  }

  if (rtc.lostPower()) {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_6x10_tr);
  u8g2.drawStr(0, 10, "Schrodinger Watch");
  u8g2.sendBuffer();
  delay(1000);
}

void loop() {
  DateTime now = rtc.now();

  char timeStr[9];
  sprintf(timeStr, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());

  float batteryVoltage = analogRead(BATTERY_ADC) * (3.3 / 4095.0) * 2;  // Adjust based on divider
  char voltStr[10];
  dtostrf(batteryVoltage, 4, 2, voltStr);

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_logisoso38_tr);
  u8g2.drawStr(0, 50, timeStr);
  u8g2.setFont(u8g2_font_6x10_tr);
  u8g2.drawStr(0, 62, ("BAT: " + String(voltStr) + "V").c_str());
  u8g2.sendBuffer();

  digitalWrite(LED_PIN, !digitalRead(LED_PIN)); 

  if (digitalRead(BUTTON1)) Serial.println("Button 1 Pressed");
  if (digitalRead(BUTTON2)) Serial.println("Button 2 Pressed");
  if (digitalRead(BUTTON3)) Serial.println("Button 3 Pressed");

  delay(1000);
}

Contributing

We welcome contributions! If you’d like to improve the watch, please:

  1. Fork the repository.
  2. Create a new branch.
  3. Submit a Pull Request with details.

License

This project is licensed under the MIT License. Feel free to use, modify, and distribute it with proper attribution.


Acknowledgments

Special thanks to the open-source hardware community for inspiring this project!

Comments

No comments yet. Be the first to ask about this board.

Ask about this board

Sign in to BoardRepo

New here? Signing in creates your account; there is no separate sign-up.