Open Source Arduino Standing Desk
Standing desks are a good starting point to introduce some physical motion into a programmer's sedentary work hours. However the controls on the motorized desks available on the market are not very customizable.
The objective of this project is to build a smart, hackable and budget-friendly standing desk that works with you to change your posture on schedule.
- Motorized Sit/stand motion
- Single-click preset heights
- Display with GUI
- Automatic sit/stand scheduling
- LAN/browser based control
- Laser and Ultrasonic Collision detection
- Google Assistant/Alexa integration
This project is built around the Ikea Skarsta table, as this is an easily available and basic adjustable sit/stand desk. The Skarsta comes with a hand crank for manually raising or lowering the tabletop. It has all the mechanical parts we need, and we can add the motor, controller, sensors and display to it. These upgrades will convert it from a manual crank to a fully automable sit/stand desk, and should not cost more than US $50.
Other desks can also be used.
We can use any DC geared motor. The 12V 180RPM motor from Aliexpress is a decent choice at around 3 revolutions of the crank per second. At 12V it draws around 0.2A and if jammed, it has peak current draw of ~3A.
We can use any DC Motor Driver that has a 3-wire interface for a microcontroller. The MD10C from Cytron is a decent choice - it can drive a single DC motor up to 13A and also has two small SMD buttons to drive the motor in both directions. This means that if you don't want the smart electronics, arduino and the display, getting just this board and the motor is an economical way to motorize the Skarsta which costs only around $25.
We use the Arduino Uno + ESP8266 combination board. This provides a way to get Wifi, enabling you to add any functionality you can imagine.
The components can be purchased individually from:
Component | Links | Notes |
---|---|---|
Basic Motorized Desk | ||
Cytron Enhanced 13Amp DC Motor Driver 30A peak (10 seconds) MD10C | ||
37GB555 DC 12V 180RPM Geared Motor High Torque Gear Reducer Motor | Banggood | |
37 DC Motor Bracket Metal Gear Motor Fixing Bracket for Robot Smart Car | Banggood | (Optional) |
6mm x 7mm Aluminum Flexible Shaft Coupling OD19mm x L25mm CNC Stepper Motor Coupler Connector | Banggood | The motor has a 6mm shaft. On the other side, the Skarsta's crank is a 6mm hex key (allen key). The way allen keys are measured is the distance between opposite flat surfaces, so this key would need a 7mm inner dia connector. |
6mm Hex key (at least 10 cm long) | Alternatively you can cut a piece off the Skarsta's hand crank. | |
12v 5A Power Adapter | ||
Automation | ||
Arduino UNO + WiFi R3 ATmega328P + ESP8266 Module 32Mb Memory USB-TTL CH340G | Banggood | |
External Wifi antenna | Optional, if you have a low wifi signal | |
0.96 Inch OLED I2C IIC 128 x 64 Module | Banggood | Any 4-pin IIC Display should work but a 128 x 64 is preferable. |
JoyStick Module Shield 2.54mm 5 pin Biaxial Buttons Rocker | Banggood | |
3.5-5.5V Standard Passive Buzzer Module | Banggood | You can use a basic buzzer instead of a module. |
500 Ohm multiturn variable Trimmer Potentiometer (Trimpot) | Optional, if you want to control (reduce) the buzzer volume. | |
VL53L0X TOF Based LIDAR Laser Distance Sensor | Banggood | Optional |
Ultrasonic IIC Distance Sensor | Banggood | Optional |
Miscellany | ||
M3 Bolts | To connect the motor | |
M4 Bolts | To connect cases to the desk | |
M4 Threaded Inserts | To create strong threads in the desk | |
10 AWG wire for motor power | ||
22 AWG hookup wire or Dupont connectors | ||
10A Fuse | Optional |
The cases can be downloaded and printed:
Component | Links | Notes |
---|---|---|
Case for motor and driver | TODO | |
Case for Arduino | TODO | |
Case for Joystick and Screen | TODO | |
Case for Ultrasonic Sensor | TODO | |
Case for Laser Sensor | TODO | Optional, if you use the sensor and your sensor does not have the case |
Currently no kits are available to buy.
Add circuit diagram (fritzing) to readme- Ultrasound and Laser sensor support for motion limits
- WiFi and Web/LAN interface
- Run motor at variable speed (start slow and accelerate if joystick is kept pushed)
OotBait is a stylized variant of उठ बैठ (Uth-Baith), the Hindi term for Sit-Stand.