Introduction: Door Sensor

Целта на овој проект е на наједноставен начин да се симулира улогата на магнет сензорот при креирање на аларм за врата. Целиот овој проект е како од општествена така и од практична примена, но пред се од сигурносни причини за секој дом. Сопственикот има целосна контрола врз алармот, односно може преку соодветната мобилна апликација RemoteXY да го вклучи/исклучи истиот.

Step 1: Потребни Хардверски Компоненти

Во склоп на овој проект ги имаме користено следните компоненти кои беа неопходни за изработка на истиот. Тоа се следните:

- Arduino Uno R3

- Breadboard

- 2x LED (Green and Red)

- WiFi Relay ESP8266-01

- Buzzer

- Magnetic door sensor

- Wires

- Arduino Uno USB cable

Step 2: Изворен Код (со Коментари)

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP8266_HARDSERIAL_POINT
#include <RemoteXY.h>// RemoteXY connection settings
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 115200
#define REMOTEXY_WIFI_SSID "Alarm"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377// RemoteXY configurate
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255, 1, 0, 51, 0, 29, 0, 8, 13, 0,
  2, 0, 34, 10, 32, 17, 2, 26, 31, 31,
  79, 78, 0, 79, 70, 70, 0, 67, 5, 9,
  39, 83, 14, 2, 26, 51
};

// this structure defines all the variables of your control interface
struct {  // input variable
  uint8_t switch_1; // =1 if switch ON and =0 if OFF</p><p>  // output variable
  char text_1[51];  // string UTF8 end zero</p><p>  // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0} RemoteXY;
#pragma pack(pop)
#define LED_RED 8
#define LED_GREEN 3
const int buzzer = 5; 
const int sensor = 7;
int flag = 1; 
int i = 400; // pocetna frekvencija za buzzer
int state; // 0 close - 1 open switch

void setup()
{
  RemoteXY_Init (); //inicijalizacija na RemoteXY

  //setiranje na vlezni i izlezni pinovi
  pinMode(sensor, INPUT_PULLUP);
  pinMode (LED_RED, OUTPUT);
  pinMode (LED_GREEN, OUTPUT);
}

void loop()
{
  RemoteXY_Handler ();
  
  state = digitalRead(sensor); //se cita sostojba na senzor

  if (RemoteXY.switch_1 == 0) { //proverka na switchot od aplikacijata
    //isklucuvanje na diodite i bazerot
    digitalWrite(LED_RED, 0);
    digitalWrite(LED_GREEN, 0);
    noTone(buzzer);
    strcpy  (RemoteXY.text_1, "ALARMOT NE RABOTI"); //ispisuvanje na screen
  } else {
    if (state == HIGH) {  //proverka na senzorot
      strcpy  (RemoteXY.text_1, "OPEN"); //ispisuvanje na screen
      digitalWrite(LED_GREEN, 0); //green light off
      tone(buzzer, i);
      i = i + 500; //menuvanje na frekvencija na buzzer
      if (i > 1000) {
        i = 400;
      }
  //del za trepkanje na red LED dioda
      if (flag == 1) {
        flag = 0;
        digitalWrite(LED_RED, 1); //red light on
        delay(100);
      } else {
        flag = 1;
        digitalWrite(LED_RED, 0); //red light off
        delay(100);
      }
    }
    else {
      strcpy  (RemoteXY.text_1, "CLOSED"); //ispisuvanje na screen
      digitalWrite(LED_RED, 0); //red light off
      digitalWrite(LED_GREEN, 1); //green light on
      noTone(buzzer); //soodvetno so funckijata, nema zvuk
    }
  }
}

Step 3: Поврзување

Поврзувањето е направено на следниот начин:

Следните компоненти се поврзани со соодветните pin-ови од Arduino UNO R3:

Магнетен сензор - pin 7

Buzzer - pin 5

Green LED - pin 3

Red LED - pin 8

ESP WiFi Relay: TX -> RX(Arduino), RX -> TX(Arduino), GND е поврзан со соодветното GND на Arduino, EN and Power(3V3) се поврзани со 3,3V излез од Arduino-то за напојување на ESP модулот.

Step 4: Софтверска Спецификација

Функционалноста на софтверскиот дел е имплементирана во Arduino 1.8.8 IDE.

За конектирање со мобилната апликација наведена погоре ја користиме библиотеката RemoteXY.h

Самата библиотека си сетира посебна конфигурација и конекциски податоци исто така (WiFi name, password, Server_Port итн). Иницијализацијата и сетирањето на влезно/излезните пинови се врши во функцијата setup(), а фунцкионалниот дел се извршува во loop() функцијата, сите други константи и променливи се дефинираат и иницијализираат надвор од фунцкиите.

Целиот изворен код е прикажан подолу.

Step 5: Мобилна Апликација - RemoteXY

На сликата е покажан дел од интерфејсот на мобилната апликација RemoteXY која ја користиме за контрола, регулација на алармот и добивање соодветни известувања за состојбата. Со помош на копчето ON/OFF го вклучуваме и исклучуваме алармот. Доколку сензорот е отворен, односно вратата е отворена, во лабелата се испишува OPEN, a доколку истиот е затворен се испишува CLOSED. Следно сценарио е кога е исклучен алармот се испишува соодветната порака - ALARMOT NE RABOTI.