The MIT License

Notes (July 7, 2016)

Currently I have made a hardware system and a quite robust structure. I could simply send commands by Android phone and the torque of servo seem perfect to move.

On my to-do list, I would say, at least, on Android phone should have build-in OpenCV system and could track simple shapes in the first stage. I am going to add computer version with Machine Learning system to recognise items on my desk later on. The best part is that I also have chance to play with Reinforcement Learning on the Kinematics of the lamp which means it could learn how to move by itself.



Add springs (Jun 17, 2016)

I just took springs from my old tertial lamp to DA Lamp. Before screwing them to the frame, I added some pieces of wood and redesign base frame.

Check hardware PWM signal (Jun 16, 2016)

I was looking for the bug which made the lamp so weird with oscillator.

Many thanks to Leon Chao in Fablab Taipei, he told me what I did wrong in my code. I did not use onReceive event for I2C slaves so that the nodes cannot response perfectly. Furthermore, I assigned 16-bits "int" but not unsigned 8-bits "uint8_t" and that could have made me send uncompleted bytes.

All bugs fixed in this commit.

Communication between Android and Arduino (Jun 15, 2016 ~ 5 days)

First I tested sample code usb-serial-for-android by mik3y, and connected the USB OTG cable to my ASUS Zenfone 4 and Arduino UNO.

The result showed me that the communication between Andorid and Arduino did work and then I could just simply make my Android phone be the master. Following another tutorial could send commands through serial only with my phone but not computer.

Single command

Multiple commands

The next step is that phone with OpenCV should play with all calculation and do the physical track.

Motion test (Jun 13, 2016)

In week15, I've set a system which can send commands from computer to servo module nodes to generate PWM signal over I2C so that I have to use the system to make sure that every joints work profect.

Head, neck test

In the video below, I was sending commands from computer to Arduino/Satshakit over serial. For example


which means (# of servo, degrees). Then Arduino/Satshakit would send angle degrees in unsigned 8-bit integer to nodes address directly over I2C. After that, the nodes would generate PWM signal in hardware mode.

Elbow, shoulder test

In the video above, it shows that head and neck joints moved well but the servo worked too awful. Besides elbow and shoulder servos hardly turned to right angles.

There were couple issues in the test:

  1. Springs to hold: It seemed having large torque which could make servos hard to work. Classic terital lamps all have springs to be stable, especially for elbow and shoulder.
  2. Redesign and repair neck gear: It was broken because of burnt weaken cross section of plywood. Also I have to increase the number of gear teeth.
  3. Check hardware PWM signal: It might be something wrong with my codes on Arduino and nodes so I am going to check with oscilloscope.

Redesign base and neck (Jun 6, 2016 ~ 2 days)


Following this elegant slew bearing design by jorgerobles, I tried to draw and print a new version base with slew bearing which should need 6mm BB balls.

Again, it can berely move because of wrong flowrate of 3D printer, I should calibrate it first and slightly reduce the ball orbit diameter. It seems really silly for me to do additional processing to let it work.


I added an M4 hole to fix the neck and connector.


First assembly (Jun 3, 2016 ~ 3 days)

All components






Read more »