Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Другие проекты", создана пользователем pakuzma, 16 янв 2019.

  1. pakuzma

    pakuzma Новичок

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

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

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    выглядит физически это так
     

    Вложения:

  3. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    Да еще, для удаленного мониторинга - запуска собираюсь использовать Blynk, мне очень нравится как связка с мобильным.
     
  4. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    Мосфеты срабатывают по высокому уровню, как вариант решения проблемы можно использовать низкий уровень, но таких логических в хозяйстве нет
     
  5. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    генератор используем фубаг ti 3003 у него правильная синусоида, от него нормально работают все бесперебойники
     

    Вложения:

  6. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.446
    Симпатии:
    173
    Поставьте промежуточную плату (н.п. Arduino), которая будет всем управлять(если надо перегрузит есп), а есп оставьте для связи с внешним миром. Подвисание есп или потеря связи не помешает вовремя запустить генератор.
     
    Последнее редактирование: 17 янв 2019
  7. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    Спасибо, мне кажется что усложнять конструкцию еще одним мк так себе решение
     
  8. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.446
    Симпатии:
    173
    Ну если вы вы считаете, что повысить надежность системы, добавив независимую цепь управления, это пустое дело...
    А как вы будете перегружать есп при потере связи? (н.п. есп повисла)
     
    Последнее редактирование: 19 янв 2019
  9. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.446
    Симпатии:
    173
    На Tx при старте идет информация и ее не запретить.
    А другие выводы должны быть в высокоимпедансном состоянии, возможно хватит резистора на минус, чтобы не срабатывал мосфет. Только не попадите на вывод, который отвечает за загрузку есп.
     
  10. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.127
    Симпатии:
    226
    GPIO0 ещё не стоит - там при старте 26МГц.
     
  11. nikolz

    nikolz Гуру

    Сообщения:
    3.979
    Симпатии:
    426
    проще вского mosfet подключать к GPIO4 и GPIO5 При старте эти пины в режиме ввода т е высокое сопротивление
    Куда резистор подтяжки подключите тот потенциал и получите
    если вам надо ноль то эти пины подтяжкой к земле
    если надо 1 то эти пины подтяжкой к питанию
     
    pakuzma нравится это.
  12. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    Мосфет - реле подключены к gp5 и gp2 оптопары к gp16 gp4
     
  13. nikolz

    nikolz Гуру

    Сообщения:
    3.979
    Симпатии:
    426
    gpio02 - используется для мигания светодидом (синий такой на плате)
    GPIO16 - используется для deep-sleep - выход таймера RTC
    поэтому, уже написал ранее, у Вас без внешних довесков есть лишь GPIO04 и GPIO05
     
    pakuzma нравится это.
  14. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    да перекинул мосфеты на 4 и 5 проблемка ушла спасибо, допишу скетч выложу
     
  15. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    вот никогда не приходило в голову микрофон к генератору (присобачить), поясните пож-ста логику сего девайса, прям заинтересовало!
     
  16. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    Код (C):
    1. #include <Servo.h>// подключаем серво библиотеку
    2. Servo servo;
    3. #define BLYNK_PRINT Serial
    4. #define  ACL D0 // линия 220в внешняя для оптопары
    5. #define  ACG D8// генератор
    6. #define  START D1 // реле стартер
    7. #define  POWER D2// реле зажигание генератора
    8. #define  GAS D7 // сервопривод к карбюратору
    9. #include <ESP8266WiFi.h>
    10. #include <BlynkSimpleEsp8266.h>
    11. char auth[] = "a3c267a0a44e43498";
    12. BlynkTimer timer;
    13. char ssid[] = "q"; //ssid роутера
    14. char pass[] = "132";// пароль роутера вай фай
    15. int flag=0; // счетчик попыток старта генератора
    16. byte flag1=0; //флаг для охлаждения генератора после работы
    17. byte flag2=0; // флаг таймера работы генератора
    18. float motohour = 0; // моточасы
    19. WidgetLCD lcd(V2); // lcd виртуальеый подключаем к виртуальному пину 2
    20. unsigned long starttime=0;
    21. unsigned long worktime=0;
    22. unsigned long temptime=0;
    23. void CONTROLSensor()
    24. {
    25.   byte LINE = digitalRead (D0);
    26.   byte GEN = digitalRead (D8);
    27.   Blynk.virtualWrite(V0, LINE);
    28.   Blynk.virtualWrite(V1, GEN);
    29.   Blynk.virtualWrite(V3, motohour);
    30.   Serial.println (LINE);
    31.   Serial.println (GEN);
    32.    Serial.println (flag);
    33. if (GEN == 1&& flag2==0)
    34. {
    35.   starttime= millis();
    36.   flag2=1;
    37. }
    38. if (GEN == 1&& flag2==1)
    39. {
    40.   worktime = (millis()-starttime)/60000;
    41.   lcd.print(0,1, worktime);
    42.   lcd.print(5,1,"min");
    43. }
    44.   if (flag == 6)
    45.     {
    46.       lcd.clear();
    47.     lcd.print(0,0, "ALARMA");
    48.     }
    49.     if (LINE ==0 && GEN == 0 && flag<=5)
    50.   {
    51.     STARTG();
    52.   }
    53.     if (LINE == 1 && GEN == 1 && flag1==0)
    54.   {
    55.     temptime = millis();
    56.     flag1=1;
    57.     lcd.clear();
    58.     lcd.print(0,0, "COOling");
    59.   }
    60.     if(LINE == 1 && GEN == 1 && flag1==1 && millis()- temptime >=600000)
    61.    {
    62.     digitalWrite (POWER,0);
    63.     motohour=motohour+(worktime/60);
    64.    }
    65.       if (LINE ==0 && GEN == 1)
    66.   {     flag=0;
    67.       //lcd.clear();
    68.     lcd.print(0,0, "GEN work");
    69.   }
    70.     if (LINE ==1 && GEN == 0)
    71.   {  
    72.        lcd.clear();
    73.     lcd.print(0,0, "line ok");
    74.   }
    75. }
    76. void setup() {
    77.   pinMode(START, OUTPUT);  
    78.   pinMode(POWER, OUTPUT);
    79.   servo.attach(GAS);
    80.   Serial.begin(9600);
    81.   Blynk.begin(auth, ssid, pass);
    82.   timer.setInterval(3000L, CONTROLSensor);
    83. }
    84.  
    85. // the loop function runs over and over again forever
    86. void loop() {
    87. Blynk.run();
    88. timer.run();
    89. }
    90. void STARTG()
    91. {
    92.   lcd.clear();
    93.     lcd.print(0,0, "START");
    94.   Serial.println ("start");
    95.   digitalWrite(POWER,1);
    96. delay (5000);
    97.   servo.write(10);
    98.   delay (2000);
    99.   servo.write(180);
    100. delay (2000);
    101.   digitalWrite(START,1);
    102. delay (3000);
    103. digitalWrite(START,0);
    104. delay (10000);
    105. flag=flag+1;
    106. }
     
  17. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    попинайте пож-ста кому не лень, в общем все работает
     
  18. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    мы в прошлом месяце микрофон к домофону на офисе приделали, для открытия надо было по татарски сказать "дверь откройся", из 40 человек монтажников, никто даже пробовать не захотел, а если серьезно, то сильно сомневаюсь, что "микрофону" получится объяснить в чем разница звука работающего двигателя под нагрузкой с открытой заслонкой или с закрытой заслонкой , с закрытой заслонкой холодным двигателем и т.д., в таком случае мне кажется рационально использовать две термопары, для воздуха и для двигателя, и исходя из температур управлять заслонкой
     
  19. pakuzma

    pakuzma Новичок

    Сообщения:
    13
    Симпатии:
    0
    Ну круто, вот уж не думал, что реально определить разницу
     
  20. kontakter

    kontakter Новичок

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

Поделиться этой страницей