Light and Water Reactive Raincoat

This semester at college, I am in a class called Computing and Craft which is about incorporating circuitry and micro-controllers and craft to bring our projects to the next level.
For our first big project, I decided to make a raincoat the reacted to light and water.  Being from California and going to school in Massachusetts has been a big transition and the sudden downpours can catch you unaware.  This raincoat has built in light and water sensors so when it gets dark the raincoat lights up so the wearer will be visible in the dark, and when it gets wet, a warning beep sounds so the wearer can head for cover.


Step 1: Raincoat


For the coat itself, I used a very cheap plastic one that my professor had around.  I reinforced all the seams on the sewing machine because they had all just been melted together and were coming apart.  The coat also had pockets which was convenient for storing the arduino.

Step 2: Circuitry

Light and Water Reactive Raincoat   



For the circuitry, I tried everything on a solderless breadboard even though everything did end up being soft circuits.  8 LEDs (4 on each sleeve) are attached by poking the leads through the plastic, winding the leads around needle-nose pliers, and then stitching them together using conductive thread.  I didn’t realize just how resistive the thread was and in the future I would recommend wiring in series, not parallel as I did.
The circuits I used were based on the digram below which I got from this board.  For my water sensor I ended up using a 1M resistor instead of 10k.
For the light sensor, I based my circuit off of this SparkFun inventor’s guide for the light sensor on page 24.

Step 3: Code

CodeI wrote two programs, one to control the light sensor and LEDs and one to control the water sensor and speaker.  I based to code off the tutorials found here for the light sensor and speaker tutorials.

Light Sensor Code:
int LEDPin = 13;

int CDSPin = 0;

void setup(){
pinMode(LEDPin, OUTPUT);

void loop(){
int lightLevel;
lightLevel = analogRead(CDSPin);
if (lightLevel < 300)
digitalWrite (LEDPin, HIGH);
else if (lightLevel > 300)
{digitalWrite (LEDPin, LOW);

Water Sensor Code:

int waterSensor = 2;

int ledPin = 13;

int speakerPin = 9;

int length = 15; // the number of notes
char notes[] = “gggefffd”; // a space represents a rest
int beats[] = {
1, 1, 1, 3, 1, 1, 1, 3, };
int tempo = 300;

void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
digitalWrite(speakerPin, LOW);

void playNote(char note, int duration) {
char names[] = {
‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘a’, ‘b’, ‘C’ };
int tones[] = {
1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

// play the tone corresponding to the note name
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(speakerPin, OUTPUT);

void loop() {
int sensorData;
sensorData = analogRead(waterSensor);
if (sensorData < 50){
playTone(‘b’, 100);
else if (sensorData > 51){

Step 4: Finished Product

Finished Product

I am trying to get better video of it working, but for now, here’s me talking about the LEDs and light sensor!  Here is a video of me showing it the class.

Source: Light and Water Reactive Raincoat

0/5 (0 Reviews)

About The Author

Hassan Zaka

I am an expert in accounting and possess diverse experience in technical writing. I have written for various industries on topics such as finance, business, and technology. My writing style is clear and simple, and I utilize infographics and diagrams to make my writing more engaging. I can be a valuable asset to any organization in need of technical writing services.

Follow Us:

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top