Умная розетка 120В на Arduino с часами реального времени
Компоненты и материалы
| Макетная плата (breadboard) | ×1 |
| Arduino UNO | ×1 |
| USB-кабель A-B | ×1 |
| Перемычки | ×1 |
| RTC DS3231M (±5 ppm, I²C) | ×1 |
| Релейный модуль (1 канал) | ×1 |
| Сетевой шнур (вилка-розетка) | ×1 |
| LED-лампа (нагрузка) | ×1 |
Программное обеспечение
- Arduino IDE
О проекте
Это умная розетка — именно то, что звучит. Применяется к любому устройству с вилкой ДЛЯ 120В ТОЛЬКО! (В основном для ламп с малым током). Розетка управляется одноканальным реле. Используется RTC (часы реального времени) для определения времени и, основываясь на 24-часовом формате, включает или выключает нагрузку в заданное время (предопределённое время включения и выключения). Важно: у розетки есть шнур с вилкой, который должен вставляться в сетевую розетку!
Библиотека RTC: rinkydinkelectronics.com
Важная информация о безопасности — ОБЯЗАТЕЛЬНО ПРОЧИТАЙТЕ!
- Используйте заземлённый шнур и прерывайте фазный провод
На фото видно: используется 3-контактная вилка. Фазный (чёрный) провод от сети подключён к общему контакту реле. Нормально разомкнутый (NO) выход реле идёт на латунный винт розетки. Нейтраль (белый) — на серебристый винт, заземление (зелёный) — на зелёный винт. - Используйте релейный модуль, а не голое реле
Применён одноканальный модуль от Elegoo (аналог Keyes SR1y). В него входят: диод обратного хода (flyback) на управляющем входе, транзистор для управления катушкой, ограничивающий резистор. Реле рассчитано до 10А — ограничьте нагрузку или поставьте предохранитель в разрыв фазы. Желательно модуль с оптопарой для дополнительной гальванической развязки Arduino. - Физическое разделение
Монтируйте релейный модуль в пластиковом корпусе вдали от высоковольтных проводов. Паяльная сторона модуля должна смотреть к пластику, чтобы низковольтная проводка не контактировала с высоковольтной при ударах/вибрации.

Внутренняя проводка (ваша должна выглядеть так).

Крупный план релейного модуля.
Код
#include
int Relay = 4;
DS3231 rtc(SDA, SCL);
Time t;
const int OnHour = 7;
const int OnMin = 15;
const int OffHour = 7;
const int OffMin = 20;
void setup() {
Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
// rtc.setTime(21,10,00); // раскомментируйте для установки времени/даты
// rtc.setDate(26,6,2018);
}
void loop() {
t = rtc.getTime();
Serial.print(t.hour);
Serial.print(" hour(s), ");
Serial.print(t.min);
Serial.print(" minute(s)");
Serial.println(" ");
delay(1000);
if (t.hour == OnHour && t.min == OnMin) {
digitalWrite(Relay, HIGH);
Serial.println("LIGHT ON");
} else if (t.hour == OffHour && t.min == OffMin) {
digitalWrite(Relay, LOW);
Serial.println("LIGHT OFF");
}
}
Корпус и печатная плата
Корпус для размещения розетки, реле и электроники (3D-печать или другой способ).

Схемы

Производственный процесс
- TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Создание рулетки на 37 светодиодов с Arduino Nano
- Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
- Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
- Сборка аудиореактивной настольной лампы на Arduino Nano
- Автономный робот-следопыт с распознаванием лиц на Arduino Nano и OpenCV
- Медное гальваническое покрытие: умная система на Arduino UNO
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10