513
edits
No edit summary |
No edit summary |
||
(11 intermediate revisions by the same user not shown) | |||
Line 27: | Line 27: | ||
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> | 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 | 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> | 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> | It will trigger certain sounds or other outputs such as motor movement or LED lights. <br> <br> | ||
Line 49: | Line 49: | ||
During the first class we investigated different materials and their conductivity / resistivity.<br> | 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 | I was mostly interested in materials that produce variable resistance when they are pushed and | ||
squeezed like „resistive plastic foam“. | 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> | ||
Line 63: | Line 63: | ||
The first experiment including matrix structures was about a chain of buttons.<br> | The first experiment including matrix structures was about a chain of buttons.<br> | ||
Each of these buttons were connected via different resistor values.<br> | 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 via a voltage divider with a 100K resistor.<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> | —> see the circuit drawing below <br><br> | ||
This „button - resistor structure“ assures that each button provokes a specific and distinguishable value in the Arduinos serial reading.<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“. | 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 a closer look at a toy including a keyboard matrix to play a funny collection of sounds.<br> | 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> | At first we traced each tone back to its switch on the matrix.<br> | ||
Then we soldered | 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> | ||
Line 89: | Line 86: | ||
We had the idea to further influence and control the sounds with an external switching device.<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 controlled by the arduino via a | 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. | 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 every available sound on the toy chip. | 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> | ||
Line 102: | Line 100: | ||
After that I decided to explore the toy matrix a little further.<br> | After that I decided to explore the toy matrix a little further.<br> | ||
A drawing helped me to understand and trace the connections inside the matrix structure.<br> | A drawing helped me to understand and trace the connections inside the matrix structure.<br> | ||
I then attached a DIY connector in order to use the bottom connectors. | 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 115: | Line 112: | ||
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.<br> | 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> | ||
I was mostly interested in using the matrix as a variable resistor rather than using it as a „multiple digital 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<br> pin input device“. (see experiment no. 2)<br> | ||
I achieved that by connecting different resistor values in between each contact of the vertical and the horizontal button lines.<br> | I achieved that by connecting different resistor values in between each contact of the vertical and the horizontal<br> 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 Arduinos analog input.<br> | ||
The matrix is actually meant to be used as a "multiple digital pin input / output interface" like shown on this 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 this<br> website (http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) . <br><br> | ||
In my experiment every button represents a certain value in the analog input.<br> | In my experiment every button represents a certain value in the analog input.<br> | ||
Line 131: | Line 128: | ||
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 144: | Line 142: | ||
'''5) the toy keyboard matrix as a resistive sensor''' | '''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 arduinos analog input.<br><br> | 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.<br> | ||
I used a very resistive material in order to access the matrix (graphite lines).<br> | 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 define clear input values.<br><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: | A cool discovery: | ||
The multimeter shows that I get a certain value of resistance for each button when all the vertically and all the horizontally connected „lines“ are connected together. <br><br> | 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 158: | Line 155: | ||
This way it is possible to use the matrix for instance as a variable resistor for a 555 timer chip in astable mode between pin 6 and pin 7: <br><br> | 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 166: | Line 163: | ||
'''6) exploring different ways of implementing switches in a carpet''' | '''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 in everyday objects.<br> | 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 omnipresent.<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> | I solved this problem by using an anti-sliding mat that separates the contacts of the switches.<br> | ||
Line 175: | Line 172: | ||
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> | My solution consists of a piece of cardboard covered with aluminium foil. <br><br> | ||
[[File:carpet_switch_alu.jpg]]<br><br> | [[File:carpet_switch_alu.jpg]]<br><br> | ||
Line 182: | 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 switches.<br> | 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 different sizes until I found a size that responds to the size and pressure of an „average human footstep“. <br><br> | I tried different sizes until I found a size that responds to the size and pressure of an „average human footstep“. <br><br> | ||
Line 194: | 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