Group 6 – User-interactive Theatrical Props
By Lucas Parrilla Santander, Senthuran Krishnakumar, and Shahn Naseem
USER-INTERACTIVE THEATRICAL PROP
LIGHTALK
PROJECT BRIEF:
We were asked to design a user-controlled prop using the Arduino microcontroller and other needed sensors and actuators. These props could be a unique hat, rabbit ears, umbrellas, chairs, shirts, jackets, and so on, as it is common for actors during a theatrical performance to use props to interact with the audience and inject life into the scene delivered.
OUR PROP:
The prop we have decided to create is a user-controlled LED mask, that lights up and plays different effects depending on what sounds or movements are detected.
MARKET RESEARCH:
Upon researching issues that the theatrical world faces, one of the main issues is the lack of inclusiveness with the deaf society. Theatre involves the use of the voice and physical gestures to express emotions. As a result, stripping away half of the experience from an audience ruins the experience. To tackle this problem, we dissolved what the real problem that the deaf community faced, which is vocal tone. From then, we looked into ways we could convert vocal tone and volume into something visual that the audience could perceive. A plethora of LED masks have been used in performances and can be easily purchased online. The designs of these masks vary, but the foundational design often replicates a facial expression, primarily focusing on the eyes and mouth. They all come with a few pre-set patterns and designs, and a singular remote that controls them (to turn it on or off and to change the colours and effects). This style of changing the effects of the mask is very limited, and we believe we can make that process a lot more interesting. By using a microphone and a motion sensor, we can create a variety of ways for the user to interact with the prop, creating a more immersive experience. Furthermore, the output of the LED strips will always be completely random, essentially creating an infinite number of possible effects and designs, ensuring that whenever the mask is worn a new and unique experience is created.
DESIGN BLOG:
Week 9 – Monday – 21/11/22:
After looking through the different project briefs we decided to go for project 1, which was to create a theatrical prop. We brainstormed different ideas, some of these being a hat, a jacket, and a mask. After going through the feasibility of each idea, we decided to make a mask, but we had to figure out what type of mask we wanted to create. We discussed the different functions and what type of interactions we wanted the mask to have.
Initial Sketches:
We decided to go for the third design: a face mask with a hood. Using a softer material would allow us to hide the Arduino components within the clothing, providing a much cleaner design. The main concept and functionality of the mask were that there would be 2-3 strips. When the user speaks the LED strips will light up, however, the number of LEDs that light up depends on how loudly the user speaks. The LEDs would originate from the centre, and when a microphone detects sound, the LED would light up on a random strip in a random direction. This would allow for a new experience every time the mask was worn. We also decided that we wanted to add a motion sensor, an MP3 player, and a speaker. A motion sensor would allow us to play different effects depending on what direction the user is moving. An MP3 player would allow us to upload different songs and sound effects, which we could then output with the speaker.
Week 9 – Wednesday – 23/11/22:
We looked for the different components we needed for the project. The components we decided to get were an LED strip, a microphone, an MP3 player, a speaker, a motion sensor, a battery pack, a battery charger, and the actual face mask/hood.
Week 9 – Friday – 25/11/22:
The components were finalised, and the order was sent off.
Week 10 – Monday – 28/11/22:
While waiting for the components to arrive, we decided to do some market research and identify our target audience. Our findings and conclusions are presented at the beginning of our webpage.
Week 11 – Monday – 05/12/22:
Some of our components came so we decided to test them out.
Component Testing:
For the LED strip we used the following website for the breadboard layout and the sample code:
Sample code for LED Strip
When setting up the breadboard, we realised we didn’t have a 330 ohms resistor, which was the one we needed. I used another resistor as a placeholder and the LEDs turned on, however they didn’t turn the colour we expected them to. All of the LEDs on the strip were supposed to turn red, however, only some of them did. This was because we didn’t have the right resistor, so when we got the right one this issue was resolved.
Sample Code:
Week 11 – Tuesday/Wednesday – 06/12/22 – 07/12/22:
While waiting for the microphone, motion sensor, and speaker to be delivered, we started to think about how our code will look like.
Coding progress:
Week 11 – Thursday/Friday – 08/12/22 – 09/12/22:
Since our components arrived extremely late, we were forced to change our idea.
Design revisions:
When the user speaks into the microphone, the LEDs on the strip will light up, but instead of lighting up from the centre (as it did originally), it will now light up from the beginning of the strip. The louder the user speaks, the more LEDs on the strip will light up, and as the number of LEDs that are lit up increases, the colour of the LEDs will now change. So, if the user is speaking quietly the LEDs will be yellow, if the user speaks at a medium level the LEDs will be orange, and if the user speaks loudly the LEDs will be red. The user is also able to connect the Arduino Uno board to their own device, and easily change the preset colours to whatever they want.
Component Testing v2:
For the microphone we used the following website for the breadboard layout and the sample code:
Sample code for microphone
Essentially, the signal that gets picked up by the microphone gets converted to the number of volts powering the breadboard (so in our case 5 volts). This makes it easier for us to check the value of the microphone.
After making a few adjustments, we implemented the sample code into our main code and got the LEDs to light up when we spoke into the microphone.
Week 11 – Saturday – 10/11/22:
Final Assembly:
The LED strips were wrapped around the mask, and we connected the circuit to the mask by adding a little slit where we could fit the Arduino breadboard.
PROJECT MANAGEMENT:
GROUP MEMBER | ALLOCATED TASKS AND COMPLETIONS |
ALL | – Selecting what we will be creating in response to the design brief – Creating and updating the blog – Choosing which components will be used and how the product will work – Testing and debugging |
SHAHN | – Market research and analysis – Assembly – Blog documentation – PowerPoint creation |
LUCAS | – Coding – Target audience researcher – Idea developer |
SENTHURAN | – Design sketches – Storyboarding – Blog styling |
MAKER’S MANUAL:
Product overview:
The product we created is a face mask that will light up depending on how loudly the user speaks. The louder the user is the more lights will light up, and when the number of lights that light up increases, the colour of the lights will change. So, if a user speaks quietly then the colour of the lights will be yellow, if a user speaks at a medium level, then the colour of the lights will be orange, and if a user speaks loudly then the colour of the lights will be red. To do all of this, we connected a microphone and an LED strip to the Arduino breadboard. The signal the microphone picks up is converted to the number of volts being used to power the circuit, as this makes it easier to monitor the input of the microphone. We used 4 volts instead of 5 to make the lights a bit more sensitive. To get rid of any background noise, we made it so the LEDs will only light up when the microphone signal surpasses the threshold of 0.8 volts. So if the signal inputted into the microphone doesn’t exceed 0.8 volts, then the LEDs will not turn on. To get the volts to surpass 0.8, you must be talking close to the microphone, so only the user will be able to affect the LEDs.
Tools and Supplies:
- 1x Arduino Uno
- 1x Breadboard
- Wires
- WS2811/12/12B Addressable 5V LED Strip
- 1x 330 Ohms Resistor
- 1x 100-1000 Microfarad Capacitor
- Arduino Compatible Microphone -> We Used The: Adafruit Electret Microphone Amplifier with Adjustable Gain
- Battery -> We Used The: LiPo Battery Pack (850ma)
- Battery Charger -> We Used The: LiPo Amigo (LiPo/Lilon Battery Charger)
- A Mask
Breadboard Layout:
Build Section:
There is nothing that will need to be built for our prop. The user only has to buy a mask and stick the LED strip onto it, and then connect this to the Arduino breadboard which will also have a microphone attached to it. This also can be attached to any prop, not just a mask. So, the user can use this with whatever they want.
Code:
#include <FastLED.h>
#define LED_PIN 2
#define NUM_LEDS 51
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
int colour;
int randomNum;
int numLed = 0;
int maxVol = 4;
double bgNoise = 0.80;
double volts;
double setNoise = 0.80;
double changeVar = (maxVol - bgNoise) / NUM_LEDS;
double greenLVL = 255 - 255 * (((setNoise - bgNoise) / (maxVol - bgNoise)));
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(9600);
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();
}
void loop() {
soundSystem();
colourSystem();
Serial.print("setNoise: ");
Serial.println(setNoise);
Serial.print("volts: ");
Serial.println(volts);
Serial.print("changeVar: ");
Serial.println(changeVar);
Serial.println();
FastLED.show();
}
void soundSystem() {
unsigned long startMillis = millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow) {
sample = analogRead(A0);
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax) {
signalMax = sample; // save just the max levels
} else if (sample < signalMin) {
signalMin = sample; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
volts = (peakToPeak * 5.0) / 1024;
return volts; // convert to volts
}
void colourSystem() {
if (setNoise - volts >= changeVar) {
leds[numLed] = CRGB(0, 0, 0);
colours();
numLed--;
numLed = constrain(numLed, 0, NUM_LEDS);
setNoise = setNoise - changeVar;
setNoise = constrain(setNoise, 0.8, maxVol);
Serial.println("decrease");
FastLED.show();
}
colour = 255 * (volts / 10);
if (volts - setNoise >= changeVar) {
leds[numLed] = CRGB(255, greenLVL, 0);
colours();
numLed++;
numLed = constrain(numLed, 0, NUM_LEDS);
setNoise = setNoise + changeVar;
setNoise = constrain(setNoise, 0.8, maxVol);
Serial.println("increase");
FastLED.show();
}
}
void colours() {
for (int i = 0; i < NUM_LEDS; i++) {
if (leds[i] != CRGB(0, 0, 0)) {
double greenLVL = 255 - 255 * (((setNoise - bgNoise) / (maxVol - bgNoise)));
leds[i] = CRGB(255, greenLVL, 0);
}
}
}
EVALUATION:
Throughout the coding stages, many tests had to be conducted. Our original idea of having 4 different pathways for the LEDs to randomly go, proved too difficult to complete, so we settled on having it go one way from beginning to end. Furthermore, due to time constraints and limitations, we could not implement the motion sensor, MP3 player, or speaker, which would have all allowed us to create a more complete product. Another limitation we unfortunately faced was the signal the microphone inputted. After significant testing, we adjusted it to cater for background noise, with the aim that it will only pick up sound and light up the LED strip if the user speaks into it. For the most part, it does block out a lot of noise, however, if there is an extremely loud background noise then it will still pick up on the microphone. For example, if multiple people talk loudly next to it. This is not entirely ideal as if this prop is used during a theatrical performance (which it is intended to do), then if there are other actors performing close to the user then it may slightly pick up on the microphone. A possible fix for this could have been to including a user controlled button so it only lights up LED if the user presses the button when they are about to speak.
Page 1
You must be logged in to post a comment.