• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Автоматический ввод резерва

pakuzma

New member
Имеется в хозяйстве удаленная серверная с небольшим потреблением 2,5 киловатта, все сервера запитаны от бесперебойников с запасом хода 15 часов, а так же имеется генератор и инженер, который в случае превышения времени отключения едет и запускает генератор. Сигнализирует об отключении 220 мобильный телефон, с соответствующим приложением. Но периодически данная система сбоит, аккумуляторы выходят из строя, заканчиваются деньги на сим карте, инженер не замечает вовремя сообщение. Было решено собрать автоматический ввод резерва на NodeMCU и ардуино (ардуино -на что хватило познаний).
Элементы конструкции:
WeMos NodeMCU - для подключения к WiFi и удаленного мониторинга;
часы RTC ds3231 - для фиксации времени срабатывания;
пара 12 вольтовых реле на 30 ампер для включения зажигания и стартера;
сервопривод 995 для заслонки карбюратора;
пара оптронов для контроля внешней сети 220 и сети генератора;
пара логических мосфетов для включения реле;

сейчас нахожусь на этапе проверки работоспособности железа, скетч еще не писал, столкнулся с проблемой подтягивающих резисторов, а именно при перезагрузке esp подает высокий сигнал на ноги с мосфетами и срабатывают реле, подскажите как обойти данную проблему
 

pakuzma

New member
Да еще, для удаленного мониторинга - запуска собираюсь использовать Blynk, мне очень нравится как связка с мобильным.
 

pakuzma

New member
Мосфеты срабатывают по высокому уровню, как вариант решения проблемы можно использовать низкий уровень, но таких логических в хозяйстве нет
 

CodeNameHawk

Moderator
Команда форума
Поставьте промежуточную плату (н.п. Arduino), которая будет всем управлять(если надо перегрузит есп), а есп оставьте для связи с внешним миром. Подвисание есп или потеря связи не помешает вовремя запустить генератор.
 
Последнее редактирование:

pakuzma

New member
Поставьте промежуточную плату (н.п. Arduino), которая будет всем управлять(если надо перегрузит есп), а есп оставьте для связи с внешним миром. Подвисание есп или потеря связи не помешает вовремя запустить генератор.
Спасибо, мне кажется что усложнять конструкцию еще одним мк так себе решение
 

CodeNameHawk

Moderator
Команда форума
Спасибо, мне кажется что усложнять конструкцию еще одним мк так себе решение
Ну если вы вы считаете, что повысить надежность системы, добавив независимую цепь управления, это пустое дело...
А как вы будете перегружать есп при потере связи? (н.п. есп повисла)
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
а именно при перезагрузке esp подает высокий сигнал на ноги с мосфетами и срабатывают реле
На Tx при старте идет информация и ее не запретить.
А другие выводы должны быть в высокоимпедансном состоянии, возможно хватит резистора на минус, чтобы не срабатывал мосфет. Только не попадите на вывод, который отвечает за загрузку есп.
 

nikolz

Well-known member
проще вского mosfet подключать к GPIO4 и GPIO5 При старте эти пины в режиме ввода т е высокое сопротивление
Куда резистор подтяжки подключите тот потенциал и получите
если вам надо ноль то эти пины подтяжкой к земле
если надо 1 то эти пины подтяжкой к питанию
 

pakuzma

New member
подтягивающие резисторы здесь не причем
Если программы нет то что Вы подаете на пины MOSFET и куда вы их подключили.
может быть для начала схему покажите. А то угадай-ка получается.
Мосфет - реле подключены к gp5 и gp2 оптопары к gp16 gp4
 

nikolz

Well-known member
Мосфет - реле подключены к gp5 и gp2 оптопары к gp16 gp4
gpio02 - используется для мигания светодидом (синий такой на плате)
GPIO16 - используется для deep-sleep - выход таймера RTC
поэтому, уже написал ранее, у Вас без внешних довесков есть лишь GPIO04 и GPIO05
 

pakuzma

New member
gpio02 - используется для мигания светодидом (синий такой на плате)
GPIO16 - используется для deep-sleep - выход таймера RTC
поэтому, уже написал ранее, у Вас без внешних довесков есть лишь GPIO04 и GPIO05
да перекинул мосфеты на 4 и 5 проблемка ушла спасибо, допишу скетч выложу
 

pakuzma

New member
-------------------
еще можно поставить микрофон и управлять генератором по звуку его работы.
---------------------------
примерно так
вот никогда не приходило в голову микрофон к генератору (присобачить), поясните пож-ста логику сего девайса, прям заинтересовало!
 

pakuzma

New member
Код:
#include <Servo.h>// подключаем серво библиотеку
Servo servo;
#define BLYNK_PRINT Serial
#define  ACL D0 // линия 220в внешняя для оптопары
#define  ACG D8// генератор
#define  START D1 // реле стартер
#define  POWER D2// реле зажигание генератора
#define  GAS D7 // сервопривод к карбюратору
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = "a3c267a0a44e43498";
BlynkTimer timer;
char ssid[] = "q"; //ssid роутера
char pass[] = "132";// пароль роутера вай фай
int flag=0; // счетчик попыток старта генератора
byte flag1=0; //флаг для охлаждения генератора после работы
byte flag2=0; // флаг таймера работы генератора
float motohour = 0; // моточасы
WidgetLCD lcd(V2); // lcd виртуальеый подключаем к виртуальному пину 2
unsigned long starttime=0;
unsigned long worktime=0;
unsigned long temptime=0;
void CONTROLSensor()
{
  byte LINE = digitalRead (D0);
  byte GEN = digitalRead (D8);
  Blynk.virtualWrite(V0, LINE);
  Blynk.virtualWrite(V1, GEN);
  Blynk.virtualWrite(V3, motohour);
  Serial.println (LINE);
  Serial.println (GEN);
   Serial.println (flag);
if (GEN == 1&& flag2==0)
{
  starttime= millis();
  flag2=1;
}
if (GEN == 1&& flag2==1)
{
  worktime = (millis()-starttime)/60000;
  lcd.print(0,1, worktime);
  lcd.print(5,1,"min");
}
  if (flag == 6)
    {
      lcd.clear();
    lcd.print(0,0, "ALARMA");
    }
    if (LINE ==0 && GEN == 0 && flag<=5)
  {
    STARTG();
  }
    if (LINE == 1 && GEN == 1 && flag1==0)
  {
    temptime = millis();
    flag1=1;
    lcd.clear();
    lcd.print(0,0, "COOling");
  }
    if(LINE == 1 && GEN == 1 && flag1==1 && millis()- temptime >=600000)
   {
    digitalWrite (POWER,0);
    motohour=motohour+(worktime/60);
   }
      if (LINE ==0 && GEN == 1)
  {     flag=0;
      //lcd.clear();
    lcd.print(0,0, "GEN work");
  }
    if (LINE ==1 && GEN == 0)
  {   
       lcd.clear();
    lcd.print(0,0, "line ok");
  }
}
void setup() {
  pinMode(START, OUTPUT);  
  pinMode(POWER, OUTPUT);
  servo.attach(GAS);
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(3000L, CONTROLSensor);
}

// the loop function runs over and over again forever
void loop() {
Blynk.run();
timer.run();
}
void STARTG()
{
  lcd.clear();
    lcd.print(0,0, "START");
  Serial.println ("start");
  digitalWrite(POWER,1);
delay (5000);
  servo.write(10);
  delay (2000);
  servo.write(180);
delay (2000);
  digitalWrite(START,1);
delay (3000);
digitalWrite(START,0);
delay (10000);
flag=flag+1;
}
 

pakuzma

New member
микрофон не к генератору а к ESP(STM)
слушаете звук и управляете заслонкой.
мы в прошлом месяце микрофон к домофону на офисе приделали, для открытия надо было по татарски сказать "дверь откройся", из 40 человек монтажников, никто даже пробовать не захотел, а если серьезно, то сильно сомневаюсь, что "микрофону" получится объяснить в чем разница звука работающего двигателя под нагрузкой с открытой заслонкой или с закрытой заслонкой , с закрытой заслонкой холодным двигателем и т.д., в таком случае мне кажется рационально использовать две термопары, для воздуха и для двигателя, и исходя из температур управлять заслонкой
 

pakuzma

New member
так для инфы.
В прошлой жизни я объяснил микрофону в чем разница нормальной работы двигателя истребителя и его помпажа,
а так же в чем разница нормальной работы ДВС и ненормальной.
И много еще чего в настоящее время объясняют микрофону , кроме татарского языка.
Ну круто, вот уж не думал, что реально определить разницу
 

kontakter

New member
Не микрофон надо использовать а датчик детонации. Погуглите. Запуск и работа агрегата определяется четко.
 
Сверху Снизу