Этот скетч превращает Arduino в интеллектуальную розетку, которая:
Управляется через голосовые команды (Alexa/Google Home)
Мониторит потребляемую мощность
Отправляет данные в облако
Автоматически отключает приборы при перегрузке
Работает по расписанию
Необходимые компоненты:
Arduino + ESP8266 (или ESP32)
Релейный модуль 10A
Датчик тока ACS712 (30A)
Блок питания 5V
OLED-дисплей 0.96" (опционально)
Кнопка для ручного управления
Светодиодная индикация
Полный скетч
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define RELAY_PIN D1
#define CURRENT_SENSOR A0
#define BUTTON_PIN D3
#define LED_PIN D4
// Настройки WiFi
const char* ssid = "Your_SSID";
const char* password = "Your_PASSWORD";
// Настройки облака (Blynk/ThingSpeak)
const char* server = "api.thingspeak.com";
String apiKey = "YOUR_API_KEY";
// Настройки дисплея
Adafruit_SSD1306 display(128, 64, &Wire);
float current = 0;
float power = 0;
float energy = 0;
unsigned long lastMillis = 0;
bool relayState = false;
const float CURRENT_THRESHOLD = 15.0; // 15A максимум
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
// Инициализация дисплея
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Display error");
}
display.clearDisplay();
// Подключение к WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
}
void loop() {
// 1. Измерение тока
measureCurrent();
// 2. Проверка перегрузки
if(current > CURRENT_THRESHOLD) {
emergencyShutdown();
}
// 3. Обработка кнопки
if(digitalRead(BUTTON_PIN) == LOW) {
toggleRelay();
delay(300); // Антидребезг
}
// 4. Отправка данных
if(millis() - lastMillis > 30000) { // Каждые 30 сек
sendToCloud();
lastMillis = millis();
}
// 5. Обновление дисплея
updateDisplay();
delay(500);
}
void measureCurrent() {
int sensorValue = analogRead(CURRENT_SENSOR);
float voltage = (sensorValue / 1024.0) * 5.0;
current = (voltage - 2.5) / 0.1; // Для ACS712 30A
// Расчет мощности (предполагаем 220V)
power = current * 220.0;
// Расчет энергии (Wh)
energy += power * (0.5 / 3600); // 0.5 сек - период измерения
}
void toggleRelay() {
relayState = !relayState;
digitalWrite(RELAY_PIN, relayState);
digitalWrite(LED_PIN, relayState);
}
void emergencyShutdown() {
digitalWrite(RELAY_PIN, LOW);
relayState = false;
digitalWrite(LED_PIN, LOW);
// Отправка уведомления
String message = "Emergency shutdown! Current: " + String(current) + "A";
sendAlert(message);
}
void sendToCloud() {
if(WiFi.status() == WL_CONNECTED) {
WiFiClient client;
HTTPClient http;
String url = "http://" + String(server) + "/update?api_key=" + apiKey;
url += "&field1=" + String(current);
url += "&field2=" + String(power);
url += "&field3=" + String(energy);
http.begin(client, url);
int httpCode = http.GET();
http.end();
}
}
void updateDisplay() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("Current: "); display.print(current); display.println(" A");
display.print("Power: "); display.print(power); display.println(" W");
display.print("Energy: "); display.print(energy, 3); display.println(" Wh");
display.print("State: "); display.println(relayState ? "ON" : "OFF");
display.display();
}
// Интеграция с Alexa через IFTTT
void sendAlert(String message) {
WiFiClient client;
HTTPClient http;
String url = "http://maker.ifttt.com/trigger/overload_alert/with/key/YOUR_IFTTT_KEY";
url += "?value1=" + message;
http.begin(client, url);
http.GET();
http.end();
}Как это работает:
Измерение мощности:
Датчик ACS712 отслеживает ток с точностью ±0.1A
Расчет мощности (P = I × V) с учетом напряжения 220V
Защита от перегрузки:
Автоматическое отключение при превышении 15A
Мгновенное уведомление в IFTTT/Alexa
Управление:
Ручное управление кнопкой
Визуальная индикация состояния
OLED-дисплей с текущими параметрами
Облачная синхронизация:
Отправка данных на ThingSpeak каждые 30 сек
Графики потребления в реальном времени
Голосовое управление:
Интеграция с Alexa через IFTTT webhooks
Команды: "Включи розетку", "Сколько энергии потребляет?"
Подключение компонентов:
ACS712:
VCC → 5V
OUT → A0
GND → GND
Последовательно с нагрузкой
Реле:
IN → D1
COM → Сетевая вилка
NO → Нагрузка
ESP8266:
TX/RX → Для программирования
5V → От стабилизированного источника
Кнопка:
Один вывод → D3
Другой вывод → GND
Улучшения системы:
Добавьте RTC для точного расписания:
#include "RTClib.h" RTC_DS3231 rtc; void checkSchedule() { DateTime now = rtc.now(); if(now.hour() == 23) relayState = false; // Отключение в 23:00 }Локальное хранение данных при отсутствии WiFi:
#include <EEPROM.h> void saveData() { EEPROM.put(0, energy); }OTA-обновления:
#include <ESP8266mDNS.h> #include <ArduinoOTA.h> void setupOTA() { ArduinoOTA.begin(); }Энергоучет по тарифам:
float calculateCost() { return energy * 0.15; // 0.15 руб/кВт*ч }
Интеграция с платформами:
ThingSpeak:
Настройка каналов для тока/мощности/энергии
Виджеты для мониторинга
IFTTT + Alexa:
Applet: "Если получен web-запрос → сказать через Alexa: {Сообщение}"
Голосовые команды для управления
Telegram-бот:
Уведомления о перегрузках
Управление через команды /on, /off
Стоимость реализации: ~2000-3000руб
Экономия энергии: до 25% за счет контроля "вампирского" потребления
Время сборки: 1.5-2 часа
Идеально для: умного дома, контроля серверного оборудования, энергоаудита.

