The purpose of this schematic is to control a DC motor that runs at 8V max. That is why I chose 4 N-channel mosfets in the H bridge. P-channels would not fully activate at voltages above -10Vgs but the N-channels can handle 18V at the gate.
The 5v switches represent an Arduino's digital output pins. One to turn forward, one for reverse. To prevent a failure scenario where both pins are HIGH I added a transistor that prevents current from flowing through the optocoupler on the second half bridge.
Does this circuit make sense? I'm not an electronics engineer, just a hobbyist and have doubts about how effective the gate driving circuit is of the mosfets.
Please don't use non perpendicular lines and draw in a clearer software if possible. Its quite hard to read.
What is the point of the push-pull BJTs? With the optocoupler you could drive the nmos gates directly. If you need more current to drive the gates (unlikely for a small motor), I suggest you buy dedicated gate drivers. They are tested and not expensive.
If you have the 18V available already, using the optocouplers directly would be a lot simpler.
DC motors have high inductance, meaning that the current going over it will resist to change. When you turn off a pair of nmos, current will likely start flowing over the the other pair, from source to drain. Depending on the spec of your nmos, you may consider using diodes in parallel to nmos to carry this current. Obviously these diodes should be reverse biased during normal operation.
Are you trying to run your motor at 5v? that's what it reads to me.
If your current draw is under like 700ma, Consider a bridge driver like the L9110, it'll get you the with minimal effort. There are other drivers out there as well. https://www.adafruit.com/product/4489