Review of my circuit before build

Hi guys! I’m looking for some wise feedback on the circuit I’ve just designed to find out if it’s viable and I have to make sure that it doesn’t blow up or overheat.

The circuit includes:

An Arduino Uno (Arduino Micro in later builds), a DRV2605L haptic motor controller, 3x IRLZ44N N-channel MOSFETs, 3x 2-5V 100mA ERM haptic motors, 3x 10k ohm pulldown resistors in between gate and source on MOSFETS, 3x standard 5mm LEDs and 150 ohm resistors in series with each motor.

The code on the Arduino turns on one MOSFET at a time (acting as a switch) and the DRV2605L drives motors and LEDs giving visual feedback when vibration occurs, like so in this example:

void setup() {
  // initialize digital pins
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);

  drv.setWaveform(0, effect);  // play effect 
  drv.setWaveform(1, 0);       // end waveform
  drv.go();  // play the effect!
  delay(100);  // wait a bit

  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);

  drv.setWaveform(0, effect);  // play effect 
  drv.setWaveform(1, 0);       // end waveform
  drv.go();  // play the effect!
  delay(100);  // wait a bit

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);

  drv.setWaveform(0, effect);  // play effect 
  drv.setWaveform(1, 0);       // end waveform
  drv.go();  // play the effect!
  delay(100);  // wait a bit
}

The purpose of this piece of code is to switch motors periodically using MOSFETs, creating a swipe effect rather than activating all motors.

I’m also worried that delays in the loop might be shorter than the vibration effect played, which could cause early switching of MOSFETs and the motor controller could burn out.

Included a basic Fritzing diagram of the circuit.

Any feedback is appreciated. Thanks.

Do yourself and everyone else a favor by learning to draw proper schematic diagrams, and by avoiding Fritzing. The diagram you posted has serious errors and is not worthy of discussion.

Good tutorial here.

Thanks for your feedback.

Created a schematic diagram based on the guide and labelled components.

I'd appreciate it if you could point to those serious errors and explain them. Thank you.

Here’s the image attachment to download for better inspection.

Here is a recommended way to connect a motor to an Arduino. Compare to your diagram.

You will likely find that having the LED and current limiting resistor in series with the motor does not work well, or at all.

It appears, from looking at the schemo, you are going to provide power to the motor chip with 5V created from the Arduino. You might ask yourself will the Arduino 5V regulator supply the Arduino, the motors, the motor driver chip and the other components?

Note: the DRV2605L is a bidirectional motor driver, and is not intended to work with a unidirectional MOSFET motor switch.

It would be best to just toss this idea and start over.

Idahowalker:
It appears, from looking at the schemo, you are going to provide power to the motor chip with 5V created from the Arduino. You might ask yourself will the Arduino 5V regulator supply the Arduino, the motors, the motor driver chip and the other components?

My previously built circuit has 4 motor controllers connected to an I2C multiplexer and to an Uno. It works well as long as the Uno controls one motor at a time period. The point of this circuit is to supply constant current and voltage but switch directions between multiple motors.

jremington:
Note: the DRV2605L is a bidirectional motor driver, and is not intended to work with a unidirectional MOSFET motor switch.

It would be best to just toss this idea and start over.

Is it possible to ditch diodes and use bidirectional MOSFETs in series with motors?

I couldn't find a haptic motor driver on the market that can drive more than 10 ERM motors, so I have to make my own.

use bidirectional MOSFETs

No such thing.

I couldn't find a haptic motor driver on the market that can drive more than 10 ERM motors

Your diagram shows three motors.

Perhaps if you explained what you are actually trying to do, you would get some useful answers.

Good luck with your project.

Your diagram shows three motors.

Perhaps if you explained what you are actually trying to do, you would get some useful answers.

Good luck with your project.

Sorry, this circuit is just one piece of my project. My goal is to create a sound-to-haptic feedback wearable vest for deaf people so that they can experience sound through vibrations on their upper body.

I’m using binary sound sensors around the vest to capture sound from different directions and store binary input values in short intervals so that I can compare all recorded inputs and activate motors on the appropriate side of the vest based on the highest recorded binary value. So let’s say that the highest recorded sound was captured from the sensor on the back and motors activate on the back, so they turn on and off one-by-one in a sweep effect.

So far this peice code successfully captures binary inputs from 2 sound sensors and selects the highest captured value, then activates a motor. The code seems a bit simple but I’m ok with that.

//record sensor inputs per interval and store them in sensor(n)Count
 while (timeElapsed < interval) {
   sensor = digitalRead(sensorPin);
   sensor2 = digitalRead(sensorPin2);
   if (sensor == LOW) {
     sensor1Count = sensor1Count + 1;
     delay(1);
   }
   else if (sensor2 == LOW) {
     sensor2Count = sensor2Count + 1;
     delay(1);
   }
   
 }

//find highest recorded sensor values and compare them to sensitivity value
 if (timeElapsed > interval) {
   if (sensor1Count > sensor2Count && sensor1Count > sensitivity) {
     motor1 = HIGH;
     Serial.println("Motor1");
   }
   else if (sensor1Count < sensor2Count && sensor2Count > sensitivity) {
     motor2 = HIGH;
     Serial.println("Motor2");
   }
   else if (sensor1Count == sensor2Count) {
     Serial.println("Equal input");
   }
   else {
     Serial.println("No input");
   }
   delay(10);
 }

I can show all of the code if you’re interested.

This is what I have done so far. The idea was to get 4 DRV2605, link them to the Uno through a multiplexer and replace that one motor on the motor controller with 3 motors in parallel, switched by MOSFETs. These DRV2605 controllers are quite expensive, that’s why I wanted to use an alternative method.

Made a fritzing diagram a while ago of this circuit but not going to link it because no one likes fritzing, but I’m planning to make proper schematics.

I’ve had multiple solutions before but all of them were rejected by others, so I have to do more research.

Do you think there’s a solution or do I have to throw away everything that I’ve built so far?

Why are you using the DRV2605 controller?

Do you plan to use its bidirectional capabilities, fancy tunes, etc. or are you just interested in having a simple, on/off vibrating signal?

If the latter, there are single chips that can drive up to 8 such motors, e.g. TPIC6C595.

Why are you using the DRV2605 controller?

Do you plan to use its bidirectional capabilities, fancy tunes, etc. or are you just interested in having a simple, on/off vibrating signal?

If the latter, there are single chips that can drive up to 8 such motors, e.g. TPIC6C595.

Not really. The DRV2605 has 123 different vibration effects but I'm only interested in a simple vibration. To be honest, I was looking for an easy-to-build circuit from the start by buying different modules and assemble them together, but it did not work out well.

That's an interesting chip. I was looking at the L293D driver which is similar to TPIC6C595.

I wonder if it is possible to control 4 identical chips from an Arduino Uno or Micro, and each chip would control multiple motors.

If it is possible, then the circuit would be much simpler and less expensive.

I'll do more research. Thanks for the heads up!

I was looking at the L293D driver which is similar to TPIC6C595.

Not that similar. The L293D is intended as a bidirectional motor driver, capable of driving two small motors in either direction. But it could be used to switch four motors on and off, requiring four Arduino output pins.

The TPIC chip is a shift register, low side switching only, so 2 or 3 Arduino pins can control up to 8 motors. With such a setup it is trivial to have a "vibration wave" move from one motor to the next, at any desired speed.

More info here.

TPIC chip

It was a bit difficult to find more sources of the chip you recommended, however I've found many guides of 74hc595 and also read about a method called daisy chaining multiple chips together and control nodes from a couple of Arduino pins, just like you said.

Here I made a labelled schematics of the circuit but haven't started coding yet. What do you think? Included a small diode for inductive kickback and a 0.1 microF capacitor for fast voltage transitions in parallel for each motor.

It a bit confusing without wires but with labelled net names. Each M(n) pin on chips connects to a motor. Latch and clock inputs are wired in a bus connection, data cables are wired from SER (current chip) to QH' (next chip) , except for chip (A) data source connects to digital pin 11.

I will probably need to add current limiting resistors for each motor to match the 60mA normal operating current.

It was a bit difficult to find more sources

Source linked in reply #13, in stock.

If you drive the motors with the recommended voltage, no current limiting resistors are required.

jremington:
Source linked in reply #13, in stock.

I've just noticed the link, sorry, my bad.

If you drive the motors with the recommended voltage, no current limiting resistors are required.

I'd like to drive motors from their maximum recommended voltage so that haptic effects can become the strongest. I've read it somewhere that Arduino 5V and 3.3V pins can output max. 20mA, but my motors need 60mA. How can I power motors from a source ranged between the recommended voltage and current, and possibly control it with PWM signals?

Pico Vibe datasheet

Controller: Arduino Uno or Arduino Micro

Any thoughts?

Thanks for supporting me all the way, you're a massive help!

You would power the motor directly from the 3V (maximum) motor power supply, via the motor positive lead. You can't power motors from the Arduino digital pins or the regulated voltage outputs, as the motors will either overload them or inject damaging electrical noise into the processor.

The TPIC chip output switches the motor negative lead to ground. This would just be vibration on or off, no PWM control.

I suppose you could use some sort of slow PWM with the shift register, but that would require quite a bit of thought and careful programming to get right.

3V (maximum) motor power supply

So a 3V motor power supply would be e.g. two AA batteries in series, and Arduino’s separate power supply is anything above 5V e.g. 9V battery because the board has a voltage regulator, right?

slow PWM with the shift register

It’s fine without PWM.

I’d love to keep the idea of attaching LEDs with motors and I made this circuit as well as tested it on my breadboard.
The motor ramps up and the LED is very bright when the button is pressed.
Do you think this setup would work on a long run or should I use resistors to limit the current flow to the LED?

Always use current limiting with LEDs, obeying the manufacturer's recommendations. If you don't, the LEDs will be destroyed, and/or they will destroy the driving circuitry.