Martyn Currey wrote a very helpful article on how to run a solenoid from an Arduino, and I used exactly the same circuit to make the Raspberry Pi control a 12v solenoid valve.
Classic GCSE electronics. (I've just noticed the diode seems to be wired up wrong, but it didn't seem to matter.)
The Raspberry Pi encourages you to use a programming language called Python. It's an easy-to-use language based entirely on Monty Python's Flying Circus, and so everybody loves it.
Here's the code:
import RPi.GPIO as GPIO # the GPIO library allows us to control the pins import time # the time library lets us pause import random # library has random number generator GPIO.setmode(GPIO.BCM) # I don't know what this does. I copy + pasted it. GPIO.setwarnings(False) # Perhaps I should find out. hose = 4 # Sets the GPIO pin the hose is connected to # Create list with the rhythm of Land of Hope and Glory in quarter notes pomp = [4,1,1,2,4,4,4,1,1,2,8,4,1,2,1,4,4,4,1,2,1,8,4,1,1,2,4,4,4,1,1,2,8,4,1,2,1,4,4, 4,1,1,2,8,4,1,2,1,4,4,4,4,3,7,4,16] tempo = 88.34 # tempo in BPM based on conducting of Sir Arthur Bliss quaver = 60/(2 * tempo) # length of 1 quarter note, in seconds legato = 0.5 # number from 0 to 1. 1 is full legato but would mean the hose # ...was on all the time. GPIO.setup(hose, GPIO.OUT) # I don't know what this does either. for x in pomp: # Loop through array on = x * quaver * legato # Time in seconds for hose to be on off = x * quaver * (1 - legato) # Time in seconds for hose to be off GPIO.output(hose, 1) # Turn hose on time.sleep(on) # Wait GPIO.output(hose, 0) # Turn hose off time.sleep(off) # Wait GPIO.cleanup()
It works. Huzzah! The video finishes just before the Pi gets covered in water.