How To Build and Code - leesm5/Wireless-Bluetooth-Security-System GitHub Wiki
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.
.
.
#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;
}
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.
.
.
#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;
}
}