Shortest Path is an interactive light installation visualizing the shortest path between two nodes. The project investigates the notion that technology could be designed with the intention of bringing people closer to one another. This is achieved by having a system of nodes that work individually but only reveal their full functionally when interacted with by two or more people simultaneously. In addition, the project serves as a visual representation of DTU Skylab's role as an intermediate actor between industry and academia.
The project was exhibited DTU Skylab spring 2018
Well, this project was developed as the culmination of a 4 month artist in residence program at DTU Skylab. Since DTU has never had an artist in residence before this has been quite a pioneering period in which both me as an artist and the institution had to define what it meant to be artist in residence at the Technical University of Denmark.
The challenge was to make a piece of art that both Skylab and I agreed would represent their institution as well as be visually appealing. Essentially, Skylab is an university/industry funded innovation hub in which you as a entrepreneur, ressourcer or student can get advice regardig legal, financial or manufacturing related questions. Skylab even offers access to a fully staffed metal and wood workshop in which you can came and get your prototypes made. Having a fully staffed workshop doesn't come cheap, however, Skylab choose to prioritise this because they see themselves as a place of physical innovation. Therefore, I know that for my project to encapsulate the culture of Skylab it had to have a physical dimension.
After spending a few weeks at Skylab I realized that really it is a place of connections. When looking at it Skylab really provides connections between university and industry, students and professionals, ideas and reality. Wherefore I came up with a concept with which light would be used to create connections between people. At first I thought of using the signal strength pings from people's smartphones (RSSI) as an indicator of location. This, however, turned out to be too imprecise. I then turned my attention to touch as input. I thought it would be interesting to have the installation consist of a lot of individual nodes that people could touch for them to activate and then have the system find the shortest path between two or more nodes. Thankfully, the nice people at Skylab thought this would be an interesting concept as well and I began developing.
When a person pushes one of 52 nodes containing a ESP8266 (Wemos v.3), two high power LEDs and an MPU-6050 accelerometer, an MQTT message identifying the node-ID and its current state is published to a MQTT broker running on a Raspberry Pi 3 connected to a local network. When receiving the message the broker then transfers the data via a websocket connection to a Node.js Dijkstra application also running on the Pi. In addition to be able to find the shortest path between nodes in a 2D grid the application also has a browser based user interface which allows for a flexible and graphical implementation of the (re)positioning of nodes in physical space.
When the Dijkstra app receives data from two nodes being pushed within a certain time slot it calculates the shortest path between these two nodes and publishes messages containing what additional nodes should be activated in order to visualize the path. Since all ESP8266s continuously listens for new messages coming from the broker they are all going to receive the same messages, however, only the ESP8266 with the ID corresponding with a specific path node is going to be activated when receiving data from the server. That way two people both pushing a node, is going to see all the nodes in between gently starting to light up.
This was probably been one of the most ambitious projects that I have ever been so naive to take on. Well, since I have made/decided pretty much everything from the visual expression, over the electronics to the software, I have been down many roads and learned a bunch. Naturally, this article can't possibly go into detail with every part of the creation of this project, however, the making of the elections and data transferring setup will be discussed. So get a cup of tea, get comfortable and enjoy the beauty of the technical detail :)
Initially, I had an approximate idea on how to make this project actually work. But before designing a PCB and have it made in China I had to do a lot of experimentation in order for me to make sure that this was actually a valid concept that would work stably down the line. Basically, I had to find out what kind of processor, LEDs, sensor, etc. that would be best for a system like this. What you see below is pictures taken when I had to decide on what kind of LED I would use as well as whether I should go with an ESP8266 in chip form or as a development board.
I must admit that I started out knowing almost nothing about PCB manufacturing, though as we say in Danish, and this will be a very rough translation, - desperation teaches naked woman to weave.
First I collected most of the surface mount components that I thought I would need. Since this was also the first time I have used SMD components instead of the more hobbyist friendly through-hole components, just finding the components with the right footprint was quite challenging. However, now when I know how to find the right components, design PCB's digitally and the pricing of chinese PCB manufacturers - perfboard and DIY soldering is a thing of the past!
Anyway, I design a 1.0 version of the PCB in Fritzing and has it developed by PCBWay in China. When receiving the PCB I realized that I had forgotten to make a wire from the power input to the ESP8266 module, thus not even being able to turn it on when hooked up to 5v. However, with a few tweaks I was up and running!
Now, at this point I had written most of the code and I could now start testing whether the ESP8266 modules and the server/broker would be able to communicate in real time. Miraculously, this turned out to actually work!. With a few software updates and a decent network speed the nodes, at least the ones that I was testing at the time, and the Raspberry Pi server seemed to communicate in real time flawlessly - What a relief!
Since I at this point had learned what I needed to make the final version of the PCB, I then ordered the plastic spheres that the PCB was supposed to fit into. This allowed me to take precise measurements of the sphere and then have the PCB made to fit snug into the smallest half of the spheres. Now, when the PCB came from China some of them fit into the sphere and some didn't. I think where most have been some mistake in the manufacturing process, however, I didn't have the time or money to order some new ones. The ones that fit was easily assembled, however, the ones that was too small I just glued in place. This was rather time consuming and so if I should ever make a similar project I would have to make sure that they all equally sized.
One thing that I want to mention is how I treated the plastic spheres in order for them to get a frosted look. As you can see on the image below, the spheres came as transparent and since this was not what I was looking for, I had to find a way to make them frosted on the inside but glossy on the outside. I tried a few spray paints but wasn't really satisfied with the results. Then one of the people working in the workshop suggested to sandblasting them on the inside while protecting them on the outside. This game that cold morning frosting look that I was looking for and so one more challenge was resolved.
Now, for the network setup. This might be the most important part of the entire installation. Likewise, this has also been the part of the system with which I have had the most problems. This could get hairy but I'll try to make it brief.
Essentially, the network consists of a server, a router/switch and a wireless access point. The challenge here was to get 52 in individual WiFi radios to connect wirelessly to the same network. At first I had them all connect to a standard router. This worked fine until I connected more than 40 nodes. When exceeding 40 wireless devices the router simply stops accepting anymore devices even though it still has plenty more IP addresses to assign. This was a bummer, and I had to find a way to allow more wireless connections to the network.After doing extensive research into networking technology I found that I could just connect a so called wireless access point to my network. This device would be a dedicated device for wireless connections, thus being able to handle more connections than a standard router. When a node connects to the WAP it will "ask" the router for an IP address to be assigned to the node, this way removing the wireless connections from the router entirely. I could now connect all 52 nodes wirelessly to the network. This even seemed to speed up the data transfer, thus making the nodes turn on even faster. A pretty good solution if I dare say so myself :)