Этот скетч превращает 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 часа
Идеально для: умного дома, контроля серверного оборудования, энергоаудита.