See it in action: https://www.youtube.com/watch?v=v00p0OMZU2o
This is a project I did at the d-shop in Palo Alto. I did a 3 months internship (or practical term as a part of the vocational training program) in the development culture team and had a great time exploring new IoT technologies. One of my goals was to learn how to use an arduino and combine it with 3d-printed parts.
The Plot Clock is a little robot that can print out the time or the weather.
The parts are 3D printed and the motors are powered by an arduino microcontroller.
A real-time clock chip provides the time. The weather data is fetched from a temperature sensor or from openweathermap.org.
I found the idea of the plot clock on thingiverse.com, which is a platform for sharing 3d models.
The original Source Code is published on github:
The print files are from these thingiverse projects:
Basic 3d printable parts: http://www.thingiverse.com/thing:250204
Expo marker arm holder: http://www.thingiverse.com/thing:261999
Plotclock stand: http://www.thingiverse.com/thing:259305
I published my own modifications on thingiverse, too:
3d printing and assembly
I started with downloading and printing the basic parts for the plotclock.
The assembly is quite easy, there are just some screws and nuts needed. See the pictures for help.
The servo arms are connected to the 3d printed parts with the tiny screws that come with the servos. For the drawing arms, I also glued the parts together.
For the sweeper, I glued a piece of sponge to the sweeper part.
The screws on the servo arms have to be just tight enough so that the arms can still move easily.
Good assembly instructions can be found here:
For the first prototype, I connected the servos to the arduino with a breadboard.
Each servo has a power cable (red) a ground cable(brown) and a signal cable(yellow):
Power goes to the 5v output, ground goes to GND. The yellow cables have to be attached to the right pins. In the arduino sketch code, pin 2,3 and 4 are used.
Later on, I soldered a custom adapter out of 4 3-pin headers to provide power and ground levels to all 3 servos with one pin.
Arduino sketch code
The source code can be downloaded from github, the installation of Arduino IDE is necessary. Connect the Arduino to the computer and select the right board model and port from “Tools>Board/Port”. Then press the upload button (⇨).
The code has a #define CALIBRATION line. If this is uncommented, the code executes a calibration routine where the values for the servos can be adapted.
SERVOFAKTORLEFT and -RIGHT define how much steps of the servos are needed to turn exactly 90°.
SERVOLEFTNULL and -RIGHTNULL define where the origin point of the servo is. This should be calibrated so that the servo arms stop at a parallel position to the draw panel.
If the line is turned into a comment (with “//” before it), the time plotting code is executed.
After the calibration is finished and the code executes fine, the board can also be powered by a battery or a USB Power bank. No laptop is needed to run the code on the arduino.
I modified the code so that the plotclock can also print weather information. To achieve this, I needed to understand the geometry that is going on. So I took a pen and executed the commands by hand:
The plotter can draw straight lines to a specific point, with the method drawTo(x,y).
The second option is to draw a circle or a slice of a circle around a center point with the methods bogenUZS(clockwise) and bogenGZS(counter-clockwise).
Digits from 0-9, the sweeper motion(red lines in the drawing), and two dots(for the time in HH:MM) were already implemented, using these two options.
I added 3 weather icons: a sun, a cloud, and raindrops. I also added a degree circle(°) and “C” and “F” for Celsius and Fahrenheit. A next step could be to implement the whole alphabet.
Improvements: Case and Pushbuttons
I later printed out a case/stand for the plotclock, which can be found here:
For this stand, I modified the top, to fit in two push buttons. i simply modeled two holes of the size of standard pushbuttons and added two little icons for labeling the buttons. For the 3d modeling, I used the open-source software OpenSCAD, which provides a programming language to assemble geometric shapes to a 3d model.
I extended the plot clock code to react to two pushbuttons as triggers. One triggers to draw the time, the other one triggers to draw the weather.
After a bit of breadboarding, I soldered the pushbuttons and resistors directly to the wires which go onto the arduino. The red wires go to the power pin, black to ground pins, and the yellow wire goes to pin 5 for the time and pin 6 for the weather button.
How to get the weather data:
With the arduino UNO without additional Wifi Hardware, there is no way to fetch data from the internet.
I connected a temperature sensor to the arduino analog pins A0 and A1 and the GND pin, and read the temperature data. The weather icon is a Sun for >75°, a cloud for >54° and raindrops for lower temperatures.
On the picture, the black three-legged thing is the temperature sensor, a TMP36.
My second version of the code needs to be used with an arduino Yún or a wifi-shield. It fetches the weather data from openweathermap.org and parses the temperature in Fahrenheit or Celsius and fetches a weather icon.
A good idea for the future would be to hook the arduino up to HCP to collect and process sensor data.
Material: 3D printer, arduino UNO (or Yun), 3*micro servo motors(like “Tower Pro 9g”), 3M screws and nuts, a whiteboard marker(dry-erase), some kind of tissue or sponge, breadboard, jumper wires
Optional: Soldering supplies, 2*8.2k resistors, 2* pushbuttons, 4*3-header pins, RTC components or a RTC breakout chip, USB power bank or 9V Battery block, TMP36 temperature sensor