Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умное уличное освещение IoT: энергоэффективная LED-система на Arduino

Компоненты и расходные материалы

Компонент Количество
Arduino UNO WiFi Rev.2 1
Светодиод (любой) 1
Фоторезистор (LDR) 1 МОм 1
ИК-датчик приближенности (Digilent IR Proximity) 1
ESP8266 ESP-12E 1
Резистор 1 кОм 1

Инструменты

Сервисы

О проекте

Проблема

Уличное освещение — огромные расходы города. Натриевые лампы потребляют много энергии. Ручное включение/выключение ведёт к перерасходу (свет горит, когда не нужен). Автоматизация экономит энергию, деньги, снижает CO₂, световое загрязнение и потребность в персонале.

Недостатки текущей системы

Преимущества предложенной системы

Принцип работы

А. Фоторезистор (LDR)

LDR меняет сопротивление в зависимости от освещённости. При свете — низкое сопротивление, ток открывает транзисторы. Настроечный резистор регулирует порог срабатывания. Сигнал на Arduino.

Б. ИК-датчик приближенности

Определяет наличие транспорта/прохожих. ИК-излучение отражается от объекта, детектируется приёмником. Сигнал на Arduino.

В. LED

Яркость пропорциональна темноте: темнее — ярче. PWM-управление.

Г. ESP8266

WiFi-модуль (SoC) для отправки данных на ThingSpeak. 2.4 ГГц, 802.11 b/g/n, 16 GPIO, I2C, SPI, UART, PWM, 10-битный ADC, 32-битный CPU 80/160 МГц. Управляется AT-командами по UART.

Распиновка ESP-01: 3V3, GND, RST, EN, TX, RX.

Исходный код

Основной скетч (Arduino UNO WiFi Rev.2)

int smooth, LDR;
int threshold = 40;       // порог освещённости
int brightness = 0;
int ledState = 0;

int sensor1 = 11;  // ИК-датчик 1
int sensor2 = 8;   // ИК-датчик 2
int sensor3 = 9;   // ИК-датчик 3
int led1 = 5;      // LED 1 (PWM)
int led = 6;       // LED 2 (PWM)
int led2 = 2;      // LED 3

int carPresent = 0;
int carPresent1 = 0;
float beta = 0.65; // сглаживание LDR

void setup() {
  Serial.begin(115200);
  pinMode(sensor1, INPUT);
  pinMode(sensor2, INPUT);
  pinMode(sensor3, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  // Сглаживание показаний LDR (экспоненциальное скользящее среднее)
  smooth = smooth - (beta * (smooth - analogRead(A0)));
  delay(1);
  LDR = round(((float)smooth / 1023) * 100);

  if (LDR <= 40) brightness = 0;
  else brightness = map(LDR, 40, 100, 0, 255);

  checkSensors();

  if (carPresent == 1) {
    ledState = 1;
    digitalWrite(led, HIGH);
    digitalWrite(led1, HIGH);
    analogWrite(led, brightness);
    analogWrite(led1, brightness);
  } else if (carPresent == 0) {
    ledState = 0;
    digitalWrite(led, HIGH);
    analogWrite(led, ledState);
    if (carPresent1 == 1) {
      ledState = 1;
      if (ledState == 1) {
        analogWrite(led1, brightness);
        analogWrite(led2, brightness);
      }
    } else if (carPresent1 == 0) {
      ledState = 0;
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      analogWrite(led1, ledState);
      analogWrite(led2, ledState);
    }
  }

  // Отправка данных в Serial для ESP8266
  String data = (String)ledState + "," + (String)brightness + ";";
  Serial.print(data);
  delay(100);
}

void checkSensors() {
  // Логика детекции машины тремя ИК-датчиками по ходу движения
  if (digitalRead(sensor1) == 0) { // машина на 1-м
    if (digitalRead(sensor2) == 1) carPresent = 1; // ещё не на 2-м
  } else if (digitalRead(sensor2) == 0) { // машина на 2-м
    if (digitalRead(sensor1) == 1) { carPresent = 0; carPresent1 = 1; }
    else { /* машины вслед за первой */ }
  } else if (digitalRead(sensor3) == 0) { // машина на 3-м
    if (digitalRead(sensor2) == 1) { carPresent = 0; carPresent1 = 0; }
    else { carPresent = 0; carPresent1 = 1; }
  }
}

Скетч для ESP8266 (отправка в ThingSpeak)

#include <ESP8266WiFi.h>

const char* ssid = "ardent";
const char* password = "12345678";
String ledState = "";
String brightness = "";
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "NUEBLW9OA58DLL4N"; // ваш Write API Key
WiFiClient client;

void setup() {
  Serial.begin(115200);
  connectWifi();
}

void loop() {
  filterData();
  HTTPPost();
  delay(15000); // не чаще 15 сек (лимит ThingSpeak)
}

int connectWifi() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(2500);
}

void HTTPPost() {
  if (client.connect(thingSpeakAddress, 80)) {
    String PostData = "api_key=" + writeAPIKey;
    PostData += "&field1=" + ledState;
    PostData += "&field2=" + brightness;

    client.println("POST /update HTTP/1.1");
    client.println("Host: api.thingspeak.com");
    client.println("Connection: close");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Content-Length: " + String(PostData.length()));
    client.println();
    client.println(PostData);
    client.stop();
  }
}

void filterData() {
  if (Serial.available()) {
    String buffer = Serial.readStringUntil(';');
    int i1 = buffer.indexOf(',');
    ledState = buffer.substring(0, i1);
    brightness = buffer.substring(i1 + 1);
  }
}

Схемы

Производственный процесс

  1. Умный светофор: адаптивное уличное освещение на базе IoT
  2. Многопозиционная система датчиков температуры для интеграции в умный дом
  3. MotionSense: умная система обнаружения проникновения на Arduino и ESP8266
  4. Пожарная безопасность 3D-принтера: умная система обнаружения дыма
  5. Умная система автополива растений на Arduino Nano
  6. Магнитная левитация на отталкивании с Arduino: Простая схема и DIY-руководство
  7. Продвинутый дистанционно управляемый манипулятор-робот для точной работы
  8. Продвинутая лаборатория микроконтроллеров: ESP32, Arduino, PIC и сенсорные модули
  9. DIY POV-сфера: LED-световизуализация на Arduino Mega
  10. CoroFence: термический детектор на GridEye + PIR с IoT