513
edits
No edit summary |
No edit summary |
||
(16 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
I am interested in exploring different ways of interaction between humans and their everyday environment of things.<br> | I am interested in exploring different ways of interaction between humans and their everyday environment of things. <br> | ||
In this case I am focusing on the common activity of walking in connection with the carpet as a customizable floor covering.<br> | In this case I am focusing on the common activity of walking in connection with the carpet as a customizable floor covering.<br> | ||
I want to create a carpet / a collection of carpets that sense people walking on it / them and then trigger a certain output as a response.<br> | I want to create a carpet / a collection of carpets that sense people walking on it / them and then trigger a certain output as a response. <br> | ||
I would like to create a complex environment in which people have to move through the space in order to explore its different features. <br> | |||
Therefore I want to explore possibilities of creating an unpredictable output environment by introducing a certain amount of coincidental behavior.<br> | |||
The minimum goal of this course is creating a single interactive carpet.<br> | The minimum goal of this course is creating a single interactive carpet.<br> | ||
This idea is related to another project in which I designed a kind of yoga mat.<br> | |||
I did not yet include electronics in the mat because I am doubtful about the determined amount of switches and their pre defined outputs.<br> | |||
The interactive carpet is somehow an attempt to find out what happens if electronics are included and how the outputs can become unpredictable.<br><br> | |||
[[File:Sketch_hacklab_1.jpg]] | [[File:Sketch_hacklab_1.jpg]] | ||
Line 16: | Line 20: | ||
== Technical implementation == | |||
I want to construct a matrix structure in order to implement a „multiple switch device“ that can be triggered by peoples walking on it.<br> | |||
Therefore I want to design switches that can handle the weight of a person standing on them.<br> | |||
The switches have to be made of a flexible material so that they automatically return to their „off-state“ when the person changes his/her location. <br> | |||
I will try to implement a kind of resistor ladder in order to reduce the amount of input pins needed.<br> This amount can easily become very high depending on the amount of sensors.<br> | |||
The outputs will be controlled by an Arduino Micro controller board.<br> | |||
It will trigger certain sounds or other outputs such as motor movement or LED lights. <br> <br> | |||
I accomplished different experiments in order to outline the needs of my final idea: <br> | |||
1) exploring touch sensor material <br> | |||
2) creating a simple button matrix / button resistor ladder <br> | |||
3) hacking a toy keyboard + exploring its inner architecture <br> | |||
4) reverse engineering and connecting a keyboard matrix with Arduino + exploring its functions <br> | |||
5) the toy keyboard matrix as a resistive sensor | |||
6) exploring different ways of implementing switches in a carpet | |||
== Protoyping experiments == | == Protoyping experiments == | ||
<br> | |||
'''1) DIY Sensor Materials''' | '''1) DIY Sensor Materials''' | ||
During the first | During the first class we investigated different materials and their conductivity / resistivity.<br> | ||
I was mostly interested in materials that produce variable resistance when they are pushed and squeezed like „resistive plastic foam“. | I was mostly interested in materials that produce variable resistance when they are pushed and | ||
squeezed<br> like „resistive plastic foam“. | |||
Another nice discovery was combining a metallic sponge and a piece of aluminium foil. <br> | Another nice discovery was combining a metallic sponge and a piece of aluminium foil. <br> | ||
The outcome is a sensor that reacts to force.<br> | The outcome is a sensor that reacts to force.<br><br> | ||
<br> | |||
[[File:touchsensor_tryout_hacklab.jpg]]<br><br> | [[File:touchsensor_tryout_hacklab.jpg]]<br><br> | ||
[[File:touchsensor_hacklab.jpg]] | [[File:touchsensor_hacklab.jpg]] | ||
Line 66: | Line 61: | ||
'''2) „Button Resistor Ladder“'''<br> | '''2) „Button Resistor Ladder“'''<br> | ||
The first experiment | The first experiment including matrix structures was about a chain of buttons.<br> | ||
The last resistor of that kind of „resistor ladder“ | Each of these buttons were connected via different resistor values.<br> | ||
The last resistor of that kind of „resistor ladder“ connects the whole structure to the Arduinos analog input<br> via a voltage divider with a 100K resistor.<br> | |||
—> see the circuit drawing below <br><br> | |||
This „button - resistor structure“ assures that each button provokes a specific and distinguishable value<br> in the Arduinos serial reading.<br> | |||
The experiment could lead to a more complex button structure that can be used as an „analog input matrix“. <br><br> | |||
[[File:button_matrix_ladder.jpg]]<br><br> | [[File:button_matrix_ladder.jpg]]<br><br> | ||
Line 80: | Line 78: | ||
'''3) hacking a toy keyboard, triggering it with relays + exploring its inner architecture''' | '''3) hacking a toy keyboard, triggering it with relays + exploring its inner architecture''' | ||
In the second experiment we took | In the second experiment we took a closer look at a toy including a keyboard matrix to play a funny collection<br> of sounds.<br> | ||
At first we traced each tone back to its switch on the matrix.<br> | |||
Then we soldered wires to the sound terminals in order to make the sounds externally accessible.<br><br> | |||
[[File:hacked_toy_matrix_l1.jpg]]<br><br> | [[File:hacked_toy_matrix_l1.jpg]]<br><br> | ||
[[File:hacked_toy_matrix_l2.jpg]]<br><br> | [[File:hacked_toy_matrix_l2.jpg]]<br><br> | ||
We had the idea to further influence and control the sounds with an external switching device.<br> | |||
Our solution was a chain of two relays [http://cdn-reichelt.de/documents/datenblatt/C300/RELAIS-FTRK1.pdf (this one)] controlled by the arduino via a darlington transistor [http://www.pollin.de/shop/downloads/D101063D.PDF ULN2803]. <br> | |||
These relays allowed us to turn the sound on and off so that little pieces of the sounds could be cut out. | |||
We stopped our experiment as soon as we realized that we would need a lot of (expensive) relays to control<br> every available sound on the toy chip.<br> | |||
[https://en.wikipedia.org/wiki/Darlington_transistor see "Darlington Transistor" on Wikipedia ] | |||
<br><br> | |||
[[File:hacked_toy_matrix_sound.jpg]]<br><br> | [[File:hacked_toy_matrix_sound.jpg]]<br><br> | ||
[[File:hacked_toy_matrix_relay_draw.jpg]]<br><br> | [[File:hacked_toy_matrix_relay_draw.jpg]]<br><br> | ||
I | After that I decided to explore the toy matrix a little further.<br> | ||
A drawing helped me to understand and trace the | A drawing helped me to understand and trace the connections inside the matrix structure.<br> | ||
I then attached | I then attached a DIY connector in order to use the bottom connectors.<br><br> | ||
[[File:hacked_toy_matrix_pic.jpg]]<br><br> | [[File:hacked_toy_matrix_pic.jpg]]<br><br> | ||
Line 104: | Line 109: | ||
''' | '''4) Reverse-engineering and programming a common keyboard matrix''' | ||
This is a common keyboard matrix with a 4 x 3 buttons number plate.<br> | This is a common keyboard matrix with a 4 x 3 buttons number plate.<br> | ||
I „reverse engineered“ the matrix structure (hidden in the case) after I soldered pin headers to its connectors in order to plug it into the bread board. | I „reverse engineered“ the matrix structure (hidden in the case) after I soldered pin headers to its connectors<br> in order to plug it into the bread board.<br> | ||
<br> | I was mostly interested in using the matrix as a variable resistor rather than using it as a „multiple digital<br> pin input device“. (see experiment no. 2)<br> | ||
I was mostly interested in using the matrix as a variable resistor rather than using it as a „multiple digital pin input device“.<br> | I achieved that by connecting different resistor values in between each contact of the vertical and the horizontal<br> button lines.<br> | ||
I achieved that by connecting different resistor values in between each contact of the vertical and the horizontal button lines. <br> | In the end a voltage divider helped to create different voltage changes for the Arduinos analog input.<br> | ||
In the end a voltage divider helped to create different voltage changes for the | The matrix is actually meant to be used as a "multiple digital pin input / output interface" like shown on this<br> website (http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) . <br><br> | ||
The matrix is actually meant to be used as a "multiple digital pin input / output interface" like shown on | |||
<br><br> | In my experiment every button represents a certain value in the analog input.<br> | ||
By doing that I discovered a major problem: some of the values almost overlapped. <br> | |||
By doing that I discovered a major problem: some of the values almost overlapped. | Another problem was the amount of noise produced by the analog input. <br><br> | ||
Therefore I had to define a certain range of values for each button. Although this worked a bit better there was still a lot of overlap.<br> | |||
This overlap sometimes lead to the effect that the interpretation of buttons being pressed was wrong.<br> | Therefore I had to define a certain range of values for each button. <br> | ||
<br> | Although this worked a bit better there was still a lot of overlap.<br> | ||
This overlap sometimes lead to the effect that the interpretation of buttons being pressed was wrong. <br><br> | |||
Another interesting part of that experiment was the code.<br> | Another interesting part of that experiment was the code.<br> | ||
I did not use any library - instead of that I tried to use my basic programming skills to set it up by myself.<br> | I did not use any library - instead of that I tried to use my basic programming skills to set it up by myself.<br> | ||
It surprisingly worked out quite well - despite the mentioned overlap problem and the face that I needed a lot of memory | It surprisingly worked out quite well - despite the mentioned overlap problem and the face that I needed<br> a lot of memory. <br><br> | ||
In order to solve these issues in the future I need to learn about programming „arrays“ and „forloops“ that<br> can help minimizing the amount of code.<br> | |||
The overlap problem could be solved by using binary functions / average measurements that define clearer<br> value states. <br> | |||
[http://playground.arduino.cc/Main/KeypadTutorial see "Arduino Keyboard Matrix Tutorial"] | |||
<br><br> | |||
[[File:matrix_sketch_1.jpg]]<br><br> | [[File:matrix_sketch_1.jpg]]<br><br> | ||
Line 132: | Line 140: | ||
'''5) | '''5) the toy keyboard matrix as a resistive sensor''' | ||
The idea of using a matrix as a variable resistor was a good way of connecting the toy-keyboard to the<br> arduinos analog input.<br><br> | |||
My hacked version of the toy keyboard does not really work as a system of clear state switches.<br> | |||
My hacked version of the toy keyboard does not really work as a system of clear state switches | I used a very resistive material in order to access the matrix (graphite lines).<br> | ||
This material in combination with the original matrix circuit material (also very resistive) makes it hard to<br> define clear input values.<br><br> | |||
A cool discovery: | |||
The multimeter shows that I get a certain value of resistance for each button when all the<br> vertically and all the horizontally connected „lines“ are connected together. <br><br> | |||
[[File:resistor_values_toy_matrix.jpg]]<br><br> | [[File:resistor_values_toy_matrix.jpg]]<br><br> | ||
Line 143: | Line 155: | ||
This way it is possible to use the matrix for instance as a variable resistor for | This way it is possible to use the matrix for instance as a variable resistor for a 555 timer chip in astable<br> mode between pin 6 and pin 7: <br><br> | ||
[[File:555_toy_matrix.jpg]]<br><br> | [[File:555_toy_matrix.jpg]]<br><br> | ||
Line 149: | Line 161: | ||
'''6) | '''6) exploring different ways of implementing switches in a carpet''' | ||
The final idea after my matrix explorations is to modify our environment by implementing a similar structure<br> in everyday objects.<br> | |||
I want to use a carpet as the main interface object as it is 1) easy to access and 2) something casual and<br> omnipresent.<br> | |||
The first problem is to install switches inside / underneath the carpet.<br> | The first problem is to install switches inside / underneath the carpet.<br> | ||
I solved this problem by using an anti-sliding mat that separates the contacts of the switches.<br> | |||
It is a very flexible material that is easy to manipulate without the need of professional tools.<br> | It is a very flexible material that is easy to manipulate without the need of professional tools.<br> | ||
Another problem is designing and building the switches. <br> | |||
The material needs to be 1) flexible (coming back into its original form) and 2) conductive.<br> | |||
Another problem is | |||
I experimented with different materials such as aluminium foil, aluminium plates and a conductive sponge.<br> | I experimented with different materials such as aluminium foil, aluminium plates and a conductive sponge.<br> | ||
My solution consists of a piece of cardboard covered with aluminium foil. <br><br> | |||
<br> | |||
[[File:carpet_switch_alu.jpg]]<br><br> | [[File:carpet_switch_alu.jpg]]<br><br> | ||
Line 170: | Line 178: | ||
I also discovered that the size of the gaps inside the flexible grid plays a big role in connection to the performance of the | I also discovered that the size of the gaps inside the flexible grid plays a big role in connection to the performance<br> of the switches.<br> | ||
I tried | I tried different sizes until I found a size that responds to the size and pressure of an „average human footstep“. <br><br> | ||
[[File:carpet_grid_sw1.JPG]]<br><br> | [[File:carpet_grid_sw1.JPG]]<br><br> | ||
Line 182: | Line 190: | ||
[https://vimeo.com/170147174 ===> VIDEO] | [https://vimeo.com/170147174 ===> VIDEO] | ||
== Finishing the Prototype == | |||
<br> | |||
The plan was to implement more switches into the carpet-matrix in order to allow playing with more output possibilities.<br><br> | |||
I achieved that by changing the design:<br><br> | |||
1) Layout<br> | |||
2) Switch Design<br> | |||
3) Programming<br><br> | |||
1) <br> | |||
I designed a bigger and more complex layout of „switch holes“ inside the „distance grid“.<br> | |||
The switch holes are VERTEILT all over the mat.<br> | |||
I kept all the cut out pieces in order to change the design as I need it by putting them back in place.<br><br> | |||
[[File:Raster_Styro.jpg]]<br><br> | |||
2) <br> | |||
I changed the switch design: they now consist of two carpet-size cardboard pieces that are supplied with „circuit lanes“ made of aluminium foil. <br> | |||
There are two cardboard pieces: one is equipped with the bottom part of each switch, the other one is equipped with the upper part. <br> | |||
The bottom part features eight and the upper part features six „circuit lanes“ that are located in a way so that they form a kind of matrix-grid <br> when they are put on top of each other. <br> | |||
[[File:Raster_Karton.jpg]] <br><br> | |||
[[File:Zeichnung_Karton.jpg]]<br><br> | |||
[[File:Zeichnung_Karton2.jpg]]<br><br> | |||
[[File:Zeichnung_Karton3.jpg]]<br><br> | |||
[[File:Alu_Karton.jpg]]<br><br> | |||
[[File:Raster_Alu_Karton.jpg]]<br><br> | |||
[[File:Alu_Karton2.jpg]]<br><br> | |||
I first planned to use a resistor ladder for the Analog input pin of the arduino in order to minimize the amount of pins being used.<br><br> | |||
[[File:Schematic_Raster_Styro.jpg]]<br><br> | |||
[[File:Alu_Resistor_Ladder.jpg]]<br><br> | |||
[[File:Alu_Resistor_Ladder2.jpg]]<br><br> | |||
As this did not work out (too many delays in the code, too slow, a lot of noise) I changed the design by attaching a separate <br>wire to each of the eight „circuit lanes“ that go to the Arduinos digital input.<br> | |||
Now there are 6 + 8 = 14 wires coming out of the carpet. 6 of them are used as „digital out HIGH signals“ and the other 8 <br>are used as „digital in, normally LOW“ pins that check if a button is pressed.<br> | |||
[[File:Arduino_Raster_Karton.jpg]]<br><br> | |||
3)<br> | |||
The resistor ladder idea did not really work.<br> | |||
Therefore I decided to get a bit more into working with the Arduino Keypad library.<br> | |||
The library is made for a 4x3 keypad matrix.<br> | |||
This layout can easily be changed by adding more COLS and ROWS to the array.<br><br> | |||
You can find more information about the library here:<br><br> | |||
[http://playground.arduino.cc/Code/Keypad] <br> | |||
[http://www.dummies.com/how-to/content/how-to-specify-userdefined-functions-for-your-keyp.html]<br><br> | |||
[[File:Arduino_Raster_Matrix_Carpet.png]]<br><br> | |||
External pullup or pulldown resistors do not need to be added.<br> | |||
The code uses the built in IMPUT_PULLUP command. <br> | |||
It is also configured to have a multi button press function for which you normally have to add diodes to each input<br> in order to prevent short circuits.<br> | |||
I don’t exactly know why but the comments tell that these external diodes do not have to be added when using <br>the keypad library.<br> |
edits