Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

ESP32-Based Battery-Powered Hyperhidrosis Treatment Device with OLED Display

View and Edit Project In Cirkit DesignerImage of ESP32-Based Battery-Powered Hyperhidrosis Treatment Device with OLED Display

Circuit Documentation

Summary

This document provides a detailed overview of a circuit designed for hyperhidrosis treatment. The circuit includes an ESP32 microcontroller, an OLED display, a real-time clock (RTC), a rotary potentiometer, a pushbutton, a LiPoly battery, a TP4056 battery charger, an LM2596 voltage regulator, and an AMS1117 3.3V voltage regulator. The circuit is designed to control the current flow to electrodes for a specified treatment duration, with user input for current adjustment and session control.

Component List

0.96" OLED

TP4056

LiPoly Battery (1300mAh)

RTC DS3231

LM2596

AMS1117 3.3

Rotary Potentiometer

Red Pushbutton

Aluminum Sheet

ESP32 Mini

Wiring Details

0.96" OLED

TP4056

LiPoly Battery (1300mAh)

RTC DS3231

LM2596

AMS1117 3.3

Rotary Potentiometer

Red Pushbutton

Aluminum Sheet

ESP32 Mini

Code Documentation

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>

// Pin Definitions
#define POT_PIN 34
#define BUTTON_PIN 0
#define ELECTRODE_PIN_POS 25 // Positive electrode
#define ELECTRODE_PIN_NEG 26 // Negative electrode
#define BATTERY_PIN 35

// OLED Display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// RTC
RTC_DS3231 rtc;

// Variables
int sessionTime = 600; // 10 minutes session
int currentFlow = 0;
bool sessionActive = false;
unsigned long startTime;
unsigned long currentTime;

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

  // Initialize OLED
  if (!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  display.display();
  delay(2000);
  display.clearDisplay();

  // Initialize RTC
  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  // Initialize Pins
  pinMode(POT_PIN, INPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(ELECTRODE_PIN_POS, OUTPUT);
  pinMode(ELECTRODE_PIN_NEG, OUTPUT);
  pinMode(BATTERY_PIN, INPUT);

  // Setup PWM channels
  const int freq = 5000;
  const int ledChannel = 0;
  const int resolution = 8;
  ledcSetup(ledChannel, freq, resolution);
  ledcAttachPin(ELECTRODE_PIN_POS, ledChannel);

  // Display initial message
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println