Simple Arduino Hulda Clark ZAPPER with Timer function

0 10322 Easy

  Hulda Clark was a controversial alternative health practitioner who claimed that the use of a device called the "Zapper" could cure a wide range of diseases by eliminating parasites and toxins from the body. The Hulda Clark Zapper is a simple electronic device that generates low-voltage(usually dual polarity 5V square wave with a DC component of 2.5V) at a frequency of 30 kHz. The device typically consists of a 9-volt battery, a pulse generator circuit, and two copper handles or electrodes, wich user holds them in their hands or places them on different parts of the body. 

Original Zapper consist 555 timer IC, NPN transistor, and few resistors and capacitors.
 The device presented in this video generates a signal identical to that of the original, but is made using a microcontroller. 

So, in addition to being simpler to make, it also gives us the opportunity to add a small display and a timer so that we can continuously monitor the process of applying the therapy.
  So the device is extremely simple and consists of only a few components:
 - Arduino Nano Microcontroller
 - LCD Display with ST7920 chip and 128x64 pixel resolution
 - Active Buzzer
 - Button
 - Battery
 - and metal electrodes

And now let's see how the device works in real conditions:
 When switching on, a message appears to press the button to start the therapy. By pressing the button, a short sound is heard indicating the start.
 As I mentioned before, the device also has a timer function. According to the description from the publication "Dr Clark's Life Treatment", the therapy lasts three times for 7 minutes with a pause of 20 minutes between treatments. 

This timing data is embedded in the code, whereby there are three phases of therapy.
 After the therapy is finished, the display shows the prompt message to press a button to start a new therapy.
The most important thing is to check that the shape of the signal corresponds to that of the original device designed by Hulda Clark. I will use an oscilloscope for this purpose.

 And finally, conclusion: I made and analyzed this device only from a technical point of view. It's important to note that there is limited scientific evidence to support the claims made by Hulda Clark regarding the Zapper and its effectiveness in treating diseases. Many of her claims are not based on rigorous scientific research or have been debunked by independent studies. If you are considering using a Zapper or any alternative health device, it's always advisable to consult with a qualified healthcare professional who can provide evidence-based advice and guidance.

  The device is installed in a suitable box made of PVC board with a thickness of 3 and 5 mm and covered with self-adhesive colored wallpaper.

//Arduino ZAPPER

#include <Arduino.h>
#include <U8g2lib.h>

//U8G2_ST7565_NHD_C12864_1_4W_SW_SPI u8g2(U8G2_R0, 10, 9, 12, 11, U8X8_PIN_NONE);
//U8G2_SSD1306_128X64_NONAME_2_SW_I2C u8g2 (U8G2_R0, A5, A4);
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
byte inPin1 = 5; // digital input sw-1
byte outPin1 = 7; // digital output sw-3
byte time_healing = 7; //time healingenia (30kHz generation)
char time_healing_str[3];
byte time_healing1;
byte time_pause = 20; // break time until next healing in min.
byte time_pause1;
char time_pause_str[3];
byte cycle = 4;
char cycle_str[3];
byte interruptPin = 2;
byte ZapperPin = 4;
char* message;

void setup() {
   pinMode(inPin1, INPUT_PULLUP); //setting the pin as a digital input
   pinMode(outPin1, OUTPUT); //output to the squeak
   pinMode(13, OUTPUT);
   digitalWrite (13, LOW); //turn on LCD backlight
   pinMode(8, OUTPUT);
   digitalWrite (8, LOW); // giving mass to power the LCD
   pinMode(ZapperPin, OUTPUT); //declaration of Zapper output port
   digitalWrite (ZapperPin, LOW);

void loop() {
   //waiting for Start
   cycle = 0;
   digitalWrite(inPin1, HIGH);
   do {
     message = "  PRESS START";
   } while (digitalRead(inPin1) == HIGH);
   //Getting started
   cycle = 3; beep(); Work();
   beep(); Pause();
   cycle = 2; beep(); Work();
   beep(); Pause();
   cycle = 1; beep(); Work();
   beep(); delay(50); beep(); delay(50); beep();
   time_healing1 = 0; time_pause1 = 0;

void Work() {
   time_healing1 = time_healing + 1;
   message = "HEALING";
   for (byte j = 1; j <= time_healing; j++) {
     strcpy(time_healing_str, u8x8_u8toa(time_healing1, 2)); // convert healing1 to a string with 2 digits
   time_healing1 = 0;

void Pause() { // generate pause
   time_pause1 = time_pause + 1;
   message = "PAUSE";
   byte s, m, th;
   for (th = 0; th < time_pause; th++) {
     strcpy(time_pause_str, u8x8_u8toa(time_pause1, 2)); // convert pause to string with 2 digits
     for (s = 0; s < 60; s++) {
       delay (1000);
   time_pause1 = 0;

void Generate_30kHz() {
   for (byte z = 1; z < 60; z++ ) {
     for (int i = 1; i < 30000; i++) {
       for (byte j = 1; j < 67; j++) {
         PORTD = B00010000;

       for (byte j = 1; j<66; j++) {
         PORTD = B00000000;

void beep() {
   digitalWrite(outPin1, HIGH);
   digitalWrite(outPin1, LOW);

void DisplayLCD(){
   strcpy(cycle_str, u8x8_u8toa(cycle, 1)); // convert cycle to string with 1 digit
   do {
     u8g2.drawBox(0, 0, 128, 10); // draw a black background
     u8g2.setDrawColor(2); // select the writing mode
     u8g2.setFontMode(1); // white on black
     u8g2.drawStr(40, 8, " ZAPPER");
     u8g2.setDrawColor(1); //return to writing mode
     u8g2.setFontMode(1); //black on white
     if (cycle == 0) {u8g2.drawStr(20, 40, message);}
     if (cycle > 0) {
     //if (time_healing1 > 0 or time_pause1 > 0) {
       u8g2.drawStr(15, 50, message);
       u8g2.drawStr(95, 50, "min.");
       if (time_pause1 > 0 ) { u8g2.drawStr(70, 50, time_pause_str);}
       if (time_healing1 > 0 ) {u8g2.drawStr(70, 50, time_healing_str);}
       u8g2.drawStr(55, 30, cycle_str);
   } while ( u8g2.nextPage() );
All Rights