Shift Register Out - Motors and Solenoids, Shift In - Temp. Probes

Let me preface by saying that I am new to Arduino and I’m just asking for help on setting up my project - not the how to but what is possible. If you do find it in your heart to give me some more in depth guidance, that would also be appreciated :wink:

What I need to do is control 8 motors (peristaltic pumps) with TIP120 transistors and PWM via potentiometers. I would prefer to do this through the Arduino but for simplicity (and added cost) I can use stand alone PWM controllers for each motor. The motors will be powered with a 12V, 30A power supply. I need to control 8 solenoids as well so I wish to use shift registers to do this. The 8 solenoids (in house made, air-core electromagnetic solenoids) will be set up just like the motors with TIP120 transistors and powered on by the same 12v, 30A power supply. The solenoids will also need to be PWM via potentiometers. I will need to log temperature from 8 temperature probes (LM335Z with POTs for calibrating) that I wish to use a shift in register for. The temp. probes will be logging data 24/7 via an ethernet shield. The motors will be running 24/7. The solenoids need to be switched on for one second and off for one second (Pulsed @ 1Hz? In addition to the PWM when on) and at some point need to be on for 14 hours (still 1Hz pulse) and off for 10 hours. I am currently using an Arduin UNO R3.

  • Can I control 8 motors and solenoids with PMW via potentiometers through 2 shift registers and 1 Arduino? Would it be better to use 2 separate Arduinos to control these two separate functions (motors and solenoids)?
  • Can the 8 temp. probes be set up with a shift in register on the same Arduino? Would it be easier to use a separate Arduino for monitoring and recording temp. data?

Basically I understand that shift registers can be used to increase the number of inputs and outputs of any given micro-controller. I don’t yet fully understand how they work as all I can find is information in blinking LEDs with shift registers. I need to power 8 motors and 8 solenoids and read 8 temp. probes. I have a long way to go with the programming and with the skills I have right now I know I can set this up without any assistance using 3 separate Arduinos, but I would prefer to use 1.

I have attached a Fritzing diagram of what I want to do for added clarity (also as .jpeg image)
Edit: As stated I am a beginner so I don’t yet have the skill to draw a schematic.

EMF Growth.fzz (39.6 KB)

Get in the habit of posting Fritzings as image files or PDFs. Fritzings are for beginners who don't know how to draw a schematic.
The experts you are asking don't use them because they are only assembly drawings and therefore practically useless for schematic purposes. I don't want to inztall Fritzing on my PC but I can probably help you. Draw a schematic by hand and post a photo of it. You can't use shift registers for temp data input because you are using analog sensors. It makes much more sense to use 64-bit precision DS18B20 one-wire sensors on a single wire bus using one digitial input pin. If you insist on using LM335s you can use an analog multiplexer cd4051 (because you only have 6 analog inputs ) or an analog switch CMOS cd4016 OR 4066.

For your pots you can use the MAP function:
You can use the ONEWIRE library or the Dallas Semiconductor Temperature library or both.

The temp sensor has an analog output, so you need and ADC. Look at MCP3208, a 12-bit, 8-channel ADC.
For the motors, you can fake PWM with shift register using blink without delay programming, and shifting new data whenenver an output needs to change.
Use SPI.transfer to send the data out. Default rate is 4 MHz, can be increased to 8.
1 Hz is dirt simple. How fast do you need PWM for the motors?

1 Hz is dirt simple. How fast do you need PWM for the motors?

I don't yet know. Because each motor is not manufactured EXACTLY the same I need to adjust the speed of each one individually to achieve the same flow rate as they are peristaltic pump motors. In a perfect world I would hook them all up to one PWM controller and be done with it.

Also, would simply upgrading to an Arduino mega be a good idea? With the added I/Os I wouldn't need to bother with shift registers at all.

Your call. Need external hardware either way to buffer the motor/solenoid coils, so 2 more shift registers and ADC chip will not be the main driver.

Mega simplifies your wiring.