Marcazzan_M
Published © GPL3+

Sensitive Jack-o'-Lantern

A jack-o'-lantern which change color when someone passes in front of it.

BeginnerFull instructions provided682
Sensitive Jack-o'-Lantern

Things used in this project

Hardware components

Super Starter Kit UNO R3 Project from Elegoo
×1
Elegoo IR Receiver Module from Kit
×1
Elegoo Ultrasonic Sensor
×1
Elegoo IR Remote Control
×1
Arduino UNO
Arduino UNO
×1
General Purpose Transistor NPN
General Purpose Transistor NPN
×3
Resistor 221 ohm
Resistor 221 ohm
×15
Resistor 1k ohm
Resistor 1k ohm
×3

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Custom parts and enclosures

schematic

Code

Sensitive Jack-o'-lantern

Arduino
//Sensitive Jack-o'-lantern with ELEGOO

#include <IRremote.h>

//Ultrasonic sensor
int eco = 8;
int trigger = 7;
//IR Receiver Module
int receiver = 9;
//variables
int led_color = 0;
int command = 0;

IRrecv irrecv(receiver);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'


//This function returns a number from 0 to 11 according which command IR Module receives
int translateIR() // takes action based on IR code received
{

  switch (results.value)

  {                                           //Button
    case 0xFFA25D:  return 10;   break;       //POWER
    case 0xFFE21D:  return 11;   break;       //FUNC/STOP
    case 0xFF6897:  return 0;    break;       //0
    case 0xFF30CF:  return 1;    break;       //1
    case 0xFF18E7:  return 2;    break;       //2
    case 0xFF7A85:  return 3;    break;       //3
    case 0xFF10EF:  return 4;    break;       //4
    case 0xFF38C7:  return 5;    break;       //5
    case 0xFF5AA5:  return 6;    break;       //6
    case 0xFF42BD:  return 7;    break;       //7
    case 0xFF4AB5:  return 8;    break;       //8
    case 0xFF52AD:  return 9;    break;       //9
    case 0xFFFFFFFF: return command;   break;      //REPEAT

    default:
      return command;             //OTHER

  }
  delay(500); // Do not get immediate repeat

} //END translateIR


//This function takes an action based on variable c which determines which LEDs turn on
void color(int c) {
  switch (c) {
    case 0:
      digitalWrite(13, LOW);
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      break;
    case 1:
      digitalWrite(13, HIGH);
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      break;
    case 2:
      digitalWrite(13, LOW);
      digitalWrite(12, HIGH);
      digitalWrite(11, LOW);
      break;
    case 3:
      digitalWrite(13, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(11, LOW);
      break;
    case 4:
      digitalWrite(13, LOW);
      digitalWrite(12, LOW);
      digitalWrite(11, HIGH);
      break;
    case 5:
      digitalWrite(13, HIGH);
      digitalWrite(12, LOW);
      digitalWrite(11, HIGH);
      break;
    case 6:
      digitalWrite(13, LOW);
      digitalWrite(12, HIGH);
      digitalWrite(11, HIGH);
      break;
    case 7:
      digitalWrite(13, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(11, HIGH);
      break;
  }
}
//End color

void setup() {
  //IR
  pinMode(receiver, OUTPUT);  //Pin 9
  

  //Ultrasound sensor
  pinMode(eco, INPUT);  //Pin 8
  pinMode(trigger, OUTPUT); //Pin 7

  //Pin's LED
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);

  irrecv.enableIRIn(); // Start the receiver

}

void loop() {
  
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    command = translateIR();
    if(command<=7) color(command);
    Serial.println(command);
    irrecv.resume(); // receive the next value
  }

  while (command == 11) {             // numeber 11 activates the ultrasound sensor
    digitalWrite( trigger, LOW);

    digitalWrite( trigger, HIGH);

    delayMicroseconds( 10 );

    digitalWrite( trigger, LOW );

    long tm = pulseIn( eco, HIGH);

    long r = 0.0343 * tm / 2;         //cm
    
    delay(20);
    
    if (r <= 40) {  //if r<40cm this means that someone passes in front of it
      led_color = random(0, 8); //In this way it can light the LEDs casually
      color(led_color);
      delay(500);
    }

    if (irrecv.decode(&results)) // have we received an IR signal?
    {
      command = translateIR();
      Serial.println(command);
      irrecv.resume(); // receive the next value

    }
  }


}

Credits

Marcazzan_M
6 projects • 67 followers
I'm an Italian student, I'm studying electronic engineering. Sufficiently advanced technology is indistinguishable from magic.
Contact

Comments

Please log in or sign up to comment.