Press "Enter" to skip to content

Week 1 Flashlight

Demo:

cat with broken robot

Robot Flashlight Demo

Idea:

When I came across some bad robot images online, I think it could be fun to make a broken robot with “laser” eyes, which can be used as a flashlight.

robot
broken robot

What should I use to make these laser eyes? The first image that pops up in my mind is this Magic Light Cup Module that I did some research on last semester in my pcomp class. KY-027 Magic Light Cup Module is a set of two boards, each one has a led and a mercury tilt switch. A pair of the modules create a light hourglass effect, light being “magically” transferred from one module to the other when tilting them, which is quite playful. I think this could be my broken robot’s “laser” eyes.

KY-027 Magic light cup module
KY-027 Magic Light Cup Module Demo

Material:

For the electronic part, I used Arduino Nano IoT33 as the microcontroller, a pair of KY-027 magic Light Cup Module, a 9v Li-On battery as the external power source, a 1.8″ x 1.4″ x 0.4″ breadboard and multiple wires.

Electronics
Battery

For the fabrication part, I used cereal package — cardboard, duck tape and double-sided tape.

Cereal box

Digital Design:

I used a small breadboard with dimension1.8″ x 1.4″ x 0.4″ holding all electronics in order to make it portable.

connected circuit
Breadboard Diagram
Schematic Diagram

To have a hourglass effect, I put some delay after each transfer. Also for the fading off effect, I extend time period of decreasing brightness.

Codes:

int ledPinA = 12;
int switchPinA = 11;
int switchStateA = 0;

int ledPinB = 3;
int switchPinB = 2;
int switchStateB = 0;
int brightness   = 0;


// fade off effect
void setup() {
  pinMode(ledPinA, OUTPUT); 
  pinMode(ledPinB, OUTPUT);  
  pinMode(switchPinA, INPUT); 
  pinMode(switchPinB, INPUT);
  Serial.begin(9600);
}

void loop() {
  switchStateA = digitalRead(switchPinA);
  if (switchStateA == HIGH && brightness != 150) { 
   brightness ++;
  } 
  
  switchStateB = digitalRead(switchPinB);
  if (switchStateB == HIGH && brightness != 0) { 
   brightness --;
  } 
  
  analogWrite(ledPinA, brightness);  //  LED A slowly fade out
  Serial.print("LED A: ");
  Serial.println(brightness);
  
  analogWrite(ledPinB, 150 - brightness);  // LED B slowly bright up
  Serial.print("LED B: ");
  Serial.println(150 - brightness);
  
  delay(20);
}

Fabrication Design:

The main idea is to only show LED lights and hide everything else. For my own convenience to insert in and take out the breadboard for debugging issues, I also need a nice and easy flip. Beyond that, to make it a portable product, I want it to look integral. With all these concerns, I decided to make a cuboid to hide all the electronics.

design the unfolded box layout
cut the box
slightly cut along folding lines
slightly fold the

I drilled two tiny holes to only show the LED lights out.

front of the box
top of the box
drill holes
insert led to holes

Experiments:

I tested the electronic part to make sure that LED lights fade off with an external power source — a 9V battery. Here I had some difficulties finding the right external power source. Since Arduino nano accepts either 3.3 volts or 5 volts as power input, but I only got a 9 volts battery aside. After reading the datasheet of Arduino nano IoT 33 again, I found that Vin pin can also work as a power input pin that can hold voltage from 5 to 21 volts. Problem solved!

Demo with battery source

After that, I started to put everything inside the box. The easy-flip is quite helpful here to allow me to plug in and out my battery easily without pulling out the entire breadboard.

place battery
insert battery and breadboard in the box
battery and breadboard in the box
plug in power

Here is a draft demo of my flashlight.

Flashlight demo

Recap:

After I showed this to my roommate, he mentioned that the light transition speed is too slow for him to wait to see the fade off effect. I adjusted the fade off period from 255 to 150 to allow the light transition process goes faster.