Note: This repo has submodules, so if cloning, it's best to use the recursive option.
The ZC95 is a DIY four channel EStim box with similar form factor & output design to the MK312-BT (which in turn is a clone of the ET-312B). Unlike the 312B, it uses 2x Raspberry Pico microcontrollers instead of an ATMEGA16, and the firmware is open source and mostly written in C++.
The box can be controlled remotely via a Python GUI, and run Lua scripts uploaded to it, either using RS232 serial or WiFi if a Pico-W is used for the main MCU.
Compared to an MK312-BT, it has 2 extra channels, two trigger inputs (think predicament bondage), and an accessory port. It is missing bluetooth and, so far, most of the patterns of the 312. Audio input is possible with an extra/optional board.
Additionally, if a 433MHz transmitter is fitted it can be used to control certain types of shock collars from some patterns.
It's mostly built using through hole parts, with one PCB being mostly SMD - but using parts available through the JLCPCB SMT assembly service. The only exception to this is the ADC for the front panel which is a SOIC-16 footprint so should still be easy enough for most to solder.
The ZC95 consists of 4-5 PCBs:
- Front panel - no traces, just text / mounting holes
- Front panel controls - 4x POTs and associated ADC, 1x rotary encoder and 6 serial RGB LEDs
- Main board - power supply / charging, MCU for display / pattern generation, button input etc
- Output board ("ZC624 Output module") - 4 channel output generation controlled via SPI from the main board. Designed for production using the SMT assembly service at JLCPCB, with a handful of extra through hole parts also requiring hand soldering.
- (Optional) audio input board - allows the 3.5mm "Aux" port on the front panel to be used for audio input
The primary reason for having separate PCBs for the main and output board is for future flexibility - most of the time & expense is the firmware, case, display, controls, etc., so being able to test new output designs whilst being able to keep all of that should be an advantage. I'm well aware the output design currently used is known to have flaws, mostly stemming from its lack of feedback (which applies equally to the 312b it was taken from). A challenge for another day.
The zc624 output module can also be used standalone and controlled from an Arduino (tested with an ESP32), but this is not ideal for a few reasons, and not the focus of this project.
- Combo pattern? Having, e.g., waves on channels 1+2 plus something like TENS on 3+4 would be good
- Save pattern settings on exit?
- Maybe a better power switch? although still being able to get all the parts for the main board from LCSC is good
- Low battery shutoff
May do some of this, all of this, or none of this!
- Combine main, output and audio boards into one, and probably switch to almost all SMD so it can be assembled by JLCPCB
- Probably remove "Aux" socket and swap for separate "Serial" and "Audio" sockets
- Use a lithium battery pack instead of a 12v SLA
- Use a USB charger
- Maybe a smaller, 3D printed case. Probably keeping the same width/weight though
-
Can hang on entering WiFi setup (AP) mode due to bad choice of MOSFET Q1 (see #25 & #46).
Fix:
- Fit a Schottky diode (e.g. 1N5819) in place of Q1 - see build notes
Workarounds:
- Power the Pico over USB whilst entering AP mode (power box on first, then connect USB)
- Directly connect VSYS on the Pico to 5v. Do not connect the box to USB whilst switched on if doing this.
-
Battery gauge is pretty hopeless
-
Depending on the pattern, the LEDs aren't very useful - either Red or Green, with no dimming depending on power