Difficulty getting motor to reverse
To be able to drive a motor both ways from a single supply, use something called a "H bridge".  The motor is put between two drivers that each can either output high or low.  Set them to high-low to run the motor one way, and low-high to run it the other way.

Since your motors can apparently run from only 3.6 V, here is a really simple H bridge that can be safely driven from two 5 V logic outputs:



This is a pretty idiot-proof H bridge that will drive the motor with about 3.6 V given the 5 V supply as shown, up to a few 100 mA.  A and B are 5 V logical level inputs.  The motor is off when both are the same.  It is driven one way when A is high and B is low, and the other way when B is high and A is low.

I would use a small microcontroller running from 5 V to drive these lines.  The micro would be monitoring the light sense line thru a A/D input, and the rest is logic in firmware.  If you want to sound a alarm and light a light, these can be driven by additional outputs from the micro.  The signal from the limit switches would also be inputs to the micro, which it uses to know when to stop driving the motor.

Using a micro significantly simplifies the electronics, and puts the logic in firmware where it is easier to tweak and change as you decide you want something different after getting some experience with the device.