With Love,
Reiley Torfun Nymeyer
2024
"careful and well-shot images"
exhibition wall text
process reflection
I made a lot of changes from the previous version of my project to the WQED version. This included an entirely new form along with a new auditorial experience. I was very excited to tackle these new things with the skills I had learned so far throughout the course.
What I found "hard" was:
Remodeling the house in Fusion360. I found working with Fusion360 to get harder and more confusing as I needed more out of the program as time went on. Many thanks to Zach for helping me out.
What I found "easy" was:
Creating wall text for my piece. As it was something personal, it was easy to write to explain my project. I think that I had to explain my project minimally at the exhibition because my wall text mostly spoke for itself. The most I found myself talking about were questions about my parents, how I recorded the audio, and thanking people for experiencing my project with me.
What I learned was:
A lot with Arduino and laser cutting. I feel confident working with both of these things in a future work. While there was certaintly a learning curve, it was great to feel more comfortable working with these. I had never worked with an Arduino prior to this class, and I think my final project was quite complicated and used the Arduino well. Adding the sound on the final day was quite stressful, but I am very glad it worked out!
I have a lot more reservations about the staging at WQED. I feel like this setting was not well suited for my project. I think it really took away from the emotional aspect of my piece. Should I had not implemented an auditorical experience, I think my whole project would have flopped. Even with the headphones, I think the immersion was lacking due to the nature of the exhibition and factors that were outside of my control.
code submission
#include <DS3232RTC.h>
#include <Wire.h>
#include <PololuLedStrip.h>
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
DS3232RTC myRTC;
PololuLedStrip<5> ledStrip; //PITTSBURGH
PololuLedStrip<8> ledStripBKK; //BANGKOK
#define LED_COUNT 40
rgb_color colors[LED_COUNT]; //PITTSBURGH
rgb_color colorsBKK[LED_COUNT]; //BANGKOK
// These are the pins used for the music maker shield
#define SHIELD_RESET -1 // VS1053 reset pin (unused!)
#define SHIELD_CS 7 // VS1053 chip select pin (output)
#define SHIELD_DCS 6 // VS1053 Data/command select pin (output)
// These are common pins between breakout and shield
#define CARDCS 4 // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3 // VS1053 Data request, ideally an Interrupt pin
Adafruit_VS1053_FilePlayer musicPlayer =
Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
unsigned long previousMillis = 0;
const long interval = 100;
const int demoButton = 2;
bool demoMode = false;
unsigned long demoStartTime = 0;
void setup() {
Serial.begin(9600);
myRTC.begin();
setSyncProvider(myRTC.get); // the function to get the time from the RTC
if (timeStatus() != timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
pinMode(demoButton, INPUT);
if (!musicPlayer.begin()) { // initialise the music player
Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
while (1)
;
}
Serial.println(F("VS1053 found"));
if (!SD.begin(CARDCS)) {
Serial.println(F("SD failed, or not present"));
while (1)
; // don't do anything more
}
musicPlayer.setVolume(8, 8);
musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); // DREQ int
musicPlayer.startPlayingFile("0001.mp3");
}
void loop() {
static unsigned long startTime = 0;
static long demoDuration = 87000; // 1:27 minute in milliseconds
int currentMin = minute();
int minute24hr = hour() * 60 + currentMin;
if (digitalRead(demoButton) == HIGH) {
demoMode = true;
demoStartTime = millis();
musicPlayer.stopPlaying();
musicPlayer.startPlayingFile("0002.mp3");
}
if (demoMode) {
unsigned long demoTime = millis() - demoStartTime;
if (demoTime > 87000) {
demoMode = false;
musicPlayer.startPlayingFile("0001.mp3");
}
minute24hr = map(demoTime, 0, 87000, 0, 1440);
}
if (musicPlayer.stopped() && demoMode == false) {
musicPlayer.startPlayingFile("0001.mp3");
}
int minuteBKK = minute24hr + 720; //RANGE 720-2160
//PITTSBURGH LEDs//
if (minute24hr > 0 && minute24hr < 300) {
//00:00 - 05:00
int currentR = map(minute24hr, 0, 300, 18, 48);
int currentG = map(minute24hr, 0, 300, 5, 39);
int currentB = map(minute24hr, 0, 300, 81, 52);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 300 && minute24hr < 420) {
//05:00 - 07:00
int currentR = map(minute24hr, 300, 420, 48, 231);
int currentG = map(minute24hr, 300, 420, 39, 56);
int currentB = map(minute24hr, 300, 420, 52, 40);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 480 && minute24hr < 600) {
//08:00 - 10:00
int currentR = map(minute24hr, 480, 600, 231, 238);
int currentG = map(minute24hr, 480, 600, 56, 116);
int currentB = map(minute24hr, 480, 600, 40, 14);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 600 && minute24hr < 720) {
//10:00 - 12:00
int currentR = map(minute24hr, 600, 720, 238, 253);
int currentG = map(minute24hr, 600, 720, 116, 215);
int currentB = map(minute24hr, 600, 720, 14, 55);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 720 && minute24hr < 840) {
//12:00 - 14:00
int currentR = map(minute24hr, 720, 840, 253, 253);
int currentG = map(minute24hr, 720, 840, 215, 234);
int currentB = map(minute24hr, 720, 840, 55, 149);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 840 && minute24hr < 1020) {
//14:00 - 17:00
int currentR = map(minute24hr, 840, 1020, 253, 252);
int currentG = map(minute24hr, 840, 1020, 234, 127);
int currentB = map(minute24hr, 840, 1020, 149, 3);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 1020 && minute24hr < 1050) {
//17:00 - 17:30
int currentR = map(minute24hr, 1020, 1050, 252, 252);
int currentG = map(minute24hr, 1020, 1050, 127, 57);
int currentB = map(minute24hr, 1020, 1050, 3, 3);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 1050 && minute24hr < 1065) {
//17:30 - 17:45
int currentR = map(minute24hr, 1050, 1065, 252, 209);
int currentG = map(minute24hr, 1050, 1065, 57, 2);
int currentB = map(minute24hr, 1050, 1065, 3, 78);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 1065 && minute24hr < 1080) {
//17:45 - 18:00
int currentR = map(minute24hr, 1065, 1080, 209, 166);
int currentG = map(minute24hr, 1065, 1080, 2, 2);
int currentB = map(minute24hr, 1065, 1080, 78, 108);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 1080 && minute24hr < 1200) {
//18:00 - 20:00
int currentR = map(minute24hr, 1080, 1200, 166, 110);
int currentG = map(minute24hr, 1080, 1200, 2, 3);
int currentB = map(minute24hr, 1080, 1200, 108, 177);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
if (minute24hr > 1200 && minute24hr < 1440) {
//20:00 - 24:00
int currentR = map(minute24hr, 1200, 1440, 110, 18);
int currentG = map(minute24hr, 1200, 1440, 3, 5);
int currentB = map(minute24hr, 1200, 1440, 177, 81);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colors[i] = rgb_color(currentR, currentG, currentB);
}
}
//BANGKOK LEDs//
if (minuteBKK > 1440 && minuteBKK < 1740) {
//00:00 - 05:00
int currentRBKK = map(minuteBKK, 1440, 1740, 18, 48);
int currentGBKK = map(minuteBKK, 1440, 1740, 5, 39);
int currentBBKK = map(minuteBKK, 1440, 1740, 81, 52);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1740 && minuteBKK < 1860) {
//05:00 - 07:00
int currentRBKK = map(minuteBKK, 1740, 1860, 48, 231);
int currentGBKK = map(minuteBKK, 1740, 1860, 39, 56);
int currentBBKK = map(minuteBKK, 1740, 1860, 52, 40);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1920 && minuteBKK < 2040) {
//08:00 - 10:00
int currentRBKK = map(minuteBKK, 1920, 2040, 231, 238);
int currentGBKK = map(minuteBKK, 1920, 2040, 56, 116);
int currentBBKK = map(minuteBKK, 1920, 2040, 40, 14);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 2040 && minuteBKK < 2160) {
//10:00 - 12:00
int currentRBKK = map(minuteBKK, 2040, 2160, 238, 253);
int currentGBKK = map(minuteBKK, 2040, 2160, 116, 215);
int currentBBKK = map(minuteBKK, 2040, 2160, 14, 55);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 720 && minuteBKK < 840) {
//12:00 - 14:00
int currentRBKK = map(minuteBKK, 720, 840, 253, 253);
int currentGBKK = map(minuteBKK, 720, 840, 215, 234);
int currentBBKK = map(minuteBKK, 720, 840, 55, 149);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 840 && minuteBKK < 1020) {
//14:00 - 17:00
int currentRBKK = map(minuteBKK, 840, 1020, 253, 252);
int currentGBKK = map(minuteBKK, 840, 1020, 234, 127);
int currentBBKK = map(minuteBKK, 840, 1020, 149, 3);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1020 && minuteBKK < 1050) {
//17:00 - 17:30
int currentRBKK = map(minuteBKK, 1020, 1050, 252, 252);
int currentGBKK = map(minuteBKK, 1020, 1050, 127, 57);
int currentBBKK = map(minuteBKK, 1020, 1050, 3, 3);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1050 && minuteBKK < 1065) {
//17:30 - 17:45
int currentRBKK = map(minuteBKK, 1050, 1065, 252, 209);
int currentGBKK = map(minuteBKK, 1050, 1065, 57, 2);
int currentBBKK = map(minuteBKK, 1050, 1065, 3, 78);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1065 && minuteBKK < 1080) {
//17:45 - 18:00
int currentRBKK = map(minuteBKK, 1065, 1080, 209, 166);
int currentGBKK = map(minuteBKK, 1065, 1080, 2, 2);
int currentBBKK = map(minuteBKK, 1065, 1080, 78, 108);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1080 && minuteBKK < 1200) {
//18:00 - 20:00
int currentRBKK = map(minuteBKK, 1080, 1200, 166, 110);
int currentGBKK = map(minuteBKK, 1080, 1200, 2, 3);
int currentBBKK = map(minuteBKK, 1080, 1200, 108, 177);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
if (minuteBKK > 1200 && minuteBKK < 1440) {
//20:00 - 24:00
int currentRBKK = map(minuteBKK, 1200, 1440, 110, 18);
int currentGBKK = map(minuteBKK, 1200, 1440, 3, 5);
int currentBBKK = map(minuteBKK, 1200, 1440, 177, 81);
for (uint16_t i = 0; i < LED_COUNT; i++) {
colorsBKK[i] = rgb_color(currentRBKK, currentGBKK, currentBBKK);
}
}
ledStrip.write(colors, LED_COUNT); //WRITE TO PITTRBUGH
ledStripBKK.write(colorsBKK, LED_COUNT); //WRITE TO BANGKOK
delay(100);
int displayHour = minute24hr / 60;
int displayMinute = minute24hr % 60;
// screen.clear();
// screen.home();
Serial.println(minute24hr);
// screen.print(minute24hr);
// screen.print("It is ");
// if (displayHour < 10) {
// screen.print("0");
// }
// screen.print(displayHour);
// screen.print(":");
// if (displayMinute < 10) {
// screen.print("0");
// }
// screen.print(displayMinute);
// screen.setCursor(0, 1);
// screen.print("in PGH.");
}