Умный удлиннитель

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

Этот факт натолкнул меня на мысль создать «умный удлиннитель» — эдакий блок розеток, позволяющий включать и выключать отдельные розетки (а значит и электроприборы, включенные в них) на расстоянии, при помощи пульта дистанционного управления. Итак, поехали!

 

Список необходимых деталей со ссылками для заказа:

Контроллер Arduino Nano

Для уменьшения размера конструкции, а также с целью удешевления конструкции был выбран именно Nano. Чтобы по неосторожности не испортить контроллер, заказал Arduino Nano сразу с припаянными ногами. Цена 2,49$  плюс 1.68$ доставка

Реле

Модули реле заказал по цене 0.53$ за штуку, плюс доставка 1.39$ за пакет.
Нужно заказать столько штук, сколько розеток надо подключить. В моём случае две.

ИК-пульт с приёмником

Модуль приёмника инфракрасного пульта и сам пульт в одном лоте заказал по цене 0,78$ плюс 1,8$ за доставку. В комплекте есть три соединительных провода и запасной фотодиод. Пульт питается от батарейки CR2025, но в комплект батарейка не входит! Купите батарейку отдельно!

Была мысль использовать вместо инфракрасного пульта пульт-радиопередатчик со своим модулем-радиоприёмником, но во-первых он дороже, во-вторых, сложнее в подключении. А главное — я собирался в будущем использовать несколько таких удлиннителей в разных комнатах квартиры. И в этом случае нажатый радио-пульт в одной комнате включал бы розетки во всех комнатах квартиры! Конечно таких случайностей допускать нельзя.

Дополнительно

Я не стал учитывать стоимость соединительных проводов. Поштучно они не продаются, но есть разные наборы по разным ценам, а для сборки этого устройства понадобится гораздо меньше чем целый набор. Тем более всегда есть способ сэкономить и приколхозить свои провода!

Также у меня в настоящий момент нет в наличии модулей питания, преобразующих 220 вольт в необходимые для Ардуино 5 вольт. Поэтому на первое время я решил питать всю схему при помощи обычной зарядки для смартфона, через гнездо Micro-USB. Соответственно, и цену модуля питания в первой версии статьи я не учитываю.

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

Общие расходы

Общая стоимость деталей — 4,33$, доставки — 4,87$

Итого вместе с доставкой – 9,2$.

Подключение

Подключал я по следующей схеме. Провода чёрного цвета — земля, красного — +5вольт, жёлтые провода — сигнальные. Справа от контроллера — приёмник ИК-пульта, слева — реле.

Внимательно читайте надписи на контактах при подключении компонентов! Расположение контактов на ваших модулях может отличаться

Все компоненты питаются от одних и тех же проводов земля и +5вольт. Сигнальные провода реле нужно подключать к цифровым ногам 3 и 13, приёмник пульта — к 12.

ВНИМАНИЕ!
После полевых испытаний на схеме обнаружилась ОШИБКА! Плюсовой провод на плате нужно подключать к Ардуино не на ногу VIN а на ногу 5V!

Галерея

Скетч

const int rele1 = 3;  // Реле подключены на ноги 3 и 13
const int rele2 = 13;

int RECV_PIN = 12;  // Приёмник ИК-пульта подключен на ногу 12
#include <IRremote.h>
long i= 0;

int pos1= 0;  // Начальные положения обеих релюшек — выключено
int pos2= 0;

IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определенного порта
decode_results results; //Переменная, хранящая результат
void setup()
{
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Начинаем прием ИК-сигналов
digitalWrite(rele1, HIGH);  // Выключаем релюшки
digitalWrite(rele2, HIGH);
}

void loop()
{
if (irrecv.decode(&results)) //При получении сигнала…
{
i=results.value;
Serial.println(i);

if (i == 16738455) //…Сработало первое реле
{
Serial.println(«Подошло 1»);
if (pos1 == 0)
{
pos1=1;
digitalWrite(rele1, LOW);
}
else
{
pos1=0;
digitalWrite(rele1, HIGH);
}
}
if (i == 16750695) //…Сработало второе реле
{
Serial.println(«Подошло 2»);

if (pos2 == 0)
{
pos2=1;
digitalWrite(rele2, LOW);
}
else
{
pos2=0;
digitalWrite(rele2, HIGH);
}
}

irrecv.resume(); // Получаем следующее значение
}

}

Оставьте комментарий