Narrative workshop 19/03/2018

On 19th March I conducted a 3 hour workshop with my fellow Interactive Digital Media colleagues to explore ideas of narrative for What Goes Around.

To kick off the session, each participant told a story about and item they had brought to the workshop that had a personal significance.

FM3 Buddah Machine
FM3 Buddah Machine

The object I chose was the FM3 Buddah Machine purchased at Sonar Festival a few years back.

Kat chose a piece of jewellery given to her by her ex and that belonged to his mother.

Kat Jewelry
Kat Jewelry

And KP brought along his drone that has traveled around the world with him, and has provided many images for his Instagram feed.

KP Drone
KP Drone

Next, we each chose five random images from print outs of photographs originally sent into space on the Voyager probe in 1977. The task was to write a story based on the sequence of five images.

Richard’s story, based on these images:

My 5 images
My 5 images
My 5 images
My 5 images

(The text of this story can be read here.)

Kat’s story, based on these images:

Kat's 5 images
Kat’s 5 images

KP’s story, based on these images:

KP's 5 images
KP’s 5 images

As you can hear above, each of us read out our stories.

The final task was to combine the two each of the images originally chosen with two new images each, totaling 12 images. These were then arranged collaboratively into another story, as you can see in the following images.

Updated Arduino random play MP3s

With excellent assistance from the Arduino forum, I now have a working version of the circuit to play a random MP3 file each time the distance sensor is triggered. It doesn’t play a few of the files when they are triggered, but this has been tested elsewhere and the code works, so I need to investigate the files themselves, it seems.

And here’s the code used.

#include <SoftwareSerial.h>

#define ARDUINO_RX 5  //should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6  //connect to RX of the module

#define trigPin 13  //for the distance module
#define echoPin 12

SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX

//all the commands needed in the datasheet(
uint8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
//0X7E FF 06 command 00 00 00 EF;(if command =01 next song order)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02

#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)

#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)




#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3

#define STOP_PLAY 0X16

#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)

#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close

#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output

void setup() {
  Serial.begin(9600);  //Start our Serial coms for serial monitor in our pc
  mySerial.begin(9600);  //Start our Serial coms for THE MP3
  delay(500);  //Wait chip initialization is complete
  sendCommand(CMD_SEL_DEV, DEV_TF);  //select the TF card
  delay(200);  //wait for 200ms
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

void loop() {
  if (measureDistance(trigPin, echoPin) < 10) {
    int randTrackNo;
    randTrackNo = random(1, 9);
    sendCommand(0x03, randTrackNo);
    Serial.print("Playing track:");
    delay(1000);  //wait to avoid errors

void sendCommand(int8_t command, int16_t dat) {
  Send_buf[0] = 0x7e; //starting byte
  Send_buf[1] = 0xff; //version
  Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
  Send_buf[3] = command; //
  Send_buf[4] = 0x00;  //0x00 = no feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8);  //datah
  Send_buf[6] = (int8_t)(dat);  //datal
  Send_buf[7] = 0xef;  //ending byte
  for (uint8_t i = 0; i < 8; i++) {
    mySerial.write(Send_buf[i]) ;  //send bit to serial mp3
    Serial.print(Send_buf[i], HEX);  //send bit to serial monitor in pc
    Serial.print(" ");

long measureDistance(int trigger, int echo) {
  long duration, distance;

  digitalWrite(trigger, LOW);  //PULSE ___|---|___
  digitalWrite(trigger, HIGH);
  digitalWrite(trigger, LOW);

  duration = pulseIn(echo, HIGH);
  distance = (duration / 2) / 29.1;
  Serial.print("distance: ");
  return distance;

Drone Survival Guide

Some reading from my research into the Accomplices concept for the new PG02 brief: Inspired initially by Drone Theory by Grégoire Chamayou.

The US Army defines a drone as a “land, sea or air vehicle that is remotely or automatically controlled”.

…as drones are operated remotely (often by “pilots” sitting in an office on an airbase in the Nevada desert), they carry no risk of American casualties.
….what a CIA operative once called the drone’s “unblinking stare”, the panoptic gaze of its surveillance systems, which compile “archives” of the lives of potential targets based on patterns of repeated behaviour, divergence from which can sometimes be grounds enough for a strike. One of these systems is called “Gorgon’s Stare”.)

The rules nodded through by Hayden allowed drone pilots to shoot at any male of military age whose behaviour corresponded to a “signature” suggestive of suspicious activity. The results of the policy were predictably calamitous for any civilian or non-combatant who happened either to display the stipulated behavioural traits or else just happened to be in harm’s way…Obama conceded that the way the US counts civilian casualties has been a matter of considerable controversy – for instance, everyone killed in a “signature strike” is counted as a legitimate target.