How To Build and Code - leesm5/Wireless-Bluetooth-Security-System GitHub Wiki

Transmitter

Transmitter Circuit

The transmitter circuit includes the PIR Motion Detector, the RF Transmitter and a green Led.

PIR is in PIN 2. This must be used because an interrupt reads the PIR and only works on pins 2 and 3 are interrupt pins on the arduino uno.

The RF Transmitter is in PIN 12 as this is the default for the rh_ask library.

The green LED is in PIN 13. This can really go in any pin as long as it is changed in the code.

The circuit diagrams below shows how to wire these elements of the transmitter circuit.

Transmitter Circuit.

Transmitter Circuit 2.

Transmitter Code

    #include <RH_ASK.h> //library needed for transmission
#include <SPI.h> // Not actually used but needed to compile

RH_ASK driver;
//Speed is 2000bps; RX pin = 11; TX pin = 12

const int led_pin = 13;
const int pir = 2;
int val;
static int state = 0;
long t = 0; //long to prevent overflow
long previousmillis;



void setup()
{
  pinMode(led_pin, OUTPUT);
  pinMode(pir, INPUT);
  Serial.begin(9600); 
  if (!driver.init())
    Serial.println("init failed");

  //0 means PIN 2, 1 means PIN 3
  attachInterrupt(0, pir_detect, CHANGE);
}

void loop()
{

  switch (state) {

    case 0:
      break;


    case 1:
      while (val == 1) { //while the pir detects motion
        t = millis() - previousmillis; //t = time in milli seconds
        digitalWrite(led_pin, 1); //turn on led
        Serial.println(t);
      }
      state = 2; //when motion ends, go to state 2

    case 2:
      digitalWrite(led_pin, 0); //turn off led

      //The total time pir detector detects motion determines case
      if (t > 0 && t < 5000 ) {  //t = 0s to t = 5s
        Serial.println(t);
        t = 0; //reset t
        const char *msg = "1"; //message to be sent
        driver.send((uint8_t *)msg, strlen(msg)); //send the message
        driver.waitPacketSent();
        delay(1000); //wait to make sure complete message transmitted
        Serial.println("sent 1");

      }

      else if (t >= 5000 && t < 15000) { //t = 5s to t = 15s
        Serial.println(t);
        t = 0; //reset t
        const char *msg = "2"; //message to be sent
        driver.send((uint8_t *)msg, strlen(msg));
        driver.waitPacketSent();
        delay(1000);
        Serial.println("sent 2");
      }

      else if (t >= 15000) {  //t > 15s
        Serial.println(t);
        t = 0; //reset t
        const char *msg = "3"; //message to be sent
        driver.send((uint8_t *)msg, strlen(msg));
        driver.waitPacketSent();
        delay(1000);
        Serial.println("sent 3");
      }
      break;

    default:
      Serial.println("default");
      break;
  }
}

//interupt intervenes when motion is detected
void pir_detect() {
  val = digitalRead(pir); //reads pir motion detector
  previousmillis = millis();  //resets the timer
  state = val;
}

Receiver

Receiver Circuit

The receiver circuit consists of the RF Receiver, a yellow LED, a red LED and a piezo buzzer.

The RF Receiver is in PIN 11 as this is the default pin in the rh_ask library.

The yellow LED is in PIN 13.

The red LED is in PIN 12.

The piezo buzzer is in PIN 8.

Receiver Circuit.

Receiver Circuit 2.

Receiver Code

    #include <RH_ASK.h> //library needed for transmission
#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;
const int yellow_led = 13; //set pins for leds
const int red_led = 12;
const int buzzerPin = 8; //set pin for buzzer
const int frequency = 2400; //set frequency of buzzers


void setup()
{
  pinMode(yellow_led, OUTPUT);
  Serial.begin(9600);
  if (!driver.init())
    Serial.println("init failed");

}

void loop()
{

 
  static int state = 0;  //begin in state 0

  uint8_t buf[1]; //received message will be one char in length
  uint8_t buflen = sizeof(buf); //buflength will be one



  switch (state)
  {
    case 0:
      buf[0] = '0'; //reset the buf to 0
      
      //if a message is recieved
      if (driver.recv(buf, &buflen))
      {
        //choose a state based on recieved message
        if (buf[0] == '1') {
          state = 1;
        }

        else if (buf[0] == '2') {
          state = 2;
        }
        
        else if (buf[0] == '3') {
          state = 3;
        }
      }
      break;

    case 1:
      Serial.println("State 1");
      digitalWrite(yellow_led, 1); //turn on yellow led
      delay(3000); //wait 3 seconds
      digitalWrite(yellow_led, 0); //turn off yellow led
      state = 0; //return to state 0
      break;

    case 2:
      Serial.println("State 2");
      digitalWrite(red_led, 1); //turn on red led
      delay(3000);
      digitalWrite(red_led, 0); //turn off red led
      state = 1; //return to state one
      break;
      
    case 3:
      Serial.println("State 3");
      digitalWrite(red_led, 1); //turn on red led
      tone(buzzerPin, frequency); //turn on buzzer
      delay(3000);
      digitalWrite(red_led, 0); //turn off red led
      noTone(buzzerPin); //turn off buzzer
      state = 2; //return to state 2
      break;
      
    default:
      state = 0;
      break;
  }

}
⚠️ **GitHub.com Fallback** ⚠️