Being an engineer myself I could not resist adding remote control to this manually expandable lamp I saw at IKEA, no matter the cost. In this project I've replaced the pull string with M3 threaded rod and DC motor, added a micro-controller to drive it and after a bit of soldering, cutting, drilling... it moves by itself. The lamp can be controlled two ways. First of all, as you would expect, the light can be switched on, off and dimmed using standard wall switch. In addition to that, there is an Infra-Red remote control for more precise and programmable movement. In fact, it allows to save 3 positions and remembers the last position when switched on.
Sadly, at the time of building it, I didn't plan to make detailed instructions. Consequently, most of the pictures posted here are of the finished assembly. Hopefully, my description will be detailed enough for you to be able to achieve similar result.
Step 1: Parts Used
- IKEA PS 2014 Pendant Lamp
- 6-12V DC motor 32mm diameter, 2700rpm, 11.6 g.cm load
- 2.3mm x 2mm RC Model Toy Brass Joint Motor Shaft Coupling Connector
- M3 rod and extra long nut
- IR Remote Control
- IR Receiver
- Arduino Nano micro-controller
- DC motor driver
- Position sensor (10K potentiometer)
- LM317 Adjustable Voltage Regulator 1.5A
- 12V 2A power supply (something I had available)
- ~240V round rocker switch
- Screws, cables, connectors, etc., mostly from salvaged electronics, so you'll have to improvise there
Step 2: Mechanics
Luckily, there was no need for a significant alteration of the lamp itself. I only had to remove the pulley and the string that were used to expand it. The string I've replaced with standard M3 threaded rod (could not find a lead screw of such a small size), while in the pulley's place I've mounted a DC motor to drive that rod. It was fairly easy to mount DC motor using plastic bracket that I've made out of a 5mm flat plastic piece (see drawing).
On the other end of M3 rod I've mounted a ball bearing from an old 2.5" hard drive for support. Without this support the rod was vibrating too much when spinning.
To the moving piece I've mounted an extra long M3 nut. I tried a standard size nut, but found that the thread wears off very quickly. Hopefully the larger one will last long time. At the time of writing it has been around 7 months of daily use and its still working. Going back to the design, to mount the nut, I have soldered two pieces of wire around it (see diagram) and slotted into the place of the spring that used to support the string. As long as both ends of M3 rod are supported, there is no need to fasten the nut in any way. You might want to add an O'ring to it though, as there is a significant vibration and noise when it's moving.
Finally, to join M3 rod to the motor I used brass joint that was a real challenge to find. It did need threading on one end for the rod and balancing wasn't easy, but it worked pretty well at the end.
Step 3: Position Sensor
DC motor is fine to drive the lamp, but without knowing lamp's position it could be difficult to control it. Running a motor for a precise time was not an option as due to friction and other factors the motor speed was not repeatable. I've also tried a stepper motor instead of DC, but this appeared to be too slow and sometimes would skip a step or two. So instead I've mounted a 10K potentiometer for a sensor, continuously providing position to the micro-controller. This turned out to be repeatable and more precise than I expected.
Mounting it was fairly easy by removing one of the pins acting as a hinge for two green parts. On one side, I've used a small piece of PCB to support the potentiometer, while on the other side I've fitted a screw securing those two parts together.
Step 4: Control Board
As for the brain, I've managed to put it all inside the canopies. It was a bit of a challenge as I had to mount a 12V power supply, Arduino Nano micro-controller, DC motor driver, power regulator for DC motor and 240V relay to control the light itself all on a single control board. Of course it was well worth the effort as I managed to hide most of the components from the view making it look more like a standard lamp as oppose to a geeky project. Even my partner was OK to put it into our bedroom.
Its not shown in the diagram, but all the cables are wired the the PCB using connectors making assembly slightly easier. At the same time, the Arduino Nano and motor driver are mounted with header connectors so they could be easily removed/replaced if necessary.
Arduino Nano has got a voltage regulator of its own, but I had to add another regulator for the DC motor, mainly because I wanted better control over the motor. I ended up adjusting it to 7V as going any higher was making the motor a bit warmish. In fact, as you can see in the second picture, I had to mount a radiator for voltage regulator to dissipate some heat. If I would do it all over again, knowing what I know now, I would probably go for motor driver with higher voltage rating and get rid of the voltage regulator entirely.
Step 5: Software
The software is fairly straight forward. First of all I programmed in a standard wall switch with the following functions:
- Switch ON - toggle the switch once while lamp is OFF;
- Switch OFF - toggle the switch once while lamp is ON;
- Dim (move to closed position) - toggle the switch twice within 1 second (in ON or OFF state);
Then, for the remote control I used a low cost Sparkfun remote control. It fit perfectly for what I needed. Here are the functions it supports:
- (I) - switch lamp ON or OFF (move to last known position if switched ON);
- A, B, C - switch lamp ON and move to a preprogrammed position;
- < and > - move in and out one step respectively;
- ^ and v - move all the way out or all the way in respectively;
- O - switch to programming mode (press A, B, C to save current position under that option);
This gives the flexibility to switch to different positions while at the same time, using wall switch makes, it very practical. You wouldn't want to train people before they can switch the light on or spend the time searching for remote control in the middle of the night.
Arduino (.ino) file is attached. Please note that the code, diagram and all the rest are provided as is without any expressed or implied warranty or fitness for a particular purpose.