Включаем свет при приближении к своему дому

Простое устройство на основе Ардуино и GPS, которое включает свет, когда человек приближается к дому или к заданной локации.

Обзор проекта

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

Основой этого проекта является GPS, благодаря которому происходит отслеживание вашего положения и включение света при приближении к дому или какой-то локации.

Из википедии: GPS (англ. Global Positioning System — система глобального позиционирования, читается Джи Пи Эс) — спутниковая система навигации, обеспечивающая измерение расстояния, времени и определяющая местоположение во всемирной системе координат WGS 84.

Функциональность

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

Этот проект работает довольно просто, Блинк контролирует геолокацию телефона и отправляет их в Arduino Yun. Arduino Yun сравнивает геолокацию телефона с местоположением дома (устанавливается пользователем вручную). Когда телефон обнаружен в пределах досягаемости дома, Arduino Yun включит светодиод. Изображение ниже иллюстрирует процесс:

Устройство будет постоянно контролировать местоположение телефона пользователя, всегда проверяя, находится ли пользователь в пределах домашнего диапазона.

Ниже изображение иллюстрирует алгоритм работы кода.

If(isInParameter) будет проверять, находится ли пользователь в пределах диапазона, если это так, функция TurnLEDOn начнет работу, после чего загорится светодиод.

Else выполнит оператор TurnLEDOff, который выключит светодиод, если пользователь не находится в пределах домашнего диапазона.

Arduino Yun автоматически установит параметры дома в соответствии с координатами дома. Yun создаст квадрат вокруг дома с 4 точками в каждом углу, таким образом, если пользователь находится внутри квадрата, устройство включает светодиод, если нет, устройство выключает светодиод. Диапазон по умолчанию для квадрата составляет около 60 метров во всех направлениях от точки настройки.

Ниже изображения показывают устройство в действии.

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

В этом проекте есть несколько деталей, список которых приведен ниже.

  • Arduino Yun
  • Макетная плата
  • Резистор (220 Ом)
  • Смартфон
  • Провода для перемычек
  • Смартфон на iOS или Android

Из программного обеспечения нам нужны:

  • Приложение BLYNK
  • Arduino Web Editor (онлайн аналог Arduino IDE)

Схема соединения

Этот проект имеет физическую схему, состоящую из светодиода и резистора, изображение схемы проекта:

Получение геолокации

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

1. Переходим на сайт Google Map

2. Вводим свой адрес в поисковую строку

3. Google покажет ваше местоположение

4. Нужно взять координаты

Настройка Blynk

Для использования этого проекта требуется учетная запись в Blynk, вам нужно будет загрузить приложение Blynk из App Store или Google Play.

Далее следуйте приведенным ниже изображениям, чтобы настроить Blynk.

Код

Код проекта имеет 3 основных раздела:

  • Чтении геолокации.
  • Местоположение.
  • Управление светодиодом.

Эти разделы будут объяснены далее.

Код целиком можно скачать или скопировать ниже:

#include 
#include 

char auth[] = "BLYNK_AUTH_TOKEN"; // TODO - insert Blynk Token

float myLocationLat = 00.000000; // TODO - set to home geolocation latitude
float myLocationLng = 00.000000; // TODO - set to home geolocation longitude

float latitude;
float longitude;

int pinLED = 3;
int proDebug = 1; // TODO - debugging?
int geolocation;

// automatically set parameters to a square around home
float maxLat = myLocationLat + 0.0001;
float minLat = myLocationLat - 0.0001;
float maxLng = myLocationLng + 0.0001;
float minLng = myLocationLng - 0.0001;

BLYNK_WRITE(V0) // store the geolocation to variable
{
  latitude = param[0].asFloat();
  longitude = param[1].asFloat();

  // debugging? - Consider un-commenting the lines below and test manually
    //latitude = 67.357899;
    //longitude = -8.259199;
}

void processLocation()
{
  if(latitude <= maxLat && latitude >= minLat && // check if the phone is within home's parameters
    longitude <= maxLng && longitude >= minLng)
  {
    geolocation = 1;
  }
  else
  {
    geolocation = 0;
  }
  
  if(geolocation == 1) // turn LED on if phone is in perameter
  {
    digitalWrite(pinLED, HIGH);
  }
  else
  {
    digitalWrite(pinLED, LOW);
  }
}

void setup()
{
  pinMode(pinLED, OUTPUT);
  Blynk.begin(auth); // initialise Blynk

  if(proDebug == 1)
  {
    Serial.begin(9600);
    while(!Serial) {};
    delay(1000);
    
    Serial.println("lightsOnEnter");
    delay(1000);
    Serial.println("");
    Serial.print("maxLat  "); Serial.println(maxLat, 8);
    Serial.print("minLat  "); Serial.println(minLat, 8);
    Serial.print("maxLng  "); Serial.println(maxLng, 8);
    Serial.print("minLng  "); Serial.println(minLng, 8);
    Serial.print("actual Lat  "); Serial.println(latitude, 8);
    Serial.print("actual Lng  "); Serial.println(longitude, 8);
    Serial.println("");
  }

  delay(1000);
}

void loop()
{
  Blynk.run();
  processLocation();

  if(proDebug == 1)
  {
    Serial.print("actual Lat  "); Serial.println(latitude, 8);
    Serial.print("actual Lng  "); Serial.println(longitude, 8);
    Serial.println(geolocation);
  }
}

Чтение геолокации

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

BLYNK_WRITE(V0) // сохранить геолокацию в переменной
{
 latitude = param[0].asFloat();
 longitude = param[1].asFloat();
 // debugging? - Consider un-commenting the lines below and test manually
   //latitude = 67.357899;
   //longitude = -8.259199;
}

Местоположение

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

if(latitude <= maxLat && latitude <= minLat && // check if the phone is inside perameters maxLng >= longitude && minLng >= longitude)
 {
   geolocation = 1;
 }
 else
 {
   geolocation = 0;
 }

Управление светодиодом

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

if(geolocation == 1) // turn LED on if phone is in perameter
 {
   digitalWrite(pinLED, HIGH);
 }
 else
 {
   digitalWrite(pinLED, LOW);
 }

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

В этом проекте есть несколько значений, которые нужно настроить.Чтобы начать нужно ввести ваш токен аутентификации Blynk, полученного по электронной почте на этапе установки Blynk, в переменную auth[]. Затем возьмите широту и долготу геолокации вашего дома (локации) и вставьте их в переменные myLocationLat и myLocationLng.

Последний шаг - проверить, находитесь ли вы в режиме отладки. Если нет, установите параметр proDebug в 0, чтобы предотвратить вывод на серийный монитор. Если вы в режиме отладки, вы можете захотеть, чтобы Arduino получал фиксированную геолокацию вместо геолокации вашего телефона. Здесь нужен цикл BLYNK_WRITE для которого есть дополнительные инструкции.

Библиотеки

  • Bridge - авторское право (c) Arduino LLC по лицензии GNU Lesser General Public, эта библиотека находится в открытом доступе.
  • Blynk - Blynk эта библиотека выпущена под лицензией MIT (MIT)

Последний шаг - подключить Arduino к компьютеру и загрузить код. Этот проект требует Arduino Yun. Если провести небольшую модификацию кода этот проект можно будет запустить на любом микроконтроллере, в который встроен WiFi, или к которому вы можете подключить модуль WiFi. Обратите внимание, что мобильные данные необходимы для того, чтобы проект работал в дороге, когда вы за пределами локации.

Выводы

Это проект реализовывался достаточно продолжительное время. У него есть основная идея, когда пользователь приближается к Дому, включаются огни в доме.

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

Данный проект можно использовать в различных ситуациях. Пользователь, работающий с этим проектом, получит:

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

На этом пока всё. Если у вас есть идеи - напишите нам.

Ардуино+