December 15, 2025

Active / Ideal Full Bridge Rectifier

This circuit is an Active / Ideal Full Bridge Rectifier using IC TEA2208T .

It can rectifies the AC voltage without any voltage drop, unlike the ordinary bridge rectifier that have voltage drop 1 to 2V.

Input voltage= 22V to 264V AC

Maximum Current = 6A 

Can be used for 50Hz, 60Hz or 400Hz (up to 1000Hz).

 

Active / Ideal Full Bridge Rectifier using IC TEA2208T

Parts list:

IC TEA2208T

MOSFET FDD8N50NZ (4pcs) 

Resistor 10K (4pcs)

Capacitor 220nF (2pcs)  

Capacitor 2.2uF  

 

Circuit:

You can use any other N-channel MOSFET with proper voltage and low internal resistance (low Rds ON).

Active / Ideal Full Bridge Rectifier using IC TEA2208T

 

You can download the Gerber file of this PCB from PCBWay:

 https://www.pcbway.com/project/shareproject/Active_Ideal_Full_Bridge_Rectifier_c911baa3.html


Watch the Video for more details: 

 


 

December 11, 2025

My Mailboxs

I would greatly appreciate your support in the form of test equipment, electronics related books, devices, or any items that can assist me in my future engineering projects: 

 

My Mailbox in USA 

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: 4289 EXPRESS LANESUITE - UM1B6476 

City: Sarasota 

State: Florida 

Zip Code: 34249-2602 

 

My Mailbox in UK 

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: Unit 18 Cable street - UM1B6476 

City: Wolverhampton 

State: West Midlands 

Zip Code: WV2 2RJ 

 

My Mailbox in Germany 

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: Goethestraße House No 21 - UM1B6476 

City: Leverkusen 

State: Duitsland 

Zip Code: 51379

 

My Mailbox in India 

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: 66 /16, Hoolaganj The Mall Road - UM1B6476

City: Kanpur

State: Uttar Pradesh

Zip Code: 208001

 

My Mailbox in Turkey

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: Haleplioglu Lojistik LTD, 1548. Sokak, No: 29A - UM1B6476

City: Istanbul

District: ESENYURT

Mahalle: Selahaddin Eyyubi 

Zip Code: 34517

 

My Mailbox in UAE

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: Wasil Office Air - Jiddah St - UM1B6476

City: Al Jerf Industrial 3

State: Ajman

Zip Code: 00000


My Mailbox in China

Suite Number: UM1B6476 

Name: Mousa Alkaabi 

Address: 惠城区金泽物流园二期一号楼4楼中田物流 (13791) - UM1B6476

City: 惠州市 (Huizhou)

State: 广东省 (Guangdong)

Zip Code: 516000

 


 

November 19, 2025

Tester for Touch Screen Digitizer without using microcontroller

By using this circuit you can Test the 4-wire Resistive Touch Screen Digitizer sensor without using Arduino or any other microcontroller.

Tester for Touch Screen Digitizer without using microcontroller


Tester for Touch Screen Digitizer without using microcontroller

Parts list:

IC LM3914(2pcs)

IC CD4049

IC CD4053(2pcs)

IC CD4047

LED 5mm (45pcs) 

Multiturn potentiometer 10K (2pcs)

Capacitor 1uF (2pcs)

Capacitor 100nF

Resistor 10K (9pcs) 

Resistor 1K (2pcs) 

ON/OFF switch 

IC Socket 18pin (2pcs) 

IC Socket 16pin (3pcs) 

IC Socket 14pin 

4wire Resistive touch screen digitizer sensor 

9V Battery with battery cable/holder 

 

Circuit:

 

Tester for Touch Screen Digitizer without using microcontroller

You can download the Gerber file of the PCB from PCBWay:

https://www.pcbway.com/project/shareproject/Tester_for_Touch_Screen_Digitizer_without_using_microcontroller_12346bb9.html

Tester for Touch Screen Digitizer without using microcontroller

Watch the video:

 


 

November 12, 2025

Voltage regulator with high input voltage using LR8

This is a Voltage regulator with high input voltage up to 450V DC using IC LR8N3

Maximum output current is between 10mA to 30mA. 

Minimum input voltage is 13.2V.

Output voltage is adjustable between 1.2V up to 435V DC, depends on the value of R1 and R2.

 

Voltage regulator with high input voltage using LR8

Parts list:

IC LR8N3

Diode 1N4007

Resistor 68K (2pcs)

Resistor R1 and R2 (calculate the value by formula below)

Bridge rectifier DB107

LED 

Capacitor 10uF 400V

Capacitor 1000uF 16V (for 12V output)

Capacitor 100nF 


Circuit for 12v output:

For 12v output you need 16v capacitor, For 24v output you need 35v capacitor, For 350v output you need 400v capacitor, and so on.

Voltage regulator with high input voltage using LR8

Circuit for adjustable output:

Voltage regulator with high input voltage using LR8

 

Formula to calculate the output voltage based on value of R1 and R2 in ohm:

Voltage regulator with high input voltage using LR8

Calculation for 12V output, (R1 must be 51K and R2 must be 330K):

Voltage regulator with high input voltage using LR8

You can download the Gerber file of the PCB from PCBWay:

 https://www.pcbway.com/project/shareproject/Voltage_Regulator_LR8_57b21cb8.html

Voltage regulator with high input voltage using LR8

Watch the video:

 


 

October 29, 2025

DC UPS for router and printer

This is a DC Uninterruptible Power Supply (UPS) for router and printer using capacitors instead of battery.

It running the load for very short time (seconds) to solve the problem of ATS delay time.


DC UPS for router and printer

DC UPS for router and printer

 

DC UPS for router and printer 

 

Parts list:

Capacitor 150uF 450V or 400V (11pcs)

Resistor 100 ohm 25 watt

Resistor 100K 0.25 watt (2pcs) 

LED 5mm

Diode 10A10

Bridge rectifier D35SB100

Connector HB-825

AC Fuse 10A

DC fuse 10A

Socket SS-801 (2pcs)


Circuit: 

DC UPS for router and printer

You can download the Gerber file of the PCB from PCBWay:

 https://www.pcbway.com/project/shareproject/DC_UPS_for_Printers_and_WiFi_Routers_57e49864.html

DC UPS for router and printer

Formula to calculate the running time depend on the load and size of the capacitors:

 

DC UPS for router and printer 

Watch the Video:


 

August 27, 2025

Multilevel inverter Sinewave 12V to 220V

This circuit is an Unusual Inverter with Staistep output waveform that convert 12V or 24V DC into 220V AC. It is called Multilevel inverter.

Maximum output power is less than 240W.

Inverter staistep waveform 12V to 220V

Inverter staistep waveform 12V to 220V
 

Sinewave after using low pass LC filter:

Inverter staistep waveform 12V to 220V

Parts list:

IC NE555

IC CD4017(2pcs)

IC 7812 

Optocoupler PC817 (6pcs) 

MOSFET IRFZ44n (6pcs) 

Diode 10A10 (4pcs) 

Diode 1N4148 (8pcs) 

Capacitor 2200uF 10V (4pcs) 

Capacitor 680uF 16V 

Capacitor 100nF (4pcs) 

Capacitor 100nF 400V (2pcs) 

Capacitor 1uF 400V 

Inductor 100uH 

Resistor 10K (8pcs)

Resistor 1K (6pcs)

Resistor 100 ohm (6pcs)

Resistor 10 ohm (2pcs)

Switch

IC Socket 8dip

IC Socket 16dip (2pcs)

Center taped transformer (for 4 x 6v batteries use 18-0-18 and for 4 x 3.7v batteries use 9-0-9)

Battery Cable


Circuit:

 

Inverter staistep waveform 12V to 220V

You can download the Gerber file of this PCB from PCBWay:

 https://www.pcbway.com/project/shareproject/12V_to_220V_Inverter_7ebb6e48.html

Inverter staistep waveform 12V to 220V

 

Inverter staistep waveform 12V to 220V

Video: 

 


 

August 12, 2025

LED Driver Circuit 220V Using ICL1103 / RM9003A

This is a 220V constant current LED driver circuit using IC RM9003 (or ICL1103).

 

LED Driver Circuit 220V Using ICL1103 / RM9003A


LED Driver Circuit 220V Using ICL1103 / RM9003A

Parts list:

IC RM9003 (Or ICL1103)

Bridge rectifier MB10S

Capacitor 4.7uF 400V (Optional) 

Resistor (calculate the value by formula)


Circuit:

LED Driver Circuit 220V Using ICL1103 / RM9003A
 

You can connect a 4.7uF 400V Capacitor to the output of the bridge rectifier (Optional).

LED Driver Circuit 220V Using ICL1103 / RM9003A

You can download the Gerber file of this PCB from PCBWay: https://www.pcbway.com/project/shareproject/220V_LED_Driver_7c8da267.html

LED Driver Circuit 220V Using ICL1103 / RM9003A

Video:

 


July 30, 2025

Arduino 3-phase Inverter 12V to 380V

This is a simple 3-phase Inverter using Arduino to convert 12V DC into 380V AC.

It has 3 push button: 

1-Forward 

2-Reverse

3-Stop (turn OFF) 

Forward and Reverse buttons used when the load is motor by swapping two phases. 

Output waveform is square wave and maximum power depends on the size of the transformers and MOSFETs.

 

Arduino 3-phase Inverter 12V to 380V

Parts list:

Arduino (UNO or MEGA) 

IC 7805  

LCD Display 16x2 with I2C 

Transformer center taped 9V-0-9V / 220V (3pcs)

MOSFET IRFZ44n (6pcs)

Optocoupler PC817 (6pcs)

Resistor 91K 

Resistor 10K (7pcs)

Resistor 300 ohm (6pcs)

Resistor 1K (6pcs) 

Capacitor 1000uF 16v (2pcs) 

Capacitor 100nF (2pcs) 

Heatsink for MOSFETs (6pcs)

12V Battery 

Battery connecting cable 

 

Circuit:

If you want to use Arduino UNO instead of Arduino MEGA, you have to connect the pin A4 of the Arduino UNO to SDA of the LCD and pin A5 of the Arduino UNO to SCL of the LCD, Rest of the wiring and even the code remains the same!

Arduino 3-phase Inverter 12V to 380V

Video:

 


Code:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimerOne.h>

// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Adjust I2C address if needed

// Phase pins
const int phaseA = 2;
const int phaseB = 3;
const int phaseC = 4;
const int phaseA_inv = 5;
const int phaseB_inv = 6;
const int phaseC_inv = 7;

// Buttons (Active HIGH)
const int btnForward = 8;
const int btnReverse = 9;
const int btnStop = 10;

// Battery sensing
const int battPin = A0;
const float battDividerRatio = 10;
const float lowCutOff = 10.5;
const float restoreVoltage = 11.0;

// State variables
volatile bool inverterOn = false;
volatile bool reverseMode = false;

// Debounce tracking
bool lastForwardState = LOW;
bool lastReverseState = LOW;
bool lastStopState = LOW;
unsigned long lastDebounceForward = 0;
unsigned long lastDebounceReverse = 0;
unsigned long lastDebounceStop = 0;
const unsigned long debounceDelay = 200;

// Phase control
volatile int phaseStep = 0;

// Correct symmetrical 6-step sequence
bool seqForward[6][3] = {
  {1,0,0},  // Step 1
  {1,1,0},  // Step 2
  {0,1,0},  // Step 3
  {0,1,1},  // Step 4
  {0,0,1},  // Step 5
  {1,0,1}   // Step 6
};

void setup() {
  lcd.init();
  lcd.backlight();

  pinMode(phaseA, OUTPUT);
  pinMode(phaseB, OUTPUT);
  pinMode(phaseC, OUTPUT);
  pinMode(phaseA_inv, OUTPUT);
  pinMode(phaseB_inv, OUTPUT);
  pinMode(phaseC_inv, OUTPUT);

  pinMode(btnForward, INPUT);  // Active HIGH (use pull-down resistors)
  pinMode(btnReverse, INPUT);
  pinMode(btnStop, INPUT);

  lcd.setCursor(0, 0);
  lcd.print("System Init...");
  delay(1000);
  lcd.clear();

  // Timer1 for 50Hz
  Timer1.initialize(3333); // 300Hz steps = 50Hz fundamental
  Timer1.attachInterrupt(stepPhases);
}

void loop() {
  float battVoltage = readBatteryVoltage();

  // Display battery voltage
  lcd.setCursor(0, 0);
  lcd.print("Battery:");
  lcd.print(battVoltage, 2);
  lcd.print(" V   ");

  // Low battery cutoff
  if (battVoltage < lowCutOff) {
    inverterOn = false;
  }

  // --- Forward Button ---
  bool currentForward = digitalRead(btnForward);
  if (currentForward == HIGH && lastForwardState == LOW && (millis() - lastDebounceForward > debounceDelay)) {
    inverterOn = true;
    reverseMode = false;
    lastDebounceForward = millis();
  }
  lastForwardState = currentForward;

  // --- Reverse Button ---
  bool currentReverse = digitalRead(btnReverse);
  if (currentReverse == HIGH && lastReverseState == LOW && (millis() - lastDebounceReverse > debounceDelay)) {
    inverterOn = true;
    reverseMode = true;
    lastDebounceReverse = millis();
  }
  lastReverseState = currentReverse;

  // --- Stop Button ---
  bool currentStop = digitalRead(btnStop);
  if (currentStop == HIGH && lastStopState == LOW && (millis() - lastDebounceStop > debounceDelay)) {
    inverterOn = false;
    lastDebounceStop = millis();
  }
  lastStopState = currentStop;

  // Status display
  lcd.setCursor(0, 1);
  if (battVoltage < lowCutOff) {
    lcd.print("Battery is LOW ");
  } else {
    if (!inverterOn) {
      lcd.print("Motor Stopped  ");
    } else {
      if (reverseMode) lcd.print("Reverse         ");
      else lcd.print("Forward         ");
    }
  }
}

// Averaged battery voltage reading
float readBatteryVoltage() {
  long sum = 0;
  for (int i = 0; i < 10; i++) {
    sum += analogRead(battPin);
    delay(2); // small delay between readings
  }
  float adcValue = sum / 10.0;
  return (adcValue * 5.0 / 1023.0) * battDividerRatio;
}

// Timer1 ISR for phases
void stepPhases() {
  if (!inverterOn) {
    // All outputs off
    digitalWrite(phaseA, LOW);
    digitalWrite(phaseB, LOW);
    digitalWrite(phaseC, LOW);
    digitalWrite(phaseA_inv, LOW);
    digitalWrite(phaseB_inv, LOW);
    digitalWrite(phaseC_inv, LOW);
    return;
  }

  bool A = seqForward[phaseStep][0];
  bool B = seqForward[phaseStep][1];
  bool C = seqForward[phaseStep][2];

  digitalWrite(phaseA, A);
  digitalWrite(phaseB, B);
  digitalWrite(phaseC, C);
  digitalWrite(phaseA_inv, !A);
  digitalWrite(phaseB_inv, !B);
  digitalWrite(phaseC_inv, !C);

  if (reverseMode) {
    phaseStep--;
    if (phaseStep < 0) phaseStep = 5;
  } else {
    phaseStep++;
    if (phaseStep > 5) phaseStep = 0;
  }
}


 

July 27, 2025

Arduino inverter 12V to 220V with LCD Display

This is a simple inverter to convert 12V DC to 220V AC with LCD Display to show the battery voltage. 

It has low battery cut off voltage at 10.5V to protect the battery from over discharge. 

The output is square waveform and the maximum output power depends on the power of your transformer and also the MOSFETs and heatsink's size. 

 

Arduino inverter 12V to 220V

Arduino inverter 12V to 220V with LCD Display

Parts list:

Arduino (UNO or MEGA) 

IC 7805  

LCD Display 16x2 with I2C 

Transformer center taped 9V-0-9V / 220V 

MOSFET IRFZ44n (2pcs)

Optocoupler PC817 (2pcs)

Resistor 91K 

Resistor 10K (3pcs)

Resistor 300 ohm (2pcs)

Resistor 1K (3pcs) 

Capacitor 1000uF 16v (2pcs) 

Capacitor 100nF (2pcs) 

Heatsink for MOSFETs (2pcs)

12V Battery 

Battery connecting cable 

 

Circuit:

If you want to use Arduino UNO instead of Arduino MEGA, you have to connect the pin A4 of the Arduino UNO to SDA of the LCD and pin A5 of the Arduino UNO to SCL of the LCD, Rest of the wiring and even the code remains the same!

Arduino inverter 12V to 220V with LCD Display

Video: 

 


Code: 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/io.h>
#include <avr/interrupt.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Try 0x3F if 0x27 doesn’t work

const int square1 = 8;
const int square2 = 9;
const int buttonPin = 2;

volatile bool waveState = false;       // Toggles HIGH/LOW
volatile bool outputEnabled = false;   // ON/OFF by user
bool voltageOK = true;                 // Low voltage check

const unsigned int deadTimeMicros = 200;
const float voltageThreshold = 10.5;   // Cutoff threshold

unsigned long lastLCDUpdate = 0;
const unsigned long lcdInterval = 200;

unsigned long lastButtonTime = 0;
const unsigned long debounceDelay = 200;

void setup() {
  pinMode(square1, OUTPUT);
  pinMode(square2, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);

  digitalWrite(square1, LOW);
  digitalWrite(square2, LOW);

  lcd.init();
  lcd.backlight();
  lcd.clear();

  attachInterrupt(digitalPinToInterrupt(buttonPin), toggleOutput, FALLING);

  // Timer1 for 50Hz waveform (10ms toggle = 20ms full cycle)
  noInterrupts();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 2499;  // 10ms at 16MHz / 64
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  interrupts();
}

ISR(TIMER1_COMPA_vect) {
  if (outputEnabled && voltageOK) {
    waveState = !waveState;
    if (waveState) {
      digitalWrite(square2, LOW);
      delayMicroseconds(deadTimeMicros);
      digitalWrite(square1, HIGH);
    } else {
      digitalWrite(square1, LOW);
      delayMicroseconds(deadTimeMicros);
      digitalWrite(square2, HIGH);
    }
  } else {
    digitalWrite(square1, LOW);
    digitalWrite(square2, LOW);
  }
}

void loop() {
  // Update LCD every 200ms
  if (millis() - lastLCDUpdate >= lcdInterval) {
    lastLCDUpdate = millis();

    int adc0 = analogRead(A0); delay(2);
   
    float v0 = adc0 * (5.0 / 1023.0)*10;
   

    // Voltage check
    voltageOK = (v0 >= voltageThreshold);

    // Display voltages
    lcd.setCursor(0, 0);
    lcd.print("BATTERY: ");
    lcd.print(v0, 2);
    lcd.print(" V     ");


    // Show status
    lcd.setCursor(1, 1);
    if (!voltageOK) {
      lcd.print("BATTERY IS LOW");
    } else {
      lcd.print(outputEnabled ? "INVERTER IS ON " : "INVERTER IS OFF");
    }
  }
}

void toggleOutput() {
  unsigned long now = millis();
  if (now - lastButtonTime > debounceDelay) {
    outputEnabled = !outputEnabled;
    lastButtonTime = now;
  }
}