{"id":26539763,"url":"https://github.com/nithinmathewjoji/schrodinger-clock-pcb-watch-","last_synced_at":"2025-07-23T03:06:00.058Z","repository":{"id":279821376,"uuid":"940096296","full_name":"nithinmathewjoji/Schrodinger-Clock-PCB-Watch-","owner":"nithinmathewjoji","description":"An open-source ESP32-S3-based smartwatch with RTC, I2C display, buzzer, LEDs, and battery monitoring. Designed using KiCad, it features a compact PCB layout, Li-Po battery support, and USB charging","archived":false,"fork":false,"pushed_at":"2025-04-27T10:14:49.000Z","size":6516,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-27T11:25:44.444Z","etag":null,"topics":["circuit","esp32","funproject","pcb","pcb-design","pcbwatch","rtc-module","schrodingers-cat","tp4056","watch","wearable-devices"],"latest_commit_sha":null,"homepage":"https://nithinmathewjoji.github.io/Schrodinger-Clock-PCB-Watch-/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nithinmathewjoji.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-27T15:57:32.000Z","updated_at":"2025-04-27T10:14:53.000Z","dependencies_parsed_at":"2025-02-27T22:44:13.084Z","dependency_job_id":"33117236-ad82-4ed0-85f7-e6b0ee1b23dc","html_url":"https://github.com/nithinmathewjoji/Schrodinger-Clock-PCB-Watch-","commit_stats":null,"previous_names":["nithinmathewjoji/schrodinger-clock-pcb-watch-"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/nithinmathewjoji/Schrodinger-Clock-PCB-Watch-","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nithinmathewjoji%2FSchrodinger-Clock-PCB-Watch-","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nithinmathewjoji%2FSchrodinger-Clock-PCB-Watch-/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nithinmathewjoji%2FSchrodinger-Clock-PCB-Watch-/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nithinmathewjoji%2FSchrodinger-Clock-PCB-Watch-/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nithinmathewjoji","download_url":"https://codeload.github.com/nithinmathewjoji/Schrodinger-Clock-PCB-Watch-/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nithinmathewjoji%2FSchrodinger-Clock-PCB-Watch-/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266609079,"owners_count":23955570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["circuit","esp32","funproject","pcb","pcb-design","pcbwatch","rtc-module","schrodingers-cat","tp4056","watch","wearable-devices"],"created_at":"2025-03-22T00:18:51.874Z","updated_at":"2025-07-23T03:06:00.049Z","avatar_url":"https://github.com/nithinmathewjoji.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Schrödinger Clock - Open Source Smartwatch (Prototype⚠️)\n\n\u003cp align=\"center\"\u003eSponsored By \u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pcbway.com/g/D6Z94Y\"\u003e\n    \u003cimg src=\"./PCBWay logo.png\" alt=\"PCBWay\" width=\"200\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n![Image](https://github.com/user-attachments/assets/ff7e76a2-2ea0-487d-b156-6dcd2752788e)\n*A compact, open-source smartwatch powered by the ESP32-S3-WROOM with real-time clock, battery monitoring, and USB charging.*\n\n---\n\n## 📑 Index\n\n1. [Introduction](#introduction)\n2. [Features](#features)\n3. [Hardware Overview](#hardware-overview)\n4. [Sponsorship and Support](#Sponsorship-and-Support)\n5. [Schematic \u0026 PCB Design](#schematic--pcb-design)\n6. [Known issues \u0026 Fix](#Known-issues-and-Fix)\n7. [Bill of Materials (BoM)](#bill-of-materials-bom)\n8. [Firmware \u0026 Software](#firmware--software)\n9. [Assembly \u0026 Soldering Guide](#assembly--soldering-guide)\n10. [Usage Guide](#usage-guide)\n11. [Power Management](#power-management)\n12. [Downloads](#downloads)\n13. [Firmware](#firmware)\n14. [Visit Interactive BOM](https://nithinmathewjoji.github.io/Schrodinger-Clock-PCB-Watch-/)\n15. [Contributing](#contributing)\n16. [License](#license)\n17. [Acknowledgments](#acknowledgments)\n\n---\n\n## Introduction\n\nThe **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.\n\n---\n\n## Features\n\n| Feature                  | Description |\n|--------------------------|-------------|\n| **Microcontroller**      | ESP32-S3-WROOM (40-pin) |\n| **Display**              | I2C OLED |\n| **RTC Module**          | DS3231 (with alarm) |\n| **Buttons**              | 3 push buttons (pull-up) |\n| **Buzzer**               | Included for alarms and notifications |\n| **Battery**              | 3.7V Li-Po battery |\n| **Charging Circuit**     | TP4056 for Li-Po charging |\n| **Battery Monitoring**   | Voltage divider for ADC measurement |\n| **USB Communication**    | CP2102 USB programmer |\n| **Power Switching**      | *P-MOSFET for auto power control |\n| **Protection Circuit**   | Schottky diode for USB protection |\n\n* *feature will be added on the next revision\n---\n\n## Hardware Overview\n\nThe smartwatch is designed with **SMD components** for compactness. Below is the pin mapping:\n\n| Component   | ESP32 GPIO | Function |\n|------------|------------|----------|\n| OLED SDA   | GPIO 20   | I2C SDA  |\n| OLED SCL   | GPIO 21   | I2C SCL  |\n| RTC SDA   | GPIO 20   | I2C SDA  |\n| RTC SCL   | GPIO 21   | I2C SCL  |\n| RTC Alarm  | GPIO 11 | SQW/INT to ESP32 |\n| Battery ADC | GPIO7 | Voltage divider to ESP32 Analog Pin |\n| LED        | GPIO 2    | Status Indication |\n| LED        | GPIO 3    | Status Indication |\n| LED        | GPIO 4    | Status Indication |\n| Push Button 1 | GPIO 12  | User Input |\n| Push Button 2 | GPIO 13 | User Input |\n| Push Button 3 | GPIO 22  | User Input |\n\n* refer circuit  [Schrödinger_Watch_schematics](https://github.com/nithinmathewjoji/Schrodinger-Clock-PCB-Watch-/blob/master/Schematics/schematic.pdf) for more detailed pin out.and pin assignments\n\n---\n\n## Sponsorship and Support\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pcbway.com/g/D6Z94Y\"\u003e\n    \u003cimg src=\"./PCBWay logo.png\" alt=\"PCBWay\" width=\"250\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n### 🙏 Thank You, PCBWay!\n\nThis project was proudly sponsored by [**PCBWay**](https://pcbway.com/g/D6Z94Y).  \n\nTheir 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.\n\nIf you're looking for reliable PCB prototyping, assembly, or 3D printing services, I highly recommend [**PCBWay**](https://pcbway.com/g/D6Z94Y).\n\n\n## Schematic \u0026 PCB Design\n\nThe Schrödinger Watch PCB was designed using **KiCad**. The schematic consists of:\n- ESP32-S3-WROOM microcontroller\n- RTC DS3231 with backup battery support\n- Power management with TP4056 and P-MOSFET\n- I2C OLED display\n- Battery voltage detection circuit\n- USB programmer (CP2102)\n\n![Image](https://github.com/user-attachments/assets/e0cc1d44-5b90-4ff5-a8fc-488cb06ea098)\n\n**PCB Highlights:**\n- **2-layer compact design**\n- **Optimized power trace routing**\n- **Thermal relief for heat dissipation**\n- **Dedicated test points for debugging**\n\n\n---\n\n\n## Known issues and Fix\n\nSchrödinger Watch ⌚ – ESP32-S3 DIY Smartwatch\n\nThis 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.\n\n\u003e ⚠️ **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.\n\nThese are hardware issues identified after assembly and testing:\n\n1. **Missing CE Connection on TP4056:**\n   - ⚠️ The CE (Chip Enable) pin was left floating, causing the charging IC to remain disabled.\n   - ✅ *Fix:* A patch wire has been added to tie CE to GND manually.\n\n2. **AMS1117 3.3V LDO Lacks Input/Output Capacitors:**\n   - ⚠️ Without these caps, voltage regulation is unstable (outputting ~2.4V instead of 3.3V).\n   - ✅ *Fix:* Patch capacitors (10µF input, 22µF output) have been manually added close to the LDO pins.\n\n3. **No Pull-Down Resistors for Pushbuttons:**\n   - ⚠️ Causes GPIO pins to float, leading to erratic behavior.\n   - ✅ *Fix:* External 10kΩ pull-down resistors were added to stabilize the inputs.\n\n4.  **Soldering Considerations:**\n   - The board is fully designed with **SMD components** for a compact layout.\n   - All components were **hand-soldered** using a soldering iron, without hot air or reflow equipment. Minor imperfections exist, but the board is fully functional.\n\n---\n\n#  What's Coming in Rev 2 (ETA: September 2025)\n\nRev 2 will be a major update with all hardware issues addressed and new features, including:\n\n- ✅ Proper power rail decoupling and CE management\n- ✅ Integrated **MPU6050** IMU for motion sensing\n- ✅ Improved button input system\n- ✅ Compact routing \n- ✅ Better power management and battery indication\n- ✅ Optional haptic feedback (planned)\n- ✅ Additional user-customizable GPIOs\n\n 📌 Disclaimer\n\nThis is a learning-oriented DIY project and should not be considered a finished consumer product. Use with care and contribute to make it better!\n\n\n\n\n##  Bill of Materials (BoM)\n\n| Component | Quantity | Specification |\n|-----------|----------|--------------|\n| ESP32-S3-WROOM | 1 | 40-pin module |\n| OLED Display | 1 | I2C, 128x64 |\n| DS3231 RTC | 1 | Real-time clock module |\n| Li-Po Battery | 1 | 3.7V, 500mAh |\n| TP4056 Module | 1 | Battery charger |\n| CP2102 | 1 | USB-to-serial |\n| Buzzer | 1 | 3V piezo |\n| Push Buttons | 3 | Momentary switch |\n| Resistors \u0026 Capacitors | Various | SMD components |\n\n---\n\n##  Firmware \u0026 Software\n\nThe firmware is written in **Arduino** using the ESP32 library. It supports:\n- RTC time synchronization\n- OLED display updates\n- Battery monitoring\n- Button interactions\n- Alarm system with buzzer\n\n\n\n---\n\n##  Assembly \u0026 Soldering Guide\n\n### Tools Required:\n- Soldering iron with fine tip\n- SMD soldering paste\n- Hot air reflow station (optional)\n- Multimeter for testing\n\n### Assembly Steps:\n1. Solder the **ESP32-S3-WROOM** module first.\n2. Attach **RTC DS3231** and connect alarm pin to ESP32.\n3. Solder **resistors, capacitors, and power circuits**.\n4. Mount **OLED display** and ensure I2C connectivity.\n5. Connect **battery and charging module**.\n6. Flash firmware and test.\n\n---\n\n##  Usage Guide\n\n### Powering On:\nPress and hold the power button. The watch will display the **time, battery status**, and active alarms.\n\n### Setting Time:\nUse the **serial monitor** to set the time in RTC using `setTime()`.\n\n### Battery Monitoring:\nBattery percentage is displayed on-screen and can be accessed through the serial monitor.\n\n### Alarm Function:\nThe RTC alarm triggers a buzzer sound at the set time.\n\n---\n\n##  Power Management\n\n- **Automatic Power Switching:** P-MOSFET allows seamless switching between USB and battery.\n- **USB Protection:** Schottky diode prevents reverse current flow.\n- **Low Power Mode:** ESP32 enters deep sleep when inactive to conserve power.\n\n---\n\n## Downloads\n-  **Download KiCad files:** [Schrödinger_Watch.kicad_pcb](https://github.com/nithinmathewjoji/Schrodinger-Clock-PCB-Watch-/tree/master/KiCAD-Files)\n-  **Download Code:** [Schrödinger_Watch.ino](path_to_file)\n-  **Schematics:** [Schrödinger_Watch_schematics](https://github.com/nithinmathewjoji/Schrodinger-Clock-PCB-Watch-/blob/master/Schematics/schematic.pdf)\n\n---\n\n## Firmware\n\n🛠️ Libraries Used\n\n- [U8g2](https://github.com/olikraus/u8g2)\n- [RTClib](https://github.com/adafruit/RTClib)\n\nInstall via Arduino Library Manager or PlatformIO.\n\n🚧 Known Hardware Issues (Rev 1)\n\n- ❌ No CE connection to TP4056 (manually patched)\n- ❌ No input/output capacitors on MIC39100/AMS1117 LDO (caused unstable voltage)\n- ❌ No pull-down resistors for switches (using `INPUT_PULLDOWN` in firmware)\n\nThe 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:\n\n- ❌ Push Buttons are read but not interfaced with any logic or user interaction yet.\n- ❌ RTC Alarm Interrupt is connected (GPIO 11), but not yet used in the firmware.\n- ❌ ESP32 Deep Sleep functionality is not implemented.\n\nThese 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.\n\n# 💾 Firmware Code\n\n```cpp\n#include \u003cWire.h\u003e\n#include \u003cU8g2lib.h\u003e\n#include \u003cRTClib.h\u003e\n\n// 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 ......\n// all issues will be fixed as a progress please bare with me , but if you have the knowledge then happy to recieve help \n\n// I2C Pins\n#define SDA_PIN 20\n#define SCL_PIN 21\n\n// GPIO Definitions\n#define LED_PIN       2\n#define BATTERY_ADC   7\n#define RTC_ALARM_PIN 11\n\n#define BUTTON1 12\n#define BUTTON2 13\n#define BUTTON3 14\n\nU8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);\nRTC_DS3231 rtc;\n\nvoid setup() {\n  Serial.begin(115200);\n\n  Wire.begin(SDA_PIN, SCL_PIN);\n  u8g2.begin();\n\n  pinMode(LED_PIN, OUTPUT);\n  pinMode(RTC_ALARM_PIN, INPUT);\n  pinMode(BATTERY_ADC, INPUT);\n\n  pinMode(BUTTON1, INPUT_PULLDOWN);\n  pinMode(BUTTON2, INPUT_PULLDOWN);\n  pinMode(BUTTON3, INPUT_PULLDOWN);\n\n  if (!rtc.begin()) {\n    u8g2.clearBuffer();\n    u8g2.setFont(u8g2_font_ncenB08_tr);\n    u8g2.drawStr(0, 20, \"RTC Not Found\");\n    u8g2.sendBuffer();\n    while (1);\n  }\n\n  if (rtc.lostPower()) {\n    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));\n  }\n\n  u8g2.clearBuffer();\n  u8g2.setFont(u8g2_font_6x10_tr);\n  u8g2.drawStr(0, 10, \"Schrodinger Watch\");\n  u8g2.sendBuffer();\n  delay(1000);\n}\n\nvoid loop() {\n  DateTime now = rtc.now();\n\n  char timeStr[9];\n  sprintf(timeStr, \"%02d:%02d:%02d\", now.hour(), now.minute(), now.second());\n\n  float batteryVoltage = analogRead(BATTERY_ADC) * (3.3 / 4095.0) * 2;  // Adjust based on divider\n  char voltStr[10];\n  dtostrf(batteryVoltage, 4, 2, voltStr);\n\n  u8g2.clearBuffer();\n  u8g2.setFont(u8g2_font_logisoso38_tr);\n  u8g2.drawStr(0, 50, timeStr);\n  u8g2.setFont(u8g2_font_6x10_tr);\n  u8g2.drawStr(0, 62, (\"BAT: \" + String(voltStr) + \"V\").c_str());\n  u8g2.sendBuffer();\n\n  digitalWrite(LED_PIN, !digitalRead(LED_PIN)); \n\n  if (digitalRead(BUTTON1)) Serial.println(\"Button 1 Pressed\");\n  if (digitalRead(BUTTON2)) Serial.println(\"Button 2 Pressed\");\n  if (digitalRead(BUTTON3)) Serial.println(\"Button 3 Pressed\");\n\n  delay(1000);\n}\n```\n##  Contributing\n\nWe welcome contributions! If you’d like to improve the watch, please:\n1. Fork the repository.\n2. Create a new branch.\n3. Submit a Pull Request with details.\n\n---\n\n##  License\n\nThis project is licensed under the **MIT License**. Feel free to use, modify, and distribute it with proper attribution.\n\n---\n\n## Acknowledgments\n\nSpecial thanks to the **open-source hardware community** for inspiring this project!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnithinmathewjoji%2Fschrodinger-clock-pcb-watch-","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnithinmathewjoji%2Fschrodinger-clock-pcb-watch-","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnithinmathewjoji%2Fschrodinger-clock-pcb-watch-/lists"}