☰ Оглавление

Умный физический почтовый ящик, который отправляет e-mail

Продолжаем тему Умного дома и сегодня у нас очередной интересный проект - реальный физический почтовый ящик будущего, который отправляет электронное письмо хозяину, если в него что-то положили. За этот проект мы благодарим Андреа Флориана. Начнем с того, что посмотрим как это работает:

Почтовый ящик - старый метод доставки информации из одного места в другое. В прошлом все использовали данный метод связи и все очень сильно зависели от него. Но сегодня это считается скучным и неэффективным методом доставки данных. Гораздо проще и интереснее использовать цифровое устройство, и с изобретением электронной почты почтовый ящик медленно начал ржаветь.

Данный проект стремится вернуть профессионализм в получении физической почты. Всем известно, что неприятно ждать получения письма или извещения о посылке от Алиэкспресс. Каждый день выходя из дома, надеясь, что ваше важное долгожданное извещение пришло. Наше простое устройство отправляет вам электронное письмо при получении почты, поэтому вы всегда знаете, есть ли смысл открывать почтовый ящик.

Шаг 1. Функциональность

Устройство предназначено для всех, его очень просто сделать и оживить свой старый почтовый ящик. Устройство использует Sigfox для связи с облаком и отправки пользователю электронной почты, если почта обнаружена в реальном ящике. У Arduino MKR 1200 Fox есть лазер, направленный на фоторезистор, они помещаются на дне почтового ящика, а когда почту кладут в ящик, микроконтроллер обнаруживает письмо и уведомляет Sigfox, который, в свою очередь, отправляет пользователю e-mai. Ниже приведена схема функциональности проекта.

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

Read Light Intensity считывает исходное значение фоторезистора и сохраняет его в переменной, лазер будет непрерывно проектировать луч света на фоторезистор.

Условие if проверяет, находится ли значение фоторезистора ниже нормального значения, фоторезистор будет выводить в среднем 950 на аналоговый вывод, если значение ниже более чем на 50, это означает, что есть что-то, блокирующее свет и это вызывает функцию внутри цикла.

Notify Sigfox отправит постоянный байт в Sigfox, Sigfox затем отправит пользователю электронное письмо при получении сообщения.

Устройство отправляет символ пробела в Sigfox «», когда оно обнаруживает почту, поскольку данные не должны отправляться на сервер, электронное письмо будет просто информировать пользователя о том, что в ящике есть почта. Ниже фото того как работает процесс:

Пользователь, работающий с этим проектом, получает следующие плюсы:

  • Уведомление при получении почты;
  • Не тратит время и энергию на проверку почты каждый день;
  • Устройство, которым просто пользоваться, так как устройство работает постоянно и может обрабатывать несколько писем.

Шаг 2. Комплектующие

Этот проект требует небольшого количества электроники, список необходимых устройств приведен ниже.

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

Шаг 3. Схема соединения

Ниже представлена схема проекта, в проекте нет макетной платы, поэтому схемы немного перепутаны, поэтапное руководство по подготовке MKR Fox также ниже.

Шаг 4. Готовим MKR fox

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

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

Шаг 5. Код для почтового ящика

Сначала приведем код для нашего почтового ящика, который вы сможете скопировать или скачать. Также ниже будут некоторые объяснения кода.

// Universum | Universum Projects > SmartPostBox

// Andrei Florian 23/JUN/2018 - 24/JUN/2018

#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;
  }
}

В коде проекта есть две основные функции:

  • Чтение и анализ света;
  • Отправка пакета.

Эти блоки объясняются ниже.

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

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

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

Если значение превышает 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); // wait for SigFox to receive the packet

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

Шаг 6. Настройка SigFox

Этот урок разработан с условием, что пользователь уже настроил свое устройство и подключил его к Sigfox, если вы не настроили MKR Fox, то вам придется подождать ближайшей публикации на эту тему на нашем сайте. Посмотрите изображения ниже, которые помогут вам настроить обратный вызов Sigfox.

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

Пример сообщения:

Привет,
Это твой почтовый ящик на связи. Просто хотел сказать что ты получил почту.
Обязательно проверь.
Твой {устройство},
Конец связи.

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

Настройка переменных

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

Библиотеки

  • Sigfox - copyright (c) 2016 Arduino LLC GNU Lesser General Public License Эта библиотека находится в свободном доступе
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License Эта библиотека находится в свободном доступе

Шаг 7. Собираем корпус

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

Но можно поступить следующим образом - см. фото ниже.

Как только корпус будет завершен, попробуйте выполнить проект с помощью proDebug и подключитесь к компьютеру, как только он будет работать, поместите его в почтовый ящик, и все готово!

Заключение

Последний шаг - подключить Arduino к ПК/Mac и загрузить эскиз (который мы приводили выше). Убедитесь, что батарейный отсек подключен к Arduino и схема собрана правильно. Затем вы можете всё соединить и поместить в почтовый ящик.

Как-то нам пришлось ждать много писем и извещений, т.к. заказали много деталей для Ардуино. И нам надоело вставать утром и проверять почтовый ящик постоянно на предмет новой почты. Когда мы реализовали данный проект вместо того, чтобы постоянно проверять пустой почтовый ящик, мы стали получать уведомление о том, что пора забирать письмо.

Ардуино+