27 Steps

by aiwan in Circuits > Art

1693 Views, 13 Favorites, 0 Comments

27 Steps

27 Steps night.jpg

This is a traveling peace pavilion in honor of Nelson Mandela's 27 years in prison. It is a walk for peace. The pavilion consists of 2 pyramid forms that are parted to allow for a central walkway - the 27 Steps. Accompanying them is a music soundtrack, lights, and a people counter.

This was originally constructed for the 2016 Market Street Prototyping Festival (sponsored by SF City Planning and Yerba Buena Center for the Arts). We hope you join us on this journey and continue the steps to peace in other cities.


Estimated Building Time:
3 months (2-3 people)

Step 1 - Materials (Basic Structure)

1.jpg
spool.jpg

Pyramid Frame:

  • Stainless Steel threaded rods (3/4" in diameter)
    • (6) 8'-0" long rods
    • (6) 11'-3" long rods
  • (12) Stainless Steel Nyloc Nut (Interior Diameter ¾”)
  • (12) Hex Nut
  • (8) Stainless Steel Custom Connection Plate ¼” thick
  • (6) A Stainless Steel Custom Steel Plate- Type A, see diagram above
  • (2) A Stainless Steel Custom Steel Plate- Type B, see diagram above

Fishing Line:

combination of -

  • 1 (large) spool: 60 Gauge
  • 1 (large) spool: 50 Gauge
  • 12 (small) spool: 40 Gauge

Total Fishing Line: Approx. 3 miles

Step 2 - Materials (Technology)

3.JPG
4.jpg

Lights:

  • (2) LED Flood Lights (10W RGB w/ remote control)
  • (54) LED pixels 27 on each vertical 8’-0” stainless steel rod
  • 63’-0” length of 10 gauge black cable
  • 20’-0” length of 20 black gauge cable


Processors:

  • Processor for the LED Pixels:
    • (1) Arduino Uno
    • (4) screw terminals
    • (4) 3-pin cables
    • custom 3-pin connectors attached to arduino (see image above) - this in place of the breadboard for ease of connections

·

  • Processor for the People Counter
    • (1) Raspberry Pi

Sensors:

  • (1) PIR Sensor for the LED Lights (with a 4-pin terminal)

  • (1) Infra-Red Sensor for the Ticker

Step 3: Materials (Sound)

5.JPG
6.JPG

Sound:

  • (1) Speakers
  • (1) Auxiliary cable (~12” or less)
  • (1) Auxiliary cable (25’)
  • (1) Earphone splitter
  • (1) Music Player*
  • (1) Hotspot*

*hotspot and music player can be through one smart phone.

Step 4: Tools

7.JPG

You may need the following tools along the way.

  • (1) Wrench
  • (1) Small screwdriver (sensors)
  • (1) Scissors
  • (1) Power strip (min. 4-5 plugs)
  • (1) 3-prong extension cord (total of 25')
  • (1) soldering iron and filament
  • (1) wire stripper

Step 5: Process (Building Structure)

8.jpg
9.jpg
10.jpg

Pyramid structure:

  • Place Connection Type B in position:
    1. Roll (1) Hex Nut on an 8’-0” Threaded Stainless Steel Rod.
    2. Insert (1) 8’-0” Threaded Stainless Steel Rod in Connection B at Vertical.
    3. Fasten Nylock Bolt at the Bottom with Wrench.
    4. Roll (1) Hex Nut on an 8’-0” Threaded Stainless Steel Rod.
    5. Insert (1) 8’-0” Threaded Stainless Steel Rod in Connection B at Horizontal.
    6. Fasten Nylock Bolt at the Bottom with Wrench
    7. Roll (1) Hex Nut on an 8’-0” Threaded Stainless Steel Rod.
    8. Insert (1) 8’-0” Threaded Stainless Steel Rod in Connection B at Horizontal.
    9. Fasten Nylock Bolt at the Bottom with Wrench.

·

  • Place Connection Type A in position:
  1. Roll (1) Hex Nut on an 8’-0” Threaded Stainless Steel Rod
  2. Insert (1) 11’-3” Threaded Stainless Steel Rod in Connection B at angle.
  3. Fasten Nylock Bolt at the Bottom with Wrench.
  4. Roll (1) Hex Nut on an 8’-0” Threaded Stainless Steel Rod.
  5. Insert (1) 8’-0” Threaded Stainless Steel Rod in Connection B at Horizontal.
  6. Fasten Nylock Bolt at the Bottom with Wrench.
  7. Roll (1) Hex Nut on an 8’-0” Threaded Stainless Steel Rod.
  8. Insert (1) 11’’-3” Threaded Stainless Steel Rod in Connection B at Horizontal.
  9. Fasten Nylock Bolt at the Bottom with Wrench.
  • Repeat Connection Type A at other locations.

Step 6: Weave + Lights

Weave:

  1. Weave Fishing Line over Pyramid Steel Frame.
  2. The internal pattern is woven in straight lines.
  3. The external pattern is intentionally kept random.
  4. The density of the pattern is kept at about 70%.

Lights:

  1. One LED Purple flood light is mounted on the floor at Connection Type A at Pyramid 1 and connected to power source.
  2. One LED Purple flood light is mounted on the floor at Connection Type B at Pyramid 2 and connected to power source.

Step 7: Interactive Components (moving LED)

12.jpg
11.jpg

LED pixels:

  1. cut 162 segments of 20-guage cables (3" in length)
  2. solder three 3-inch 20-gauge cable to the LED pixels at the designated connections (ground, data, power)
  3. continue until a chain of 27 are attached together
  4. 27 LED Pixel String is mounted on 8’-0” tall vertical rods, 3” apart at Pyramid 1.
  5. cut (3) 10-gauge cables at lengths of 8'-6"
  6. align the 8’-6” cable along the bottom leg of Pyramid 1.
  7. on one end, solder the connection between the 20-gauge cable to the 10-gauge cable (make sure to label the ground, data, power)
  8. on the other end, screw 10-gauge cables to the respective slots in a screw terminal (ground, data, power)
  9. plug the 3-pin cable to the designated slot on screw terminal
  10. solder another string of 27 LED pixels (repeat above steps for Pyramid 2)
  11. connect the last LED pixel to three more 20-gauge cables
  12. screw these cables into their respective slots in another screw terminal
  13. connect one 3-pin cable from the first string of LEDs to terminal D5 on the arduino
  14. connect the other 3-pin cable from the second string of LEDs to terminal D6 on the arduino
  15. screw 20-gauge cables to infrared sensor's screw terminal
  16. secure 3 cables between infrared screw terminal and a 3-pin cable
  17. connect the 3-pin cable to terminal A1 on the Arduino
  18. connect arduino to computer
  19. install necessary program for arduino to run
  20. copy/paste the code (shown on next step) and send data to Arduino (See below)
  21. Unplug Arduino from computer and connect it to the power source.

Step 8: Interactive Components (moving LED Lights)

Interactive LED code:

copy/paste the following code for the lights to work (make sure the LED pixels are protected and not in contact with any other metal, otherwise it will short-circuit)

// 27 Steps &
Purple Rain

#include

#ifdef __AVR__

#include

#endif

// Connect LEDs to pins. You can choose. We chose 5 and 6.

#define PIN1 5

#define PIN2 6

// How many NeoPixels are attached to one LED strand

#define NUM_PIXELS 27

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.

// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest

// example for more information on possible values.

// We will set up three of these, one for each strand of lights

Adafruit_NeoPixel pyr1(NUM_PIXELS, PIN1, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel pyr2(NUM_PIXELS, PIN2, NEO_GRB + NEO_KHZ800);

// Other global variables

int lastZone = 0;

int lightIndex = -1; // the currently lit pixel; -1 means none

bool raining = false;

// This runs once on startup

void setup() {

pyr1.begin();

pyr2.begin();

Serial.begin(9600); // Listen on analog at 9600

}

// This runs repeatedly

void loop() {

// PART 1: sensing

readSensor();

// PART 2: drawing

drawPixels();

// sleep a bit

delay(10);

}

// Increases the lit LED by one position and makes purple rain when it reaches the top.

void stepUp() {

// step up: turn on next LED

if (lightIndex < NUM_PIXELS) {

lightIndex += 1;

// last step: do raining

} else {

raining = true;

for (lightIndex = NUM_PIXELS - 1; lightIndex >= 0; lightIndex--) {

drawPixels();

delay(50);

}

raining = false;

lightIndex = -1; //set back to all off

drawPixels();

}

}

// read the sonar sensor if the trigger is in the near zone advance a step

void readSensor() {

int anVolt = analogRead(0);

float inches = anVolt*5.0*1000*0.1/1023.0; //converting to inches 10mV per inch

int zone = 1;

if (inches > 8 * 4) { // this is the threshold for making a step

zone = 2;

}

Serial.print("sensor: ");

Serial.print(inches);

Serial.print(", zone: ");

Serial.println(zone);

if (zone == 1 && zone != lastZone) { // step up if moved into near zone from far zone

stepUp();

}

lastZone = zone; // remember the zone for next time

}

// make all pixels black except lightIndex (active pixel)

Step 9: Interactive Component (People Counter)

14.png

People Counter Code (raspberry pi)

  • connect the PIR sensor to a 3-pin cable
  • connect 3-pin cable to raspberry pi

(code execution is similar process to arduino, but with raspberry pi)


// OnOff handles io
between the Raspberry Pi's GPIO (general purpose input/output) and Node

var gpio = require('onoff').Gpio;

var request = require('request');

var low = require('lowdb')

// Initialize a local database

const db = low('db.json')

db.defaults({ count: [] }).value();

// Select the output of the Parralax infared sensor.

var pin = 17;

var sensor = new gpio(pin, 'in', 'both');

last_steps = [];

interval = 1 * 60 * 1000; // update every 5 mins

// Listen to the sensor GPIO input. If the value is 1, then movement has been sensed.

sensor.watch(function(err, value) {

if (value == 1) {

update_counter();

}

});

function update_counter() {

var count = db.get('count').value();

var steps = count.length;

var time = new Date().getTime();

var record = {};

record[time] = steps;

db.get('count')

.push(record)

.value()

// Update the database with the latest count

last_steps.push(record);

}

// Send the latest statistics to a Heroku server every

setInterval(function(){

request({

url: 'http://take27steps.herokuapp.com/set',

method: "POST",

headers: { "content-type": "application/json" },

json: {"count": last_steps}

}, function (error, resp, body) {

if (!error && resp.statusCode == 200) {

console.log("Successful response: ", body);

last_steps = [];

} else {

console.log("Error sending response: ", error);

}

})

}, interval);

Step 10: Sound

Sound:

  1. One Speaker is placed at connection A at Pyramid 1 and connected to power source.
  2. One Speaker is placed at connection B at Pyramid 2 and connected to power source.
  3. Speaker at Pyramid 2 is hard wired to speaker at Pyramid 1.
  4. Speaker at Pyramid 1 is connected to music player.

Step 11: Overall Layout

13.jpg
15.jpg

Overall Plan Layout of all Components.