O-mat

31,697

195

37

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;

Attachments

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!!

1 Person Made This Project!

Recommendations

  • Microcontroller Contest

    Microcontroller Contest
  • Automation Contest

    Automation Contest
  • Make it Glow Contest

    Make it Glow Contest

37 Comments

0
panarowi
panarowi

Question 7 months ago

Hi Oniria
Thanks for this nice tutorial.
I made the sensor for a sound design project and it works well.
I'm using Max/MSP and machine learning to play with sound in real time.
I
realized that the values are always jumping between 0 and the actual
value (e.g 180 - 0 - 180 - 0 - 180 - 0 ... instead of just keeping 180).
This is annoying because it adds a lot of complexity in datas and make every mapped parameter jump as well.
I'm pretty sure the issue comes from the Arduino code but can't find where exactly (not a pro in Arduino programming...).
Do you have any idea to fix this?
Thanks!

0
adamcbrz
adamcbrz

Answer 5 months ago

The Arduino code is clamping the values so you can adjust that code to get the raw value if need.

I added comments to help explain the code.

0
jdestoesta
jdestoesta

7 months ago

Hi ONIRIA! Wanted to ask what's the importance of the arduino sketch (omat.ino)?

0
aris.subril
aris.subril

Question 9 months ago on Introduction

Dear ONIRIA. is this velostat pressure sensor is piezoresistive type sensor?

0
KvdL.
KvdL.

4 years ago

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!

0
OniriaMX
OniriaMX

Reply 4 years ago

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!

0
Carlospilotfish
Carlospilotfish

Reply 1 year ago

Dear Oniria, I am in the exactly same situation as KvdL. I impletented the change you told but it is not solved, as before, when I press I get a different result every time, and now, it moves creating waves. Please, could you help me?

0
rajirk
rajirk

Question 1 year ago on Step 8

i want know about velostat how much weight upto used?

0
bogacki.mike
bogacki.mike

Question 1 year ago

Great video, I don’t have the knowledge base to make one of these. Can anyone tell me where I could buy pre-made pads or what to search for so I can purchase these mats? Thank you!

0
maikel.stawarczyk
maikel.stawarczyk

Question 2 years ago

I would like to disiplay on my computer something like a heat-map when standing on the mat. It shall show you where the pressure is the highest (red) and the are where it is not so high (green-yellow). Do someone of you here have any ideas on how to change the arduino sketch or how to make this work? Would appreciate any help so much. Thank you so far!

Cheers

0
ajayiitb
ajayiitb

Answer 1 year ago

Hello dear mam/sir,

I need your help
can you tell which software you used to see the heat map?

3
TjW16
TjW16

2 years ago

Where do I find the OpenGL library for use in the Arduino IDE ??

0
mattxcox
mattxcox

Question 2 years ago on Introduction

with this mat, are you limited to square shapes, or is the design open to other geometrics? Such as a triangle with trimmed corners.

0
balbursa
balbursa

Question 2 years ago on Step 8

Hello OniriaMX,

Thank you for your help and share the project. I could not get response. I put my shreenshots. Java program gives error x and y were not used. I attached that.

What is the problem?

page1.JPGpage2.JPGpage3.jpgpage4.jpg
0
RyanD258
RyanD258

Answer 2 years ago

I am getting the same error. did you ever solve it?

0
naveedshiliwala
naveedshiliwala

3 years ago

Hello OniriaMX,

I am trying a similar project, but the only difference in my project is i am using 32 columns and 30 rows thereby using 4 16 channels MUX. 2 for columns and 2 for rows. My question is will i be able to read the data if pressure is applied on both the side of the column ? meaning if the pressure is applied on the first 16 columns as well as the last 16 columns simultaneous, because they will be connected to 2 different mux.

0
RyanD258
RyanD258

Reply 2 years ago

where you able to do this with 32 columns and 30 rows. Currently working on a project where I need to do this and was wondering if you got the code to work.

0
balbursa
balbursa

Tip 2 years ago

Hello,

Unfortunatelly this code does not work.

0
balbursa
balbursa

2 years ago

I have problem with the java code, Is there anyone who wants to help me?

I could not get response from the software. and Java code gives error. I attached.

Thanks in advance

F84KZR7JEOIRGKT.LARGE.jpgF94CXYXJEOIRGKG.LARGE.jpgFH9JWORJEOIRGL8.LARGE.jpgFQ7A13FJEOIRGKS.LARGE.jpg
0
AndrejC7
AndrejC7

3 years ago

Description says


  • 16 1k [ohm] resisitors

However in the schematics it seems like you use 220 resistors, is that just a mistake?

My mat is working, but it's incredibly unresponsive. It only registers strong implact (and bending for some reason). Is there a was to increase sensitivity in the code?