Introduction
Raspberry Pi GPIO pins work at 3.3 volts and the current you can draw from them is quite limited for many applications (16 mA – 50 mA).
An external power source and a power interface are required to control a 12 volts DC motor (or solenoid) from a Raspberry Pi GPIO pin.
Materials
- N-Channel MOSFET (FQP30N06L/RFP30N06LE) x 1
- 10 kΩ resistor x 1
- 1N4001 rectifier diode x 1
Schematic diagram

Wiring diagram

Components explanation
The power interface between our Raspberry Pi signal pin and the 12 volts DC actuator we’d like to control is a MOSFET (metal–oxide–semiconductor field-effect transistor).
The 10 kΩ resistor is used as a pull down resistor for the MOSFET to have a well defined gate input level at any time.
FInally, the rectifier diode 1N4001 is for kickback protection (should be placed across solenoids, relays & DC motors to safely discharge the spikes generated by the coils and avoid damaging the Raspberry Pi signal pin)
Python test code
#! /usr/bin/python
import sys
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
CTRL_PIN = 4
GPIO.setup(CTRL_PIN, GPIO.OUT)
print "SOLENOID CTRL Test (CTRL+C to exit)"
time.sleep(2)
print "Ready"
try:
  while True:
    print "On"
    GPIO.output(CTRL_PIN, True)
    time.sleep(1)
    print "Off"
    GPIO.output(CTRL_PIN, False)
    time.sleep(1)
except KeyboardInterrupt:
  print 'Quit'
  GPIO.cleanup()
except:
  print 'Unexpected error: ', sys.exc_info()[0]
This python program will turn on/off your motor every second until you exit the program by pressing CTRL + C.
Note that the control GPIO pin is defined in the program as pin number 4 (see the wiring diagram above).
No lo tienes la version para Arduino?
Saludos!
hi there,
Would it be possible to use a power supply of 12V 1.5A with this circuit?
Hey Sidney
Yes, it’s ok to use such a power supply (12V, 1.5A)
Regards!