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

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.

<p>Great Instructable, I'm in the process of putting it all together but I've had problems with the feedback 10k pot. I've mounted it as close to how you've done it but I don't seem to get any reaction from it. I've used a single turn 10k, approximately how much does yours turn? And do I need to change anything in the code to adjust its limits and sensitivity?</p>
<p>Hi, I'm pleased to hear that you are making progress. Assuming you've wired potentiometer correctly, you should be able to read the position value on POSITION_PIN. In fact, there is a commented out line in the GetPosition() that when uncommented would show position in the Serial Monitor. Most likely that value will be slightly different then mine so you will need to calibrate it. To do that, move the lamp to the top position (open) and set constant TOP_POSITION value to whatever is on POSITION_PIN + 1. Then move the lamp to the bottom position and set constant BOTTOM_POSITION value to POSITION_PIN - 1. Its important that the top value would be less that the bottom value. If that is not the case you will need to change the polarity on the potentiometer. Please note that +1 and -1 are the offset values to make sure that the lamp doesn't hit the max position as it could get stuck. This offset might need to be increased if position reading is not stable. Hope this helps and I would be definitely interested to see your final result.</p>
<p>Extremely helpful, its all working now, thank you very much. I just need to tidy up the mechanics to make it all repeatable and try and fit it all in the space! I had 200 for the top position and 310 for the bottom but that the way I've aligned the pot.</p><p>I'm still in the prototyping stage so once I've refined some of the parts I will post some pics.</p><p>I've pretty much followed your purchase list accept for the LM317, I went for a off the shelf module that handles 2A. </p>
<p>Very great tutorial!!!</p><p>I'm approaching to realize it with little changes (Wi-Fi control instead IR)... But I really don't get how the potentiometer works to give me the position of the lamp!</p><p>How can I know the position of the lamp using it? Where do I have to connect it in the circuit? Directly to driver board or to the microcontroller?</p>
<p>Great idea and implementation! How did You connect the M3 rod with the hard drive bearing?</p>
<p>Hello, great project! I have all parts here, but have problems understanding the circuit board. Can u upload your fritzing file? The circuit boards shows 2 potentiometers, 10k and 5k. </p>
If you turn off the light, how can there be power for the motor to close the lamp?
<p>Electronics are constantly on power. I had to rewire wall switch (S2 in the diagram) to one of the micro-controller's inputs. Having it powered on all the time also allows me to switch the lamp on via remote control.</p>
<p>Hello,</p><p>I try to program the board only the board u use is not available any more.</p><p>and im not from the us so i have to order the genuine micro. only i get the following errors with load the program u write.</p><p>In file included from Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/io.h:144:0,</p><p> from Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/pgmspace.h:88,</p><p> from Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:28,</p><p> from sketch/FI1436DILV8CJXX.ino.cpp:1:</p><p>FI1436DILV8CJXX:41: error: expected unqualified-id before numeric constant</p><p> const int SPEED = 255;</p><p> ^</p><p>exit status 1</p><p>expected unqualified-id before numeric constant</p><p>and if i block that line i get this error.</p><p>Arduino.app/Contents/Java/libraries/RobotIRremote/src/IRremoteTools.cpp:5:16: error: 'TKDS' was not declared in this scope</p><p> int RECV_PIN = TKDS; // the pin the IR receiver is connected to</p><p> ^</p><p>exit status 1</p><p>Error compiling for board Arduino/Genuino Micro.</p><p>Many u can help me with it.</p><p>Thanks</p>
<p>This is great!</p><p>I am also automating one PS2014 pendant for a couple of weeks now. I am using an RC servo with continuous rotation for movement and using two small infrared interrupters at the upper and lower limits to stop the motion.</p><p>Being able to continuously know the position is way better though. Is it possible for you to post a better picture/schematic on how to attach the potentiometer with the structure?</p><p>Thanks</p>
<p>Sorry, but I'm unable to take any better pictures as it would require disassembly of sort. But it is fairly straight forward - where two green parts hinge, I took out the pin and made holes on both parts slightly larger so that the potentiometer could go through. Then I secured the shaft with a little screw by making an M2.5 threaded hole on the edge (as seen in the third photo). On the other side, to stop the potentiometer itself from rotating, I soldered a little PCB to it. Again, using M2.5 screw I fastened that PCB to the green part. So now, one green part is secured to the potentiometer and the other to the shaft, hinging like before but now with potentiometer giving a feedback.</p><p>P.S. I have not worked with RC servos, but from what I've seen on Youtube, they seem to be bulky and quite loud, too loud for a bedroom light if you ask me. However I have to admit there is a small buzzing sound in my lamp as well.</p>
<p>Thank you for replying Audrius,<br><br>My intention was to make as little modifications as possible (not breaking anything) so I could be able to re-assemble the original piece without mods.<br><br>The potentiometers I could find on local electronic stores had a slightly large chaft (~6mm) and a big body, or a thin chaft (~3mm) and a small enough body. And after all I would like not to enlarge the holes that make the hinge...<br><br>So, after some iterations I fixed the potentiometer with a plastic strip and the shaft with a small screw to one of the green parts.<br><br>I've already managed to put the mechanical part together and it is working great.<br>You're right about servos, they do make a little noise, but I am making it turn very slowly so it is very subtle while moving.<br>I think the best part is that servos can control a moving part with an Arduino very easy and without the need of additional motor driver, gears/rods or the support for the long threaded rod.<br>I'm using a standard size servo (half height), but I think a small servo (9g) can handle the weight of the lamp.<br><br>Once more thank you for replaying and making such a great project available here. <br><br>P.S.: I had a very old (~20 yr) Creative Sound Blaster Infra Red remote control (pretty similar to the one you've used) that is also working like a charm with this project ;-)</p>
<p>Looking great! I just got approval (!) from my wife to install two of these. Have one question though.. do you have the approx. length of the M3 rod you are using? I'm trying to find a lead screw that would fit.</p>
<p>Wow! Two of these... your wife is very kind. The rod is about 12cm. Let me know if you find a lead screw of similar size, just in case the rod fails.</p><p>Have fun.</p>
<p>Well, I live in IKEAland (Sweden), so what can I say ;) ?! I've found some M5 and M6, but they are a bit too expensive at about $25/30cm. It seams like M8 is more or less the de-facto standard, but that is perhaps too thick? You can get them with different pitch angle.</p><p>http://goo.gl/ZjvNxI</p>
<p>Yeah, I looked at those. They are good for hobby CNCs, but way too big for this lamp. In addition, you would need a bigger motor to drive it. </p><p>Where did you find M5 lead screw if you don't mind me asking?</p>
<p>I found these from the same dealer at Aliexpress..</p><p>* 2pcs 5mm lead screw + 2pcs nut = $10 (<a href="http://goo.gl/sscpH4" rel="nofollow">http://goo.gl/sscpH4</a>)<br>* 10pcs 2mm to 5mm shaft coupler =$7.20 (http://goo.gl/bQZ8OO)</p>
<p>This is awesome.</p><p>This plus Philips Hue (or some other color-changing lamp) would be AMAZING!</p><p>I would like to try this out, but I would probably struggle to get the &quot;cup&quot; in place with all the electronics in it. I could barely get it in place with the lamp-cable itself inside of it. Hehe.</p>
I'm happy you like it. It was definately a struggle to hide all electronics, but well worth it. Of course I had to shorten the cable it came with.
I love that lamp and this makes me love it more. Any chance you could post a video of it moving? Great job!
The very first image is actually an embedded video. You can also see it here https://youtu.be/03p3kui5NIQ
I saw this in the Ikea store and knew someone would do this hack. Great job!
<p>I can't wait to see what you share next! I love this! </p>

About This Instructable




More by AudriusA1:Remote Controlled IKEA Death-Star Lamp 
Add instructable to: