Introduction: How to Create the Truth: Truth Cube

I found out that all the biggest truths occur under ‘standard conditions’. These standard conditions are 25 degrees celsius and 100 kPa (Pressure).

In this instructable I will show you how to create a Truth Cube which creates moments of the truth by replicating the standard conditions. There are many ways of creating conditions for the truth, more than I know or could describe. Consequently in this instructable I will be showing you the cube method of reaching the truth.

Please take a look at my other instructables which describe alternative methods for reaching the truth.

Step 1: Materials

Materials:

  • 1 standard Acrylic sheet
  • 5 syringes (I used 100ml but the bigger the better generally)
  • Acrylic solvent glue
  • gaffer tape
  • Arduino Uno
  • BMP180 Barometric Pressure Sensor (or equivalent)
  • Arduino compatible LCD screen
  • Small DC heating element (I used a 12V 50W PTC Heating Element)
  • Wires Drill and drill bits

Desirable:

  • Laser cutter
  • Already existing cube or cube frame

Step 2: Building the Outer Cube

This truth cube consists actually of two cubes the inner cube and the outer cube, Unless you have a preexisting outer cube, like I did, It is best to start designing the outer cube first. When designing the outer cube you have 2 important considerations:

  1. The dimensions of the materials of what is inside
  2. The costs of the materials

In deciding the side length of your cube you must make allowances for the length of 2 syringes and your inside box which must be large enough to accommodate for your pressure sensor and heating element

The reason we start with the outer cube is that it will be the most expensive and difficult to fabricate. Making this box too large will be expensive and perhaps impossible to cut using the laser cutter.If you are using a laser cutter it is good to first check the size of the cutting bed available before making your plans as they were time-consuming to change when I realized my box was too big.

Step 3: Creating You Box Plans

In this project, I explored 2 different online laser cut box makers
makercase - use this one if you are going to manually cut out your box (ensure you pick the flat edge joints)

makeabox - use this one if you are going to laser cut, here we can use tabs to make our box fit together more easily

Both these tools ask for similar information regarding the dimensions of your box. Make sure you take note of whether you are measuring the inside or outside dimensions and that you are using the same thickness as the acrylic that you are using.

Step 4: Editing Your Plans

this step will require editing the designs we downloaded from the online box maker. It will require using a vector editing software such as illustrator or inscape or even a CAD package.
As I was already familiar with the free online CAD software onshape I uploaded the drawing file and edited them there.

Modifications:

We will need to cut a circle in the middle of 5 of the faces for our syringes (Diameter of my syringes wae 30mm). The uncut face will be the bottom of our box.

Step 5: Laser Cutting Inner Cube

For the inner cube repeat the same process we used on the outer cube. Too calculate the dimensions of our inner cube to do this we need to do the following calculation

Outside diameter of inner cube = Outside diameter of outer cube - 2*(distance to syringe nozzle - amount nozzle enters inner cube)

This is a part I got wrong so please make sure you draw it out on paper so you don't make the same mistake.

Modifications:

If the nozzles are not centered on your syringes you will need to make sure the syringe entry points are offset by the appropriate amount. Do this to all faces even though you only have 5 syringes as the bottom face whole will serve as an entry point for the wires going to you pressure sensors and heating element

Step 6: Gluing Cubes

Whether or not you were able to laser cut your plans or made them manually the gluing process should be the same.The benefit of laser cutting is that your faces should fit together perfectly and you have a tab to help your faces stay together while gluing.To glue, apply acrylic solvent to the inside edges where you faces meet, be careful not to get any glue near the middle of the faces as you may obstruct the truth viewing. Leave one face unglued and leave overnight to set. Remember it is not important that your outer cube is airtight but it is very important that your inner cube is.

Glue your inner cube using the same process ensuring that you leave one side unglued, again this will be the bottom.

Step 7: Creating Sensor Mount

We need to strategically place the sensor in the box so it accurately represents the temperature. I created a mount using nylon spacers which extended the sensor to the middle of the box.

Step 8: Inserting Heating Element and Sensor

Take the unglued face of your inner box, add you heating element and sensor mount to the bottom face ensuring that it is a safe distance away from the plastic, drill any new holes as required. Seal the holes using the acrylic glue.

Step 9: Connecting Hardware

Before we glue everything shut we need to check the electronics are working fine
Please refer to the above wiring diagram for connecting the hardware.

If you can use an lcd shield, this will make your life a lot easier!

Step 10: Code

This code has been modified from the adafruit sensor library.

Please download it here or copy and paste it from below into a black sketch.
This requires some knowledge about Arduino and it IDE which you can read here

<p>#include <Wire.h><br>#include <Adafruit_Sensor.h></p><p>#include < Adafruit_BMP085_U.h></p><p>#include  <LiquidCrystal.h></p><p>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);</p><p>/* This driver uses the Adafruit unified sensor library (Adafruit_Sensor),
   which provides a common 'type' for sensor data and some helper functions.
   
   To use this driver you will also need to download the Adafruit_Sensor
   library and include it in your libraries folder.</p><p>   You should also assign a unique ID to this sensor for use with
   the Adafruit Sensor API so that you can identify this particular
   sensor in any data logs, etc.  To assign a unique ID, simply
   provide an appropriate value in the constructor below (12345
   is used by default in this example).
   
   Connections
   ===========
   Connect SCL to analog 5
   Connect SDA to analog 4
   Connect VDD to 3.3V DC
   Connect GROUND to common ground
    
   History
   =======
   2013/JUN/17  - Updated altitude calculations (KTOWN)
   2013/FEB/13  - First version (KTOWN)
*/
   
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);</p><p>//Setting up variables for calculating a rolling average for pressure
const int numReadings = 50;</p><p>float readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
float total = 0;                  // the running total
float average = 0;                // the average
/**************************************************************************/
/*
    Displays some basic information on this sensor from the unified
    sensor API sensor_t type (see Adafruit_Sensor for more information)
*</p><p>**************************************************************************/
/*
    Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Pressure Sensor Test"); Serial.println("");</p><p>    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
    }
  /* Initialise the sensor */
  if(!bmp.begin())
  {
    /* There was a problem detecting the BMP085 ... check your connections */
    Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }</p><p>  //Displaying 
    lcd.begin(16, 2); //initalising size of display (16 collumns, 2 rows)
  lcd.setCursor(0,0); //set cursor to first row and first collumn
  lcd.print("Temp:");
  lcd.setCursor(0,1);
  lcd.print("Pres:");</p><p>}</p><p>/**************************************************************************/
/*
    Arduino loop function, called once 'setup' is complete (your own code
    should go here)
*/
/**************************************************************************/
void loop(void) {
  /* Get a new sensor event */ 
  sensors_event_t event;
  bmp.getEvent(&event);
 
  /* Display the results (barometric pressure is measure in hPa) */
  if (event.pressure)
  {
    /* Display atmospheric pressue in hPa */
    Serial.print("Pressure:    ");
    Serial.print(event.pressure);
    Serial.println(" hPa");
    
    /* Calculating altitude with reasonable accuracy requires pressure    *
     * sea level pressure for your position at the moment the data is     *
     * converted, as well as the ambient temperature in degress           *
     * celcius.  If you don't have these values, a 'generic' value of     *
     * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA   *
     * in sensors.h), but this isn't ideal and will give variable         *
     * results from one day to the next.                                  *
     *                                                                    *
     * You can usually find the current SLP value by looking at weather   *
     * websites or from environmental information centers near any major  *
     * airport.                                                           *
     *                                                                    *
     * For example, for Paris, France you can check the current mean      *
     * pressure and sea level at: <a href="http://bit.ly/16Au8ol" rel="nofollow"> http://bit.ly/16Au8ol </a>                   */
     
    /* First we get the current temperature from the BMP085 */
    float temperature;
    bmp.getTemperature(&temperature);
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" C");</p><p>    /* Then convert the atmospheric pressure, and SLP to altitude         */
    /* Update this next line with the current SLP for better results      */
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    Serial.print("Altitude:    "); 
    Serial.print(bmp.pressureToAltitude(seaLevelPressure,
                                        event.pressure)); 
    Serial.println(" m");
    Serial.println("");</p><p>  lcd.setCursor(5,0);
  lcd.print(temperature);
  lcd.print((char)223);
  lcd.print("C ");
 
 </p><p>  // subtract the last reading:
  total = total - readings[readIndex];
  // read from the sensor:
  readings[readIndex] = event.pressure;
  // add the reading to the total:
  total = total + readings[readIndex];
  // advance to the next position in the array:
  readIndex = readIndex + 1;</p><p>  // if we're at the end of the array...
  if (readIndex >= numReadings) {
    // ...wrap around to the beginning:
    readIndex = 0;
  }</p><p>  // calculate the average:
  average = total / numReadings;</p><p>  delay(1); 
  
  lcd.setCursor(5,1);
  lcd.print(average); // print average pressure 
  lcd.print("hPa");
  }
  else
  {
    Serial.println("Sensor error");
  }
  delay(0);
}</p>

Step 11: ​Making Cube Air Tight

Glue on the bottom face of your small cube with sensor and heating element attached. Unless you are amazing your box will not actually be airtight. To get around this I applied gaffer tape to the outside edges. I also applied more cube to where the wires enter the cube.You can test the air tightness of your box by blasting air into the cube and feeling where it comes out.


Note: that it's important to see inside this box as you don't want to miss any moments of truth so try not to obstruct any viewing.

Step 12: The Moment of Truth

Now it's time to put it all together,

place the inner cube inside the outer cube and insert syringes, Glue the lip of the syringes to the outside cube, secure with tape and leave to dry for 24 hours. When set remove the tape and you are done. Congratulations, you have taken your first step toward creating truth!

Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017