Creation By Error challenges and forces us to question our assumptions about the precision and accuracy of digital devices and how they are used to interpret and understand the physical environment. With a custom fabricated robot that emits an aura of “aliveness” and a bespoke networked system, the project captures, compares and materializes the discrepancies between our interpretation of the physical world and that of the robotic system. We are forced to contemplate the level of trust we hold in the data that's being created by many digital systems.
The Creation By Error robot is set placed facing a blank wall that is to be scanned. The space is for participants to wander around the installation to be observed, analyzed and indefinitely archived. The archived data is used is visualized and projected in real-time next to the robot. A static hanging mobile is hung near by. It displays the mean error of the measurements that were collected over an hour. The IRL distance measurements from the robot to the wall were calculated and then differenced with the 100,000+ data points that were collected. It’s these differenced measurements that form the shape of the mobile.

The contrast between the real-time data projection and mobile created through error opens discussion around the level of accuracy and truthiness that this data may have especially when these digital systems start to uniquely interpret their surroundings just like humans. The understanding of the physical world by digital systems may not be as mechanical and resistant to interpretation as once thought.

Step 1: Intro

What the final output will be

Step 2: Fabrication

There were a few different iterations that I tried for the brackets that are used to mount the motor to the stand. and then the ultrasonic sensor to the motor. Int his image I've shown the brackets holding a motor/sensor unit mounted to a pegboard. If you are going to be making many of these sensor objects the pegboard are pretty handy for testing.

In the next steps, I walk through the different materials that can be used to build the unit. I tried with both hand-making aluminum brackets, laser cutting acrylic brackets and getting a machine shop to bulk fabricate aluminum.

Depending on your aesthetic preference and what you have access to I would recommend the laser cut acrylic as the most efficient use of time efficient, then making aluminum brackets by hand was also a good experience but you need access to a shop and it is a bit time-consuming. Finally using a real machine shop with access to either a plasma cutter, waterjet or high power CNC would ideally be the best, but only for bulk orders since it is the most expensive.

Put the measurements for the wood pieces for making the stand as well as images for the stands.

Step 3: Aluminum Brackets

If you're going to make the aluminum brackets either by hand or through a machine shop you'll need to know the dimensions of the brackets. There's an image included with the dimensions.

Making brackets by hand.

When making the brackets by hand I used an aluminum "I-bar" from a hardware shop. It was something like 1" x 4' X 1/8". I cut the brackets with a hack saw and then started cutting out the required notches. For the bolt holes I used a drill. I would recommend just using a bit that will fit the screws that came with your servo, to attach the servo arm to the ultrasonic "L bracket". And also use a bit that fits the radius of the screws you are going to use to attach the bracket that holds the servo and mounts it to the stand.

For bending the brackets I put the brackets into a vice so the bend line shown in the image is flush with the top of the vice. I then took a rubber mallet and hammered down the aluminum down 90 degrees.


I would recommend that you cut the notches out of the bracket before bending it.

It is also helpful to insert the bracket with the notched half of the bracket held by the vice. This will ensure a much more even bend of the aluminum.

Step 4: Laser Cut Brackets

If you decide to go the laser cut route with either the acrylic or the aluminum, hopefully, the .ai file with the dimensions are helpful for getting this into the shop.

Once all of the flat brackets are cut, you will need to also bend them. For this, I used a 90-degree jig, a heated paint remover gun thing and a pair of helping hands.

I had a heat gun laying around which I used for different projects but I used a heat gun similar to Milwaukee one with dual heat settings. https://www.homedepot.ca/en/home/p.dual-temperatur...

If you are going to get a machine shop to fabricate the brackets usually for a little bit extra they will put the brackets through a metal bender or press and do this for you. If that is your route... do that.

Step 6: PubNub Integration

Next, all that valuable and interesting data that you are going to be gathering needs to be 1) stored somewhere 2) streamed / sent some how to the visualization app. For this I choose PubNub for it's data streaming capabilities.

You will want to go to https://www.pubnub.com/, create an account and then create a new PubNub channel.

You want to create an account and then create a new app.

Once you create the app you need to go to the Key Info. By default this key will be named Demo Keyset.

I've included an image to get the data streaming to work correctly with the Processing and "GET" requests required to publish data. Below are the settings that I have set up.

  • Presence => ON
  • Announce Max => 20
  • Interval => 20
  • Global Here Now => checked
  • Debounce => 2
  • Storage & Playback => ON
    • Retention => Unlimited Retention
  • Stream Controller => ON
  • Realtime Analytics => ON

The next steps are associated with the ESP8266 chip programming and the programming of Processing app.

Step 7: Arduino

program Arduino

My set up I used was runing the arduino platform and uing Arduino IDE with the Adafruit Feather HUZZAH ESP8266 chip. This was pretty helpful with connections to wifi etc. However I found that there were some bugs using certain libraries with the board.

To help get you set up and running with the chip this is what you will need. Another really good resource is on the Adafruit chip product page located here: https://learn.adafruit.com/adafruit-feather-huzzah...

  • An Adafruit Feather HUZZAH ESP8266 chip (link)
  • Arduino install on the chip so it doesn't just run MicroPi
  • I had to port the Arduino NewPing library to work on the HUZZAH: https://github.com/jshaw/NewPingESP8266
  • I also ported Ken Perlin's SimplexNoise C++ algorithm to an Arduino Library for this projecthttps://github.com/jshaw/SimplexNoise

I want to note that the arduino code has 3 states. Off, sweep and SimplexNoise.

  • Off: not scanning, not sending to PubNub, not controlling the servo
  • Sweep: Control the servo and take measurements from 0 degrees to 180 and back again. This just repeats.


Step 8: Schematics

electronics schematics

Step 9: Processing

Step 10: Physicalization

With the data, you can make some great physicalizations about how digital devices perceive their environment and human interaction.

With the data that I've collected with a few different iterations of Creation by Error I've been able to convey and represent data in a multitude of ways. It also helps since the electronics are pushing all their collected data through PubNub because not only does it stream the data to any channel that is listening with the key, it also stores and archives this data for later use.

Using the data I've been able to create physicalizations that convey the anthropomorphic interpretation of these connected devices and create some beautiful pieces of art in the process.

The first wooden piece is 10 minutes on ... date on July ..... 2016. the data points were exported from the processing sketch using n-e-r-v-o-u-s Systems (http://n-e-r-v-o-u-s.com) OBJ export processing library and imported into Rhino 3d. Within Rhino, I needed to convert the OBJ mesh into a NURBS object to be able to inlay the object into the model of the piece of wood I created. This inlay was able to be used by the CNC technician to mill out the representation of the distances that were measured by ultrasonic sensors over a period of time.

The second piece was created by scanning an empty wall for one hour. I then compared the mean of the of the collected data measurements for 9 angles that the servo measured against the actual position of the sensor and what the measurements would have been. The structured mobile hanging from the ceiling is the accumulative difference of error between what the sensor read and what the actual mathematically / geometrically calculated distances are IRL.the interesting aspect of this piece is that the error made by technology in it's sensing and interpretation has taken a physicalized form that quantifies the perception of technology.

To make this hanging mobile I created the 'ribs" from dowels and created the form. In the future, it would be good to create this within a CAD or .ai file to be able to have these ribs laser cut out of wood rather than having to fabricate them.

The final "physicalization" is more of a data visualization that is run in through the processing script that I have linked to on GitHub in this Instructables. It should work and create a real-time data visualization of the space in front of it.

Step 11: Potential Expansion

Potential Expansion .. what could this be expanded or potentials for projects like this

Areas on the back of my mind for expanding or continuing this project or even different iterations of it would be to add multiple stands and update each Arduino code to pass in the correct id of the stand. this may allow for proper representational positioning in the processing sketch where the multiple stands are placed in a room.

I am also working on gridded array of these objects on a pegboard which could total sensors and create a very lo-fi point cloud of technology's perception that may allow us to project our anthropomorphic opinions of technology perception onto the world.

<p>That's an interesting idea :)</p>

About This Instructable




More by jshaw:Creation By Error 
Add instructable to: