Back to Parent

int PIRPin = D2;
//define the pin we will connect the PIR sensor to
int PiezoPin = D2;
//define the pin we will connect the piezo sensor to
Servo myservo;
// create servo object to control a servo
int pos = 0;    
// variable to store the servo position
int ledPin = D4; 
//define the pin we will connect the LedPin to
int PIRReading = 0;
//initially assign PIR sensor as ZERO. This line of code is optional too.
int PiezoReading = 0;
//initially assign piezo as ZERO. This line of code is optional too.
int ledBrightness = 0;
//initially assign fsrReading as ZERO. This line of code is optional too.  
int i=0;
//declare a integer i to ZERO so that we can use it later
// store the time when you last published
int melody[] = {1000,1500,2000,2000,750,0,200,1700}; 
// create an array for the notes in the melody:
int noteDurations[] = {4,8,8,4,4,4,4,4 };
// create an array for the duration of notes.
// note durations: 4 = quarter note, 8 = eighth note, etc.
int last_published = -1;
int hour= Time.hour();
//get the hour value of the local time. 
void playNotes()
    // iterate over the notes of the melody:
    for (int thisNote = 0; thisNote < 8; thisNote++) 

      // to calculate the note duration, take one second
      // divided by the note type.
      //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
      int noteDuration = 1000/noteDurations[thisNote];
      tone(PiezoPin, melody[thisNote],noteDuration);

      // to distinguish the notes, set a minimum time between them.
      // the note's duration + 30% seems to work well:
      int pauseBetweenNotes = noteDuration * 1.30;
      // stop the tone playing:
void log_to_spreadsheet(  )
  // check if 1 minute has elapsed
	if( last_published + 60000 < millis() )
		Particle.publish( "log_to_spreadsheet", String( PIRReading ) );
		last_published = millis();

void setup()
  pinMode(PIRPin, INPUT);
  //setup the PIR Pin for input
  pinMode(PiezoPin, OUTPUT);
  //setup the flexPin for input too
  pinMode(ledPin, OUTPUT);
  // Set up the LED for output
  Particle.variable("Proximity", &PIRReading, INT);
  // Create a cloud variable of type integer called 'proximity' mapped to PIR Reading
  // attach the servo on the D0 pin to the servo object;
  //Set the timezone to local timezone
  //sync the current local time with the particle board.
void loop()
  //This is the delay time for opening the perfume box next day. 
  //The user can  manipulate this number to change the frequency of engagement with the plant in a day. Right now, the value is for 24 hours  
  // open the perfume box hole. The servo rotates to the mentioned value. 
  //This delay is the time need to sense the PIR sensor before triggering 
  PIRReading = analogRead(PIRPin); 
  //get the analog value from the Photoresistor Pin
  ledBrightness = map (PIRReading, 0, 4095, 0, 255);
  if (PIRReading>200) 
      digitalWrite(ledPin, HIGH);
      //having a digitalWrite instead of analogWrite would make the LED blink at full brightness  
      //we are calling the playnotes function
      //close the perfue box. The servo now closes the perfume box by a whole rotation
      digitalWrite(ledPin, LOW);
      //turn off the LED after the servo closes the box
      digitalWrite(ledPin, LOW);
    log_to_spreadsheet(  );
  //wait for 1/10 of the second and then loop
Click to Expand

Content Rating

Is this a good/useful/informative piece of content to include in the project? Have your say!