Умный почтовый ящик

В системе умного дома много, на первый взгляд, обычных вещей и предметов, которые можно сделать умными. Сегодня мы расскажем о том, как сделать умный почтовый ящик, который будет присылать вам сообщение на электронную почту, как только в него положат новый конверт с письмом или посылкой.

Комплектующие

Для этого проекта нам потребуются следующие комплектующие:

  • Arduino MKR 1200 Fox
  • Лазерный модуль
  • Фоторезистор
  • Резистор (1 кОм)
  • Провода для перемычек
  • 2x батарейный блок AAA / AA
  • AAA / AA батареи

Сборка устройства

Устройство собирается согласно нижеприведенной схеме:

Изображения, приведенные ниже, помогут вам подключить батарейный отсек и антенну к MKR Fox, обратите внимание на то, что батарейный отсек должен быть подключен после подключения лазера и фоторезиста.

Arduino MKR Fox автоматически регулирует источник питания, поэтому, когда он подключен для программирования, Arduino автоматически переключится на питание USB и вернется к батарее, когда отключится от компьютера.

Далее, после прошивки микроконтроллера, которую мы выполним в следующем шаге, устанавливаем устройство в наш почтовый ящик. Главное условие — конверт или извещение должны падать между лазером и фоторезистором.

Прошивка

Сначала приведем код для нашего почтового ящика. Он достаточно прост и состоит всего из двух логических блоков: чтение и анализ света; отправка пакета данных. Затем займемся настройкой SigFox. Для работы нам понадобятся 2 библиотеки, которые можно спокойно скачать из интернета:

  • Sigfox — copyright (c) 2016 Arduino LLC GNU Lesser General Public License
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License

Полный листинг проекта

#include <SigFox.h>
#include <ArduinoLowPower.h>

bool proDebug = 0; // debugging? ~ 1 = yes, 0 = no
int lightIntensity; // store photoresistor's value
int LEDPin = 13;
int laserPin = 1;
int pos;

void reboot() // a function to restart the SigFox module if communication error
{
  Serial.println("  Restarting Device");
  NVIC_SystemReset();
  while(1);
}

void setup()
{
  pinMode(LEDPin, OUTPUT);
  pinMode(laserPin, OUTPUT);
  digitalWrite(laserPin, HIGH);

  if(proDebug)
  {
    Serial.begin(9600);
    while(!Serial) {};
    delay(1000);
    Serial.println("SmartPostBox");
    delay(2000);
    Serial.println("");
    Serial.println("");

    Serial.println("Initialising SigFox Module");
  }
  
  if(!SigFox.begin())
  {
    if(proDebug)
    {
      Serial.println("  Error - SigFox Module Responded with Error");
    }
    reboot();
  }

  if(proDebug)
  {
    Serial.println("  Success - Module Initialised");

    Serial.println("Starting SigFox");
  }

  SigFox.begin(); // start the connection with SigFox

  if(proDebug)
  {
    Serial.println("  Success - SigFox Module Online");

    Serial.println("Setup Complete");
    Serial.println("  Begining Loop");
    Serial.println("");
  }
  
  digitalWrite(LEDPin, HIGH);
  delay(500);
  digitalWrite(LEDPin, LOW);
}

void loop()
{
  lightIntensity = analogRead(A1); // read the photoresistor value

  if(lightIntensity < 800)
  {
    if(pos == 0) // if not pending removal
    {
      pos = 1;

      if(proDebug)
      {
        Serial.println("Letter Detected");
        Serial.println("Initialising Sending Protocol");
        Serial.println("  Pending Package");
      }

      if(proDebug)
      {
        Serial.println("    Success");
        Serial.println("  Starting Parse Procedure");
      }

      SigFox.beginPacket(); // start the sending protocol
      
      if(proDebug)
      {
        Serial.println("  Parsing Packet");
      }

      SigFox.print(" "); // print a constant character to send
      int ret = SigFox.endPacket(true); // wait for SigFox to receive the packet
      
      if(proDebug)
      {
        Serial.println("    Success");
  
        Serial.println("Algorithm Compltete");
        Serial.println("  Waiting for Letter removal");
        Serial.println("");
      }
    }
  }
  else // if post removed/no post
  {
    pos = 0;
  }
}

Чтение и анализ света

В первой строке блока считывается световое значение фоторезистора, которое подключено к контакту A1, если значение меньше 800, и если значение упало и не было ранее ниже 800, оно будет запускать функцию отправки пакета Send Packet:

lightIntensity = analogRead(A1); // read the photoresistor value
 if(lightIntensity < 800)
 {
   if(pos == 0) // if not pending removal
   {
     pos = 1;

Если значение превышает 800, Arduino сбрасывает переменную pos (которая уведомляет, если предыдущее значение было ниже 800), если предыдущее значение было меньше 800 (указывает наличие письма), Arduino будет ждать, пока письмо не будет удалено.

Отправка пакета данных

SigFox.beginPacket(); // start the sending protocol
     if(proDebug)
     {
       Serial.println("  Parsing Packet");
     }
     SigFox.print(" "); // print a constant character to send
     int ret = SigFox.endPacket(true);

Этот раздел кода отправит пакет Sigfox, если обнаружена почта, Arduino запустит процедуру синтаксического анализа и напечатает » » для Sigfox, и будет ждать подтверждения того, что Sigfox получил сообщение, а также будет ждать, пока письмо будет удалено из ящика. Затем снова запустит алгоритм.

Настройка SigFox

SigFox – это технология беспроводной низкоскоростной связи устройств в сетях с низким потреблением энергии. Для настройки протокола нам необходимо выполнить следующие шаги:

  • Установить тип Data Uplink
  • Установить канал для E-mail
  • Нет необходимости заполнять Custom Payload Configuration
  • Установить Recipient (получателя), адрес электронной почты
  • Установить Объект SmartPostBox или предпочитаемый Объект
  • Вы можете вставить все, что пожелаете в поле Message (сообщение) — это тело письма.

Идем на сайт https://build.sigfox.com/sign-up и создаем новый аккаунт. Далее выполняем настройку, согласно картинкам:

Ключевое слово {device} — это переменная, представляющая идентификатор устройства, это встроенная переменная, есть еще много таких, например {lat}, {lng}, {time} и другие, вы можете вставить их в тему электронной почты или тело.

Существует одна переменная, которую пользователь должен установить, proDebug, если она включена, Arduino требует подключения через USB к компьютеру, и Serial Monitor должен быть открыт, Arduino выводит на Serial Monitor в этом режиме, он идеален для устранения неполадок.

Все, запускаем проект и тестируем!

Оцените статью
50 - столько SQL запросов к базе.
2,302841 - за столько сгенерировалась страница.