Thesis: Trini Talk

Trini Talk is an online platform designed to communicate and preserve the Trinidad English Creole Language. Using an interactive web platform, Trini Talk teaches the oral language of Trinidad through the island’s history, shows how the language is used and establishes a platform to preserve the language.

I created this platform for the speaker of Trinidad English Creole (TrinEC). My overall desire is for nationals to connect with the country on a deeper level. All nationals regardless of background speak this dialect. It is part of our culture and something that unites us. Understanding that unity, I hope, will foster national pride and love of each other, thereby diminishing societal issues.

I created this project because I wanted to learn about the history of the dialect of Trinidad and Tobago–especially the dialect of my island, Trinidad. While nationals are well versed in the language, most of us don’t know the etymology of the words that we choose to speak. English is the official language of the country and is spoken in formal settings. TrinEC or Trini is the preferred variety for informal and private communication. English, because of its strong association with educational systems and the official institutions of government and society, generally has higher prestige than TrinEC but the latter enjoys increasing status as a sense of nationalism increases.

This project included a vast amount of research into the language and the history. My language research revealed that there are two separate dialects spoken in the country, Trinidad English Creole and Tobago English Creole. I focused on researching TrinEC. Trini sounds like English. However, the vocabulary words, phrases, and mannerisms are not of British descent. They come from our ancestors: the natives, the slaves, their masters and the indentured workers. It is an oral language that’s a mix of vocabulary from French, Spanish, Portuguese, African and Indian languages, to name a few. Trini Talk goes beyond articulating the popular words and phrases that are distinct to our language but dives deeper to revive the history behind each word. It is about embracing the parts of me that I do not know – starting with the language. To know where I am going, I need to know where I came from. Being a visual person, I chose to showcase this spoken dictionary in an interactive and visual way.

I found the Dictionary of the English/Creole of Trinidad and Tobago written by Dr. Lise Winer[1]. It is a research dictionary of TrinEC and TobEC etymology. This book was helpful as it allowed me to gain a clearer perspective of the contributions each settler made to TrinEC. However, the dictionary is limited. It is not a living document as a website is. It cannot be added to. It is not accessible as it is a research dictionary made for linguists. The pronunciations of words are not comprehensible by regular users. It is very expensive at $95 US dollars ($642 TTD).


Trini Talk is a web platform designed to communicate the etymology of the Trinidad English Creole Language. There is no online presence for the etymology of TrinEC. Trini Talk creates one. Users are prompted to participate in the preservation of the language then get to explore the vocabulary and by extension the history of Trinidad. The platform uses a sample dataset from the Winer dictionary to teach this oral language through an interactive visualization. The visualization incorporates Trinidad’s history to show when these words were added to our dialect. By interacting with the timeline, respective words from each group are displayed and history shown. The user has the option of singling out words or phrases they wish to explore from the visualization. Engaging a word or phrase produces a sound sample of the pronunciation, text with the meaning, and historical reference. The Trini Talk web platform uses p5.js, JSON data, and d3.js to create this visualization.

Video is also included. It shows conversations with locals speaking the language in real-life situations. Key phrases and words are highlighted so the user can explore them further. I shot video and used Adobe Premiere to add desired reference content. In Orality and Literacy[3], Ong explains “Words acquire their meanings (from) … gestures, vocal inflections, facial expression, and the entire human, existential setting in which the real, spoken word always occurs.” This is true of TrinEC. Our gestures and facial expressions articulate more precise meaning. The language is evolving as new vocabulary is being invented, so Trini Talk includes a platform to gather these new additions to the dialect from nationals. This is a preliminary effort to digitally preserve both the old language and to incorporate the new.

Oral languages evolve. To capture new TrinEC words, sayings and abbreviations I created an API for each category on Google’s Firebase platform. Users are prompted to add content to each database. Each entry is automatically added to the respective API. Abbreviations used by locals for messaging on social media platforms are collected. Sharing this API dataset can encourage the use of local abbreviations and can keep the language relevant among the youth.

Phase two of Trini Talk is a larger research project. Expanding research to include TobEC is crucial. A full API of TrinEC and TobEC will be created. Showing the relationships of the language to the larger Caribbean diaspora is also necessary. The Caribbean needs repositories to archive and share its language information. Trini Talk was created with this sort of preservation in mind. A google-translate type platform of the language is also desired. With this platform text-to-speech type installations can be created, as currently no computer understands our way of speaking.
Generally, the Caribbean lacks resources to create platforms like this to more broadly showcase and essentially preserve our culture. There is no lack of creative vision in my nation, but I don’t see resources like Trini Talk on the market. I want to use what I have learned at ITP to create works for the Caribbean market – back home. I cannot ignore that most of what I was taught at ITP is not even on the radar of folks at home. I have to “come good” to even present something like this to a Trinidadian.

The language is evolving as Trinidad and Tobago is exposed to international influences. If we do not want to lose our culture, we have to start preserving and reaffirming its use now. The death of a language also means the disappearance of cultural creativity, the loss of traditions that often date back centuries. Language and culture are inseparable. A language represents how a particular culture and people interact with the world around them and with each other. If you lose a language, then you lose a huge chunk of that culture [4]. TrinEC has already suffered losses. We need to ensure we stop the culture of TrinEC from dying.

A 2003 UNESCO document states: “ … Each language embodies unique cultural and ecological knowledge in it. It is also because languages are diverse. Documentation of such a language is important for several reasons: 1) it enriches the human intellectual property, 2) it presents a cultural perspective that may be new to our current knowledge, and 3) the process of documentation often helps the language resource person to re-activate the linguistic and cultural knowledge.” I am not suggesting that TrinEC is dying but it is certainly changing at a rate that according to my research is not favorable to older nationals. They want “the old time ways” of speaking and doing things to be reintroduced.

I slowly came to the realization that my culture defines me, significantly. It should be expected, but this realization occurred as I started exploring the music and language of the islands and determined that there is much I am ignorant of. The visible aspects of my culture are celebrated and acknowledged by me more easily (i.e.) the food, carnival, the dancing, the liming and the music. The intangible parts are those that I am not in touch with. The language of Trinidad and Tobago happens to be one of those intangibles that I appreciate, but don’t have much information about. I love the fact that when I hear someone speaking it–on the subway, in the park–I can instinctively identify a fellow Trini and simply ask “what part of home are you from?”

[1] Lise Winer, Dictionary of the English/Creole of Trinidad and Tobago book, McGill-Queens University Press, 2009
[2] Richard Allsopp, Dictionary of Caribbean English Usage, Oxford University Press, 1996
[3] Walter Ong, Orality and Literacy, Routledge, 1982
[4] David Grubin Production and Pacific Islanders Communication, Language Matters film, 2015

Microbe Scanner

The Microbe Scanner is a Speculative Design project that I will explore. We learned about microbes and this got me thinking about disease. Disease suggests to me that that body is out-of-sync or in a state of disequilibrium. Naturally, we want to be able to fix this and get back to feeling ‘normal’.

What if the lay person can scan their body to know if their equilibrium has been compromised by microbes? Enter the Microbe Scanner.

What is it?

A scanner that detects your health and the presence of harmful microbes in the human body.


To identify treatment that brings your body to equilibrium.

How it works

  • Detects the health and the presence of harmful microbes.
  • Detect disease
  • Presence of new microbes
  • ID how they interact with current ones
  • ID possible complications of dual existence
  • Suggest treatment to rid yourself of microbe


Can this be used to identify what a ‘healthy’ body looks like?

What is the baseline microbe system (of the gut, skin, nose, respiratory system, etc.)?

How can I test changes in the microbiome?

What is the ideal diet?

What’s equilibrium?

Are there environmental effects on the microbiome?

Does the baseline microbiome vary in different environments?

Neopixel Lamp

For my final assignment I decided to build a lamp using a neo pixel ring. This builds upon my previous light controller assignment.

Design Challenge

Make a device to control a light with the following features: 

  • A control to turn the light on and off. When it turns on, it should retain the relative red, green, and blue brightness levels from when it was last turned on.
  • The ability to fade each color channel (red, green, and blue) from off to full brightness
    • Fade level should be maintained when you release the fade controller
    • Fade should be interrruptable by other controllers, e.g. on/off or another fade controller
  • The ability to fade the overall brightness of the light


Music Controller

Design Challenge: Make a device to control playback of pre-recorded music.


  • Make a device that sends asynchronous serial messages to another device which will play the music.
  • All serial messages should be terminated by a linefeed.
  • The playback device will echo your message back to you as an acknowledgement message when it executes your command.

The device supports the following features:

  • It is operable by a user who cannot see the device.
  • The user gets an acknowledgement when they activate any control.
  • Start or stop the playback of a track (start plays track from the beginning).
  • Pause or resume playback of a track (resume plays track from last position stopped)
  • Skip ahead one track in the playlist.
  • Skip back one track in the playlist.
  • Fast-forward the current track (double speed of the track).
  • Skip to a random track in the playlist.

Tools used:

  • Arduino IDE
  • Arduino MKR1000
  • Python server
  • P5.js
  • P5 Serial Control App
  • Buttons (momentary and )
  • Vibration Sensor
  • Frosted plastic container
Arduino and Physical Components

I started this assignment by wiring my components to the breadboard and Arduino. As shown below, I wired the 2 toggle buttons, 4 momentary buttons and the vibration sensor. 

Arduino Code:

This proved to be quite tricky for me initially. My goal was to create the code from scratch and not rely on references. I encountered errors with the switch state where the serial monitor was just writing the value continually. Adding a delay did not help. I eventually discovered that my syntax was wrong (odd that the IDE did not pick up on this when I verified the code.) The culprit was a semi colon.

 My code:

const int startStop = 11;
const int pausePlay = 10;
const int next = 9;
const int back = 8;
const int randomSong = 7;
const int fast = 6;

int vibeSensor = 5;

int lastStartStopState = LOW;
int lastPausePlayState = HIGH;
int lastNextState = LOW;
int lastBackState = LOW;
int lastRandomState = LOW;
int lastFastState = LOW;

void setup() {

pinMode(startStop, INPUT_PULLUP);
pinMode(pausePlay, INPUT_PULLUP);
pinMode(next, INPUT_PULLUP);
pinMode(back, INPUT_PULLUP);
pinMode(randomSong, INPUT_PULLUP);
pinMode(fast, INPUT_PULLUP);
pinMode(vibeSensor, OUTPUT);

void loop() {
int buttonState1 = digitalRead(startStop);
int buttonState2 = digitalRead(pausePlay);
int buttonState3 = digitalRead(next);
int buttonState4 = digitalRead(back);
int buttonState5 = digitalRead(randomSong);
int buttonState6 = digitalRead(fast);

// 1. Start Stop Button
// If the button is on, send a message to serial to start playing the song
if (buttonState1 != lastStartStopState) {
if (buttonState1 == HIGH) {

analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);

// If the button is off, send a message to serial to stop playing the song
} else {
analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);
lastStartStopState = buttonState1;

// 2. Pause Play Button
//If the button is on, send a message to serial to pause the song
if (buttonState2 != lastPausePlayState) {
if (buttonState2 == LOW) {


analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);

// If the button is off, send a message to serial to play the song
} else {

analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);
lastPausePlayState = buttonState2;

//3. Next Button (skip to the next song)
// If the button is pressed, send a message to serial to skip forward to the next song

if (buttonState3 != lastNextState) {
if (buttonState3 == LOW) {

// delay(500);

analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);
lastNextState = buttonState3;

// 4. Back Button (go back and play the previous song)
// If the button is on, send a message to serial to skip to the previous song

if (buttonState4 != lastBackState) {
if (buttonState4 == LOW) {

// delay(500);

analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);
lastBackState = buttonState4;

// 5. Random Button (play a random song)
// If the button is on, send a message to serial to skip to a random song

if (buttonState5 != lastRandomState) {
if (buttonState5 == LOW) {

// delay(500);

analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);
lastRandomState = buttonState5;

// 6. Fast Button (fast forward through the current song)
// If the button is on, send a message to serial to fast forward through the current song

if (buttonState6 != lastFastState) {
if (buttonState6 == LOW) {

// delay(500);

analogWrite(vibeSensor, 255); // give feedback
analogWrite(vibeSensor, 0);
lastFastState = buttonState6;




P5.js and Serial Communication

I haven’t touched p5 since ICM. However, setting up the serial communication and updating the sample p5 code was the most straightforward part of this assignment. 

Using this serial input to P5 tutorial, I installed the P5.serialcontrol app and the p5.serialserver. With the arduino connected to the port, I used the serial control app to ensure the port was available. Then using the command line, opened a python server the tested my controller. 

P5 code: 

var serial;
var portName = ‘/dev/cu.usbmodem1411’;
var inData;

var song; // the sound file to be played

// the list of songs:
var songs = [‘FastWine.mp3’, ‘FullExtreme.mp3’, ‘Incredible.mp3’, ‘LeaveMeAlone.mp3’, ‘TurnUp.mp3’];

var songCount = songs.length; // number of songs in the music dir
var currentSong = 0; // current song number

function preload() { // load the first song on preload
song = loadSound(‘music/’ + songs[currentSong]);

function setup() {
createCanvas(400, 300);

serial = new p5.SerialPort(); // make a new instance of the serialport library
serial.on(‘connected’, serverConnected); // callback for connecting to the server
serial.on(‘open’, portOpen); // callback for the port opening
serial.on(‘data’, serialEvent); // callback for when new data arrives
serial.on(‘error’, serialError); // callback for errors
serial.on(‘close’, portClose); // callback for the port closing

serial.list(); // list the serial ports; // open a serial port

function serverConnected() {
println(“We are connected!”);

function portOpen() {
println(“Serial Port is open!”);

function serialEvent() {
inData = Number(;

function serialError(err) {
println(‘Something went wrong with the serial port ‘ + err);

function portClose() {
println(‘The serial port is closed’);

function draw() {
background(30, 20, 180);
text(“sensor value: ” + inData, 30, 30);
// draw the song’s name and current time in seconds:
text(songs[currentSong], 20, 50);
text(song.currentTime().toFixed(3), 20, 100);

function controlSound(input) {
switch (input) {
case 49: // start/stop, press 1
if (song.isPlaying()) {
} else {;
case 50: // play/pause, press 2
if (song.isPlaying()) {
} else {;
case 51: // skip ahead, press 3
// make sure the song number is valid, and increment:
if (currentSong < songs.length - 1) {
} else {
currentSong = 0;
// get new song:
case 52: // skip back, press 4
// in the first second, just rewind the current track:
if (song.currentTime() > 1.0) {
// if more than a second has elapsed, then
// make sure the song number is valid, and decrement:
} else {
if (currentSong > 0) {
} else {
currentSong = songs.length – 1;
// get new song:
case 53: // fast forward, press 5
song.rate(2.0); // double the play speed
if (!song.isPlaying()) {;
case 54: // random song, press 6
currentSong = Math.round(random(songCount)); // get a new song number
getSong(currentSong); // play it

function getSong(songNumber) {
if (songNumber < songs.length) { // if the song number is in range
if (song.isPlaying()) {
// load a new song:
song = loadSound(‘music/’ + songs[currentSong], resumePlay);
return true;
} else { // if the song number was out of range, return false
return false;

function resumePlay() {
// if the song isn’t playing, play it
if (song.isPlaying()) {
} else {;

function keyReleased() {
controlSound(keyCode); // send the ASCII number of the key



I wanted the feel of a walkman so I purchased a small plastic container that could be held with one hand. I drilled holes for my 6 buttons and for the power cable. Then carefully installed my buttons and MKR1000. 

Experience new music

So, that was soca. In case you were wondering what I was playing. Take a listen to the tracks on my playlist, below.

Copper Tape – Sensor Report

Copper foil tape is made from thin pure copper and is sold in different widths and lengths. Just like copper metal, copper tape is extremely flexible and can be formed into shapes and can be soldered to. The tape itself can carry electricity just like a wire. It can be used to carry electricity between a battery and components like LEDs, buzzers, and motors. Copper tape can be used as a switch or wire and works well in paper circuits. We will also see below how it can be used as a speaker!

Copper itself conducts both heat and electricity very well. Perhaps learning more about the metal and how it is used can prompt more inventive uses of the copper tape form of the metal. Learn about the compound itself on wikipedia as well as the common uses of copper.

[photo credit:]

There are two types of copper tape: with conductive adhesive and with non-conductive adhesive. Copper tape with non-conductive adhesive is more common. This type of tape is practically used as a garden animal repellant and is generally found in the hardware. For physical computing, copper tape with conductive adhesive is used. This is the form that I will explore in this report.

On the back is an electrically conductive adhesive. The adhesive can’t carry significant current but it is very handy for sensing applications where you don’t want to solder the copper tape (see the labs below).

Photo credit: nicely highlights the features of some commercially available copper tapes. These tapes are also available for purchase through the website.

Sticky and conductive on both sidesConducti Tape D34 (copper foil)
Sticky on one side, conductive on both sidesConducti Tape Z22 (ripstop nylon)
Sticky on conductive side, blocks electricity on shiny sideX44 (aluminum with polyester coating)

This Makezine article outlines pros and cons of using the above mentioned types of copper tape. The con of tearing at the crease can be solved by using nylon backed copper tape.

Links to sources for purchase

Copper tape can be purchased in different widths and lengths. Here are some hobby stores where it can be purchased. – 6mm width – 25mm width – 5mm width – 2” width


I found a few different datasheets for copper tape with conductive adhesive from Adafruit, 3M and Sparkfun.

Using Copper Tape

When using copper tape, it is important to ensure solid connections in your circuit. That also means making sure the tape is flat! Bubbles or folds can cause interruption in connectivity and the flow of current. Below, I’ve experimented with addressing connectivity issues with paper circuits. Just like with a wired circuit, make sure ground and power tapes don’t intersect. Using masking tape or scotch tape works well as a barrier. This tutorial provides some tips for using copper tape.


  • LED sequins (purchased from Adafruit)
  • 6mm width copper tape with conductive adhesive
  • a 9V battery
  • index cards
  • alligator clips

LED sequins: showing their positive and negative leads

  • Lab 1: Creating a Copper tape circuit

Here, a simple circuit was created to turn on an LED. In this lab, the leads of the LED are connected by placing a strip of copper tape over each lead. This proved to be an unstable connection. In figure 1 you can see that the surface of tape covering each LED lead is not flat or flat enough. In the video below, you will notice that when the LED is pressed, the light turns on. This indicates that there is insufficient contact between the copper tape and LED leads.

figure 1

Creating a larger conductive surface
A base layer of copper tape was added to the index card for both ground and power. The LED was secured to the circuit with additional copper tape strips (added to the surface of each lead). This was done ensuring smooth contact between the two sheets of tape. The LED was pressed firmly to secure contact with both top and bottom layers.

figure 2

Observation: The circuit with copper tape on both the back and front of the LED leads (figure 2) worked better to conduct electricity.

Conclusion: Connectivity matters. While the adhesive back is conductive, it is best to reinforce connectivity by ensuring connection to the copper tape’s surface. Also, it is very important to establish a flat surface of connection. Eliminate any folds or bubbles when laying the tape to establish a flat surface. A smooth flat surface ensures an uninterrupted flow of current.

  • Lab 2: Controlling two LEDs with a copper tape switch

With this experiment, I ensured the copper tape lined the back and front sides of each LED lead (as in the successful lab above). Ensuring the power and ground connections did not cross to create a short circuit was important. I used masking tape to cover intersecting layers.

Photo showing copper tape circuit with 2 LEDs. Masking tape was used to cover areas where ground and voltage connections intersected.

Examples using Copper Tape

  • Here is an example I found where copper tape is used as a speaker. As speaker was created using an analog paper circuit, coiled copper tape and a magnet.
  • This Instructables tutorial explores the technical, design, and aesthetic possibilities of 2-D, flexible audio speaker technology.
  • For my NIME performance (previewed below), I created a pop-up book and used copper tape for my circuitsand as a switch. I used the Makey Makey as my microcontroller and programmed each sound using MAX/MSP and Kontakt Player – essentially creating a MIDI-controller.

The Makey Makey attached to me (as ground) and to items connecting to it as power. In the case of the diagram, when the apple is touched the circuit is closed and the desired reaction occurs. In the case of my MIDI-controller, when I touched respective drums on the pop-up book, corresponding sound played. photo credit:


When the drum is touched sound is played. The drum’s surface is made with copper tape (with conductive adhesive)

A closer look at the drum. You can see the surface with layers of copper tape, when touched acting as a switch. The single piece of tape to the right continues the circuit to the Makey Makey connection. Conductive fabric was added at the crease to ensure a steady connection was achieved. Necessary as elements in pop up books are folded.

Lessons learned from using copper tape for this NIME project:

Benefits of using copper tape

  • The flat thin material worked well for this application as I needed a flat seamless circuit.
  • Simple to use once the circuit design was mapped out.

Weaknesses of copper tape

  • It tears easily where the tape is folded. I resorted to enforcing these folds by adding a backing of conductive fabric.
  • Long pieces get tangled quite easily rendering the piece of tape garbage.
  • I experienced some connectivity issues with my switch. I added more lengths of tape but should have also created a weaved pattern to create a wider conductive surface (think how fabric is weaved – the conductive fabric did an excellent job at conducting electricity).

Copper Tape Tutorials

Light Controller

Design Challenge: Make a device to control an RGB light. The features of the device include:

  1. A control to turn the light on and off. When it turns on, it should retain the relative red, green, and blue brightness levels from when it was last turned on.
  2. The ability to fade each color channel (red, green, and blue) from off to full brightness.
  3. Fade level should be maintained when you release the fade controller.
  4. Fade should be interruptible by other controllers, e.g. on/off or another fade controller.
  5. The ability to fade the overall brightness of the light.


Testing: This code explores turning on an LED with a switch. A potentiometer is then used to control the brightness of the LED. I worked with a white LED for this to ensure the code worked before connecting the RGB LED.




Design and Fabrication 


Game Controller

For this assignment, I created a game controller to play Atari’s Lunar Lander game in a browser. Using buttons, the controller sends W(up), S(down), A(left) and D(right) keypresses as a USB keyboard.

I used the MKR1000 board for this assignment. The device uses bluetooth connection but I connected it via USB directly to the computer for power and connection.


#include “Keyboard.h”

const int upButton = 7;
const int downButton = 8;
const int leftButton = 6;
const int rightButton = 9;
//const int reloadButton = 4;
//const int enterButton = 5;
void setup () {
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
// pinMode(reloadButton, INPUT);
// pinMode(enterButton, INPUT);


void loop() {

//keyboard button presses
if (digitalRead(upButton) == HIGH) {‘w’); //send UP
else if (digitalRead(upButton) == LOW)

if (digitalRead(downButton) == HIGH) {‘s’); //send DOWN
else if (digitalRead(downButton) == LOW)

if (digitalRead(leftButton) == HIGH) {‘a’); //send LEFT
else if (digitalRead(leftButton) == LOW)

if (digitalRead(rightButton) == HIGH) {‘d’); //send RIGHT
else if (digitalRead(rightButton) == LOW)

Circuit Design



Bamboo box


Solder header pins to the MKR1000
Solder wires to the 4 buttons
Connect the buttons and MRK1000 to breadboard



Arduino mouse and keyboard libraries

Arduino mouse button control