Introduction: O-mat

Have you ever wanted to make a giant trackpad? With this tutorial you can make any size of trackpad/force-pad and test it with the included software demo.

We are ONIRIA, we create content, design hardware and develop software to erase the limits of reality and immersive technology.

In the search of full immersion for the virtual experiences we create, O-mat was born. O-mat is an interactive mat that recognizes steps. It is built with 225 (a 15 by 15 matrix array) pressure sensors made of a special material called velostat. This material changes its resistance when pressure is applied to it. We designed an Arduino shield so it could be easy to use, scalable and open platform (coming soon).

Step 1: The Materials and Tools

For making the mat:

Materials:

Tools:

  • Ruler
  • Measuring tape
  • Cutter
  • Glue
  • Crayon/marker
  • Soldering Iron
  • Multimeter

For making the circuit:

Materials:

Tools:

  • Wire strippers
  • Diagonal cutters

Step 2: For the Mat - Part 1

Use this Youtube video as a guide.

The key component that makes O-mat work is the velostat. When pressure is applied to it, the velostat changes its resistance. Like you saw in the video, we are creating a matrix sensor, specifically a 15 by 15 sensor matrix (225 sensors!).

Step 3: For the Mat - Part 2

Summing up, you will end having two sides of the mat, one with copper columns and one with copper rows. You will need to weld one by one (I recommend using a ribbon cable for ease of use). You will need to insert the velostat between the to sides of the mat. To finish, you will need to paste both sides of the mat and you are ready to start the circuit.

If you want to make a quick test, with te help of a multimeter, sense one of the pins of the ribbon cable connected to the copper rows of the mat with one of the pins of the ribbon cable connected to the copper columns of the mat. Apply some weight to the mat and see if the resistance changes, if you don´t see that the resistance changes apply weight in other area. If still you don´t detect a change in the resistance check that you make a good welding in the copper areas and the velostat is between.

Step 4: For the Circuit

Use as guidance the circuit diagrams that are above.

When you finish connecting all the parts in your breadboard, connect the two cables of the mat, it doesn't matter the orientation or the order.

We have just designed the arduino shield, If you want one, you can contact us in our web page!

Step 5: Connect It to the Computer

All right! At this point you should have something like the image above (the mat with the circuit).

Lets connect the arduino with the computer, if you're using an arduino mini pro, remember that you need an FTDI!

You will need to have the arduino IDE and processing.

Step 6: The Code - Arduino Sketch

Before you upload the arduino sketch to the micro-controller, check that the pins are connected as the first lines of the code.

Below is the configuration for the arduino mini pro as the circuit diagram that is in the previous step, this configuration is the default configuration in the arduino sketch

//Mux control pins for analog signal (SIG_pin) default for arduino mini pro
const byte s0 = 13; 
const byte s1 = 12; 
const byte s2 = 11; 
const byte s3 = 10;
//Mux control pins for Output signal (OUT_pin) default for arduino mini pro 
const byte w0 = 9;  
const byte w1 = 8; 
const byte w2 = 7; 
const byte w3 = 6;
//Mux in "SIG" pin default for arduino mini pro  
const byte SIG_pin = 0; 
//Mux out "SIG" pin default for arduino mini pro 
const byte OUT_pin = 5;
//Status and Column pins default for arduino mini pro 
const byte STATUS_pin = 3; 
const byte COL_pin = 2;

If you decided to make the circuit with an arduino uno, the configuration of the pins must be like the code bellow

//Mux control pins for analog signal (SIG_pin) default for arduino mini pro
const byte s0 = A4; 
const byte s1 = A3; 
const byte s2 = A2; 
const byte s3 = A1;
//Mux control pins for Output signal (OUT_pin) default for arduino mini pro 
const byte w0 = 6;  
const byte w1 = 5; 
const byte w2 = 4; 
const byte w3 = 3;
//Mux in "SIG" pin default for arduino mini pro  
const byte SIG_pin = 0; 
//Mux out "SIG" pin default for arduino mini pro 
const byte OUT_pin = 2;
//Status and Column pins default for arduino mini pro 
const byte STATUS_pin = 8; 
const byte COL_pin = 9;

Step 7: The Code - Processing

For the processing code, you will have to change only one number. You will have to change the number inside of the Serial.list()[numbertochange]. Without changing anything in the processing code, try to run the code, in the console window you will see the list of the serial ports, identify the arduino serial port and use that number for modifying in the following line:

myPort = new Serial(this, Serial.list()[0], 115200);

In mi case i found that I have it to change it to

myPort = new Serial(this, Serial.list()[5], 115200);

Step 8: Play With It!

If you starting to see that the one of the leds starts blinking and you saw a screen like the one above, you have made it. You can start playing with your new O-mat!

Congratulations!!

Comments

author
P384WEUG232UP4KCMWTMDT made it!(author)2017-07-17

thank you for your instructive video.but when I try the build the circuit I got a problem.there are 16 wires on ribbon cable so 16 pin connections on MUX.but on the mat we have 15 copper strips ( so we have have made 15 connections by soldering) What about the remaining cable .where should we solder it on the mat?

author
SuriS4 made it!(author)2017-03-04

Thanks for this!!
I've set up the circuit and assembly as described and programmed by Arduino uno with the code you have. Since I have a PC, I have to use the 'Processing' software instead of the grab software you're using. I'm assuming the code should be the same? I'm coming up with these error messages however...

Any suggestions?

Capture.PNG
author
bfaustsr made it!(author)2016-09-06

Great project thanks for sharing is it possible to use this concept and modifying it for pressure mapping say on a mattress for example?

author
OniriaMX made it!(author)2016-09-07

Hi, it would be a challenge since the resistance in the velostat changes if you bend it. I would recommend to use a rigid surface where the velostat rest.

author
BertvThoorn made it!(author)2016-04-29

Great instructable! I was wondering, is it possible to combine multiple sheets of Velostat to increase the surface area? If so where do I need to adjust this in the Arduino code? Is it sufficient to change the [15][15] matrices to the desired amount?

author
OniriaMX made it!(author)2016-05-17

Yes it should work, but I think you should change quite a bit the processing code.

Cheers!

author
KvdL. made it!(author)2016-05-13

Dear ONIRIA, I have an annoying problem: I built the mat exactly according to the instructions (with an Arduino Uno instead of a Mini Pro). Everything seemed to be working just fine, but the places that are pushed on the mat don't correspond with the image feedback in processing. The wires are not corrected incorrectly, so I think it has something to do with the communication between Arduino and Processing. Also, every time I reset the Arduino Uno, the grid changes again: making a different part of the grid "grow" when I am pressing the same place on the mat. Do you have any ideas on how to solve this issue? Thanks!

author
OniriaMX made it!(author)2016-05-17

Hi!

Do you change the code in the arduino changing the order for the mux pins?

Or Maybe It is an error in the sync with all the values with processing, modify the 101 line of processing:

Change from this:

if (serialCount > 224 )

To this

if (serialCount >= 224 )

Cheers!

author
frivolt made it!(author)2015-10-26

Can I use this technique if I want a array of 10x100 where the 10 ones are 2 meters each and the 100ds is 10 cm each and overlap the long ones? My goal is to get a long pressure plate that isn't so wide

author
OniriaMX made it!(author)2015-11-05

Yes, you could do it, it could be done with any type of geometry. You only have to ensure that there is copper under and below of te velostat, and you can make any geometry type of mat.

author
frivolt made it!(author)2015-10-26

Is it possible to build a long sensor board with this technique? Like 10x100 array. Where the 10 are 2 meters long and the 100 is 10 cm long

author
ciscospice made it!(author)2015-08-27

What if you just wanted to measure pressure anywhere on the mat without tracking the specific location of the pressure? Would you just make sure that the copper strips were attached to each other with conductive thread or tape? Or use some type of conductive mesh (or fabric)?

author
OniriaMX made it!(author)2015-08-27

Yes you can do that! You have to only put a conductive material below and above the area of the velostat that you want to measure pressure.

author
PiRaspBerry made it!(author)2015-07-29

Hello, i want to make this but what is velosat? can you explain or do you know the Dutch word for it?

author
OniriaMX made it!(author)2015-07-29

Hi, sorry I don´t know how it's called in Dutch, but maybe this site could help you for more information:

https://www.adafruit.com/products/1361

Cheers!

author
KyleTheCreator made it!(author)2015-06-22

Cool concept! And btw, welcome to instructables:)

author
OniriaMX made it!(author)2015-06-24

Thank you!!

author
gmendez3 made it!(author)2015-06-24

¡Qué bonito Instructable! Bienvenidos a la comunidad de tutoriales más chida! Y rífense algo en Spanish! :)

author
OniriaMX made it!(author)2015-06-24

Gracias!!! Ya estamos haciendo la versión al español!! XD

author
tomatoskins made it!(author)2015-06-22

Really cool idea!

About This Instructable

13,898views

176favorites

License:

More by OniriaMX:Multi Touch/Force Midi Drum Pad (O-mat)O-mat en españolO-mat
Add instructable to: