Умная розетка на ардуино своими руками – Умная компьютерная розетка на Arduino своими руками / Habr

SMS-розетка [Амперка / Вики]

  • Платформы: Iskra Neo

  • Языки программирования: Arduino (C++)

  • Тэги: GPRS, SIM900, умная розетка, смс, реле, конструктор ПВХ.

Что это?

Как часто вы спрашивали себя по дороге на работу: «А выключил ли я утюг?» Иногда этот вопрос просто не выходит из головы и заставляет ехать через полгорода обратно домой — проверять. Вот было бы здорово управлять розетками на расстоянии, не так ли?

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

Что нам понадобится?

  1. Сетевой фильтр (удлинитель)

  2. Клеммники

  3. SIM-карта

  4. Мобильный телефон для управления

Как собрать?

  1. Возьмите платформу Iskra Neo и нижнюю панель кубa (7×7), соедините её с помощью винтов и гаек, так чтобы гайки располагались между панелью и платформой.
  2. Вставьте сим-карту в GPRS Shield и установите его сверху на платформу Iskra Neo.
  3. Боковые панели куба (7×7) соедините с нижней панелью (7×7). Установите Relay Shield сверху на GPRS Shield.
  4. Заднюю панель куба (7×3) закрепите между левой и правой панелями внизу, напротив разъёмов USB и внешнего питания платформы Iskra Neo, заранее отделив бокорезами секции, мешающие ей устойчиво зафиксироваться.
  5. Теперь возьмите заднюю панель куба (7×2) и установите её между левой и правой панелями в верхней части. Затем возьмите панель крестиков (1×6) и установите между задними панелями (7×3) и (7×2), заранее откусив секцию напротив используемого реле.
  6. Настало время что-нибудь разобрать. Возьмите импульсный блок питания на 5 вольт, аккуратно с помощью отвёртки разберите его и достаньте плату преобразователя.
  7. Припаяйте к выходом преобразователя 5 вольт два провода папа-папа: красный к питанию, а чёрный к земле. На вход оставьте провода, которые уже были припаяны. Надёжно изолируйте преобразователь с помощью изоленты и закрепите его, используя стяжки, к верхней панели куба (7×7).
  8. Теперь возьмите клеммник, откусите от него 4 пары разъёмов и закрепите их к верхней панели куба (7×7) рядом с преобразователем напряжения на 5 вольт. Подключите входные проводники преобразователя в клеммник.
  9. Возьмите сетевой фильтр и разрежьте его провод пополам. Откусите от него с любой стороны часть провода длиной около 10 см, и используйте многожильные провода для коммуникации клемника и реле. Возьмите провод сетевого фильтра со стороны вилки и скоммутируйте его со входом преобразователя через клеммник. Провод с розетками подключите в два оставшихся разъёма на клеммнике. Так же через клеммник один из проводов от вилки удлинителя скоммутируйте с одним из проводов розетки.
  10. Скоммутируйте вторую пару проводов сетевого фильтра через клеммник и реле в режиме нормально разомкнутый: один провод на контакт реле
    COM
    , а второй на контакт реле NO. В итоге должна получиться такая схема. Из которой видно, что при включении вилки в 220 вольт напряжение идёт через клеммник на преобразователь, а на розетки через клеммник и реле. То есть розетки включаться только тогда, когда на управляющем входе реле будет высокий уровень.
  11. Установите, электроникой внутрь, верхнюю панель куба (7×7) на боковые панели. Возьмите переднюю панель куба (6×7) и соедините её с нижней, левой и правой панелями, заранее откусив бокорезами секции, мешающие выводу антенны. В заключение прикрутите антенну в SMA-разъём.

Алгоритм

  • Сразу после подачи питания проверяем есть ли связь с GPRS устройством.

  • Проверяем память сим-карты на наличие новых непрочитанных сообщений.

  • Читаем сообщение и проверяем содержимое его текста:

    • Если On включаем розетку и отчитываемся о включении обратным смс.

    • Если Off выключаем розетку и отчитываемся о выключении обратным смс.

    • Если State отправляем обратное смс о состоянии розетки.

    • Если текст не распознан, отправляем обратное смс об ошибке распознавания команды.

  • Удаляем сообщение из памяти сим-карты

Исходный код

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

smart-power.ino
// библиотека для работы с GPRS устройством
#include <AmperkaGPRS.h>
 
// длина сообщения
#define MESSAGE_LENGTH 160
// текст сообщения о включении розетки
#define MESSAGE_ON  "On"
// текст сообщения о выключении розетки
#define MESSAGE_OFF  "Off"
// текст сообщения о состоянии розетки
#define MESSAGE_STATE  "State"
 
// пин, к которому подключено реле
#define RELAY 5
 
// текст сообщения
char message[MESSAGE_LENGTH];
// номер, с которого пришло сообщение
char phone[16];
// дата отправки сообщения
char datetime[24];
 
bool stateRelay = false;
 
// создаём объект класса GPRS и передаём в него объект Serial1 
GPRS gprs(Serial1);
 
void setup()
{
  // настраиваем пин реле в режим выхода,
  pinMode(RELAY, OUTPUT);
  // подаём на пин реле «низкий уровень» (размыкаем реле)
  digitalWrite(RELAY, LOW);
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(9600);
  // включаем GPRS шилд
  gprs.powerOn();
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial) {
  }
  // открываем Serial-соединение с GPRS Shield
  Serial1.begin(9600);
  // проверяем есть ли связь с GPRS устройством
  while (!gprs.begin()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке
    // процесс повторяется в цикле
    // пока не появится ответ от GPRS устройства
    delay(1000);
    Serial.print("GPRS Init error\r\n");
    gprs.powerOn();
    delay(2000);
  }
  // вывод об удачной инициализации GPRS Shield
  Serial.println("GPRS init success");
}
 
void loop()
{
  // если пришло новое сообщение
  if (gprs.incomingSMS()) {
    // читаем его
    // если есть хотя бы одно непрочитанное сообщение,
    // читаем его
    gprs.readSMS(message, phone, datetime);
 
    // выводим номер, с которого пришло смс
    Serial.print("From number: ");
    Serial.println(phone);
 
    // выводим дату, когда пришло смс
    Serial.print("Datetime: ");
    Serial.println(datetime);
 
    // выводим текст сообщения
    Serial.print("Recieved Message: ");
    Serial.println(message);
    // вызываем функцию изменения состояния реле
    // в зависимости от текста сообщения
    setRelay(phone, message);
  }
}
 
void setRelay(char f_phone[], char f_message[])
{
  if (strcmp(f_message, MESSAGE_ON) == 0) {
    // если сообщение — с текстом «On»,
    // выводим сообщение в Serial
    // и подаём на замыкаем реле
    Serial.println("OK! Power is On");
    digitalWrite(RELAY, HIGH);
    stateRelay = true;
    // на номер, с которого пришёл запрос,
    // отправляем смс с текстом о включении питания
    gprs.sendSMS(f_phone, "Power is On");
  } else if (strcmp(f_message, MESSAGE_OFF) == 0) {
    // если пришло сообщение с текстом «Off»,
    // выводим сообщение в Serial
    // и размыкаем реле
    Serial.println("OK! Power is Off");
    digitalWrite(RELAY, LOW);
    stateRelay = false;
    // на номер, с которого пришёл запрос
    // отправляем смс с текстом о выключении питания
    gprs.sendSMS(f_phone, "Power is Off");
  } else if (strcmp(f_message, MESSAGE_STATE) == 0) {
    // если пришло сообщение с текстом «State»,
    // отправляем сообщение с состоянием реле
    if (stateRelay) {
      Serial.println("State: Power is On");
      gprs.sendSMS(f_phone, "Power is On");
    } else {
      Serial.println("State: Power is Off");
      gprs.sendSMS(f_phone, "Power is Off");
    }
  } else {
    // если сообщение содержит неизвестный текст,
    // отправляем сообщение с текстом об ошибке
    Serial.println("Error... unknown command!");
    gprs.sendSMS(f_phone, "Error...unknown command!");
  }
}

Демонстрация работы устройства

Что дальше?

Подключив к платформе Iskra Neo например датчик влажности и температуры DHT11, можно также получать в ответном сообщении показания температуры и влажности в помещении, где находится розетка.

Если задействовать дополнительные 3 канала на Relay Shield, можно реализовать независимое управление несколькими устройствами.

wiki.amperka.ru

Умная розетка для утюга на базе Arduino

Продолжая тему применения модуля Arduino Nano 3.0 для повышения IQ своего дома

, хочу рассказать про очередной успешный проект. Как водится, начну с небольшой предыстории… 🙂 

 

 

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

Розетка на уровне 30 см от пола

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

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

Гладильная доска с утюгом

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

Умная розетка для утюга

Стало очень удобно, даже самому понравилось – подходишь к доске, нащупываешь выключатель, “щелк” – утюг включился, “щелк” – отключился 🙂

Вилка 16А

Но бывает так, что решение одной проблемы способствует появлению другой. Пользуясь таким “удлинителем” довольно легко отвлечься и забыть нажать на выключатель после окончания глажки, создавая  тем самым пожароопасную ситуацию.

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

Сигнальный светодиод на розетке гладильной доски

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

В качестве “мозгов” системы был выбран уже знакомый мне модуль Arduino Nano 3.0. К модулю подключен фоторезистор для отслеживания изменения светового потока рядом с гладильной доской, а также реле с коммутируемым током до 30 ампер при напряжении 220 вольт (нагрузка до 6,5 кВт) для обесточивания розетки. Получился некий аналог датчика движения, выполненный на базе ардуино 🙂

Умная розетка – фронтальный вид

Задумано – сделано. После нескольких дней тестовой эксплуатации “умной” розетки были уточнены параметры чувствительности датчика движения для естественного и искусственного освещения (путем изменения прошивки). В результате проделанной работы получилось весьма полезное устройство, обеспечивающее дополнительную безопасность в доме 🙂

Процесс работы умной розетки продемонстрирован в этом видео:

Схема и инструкция по сборке этого гаджета будет опубликована в рубрике “Сделай сам!”

Жду ваших отзывов и комментариев. Спасибо за внимание! 🙂

P.S. Даже Тёща заценила девайс, попросила собрать ей такой же 🙂

eanik.ru

Собираем крафтовую розетку с таймером на базе Arduino

Розетка с таймером (которая также может быть вам известна под именем «реле времени») — это устройство, функционал и назначение которого должно быть очевидно из названия. Вы подключаете какую-нибудь лампу в розетку через это устройство, в результате чего получаете возможность запрограммировать лампу. Например, лампа может автоматически включаться каждый день в 9 утра и выключаться в 10 вечера. Типичный пример, зачем это может быть нужно — симуляция присутствия людей в доме с целью дополнительной защиты от воров. Розетку с таймером в наше время легко купить готовую за небольшие деньги. Однако в этой заметке я расскажу, как я делал такое устройство своими руками.

Важно! Работа с переменным током высокого напряжения смертельно опасна. Будьте предельно осторожны. Если вы решите повторять действия, описанные далее, делайте это на свой страх и риск.

Примечание: Пользуясь случаем, я хотел бы поблагодарить пользователей форума EasyElectronics.ru с никами STT, BusMaster и Кот495 за то, что проконсультировали меня о некоторых нюансах работы с переменным током.

Спрашивается, зачем делать свое устройство, если можно просто купить готовое?

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

Свою розетку с таймером я собрал из следующих компонентов:

Вместо зарядного устройства для телефона можно было воспользоваться нормальным AC/DC преобразователем на 5 В, припаиваемым на плату. Но стоят AC/DC преобразователи сравнительно дорого, а лишних зарядных устройств у меня накопилось достаточно много. Так что я предпочел использовать валяющуюся без дела зарядку.

Повербанк тоже валялся без дела. Если лишнего повербанка у вас нет, вместо него можно воспользоваться Li-Ion аккумулятором форм-фактора 18650 в сочетании с платой на базе чипа TP4056 и каким-нибудь повышающим DC/DC преобразователем на ваш выбор. Как использовать эти компоненты ранее было подробно рассказано в заметке Паяем крафтовый повербанк с солнечной панелью. Вообще-то говоря, не всякий повербанк способен заряжаться от сети и одновременно заряжать подключенное к нему устройство. Поэтому в общем случае использовать аккумулятор, TP4056 и повышающий преобразователь DC/DC будет более правильно.

Отмечу также, что повербанк нужен исключительно для того, чтобы часы на устройстве не сбрасывались при отключении электричества в доме. Если для вас это не является проблемой (например, есть ИБП), то можно обойтись и без повербанка.

Названные компоненты были помещены в корпус и соединены таким образом:

Корпус я спроектировал во FreeCAD и распечатал на 3D-принтере RepRap Prusa i3 пластиком PLA. Высчитывать с точностью до миллиметра, где должны находится отверстия для крепления экранчика, мне было лень. Поэтому эти отверстия я просверлил дрелью уже после того, как корпус был напечатан. Разъемы XT60 были закреплены с помощью термоклея.

Заметьте, что реле впаяно в макетку. Так сделано по той причине, что ножки у реле очень хрупкие, и если припаяться к ним напрямую, они быстро отломаются (я проверял!). Если вы решите использовать другое реле, убедитесь, что оно рассчитано на достаточно большой ток, хотя бы 8 А. Проверьте также, что выбранное вами реле является моностабильным. То есть, при пропадании питания на катушке реле должно автоматически разрывать цепь.

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

Софтверная часть не представляет очень уж большого интереса, тем более, что я не сильно заморачивался с качеством кода. Использование экранчиков 1602 с I2C интерфейсом ранее подробно рассматривалось в заметке Об использовании экранчиков 1602 с I2C-адаптером. Что же касается части кода, отвечающей за время, она в существенной части была позаимствована из проекта часов на микроконтроллере ATmega328P. Действительно новым для нас здесь является разве что работа с роторным энкодером, поэтому ее и рассмотрим.

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

Как видите, сигнал достаточно просто декодировать. Если по фронту сигнала с контакта A на контакте B сигнал высокий или по спаду сигнала с контакта A на контакте B сигнал низкий, значит пользователь вращает ручку по часовой стрелке. Если же наоборот, по фронту сигнала с контакта A на контакте B сигнал низкий, а по спаду — высокий, значит ручка вращается против часовой стрелки.

Как это часто бывает в мире Arduino, декодирование сигнала от энкодера уже реализовано в библиотеке Rotary. Пример ее использования:

#include «Rotary.h»

Rotary rot(3, 2);

/* … */

void setup() {
    /* … */

    // rotory interrupt
    PCICR |= (1 << PCIE2);
    PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
    sei();
}

ISR(PCINT2_vect) {  
    unsigned char result = rot.process();
    if (result == DIR_NONE) {  
        // do nothing
    } else if (result == DIR_CW) {
        /* do something … */
    } else if(result == DIR_CCW) {
        /* do something else …*/
    }  
}

/* … */

В окончательном виде получившееся устройство выглядит так:

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

Как обычно, исходники прошивки и STL-файлы корпуса вы найдете на GitHub.

А что вы думаете об описанном проекте и какие идеи по его улучшению есть у вас?

Дополнение: Если вам понравился этот пост, вас также может заинтересовать статья Строим термокамеру для 3D-принтера и печатаем ABS’ом.

Метки: AVR, Электроника.

eax.me

Умный дом проекты своими руками

 В канун Рождества дети во всю ожидают подарков от Санты. Некоторые могут…

  Вы узнаете как подключить последовательный I2C 16×2 ЖК-дисплей к модулю…

Итак, вы создали потрясающий проект, используя аппаратное обеспечение ESP8266,…

В этой статье Вы узнаете как сделать счетчик электроэнергии своими руками,…

В этой статье вы узнаете как управлять модулем реле с помощью приложения BLYNK…

В настоящее время вы можете управлять чем угодно с помощью вашего телефона. В…

Давайте начнем с установки драйверов ESP8266 для Arduino и сделаем проект…

Итак, я решил построить свой собственный переключатель термостата с помощью…

ESP8266-01 имеет лишь ограниченное количество контактов ввода / вывода (только…

  ESP8266-01: Если у Вас ее нет, покупайте ESP8266-12.  она не…

Интернет вещей ( IoT ) имеет много возможностей для подключения устройств к…

В этой статье вы узнаете как сделать ваш дом еще лучше, еще умнее и еще…

Quickbird представляет собой автоматизированную систему мониторинга и…

ngin.pro

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *