Week 8: Hands-free switch

Inspiration:

For this assignment, I was mainly inspired by the UV shoe sanitizer that is used to help fight bacteria in hospitals.

Process:

For the circuit, I have used 5 LEDs ( 4 red, 1 green), 8 wires, and one 320Ω resistor. The basic idea is that the individual waits for the green light to put his shoe on the platform, then the disinfection starts and takes 5 seconds to complete, when the green light goes on again, the individual can then remove his shoe.

Platform:

Setup:

I have used a for() loop and pinMode to avoid unnecessary repetition. I also have an array to store all the LEDs.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
void setup() {
pinMode(7, OUTPUT);
for (int i=0; i<4; i++){
pinMode(Led[i], OUTPUT);
}
}
void setup() { pinMode(7, OUTPUT); for (int i=0; i<4; i++){ pinMode(Led[i], OUTPUT); } }
void setup() {
  pinMode(7, OUTPUT);
  for (int i=0; i<4; i++){
    pinMode(Led[i], OUTPUT);
  }
}
LEDs:

To tell the user that the disinfection is still going on, I have added an animation to the red LEDs, in which the light bounces between the two edges of the strip. To do that, I used the Delay function as well as two for() loops (for each direction), and digitalWrite() to control the LEDs.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Check when the shoe is sanitized
if (DONE){
for (int i=0; i<4; i++){
digitalWrite(Led[i], LOW);
digitalWrite(7, HIGH);
}
}
// If not sanitized
if (DONE==false){
digitalWrite(7, LOW);
// One way, left to right
for (int i=0; i<4; i++){
// 2 Leds at the same time
digitalWrite(Led[i], HIGH);
digitalWrite(Led[i+1], HIGH);
// Delay of 120
delay(120);
digitalWrite(Led[i], LOW);
digitalWrite(Led[i+1], LOW);}
// The other way , right to left
for (int i=3; i>=0; i--){
digitalWrite(Led[i], HIGH);
digitalWrite(Led[i-1], HIGH);
delay(120);
digitalWrite(Led[i], LOW);
digitalWrite(Led[i-1], LOW);
}
}
// Check when the shoe is sanitized if (DONE){ for (int i=0; i<4; i++){ digitalWrite(Led[i], LOW); digitalWrite(7, HIGH); } } // If not sanitized if (DONE==false){ digitalWrite(7, LOW); // One way, left to right for (int i=0; i<4; i++){ // 2 Leds at the same time digitalWrite(Led[i], HIGH); digitalWrite(Led[i+1], HIGH); // Delay of 120 delay(120); digitalWrite(Led[i], LOW); digitalWrite(Led[i+1], LOW);} // The other way , right to left for (int i=3; i>=0; i--){ digitalWrite(Led[i], HIGH); digitalWrite(Led[i-1], HIGH); delay(120); digitalWrite(Led[i], LOW); digitalWrite(Led[i-1], LOW); } }
// Check when the shoe is sanitized
if (DONE){
  for (int i=0; i<4; i++){
    digitalWrite(Led[i], LOW);
    digitalWrite(7, HIGH);
  }
}

// If not sanitized
if (DONE==false){
  digitalWrite(7, LOW);
  // One way, left to right
  for (int i=0; i<4; i++){
    // 2 Leds at the same time
    digitalWrite(Led[i], HIGH);
    digitalWrite(Led[i+1], HIGH);
    // Delay of 120
    delay(120);
    digitalWrite(Led[i], LOW);
    digitalWrite(Led[i+1], LOW);}
  // The other way , right to left
  for (int i=3; i>=0; i--){
    digitalWrite(Led[i], HIGH);
    digitalWrite(Led[i-1], HIGH);
    delay(120);
    digitalWrite(Led[i], LOW);
    digitalWrite(Led[i-1], LOW);
  }
}
Timer:

For the timer, I have used millis() to change a boolean variable every 5 seconds.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Timer for the sanitization
unsigned long curr = millis();
if (curr-prev>=5000){
prev=curr;
DONE=!DONE;
}
// Timer for the sanitization unsigned long curr = millis(); if (curr-prev>=5000){ prev=curr; DONE=!DONE; }
// Timer for the sanitization
unsigned long curr = millis();
if (curr-prev>=5000){
  prev=curr;
  DONE=!DONE;
}

One of the challenges I faced was setting up a good connection between wires as the tape was not ideal.

Demo:

Code:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int Led[]= {9, 10, 11, 12}; // list of Leds
boolean DONE= false; // check when the sanitization is done
unsigned long prev=0; // for the timer
void setup() {
pinMode(7, OUTPUT);
for (int i=0; i<4; i++){
pinMode(Led[i], OUTPUT);
}
}
void loop() {
// Timer for the sanitization
unsigned long curr = millis();
if (curr-prev>=5000){
prev=curr;
DONE=!DONE;
}
// Check when the shoe is sanitized
if (DONE){
for (int i=0; i<4; i++){
digitalWrite(Led[i], LOW);
digitalWrite(7, HIGH);
}
}
// If not sanitized
if (DONE==false){
digitalWrite(7, LOW);
// One way, left to right
for (int i=0; i<4; i++){
// 2 Leds at the same time
digitalWrite(Led[i], HIGH);
digitalWrite(Led[i+1], HIGH);
// Delay of 120
delay(120);
digitalWrite(Led[i], LOW);
digitalWrite(Led[i+1], LOW);}
// The other way , right to left
for (int i=3; i>=0; i--){
digitalWrite(Led[i], HIGH);
digitalWrite(Led[i-1], HIGH);
delay(120);
digitalWrite(Led[i], LOW);
digitalWrite(Led[i-1], LOW);
}
}
}
int Led[]= {9, 10, 11, 12}; // list of Leds boolean DONE= false; // check when the sanitization is done unsigned long prev=0; // for the timer void setup() { pinMode(7, OUTPUT); for (int i=0; i<4; i++){ pinMode(Led[i], OUTPUT); } } void loop() { // Timer for the sanitization unsigned long curr = millis(); if (curr-prev>=5000){ prev=curr; DONE=!DONE; } // Check when the shoe is sanitized if (DONE){ for (int i=0; i<4; i++){ digitalWrite(Led[i], LOW); digitalWrite(7, HIGH); } } // If not sanitized if (DONE==false){ digitalWrite(7, LOW); // One way, left to right for (int i=0; i<4; i++){ // 2 Leds at the same time digitalWrite(Led[i], HIGH); digitalWrite(Led[i+1], HIGH); // Delay of 120 delay(120); digitalWrite(Led[i], LOW); digitalWrite(Led[i+1], LOW);} // The other way , right to left for (int i=3; i>=0; i--){ digitalWrite(Led[i], HIGH); digitalWrite(Led[i-1], HIGH); delay(120); digitalWrite(Led[i], LOW); digitalWrite(Led[i-1], LOW); } } }
int Led[]= {9, 10, 11, 12}; // list of Leds
boolean DONE= false; // check when the sanitization is done
unsigned long prev=0; // for the timer

void setup() {
  pinMode(7, OUTPUT);
  for (int i=0; i<4; i++){
    pinMode(Led[i], OUTPUT);
  }
}

void loop() {
  // Timer for the sanitization
  unsigned long curr = millis();
  if (curr-prev>=5000){
    prev=curr;
    DONE=!DONE;
  }
  
  // Check when the shoe is sanitized
  if (DONE){
    for (int i=0; i<4; i++){
      digitalWrite(Led[i], LOW);
      digitalWrite(7, HIGH);
    }
  }

  // If not sanitized
  if (DONE==false){
    digitalWrite(7, LOW);
    // One way, left to right
    for (int i=0; i<4; i++){
      // 2 Leds at the same time
      digitalWrite(Led[i], HIGH);
      digitalWrite(Led[i+1], HIGH);
      // Delay of 120
      delay(120);
      digitalWrite(Led[i], LOW);
      digitalWrite(Led[i+1], LOW);}
    // The other way , right to left
    for (int i=3; i>=0; i--){
      digitalWrite(Led[i], HIGH);
      digitalWrite(Led[i-1], HIGH);
      delay(120);
      digitalWrite(Led[i], LOW);
      digitalWrite(Led[i-1], LOW);
    }
  }
}

 

Leave a Reply