20 - Final project: digiTalog fabsculpture
digiTalog is an interactiv artefact composed of 2 apparently identical units - one analog and one digital - interacting with the user and with eachother.
The analog unit operates manually a series of leds placed along the bridge lighting up as a metal ball travel along the bridge (in a groove)and according to inclination from a WCS. A potentiometer - linked to central axis of the bridge through a gear system - provide a reading the inclination datas. A strip of resistors - one per leds and each with a different value - will generate signals indicating the position of the metal ball. The correlation of these datas (output) will serve as "input" to actuate the digital unit.
The digital unit replicate the movement of the analog unit. A neopixel led strip will replace the leds and a servo (or a stepper) motor will actuate the inclination of the bridge.
For my final project I develop one hybrid unit as a research prototype that combines the processes and creative challenges of the full dual version. I will also create a simple interface to simulate the interaction between the analog and the digital units, and with the user.
The series of lecture by Olafur Eliasson Why make (almost) anything? of last year's Fab Aacademy curriculum inspired me a lot. I bond with the idea to invent an object and expand its functionality to non-practical ends but to merely proovoke an experience, and may be emotions and relfection about our relationship with digital technology. I aim for digiTalog to represent the contradictory feelings the experience of technology provokes in me: bewilderment and servitude. This duality is the core of the project.
From a formal perspective I borrow from the Light kinetics sculpture by Espada y Santacruz studio.
I like about it that it plays with gravity, how it attracts and actuate the movement of the light. This physical interaction brings a sense of magic. I also find very relevant the idea that the sculpture is user-dependent - comes alive when there is interaction.
I take this work as a starting point and engage in an open creative process leaving a margin for improvisation and taking decisions along the way following the spiral development methodology.
Spiral developping the hybrid iteration
My first decision was about the device to capture the datas. I have the feeling it will have incidence in all dimensions of the design. I looked into giroscope, accelerometer, optical sensor encoders and rotary encoder sensor. Finally I decided to use a simple potentiometer. The potentiometer's range (0-1023) is precise enough for what I need. I also like the mechanical quality and aesthetic of the potis. To get full potential it challenges me to integrate decoupling rotation with gears.
After drafting the design I created the gear system that will generate the inclination datas. Since the maximum inclination of the bridge allow only 15º (I want the center of gravity to be fairly low) I need to create a system that multiplies the gear ratio between the potis shaft and the axis of the bridge. This will help get more accurate reading and precision in sincronizing the inclination and the neopixel sequence. It will also help getting precision in syncronizong the the metal ball position with the bridge inclination in the analog version, and the motor and the neopixels in the digital replica.
The distance between the central axis and the position of the potis allows the big gear to be maximum 120mm diameter for a 7:1 ratio which is equivalent to 90ª rotation of the small gear (potis shaft) when bridge moves from minimum to maximum inclination.
Starting with the maximum diameter of the big gear and the ratio desired I calculated the number of teeths for each gear based on the following formula.
Than I did some math to deduct the diameter of the small gear and the number of teeth for each of the gears.
120mm x 3.14.16= 376.99mm circumference (377)
15º rotation = 360º/24= 15mm. circumference.
15mm is the distance the big gear (120 mm diam.)can travel with a 15º inclination of the bridge.
If I want the small gear to rotate (at least) 90º when the big gear rotate 15º I need the circumfrence of the small gear to be be at least 3 x 15mm. = 47mm. (3 is the 1/3 of 360º).
15mm. is the diameter of the small gear.
I want the gear teeth to be as small as possible but big enough so they resist the torque and will adhere well together so I set a tooth spacing of 5mm.
Big gear: 377/5 = 75 teeths.
Small gear: 47.1/5 = 9 teeths.
I used a free online Gear generator to produce the gear designs. I also refered to this wood gear generatorto study how gear works.
The workflow to generate the gear design and import it to Rhino for fabrication is the following:
Create both gears by entering the amount of teeth for each one.
Download the SVG file.
Open the SVG file in Inkscape.
In Inkscape save it as a PDF
In Rhino import the file.
Match the gear together in Rhino and scale them to the desired size. I repeated this process for both gear and matched them in proportion into the drawing.
I tried out few combinations and ended up adjusting the big gear to 70 teeth and the small gear to 8 teeth with a final diameter for each gear as follow:.
I completed the design of the structural elements with the 3D model of the gears and the casing of the potis.
With this I have all the structural and mechanical elements designed and ready for fabrication.
For the electronics I test the system using a generic AtTiny44 board design. It includes 2 serial communication output pin(RX,TX), 2 outputs (for neopixel led strips and else) and 1 input for the potentiometer. I designed the board taking in consideration further iteration of the circuit in which a servomotor, a voltage regulator and a 4 pin header for 9 volt battery can be integrated. I left 4 pins free (including miso and mosi pin) for additional peripherals . The board is designed in Eagle and milled on the Roland SRM20. I met no problem milling and stuffing the board.
Test programming the circuit board.
I burned the bootloader sucessfully at once and went on testing the functions of the board by running basic programs from Arduino IDE.
First I tested the connection of the data pins for both outputs and input by connecting the potis to a breadboard with a blinking led.
I learned that the Attitiny84 do not work with standard "serial.begin" but needs to run the "software serial" library to communicate with serial monitor. I created a simple sketch to comfirm that I get a reading of the potis values in the serial monitor, and that it turns the led on accordingly.
Than I downloaded the Adafruit Neopixel library , installed it and created a basic sketch for a 6 led neopixel. After testing and failing to connect the neopixel to the board I figured a few important issues:
1º to run a neopixel with Attiny a trinket has be inlcuded in the Arduino IDE sketch:
2º The Trinket mentions "5V, 16MHz. That means the Arduino IDE clock need to be set to external 16MHz.
But my board has a 20MHz resonator and when I tried to set the Arduino at 20MHZ I received an error meesage saying there is not enough CPU power. So I replaced the 20MHZ clock on my board for a 16MHZ - I was lucky to find one in the invetory at the bottom of a little drawer.
With the 16MGHz I could run the sketch perfectly and the 6 neopixels on the strip light in the desired color (white - in the picture the pink hue is due to color balance of the camera).
The components (potis input and neopixel output) are working now. The next step will be to connect the 53 Neopixel strip and program it to interact - pixels to lit one after the other in a specified order and according to the potis changing value. Before I could get there I needed to produce the real elements so I proceed with the Milling and 3D printing of the different structural elements.
Milling and printing
I first 3D print the gears, the potis casing, tehn prepared the Cam file and milled the base, the bridge. Finally I assembled all the elements together.
The 2 pieces of the bridge are glued together with standard wood glue.
Some details had to be corrected manually during the assembly. That includes the base beeing cut down to receive the potis holder, the sizes of the holes of the potis holder had to be drilled to 4mm, and the pocketing to receive the pundulum gear was also wrong.
This prototype serves as a proof of concept and through it I expect to discover the actual rules of the design and its essence. I am looking to keep things as simple as possible. It is a creative process and often the flaws or mistakes are good indicators suggesting ideas or even dynamics hidden to the conscious mind. For example the fact that the end of the bridge be so thin makes is weak physically but gives the sensation of beeing very delicate. I like that.
Nevertheless I took note of the errors and mistakes and coorected the Rhino files.
I am ready to capture the datas from the potis/movement of the bridge and translate it to the Neopixel strip. I first connected the circuit board to the potis and to the computer to make shure I can read the potis value as the bridge balances and then connected the Neopixel strip. There are a few important things to consider when connecting A Neopixel strip.
1º the Dataline of the Neopizel connects to the data output of the controler
2º the Ground and VCC connects to a 5v power supply, and it is recommeded to add a strong capacitator (1000UF) between the + and - of the power supply.
3º The different ports and pins need to be connected in a specific orders:First GND, second VCC, then data.
4º The Neopixel strips comes with 2 ground cable. If the strips is powered by an external power supply the second ground cable must be connected to the microcontroller.
i stuffed a 499ohm resistor on each output pin assigned to Neopixels on my board but I added the 1000Uf capacitator wiring the capacitator between the + and - and the 220/5v adaptor.
Programming the Neopixels
The programming of the Nepixels happened through a long process of itiration and lots of debugging. I started with this AdaFruit Neopixel tutorial to get familiar with coding a Neopixels. I did the following steps:
1º make the potis fade the pixels in and out.
2º make some of the leds (calling the led number) fade in and out.
3º Make 6 leds turn on one after another using the potentiometer.
Then I narrowed my research for an existing sketches that sincronizes potis value and leds created one mix the followings: using-a-potentiometer-to-control-number-of-lit-pixels-on-an-neopixel-strip and neopixel control with potentiometer.
It took me quite a while to figure it all out and I struggled a lot to have only one led to lit at a time in sequence and according to the potis reading. Eventually I integrated the "map" function to capture the potis reading and the "if" and "if else(())" function to sequence the neopixels individually.
The inclination of the bridge triggered the led sequence as planned but this first solution is " the funky way to have the neopixel do what I want". But it works and that gave me lots of satisfaction.
I continued developping the code seeking for a more efficient solution and deveoped an alternative sketch that makes use of the chase function. It also includes programming color for each led to change which I would like t implement in the future.
I started from this chase the dot down the full strip tutorial.
The final sketch is a bit more complex than the previous, also a little lighter but still requires to repeat the function for each led, associating it with a range of values. I created a excel sheet to define a corelation betweeen the potis value and each leds. The code was again very bulky and I manage to make it 1 out 2 leds to lit as with the previous version. I did variations in the set up and also changing polarities of the potis to ibnvert the relationship between the movement of the ball/vs/ movement of the leds. The effect is interesting and I see a lot of potential.
I tried to program each leds but the size of the sketches exceeded the capacity of the AtTiny 85 and could not get it to load. "Not enough space error message". I need a new strategy for the code and know the next step will be to reduce the code drastically having it do the same and more.
I completed my research with experiments on interacting the analog leds with the metal ball directly. That shows the direction I take in developping the analogical experience.
The project was presented last year in july 2017. Here is the link to the final presentation video and png
Ten months later I reopened the box where I had kept my final project and re assembled it.
It took me one morning and it was running. I understood the so much I learned during Fabacademy, and I felt confident to push the next process in the spirale.
I rewrote the code to reduce it from 650 to 65 lines (including comments and credits), and explored a bit deeper formal aspects of the design.
- "#define" potis min (101) and max (898) reading
-rewrite the voidloop to convert the reading into a float and normalize it to [0, 1].
edit colorChase to activate the appropriate LED, given value v - beeing a value in [0, 1] we subdivide the unit range in NUMPIXELS slots, and find the index that v falls within. This produces a number in [0, NUMPIXELS-1].
The if and if else statement were completely eliminated in the corelation between the potis and the Neopixels - kept only to program dynamic variationns of the color of the led.
The relationship between the leds and the potis value is much better. When the leds sequence is fast it has reverb effect of a light trail which I find interesting. - it is not easy to perceive the effect in the videos recording but it is in real life. Altogher just the adjustment in the code helps conveying a much narrow interaction between the user and the embedded technology.
I also re-packaged the artifacts in a slicker way, hiding all the cables, adding elements and setting the context to state more clearly the aesthetic dimension.
I added magnet rings at each end to which a 22mm metal ball con hold and acting as flexible stopper - when the impact is too strong the impacting ball ejects the ball attached to the magnet that gets ejected. The magnet creates an attraction and retains the moving ball when the bridge is up, and until the last led turns on at which point the weight of the ball releases it.
I also addded 2 stainless steel rod of 2mm. diam as rails for the metal ball to travel reducing the friction to a minimum and hoping to get a postion data by measuring the resistance value as the ball moves position on the bridge.
Bills of materials
- 1 meter square of 5 mm. thick MDF (CNC milled)
- 3 metal ball bearing 22mm. diameter
- 3 meter linear of 2mm. diam. stainless steel rod
- 1 strip of neopixel (53 leds)
- 1 single turn potentiometer
- 1 FTDI cable
- 2 gears (3D printed - 1 small, 1 big)
- 1 potentiometer support (3D printed)
- 1 m. linear of 28 AWG cable (white)
- 1 m. linear of 28 AWG cable (black)
- 1 m. linear of 28 AWG cable (blue)
- 1 m. linear of 28 AWG cable (red)
- 8 female terminal 28 AWG cable
- 8 male terminal 28 AWG cable
- 2 3mm. diam. 50mm. long metric threaded bolts
- 2 3mm. diam. 50mm. long metric threaded bolts with allen key head
- 2 3mm. diam. metric threaded nuts
- 2 3mm. diam. washer
- 2 25 mmm. diameter magnet rings
- 2 2mm. diameter 5mm. long wood screw with taper head
- white carpentry glue
- 1 Attitiny44 micropropcessor
- 2 3pin header (for potentiometer + neopixels)
- 1 6pin header (for FTDI cable connector)
- 1 Xtal MHz Crystal resonator
- 1 10KΩresistor
- 2 470Ω resistor
- 1 1uf capacitator
- 1 Xtal 20 MHz Crystal reosnator
- 1 1000uf capacitator (for neopixel strip)
To complete the dual version of the sculpture I will need the same materials listed above + the following components:>
- 1 stepper motor nema17
- 53 leds and/or phototransitors
- 5cm. x 100 cm. linear of copper plotter vynil
END PHASE 1 - 2017
Created the first draft of the structure and many experiments to develop the technology that will be used either in the analog or in the digital replica. The basic structure conveys the idea of equilibrium and balance. I am interested in keeping both machines as similar as possible - like if they were twins - from far apart they look the same but once close and with the experience their difference become so obvious. I am designing the elements in Rhino. The structure is CNC milled (MDF 9mm for the base and 25mm for the bridge) and the other components are 3D printed. I have made an Attitiny84 circuit board with a potentiometer and 2 outputs to neopixel strips and programmed it in Arduino Ide so the potentiometer's controls the sequence of led turning on and off.
This iteration serves me to proof the concept and pull conclusion towards a defenite design. My idea is to place a copper vynil trace on the analog bridge so when the metal balls passes the leds turn on and to connect the leds to acharlie plexing as input on the circuit board. Those datas in correlation with the ptentiometer value will generate the code the digtal replica execute. I this case the potentiometer will be replaced by a stepper motor.
I have started research and experimentation for the analog unit challenge of capture the position of the metal.
Logically the fist test was to try convert into value the resistance of the stainless stell rod when the ball create the contact between the 2 and in different position. I choose stainless because it is the less conductiv metal that is eas ily available a d cheap.
I frst measured the resistance of the 2 rods using a multimeter. It marks something but is a very low resistance and shall be pretty difficcult to get a value from it.
Following I converted an Arduino onto a Ohm meter. amd placing the rods on the bridge in their proper positions I registered the value in the Arduino serial monitor and graph it using a simple graph processing example - nover forget to select the print port in processing .
I connected 5 v to one of the rod and the the other rod to the data line (A0) and though a 1kohm resitor (resistor should always be more the the material reistance so material reistance can be registered) to the GND.
I loaded an Arduino graph example sketch and read the serial monitor. In a range of value between 0 and 1023 the resistance registered made very little difference when the ball was at the closer point as at the furthest point. Too litlle reistance to register. And also full of noise and drops - suddenly falls to o, than up, and so on but erratically.
Than I opened a Pocessing sketch (cut and paste from the Arduino + change port to 1 in processing). To make shure it would graph properly I first connected the potis of the sculpture to the Arduino boad and run the script.
Then I reconnected the stainless rod the Arduino and had it graph.
The result comfirms that those stainless rod do not serve the purpuse of capturing the position of the ball on the bridge. The stainless rod are interesting for the sole purpoe of the velocity the ball gains due to very low friction, and the rigidity.
Looking into other solutions
Looking for new solutions I tested graphite reisistance. It would be a great material but it is very weak material and risks to wear out easily.
Before going aany further I decided to look into more options and consult friends who know about physic and electronics. A few idea came acrosss.
1º to replace the stainless rod by a tense nicrom string. Nicrom sting is fabricated industrially and offers pretty high resitance factor. Tensing the strings shall be introduced into the design and I reckon it would go well with the aesthetic.
2º - Embed 53 diode leds in the bridge so the metal ball would rools on top covering and uncovering the the diodes. For this to work the code would have to be adapted so the Neapixel generates enough light for the Diode to react. I can see many possiblities and I like also the potential aesthetic but it requires a bit more investment and hardware time.
3º Last but not least would be to create a "digital" physical circuit using 5 lines of copper vynil at the bottom of the slot and intermittent as 0 and 1. First line would be 64 section. Second line 32, 3rd 16, 4th 8, 5th 4. For more precision I could add another line (which would be 2 sections) which would allow to have 2 reading for each led of the Neopixel strip.
End of current research.
This project is licenced under: Isaac Pierre_CC_ANC 4.0_International
I am thankful for all the learnings that have grown in me during the apprentiship of Fab Acameny for I know they will last for ever.
Access source code and original files here and see screen recording of Academany Fab-2017.06.16C Final Presentations 3.Isaac Pierre/digitalog 1h:10 min..