Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Доступная автоматика HelloDistiller на Ардуино Мега 2560

Форум самогонщиков Автоматика
1 ... 278 279 280 281 282 283 284 ... 795 281
msg31 Научный сотрудник Барнаул 4.6K 2.5K
Отв.5600  18 Окт. 16, 15:24
А еще хотелось бы уменьшить шаг регулировки скорости насоса.Костяшка, 18 Окт. 16, 15:14
Запитай насос от 9 вольт.
bengoor Доцент Кронштадт 1.8K 1.1K
Отв.5601  18 Окт. 16, 15:33, через 9 мин
А я думаю что нбк надо управлять по температуре внизу колонны. Опишу как работает нбк у меня. При скорости 21 попугай при этом скорость подачи 23 литра в час отжим полный и температура внизу 100 град. При скорости 22 скорость подачи 27 литров в час и температура внизу падает до 99.2 и идет потеря спирта. Какая температура вверху (крепость) мне кажется вобще не важно. Главное подобрать мощность-степень отжима браги. А еще хотелось бы уменьшить шаг регулировки скорости насоса.Костяшка, 18 Окт. 16, 15:14
У меня при 45 попугаях скорость порядка 12-15л/ч, шаг достаточно небольшой чтобы подобрать мощность, питаю от 12В. При подаче начиная от 10 до 15л температура низа порядка 100 +-0.1, а верх достаточно плавает. Почитай раздел про НБК, Игорь советует поддерживать температуру верха, при этом поглядывать за низом, но основной параметр это верх и давление, я уже писал почему.
А низ может падать если начинается захлеб
Костяшка Бакалавр Бийск 51 2
Отв.5602  18 Окт. 16, 16:40
Температура внизу может падать и в том случае если идет пролив или не полное отжатие браги вследствии повышенной скорости подачи браги, что влечет потерю спирта. Какая основная наша задача при работе на нбк это максимально отжать брагу при максимальной скорости подачи, а какая при этом получается крепость,что и показывает температура вверху это в принципе не важно.
chester82 Студент Свердловская область 20 1
Отв.5603  18 Окт. 16, 17:21, через 41 мин
Подскажите, пожалуйста, почему может не работать защита от перегрева клапанов? Когда выставлено напряжение перегрева 205 или более вольт, на клапана идет вся напруга, 220V, если ставлю 200v или менее, то напряжение на клапана если верить мультиметру в районе 20 вольт. Соответственно клапана не открываются, и только щелкают когда периодически подается 220. Скетч 341i, #define PEREGREV_ON 1 проверил.
bengoor Доцент Кронштадт 1.8K 1.1K
Отв.5604  18 Окт. 16, 17:30, через 9 мин
Температура внизу может падать и в том случае если идет пролив или не полное отжатие браги вследствии повышенной скорости подачи браги, что влечет потерю спирта. Какая основная наша задача при работе на нбк это максимально отжать брагу при максимальной скорости подачи, а какая при этом получается крепость,что и показывает температура вверху это в принципе не важно.Костяшка, 18 Окт. 16, 16:40
Твоя проблема это слишком большой шаг в регулировании скорости подачи. Если бы ты плавнее регулировал подачу, то увидел бы что при изменении температуры вверху на пару градусов низ стоит стабильно на полном отжатии. В теории ты вроди как прав, но когда на практике начинаешь регулировать по давлению и по низу, то в итоге получаешь недоотжатие. Сам на эти грабли наткнулся и в теме про НБК Игорь мне ответил что надо смотреть на верх, низ конечно тоже нужно выставить, но более плавно подобрать режим можно только по верху.
titan777 Специалист Москва 192 134
Отв.5605  18 Окт. 16, 18:44
Я уже давно подключил к автоматике перильстатику, и сделал авторегулировку скорости и мощности. На НБК .
Работает достаточно неплохо.
По нижней температуре регулировка подачи, по давлению регулировка мощности.
По верху пока не делал ничего, но в планах добавить, как дополнение.
+Есть защита от отсутствия подачи браги.
Код кривоват немного, но сам алгоритм работы может кому пригодится.

  case 4:
   UstPower=PowerNBK;   
   if (UstPower> PowerTenN) UstPower=PowerTenN;
   if (maxTempRK20_Nbk<temps[TEMP_RK20] || maxTempRK20_NbkCnt>30) {
      maxTempRK20_Nbk=temps[TEMP_RK20];
      maxTempRK20_NbkCnt=0;
   }
   
   if (time3 > 30) {
      SpeedNBK=SpeedNBKDst * 0.3; // первые 2 минуты брагу подаем медленно
      time2=20;
      maxTempRK20_NbkCnt=0;
   } else  if (time3 > 0) {
      SpeedNBK=SpeedNBKDst * 0.5; // первые 2 минуты брагу подаем медленно
      time2=20;
      maxTempRK20_NbkCnt=0;
   }
   
   if (time3 <=0 ) {
      if (U_MPX5010 > AlarmMPX_NBK * 0.7) {
         if (time2<=0) {            //PowerNBK = PowerNBK - 10;
            time2 = 20;
         }
      }
      
      if (U_MPX5010 < AlarmMPX_NBK * 0.5) {
         UstPower = UstPower * 1.2;
      } else if (U_MPX5010 < AlarmMPX_NBK * 0.6) {
         UstPower = UstPower * 1.1;
      }
      
      if (U_MPX5010 > AlarmMPX_NBK * 0.7) {
         UstPower = UstPower * 0.9;
      } else if (U_MPX5010 > AlarmMPX_NBK * 0.8) {
         UstPower = UstPower * 0.8;
      } else if (U_MPX5010 > AlarmMPX_NBK * 0.9) {
         UstPower = UstPower * 0.7;
      } else if (U_MPX5010 > AlarmMPX_NBK ) {
         UstPower = UstPower * 0.5;
      }
      if (UstPower> PowerTenN) UstPower=PowerTenN;
      
      if ( (maxTempRK20_Nbk-temps[TEMP_RK20])<3 ) {  
            SpeedNBK=SpeedNBKDst;  
            time2=20;
            maxTempRK20_NbkCnt=0;
      } else    if ((maxTempRK20_Nbk-temps[TEMP_RK20])<4 ) {
            SpeedNBK=SpeedNBKDst*0.9;
            if (time2<=0) {               //if (SpeedNBKDst>0) SpeedNBKDst-=1;
               time2=30;
               maxTempRK20_NbkCnt++;
            }
      } else if ( (maxTempRK20_Nbk-temps[TEMP_RK20])<5 ) {
            SpeedNBK=SpeedNBKDst*0.7;
            if (time2<=0) {               //if (SpeedNBKDst>0) SpeedNBKDst-=1;
               time2=20;
               maxTempRK20_NbkCnt++;
            }
      } else if ( (maxTempRK20_Nbk-temps[TEMP_RK20])<7 ) {  
            SpeedNBK=SpeedNBKDst*0.5;
            if (time2<=0) {               //if (SpeedNBKDst>0) SpeedNBKDst-=1;
               time2=10;
               maxTempRK20_NbkCnt++;
            }
      } else if ((maxTempRK20_Nbk-temps[TEMP_RK20])<10 ) {  
            SpeedNBK=SpeedNBKDst*0.3;
            if (time2<=0) {               //if (SpeedNBKDst>0) SpeedNBKDst-=1;
               time2=10;
               maxTempRK20_NbkCnt++;
            }
      } else {
            SpeedNBK=0;
            maxTempRK20_NbkCnt=0;
      }
      
   }
   
   digitalWrite(PIN_STOP_NASOS_NBK, 0);
   timeNBK=20;
   
   if  (temps[TEMP_DEFL]>=tEndNBK && time1<=0 || plusStateMachine==1) {
     //Если температура превысила максимальную и с момента старта прошло более 20 минут, то считаем, что произошла авария - заклинил насос или кончилась брага.
     // Ждем 1/2 минут и завершаем процесс.
     time2=30;
     plusStateMachine=0;
     StateMachine=5;
     if (BeepStateProcess) my_beep(BEEP_LONG);
   }

   if  (temps[TEMP_DEFL]>=tEndNBK && time1>0) {
      time1=60;
   }
   // не работает нагрев
   if  (time3<=0 && temps[TEMP_RK20]<970 && U_MPX5010<20) {
      StateMachine=100;
      SecondsEnd=Seconds;
      SpeedNBK=0;
      digitalWrite(PIN_STOP_NASOS_NBK, 1);
      beep3(20,200,7);
   }   
   
   break;

Костяшка Бакалавр Бийск 51 2
Отв.5606  18 Окт. 16, 18:55, через 12 мин
когда на практике начинаешь регулировать по давлению и по низу, то в итоге получаешь недоотжатие.
вот это для меня вобще противоречит всем моим представлениям о работе нбк которые я прочитал или посмотрел. Давай рассмотрим гипотетическую ситуацию: например гонится брага крепостью 10%. Мы настраиваем автоматику так чтоб по температуре внизу брага отжималась до 0 и вверху получалась какая то крепость (температура), автоматика меняя подачу поддерживает крепость на заданном уровне скажем 60%. В следующий раз у нас брага по каким то причинам 5%, что в этом случае будет делать автоматика. Она будет увеличивать подачу стремясь вверху получить заданную крепость, а при этом будет возможно как раз и пролив колонны и слив не отжатой браги в канализацию. Правильно или нет?

Добавлено через 5мин.:

А если при увеличении подачи крепость растет а температура внизу не меняется то значит колонна на предыдущей скорости подачи, до увеличения скорости, работала в не максимальном по производительности режиме.
shram1970 Доцент Желтая гора 1.3K 325
Отв.5607  18 Окт. 16, 19:34, через 40 мин
Костяшка, При оптимальной для колонны скорости пара пролива не будет,скорей будет захлеб,а от этого нас убережет контроль за давлением,при превышении порога скорость уменьшится.И получится что колона будет работать на пред захлебе.ИМХО
Костяшка Бакалавр Бийск 51 2
Отв.5608  18 Окт. 16, 19:48, через 14 мин
А если оптимальную скорость пара по каким то причинам не удается получить, например не можешь по какой то причине подать необходимую мощность в пг, а если датчика давления нет? Вот у меня например его нет.
shram1970 Доцент Желтая гора 1.3K 325
Отв.5609  18 Окт. 16, 20:00, через 12 мин
А если бы да кабы,значит нужно дать пользователю выбор варианта.Мне частенько важна крепость на выходе невзирая на потери(не так они и велики,зато хвостов значительно меньше)
Костяшка Бакалавр Бийск 51 2
Отв.5610  19 Окт. 16, 04:49
Я хочу сказать лишь о том что температура внизу колонны это один из основных параметров при перегонке и разрабатывая алгоритм автоматизации необходимо обязательно ее учитывать.
msg31 Научный сотрудник Барнаул 4.6K 2.5K
Отв.5611  19 Окт. 16, 05:07, через 18 мин
Работает достаточно неплохо.titan777, 18 Окт. 16, 18:44
Вот пока мы тут обсуждаем, коллега все сделал. Предлагаю всем желающим оттестировать подход, предложенный titan777 и отписаться. Думаю он не откажет в разъяснениях, как встроить этот код в стандартный скетч.
P.S. По управлению НБК очень много мнений и много алгоритмов мне предлагали. Часть из них я пробовал, ничего путнего не получалось. Остановился пока на том, что есть, а именно фактически  это просто контроль захлеба по давлению. Так что пробуйте, коллеги на разных НБК, если будет нормально работать, встрою это в стандартный скетч. Все на так просто, косвенным показателем служит отсутствие реализации авто-работы НБК в распространенных коммерческих версиях автоматик.
bengoor Доцент Кронштадт 1.8K 1.1K
Отв.5612  19 Окт. 16, 07:29
msg31,у меня его алгоритм работать не будет как я хочу. Температура низа очень зависит от давления на улице. Перегонял при низком давлении низ был 99.5-99.8, при нормальном около 100, последний раз при высоком имел 100.4-100.5. Такой разброс от перегона к пепегону будет давать разные результаты по отжатию например если поставить настройку 100 банально то при низком давлении температура недостежима, а насос будет уменьшать подачу или наращивать мощность стараясь досичь. Или наоборот при высоком давлении мы быстро получим искомые 100 внизу, а ыактически могли бы еще с 0.5 отжать. Это приличный пролив.
Если же регулировать по верху то там поставить например 93 градуса и дельту 1 то есть в пределах 92-94 не регулируем, вышли за пределы - добпвили или отняли. От давления тут нет такой зависимости критической. Это аналогисно как старт стоп делать по низу колонны или по дефу. Внизу мы намного быстрее увидим хвосты. Так и тут- вверху мы быстрее поймем что надо делать. Каждый для себя установит свою температуру регулирвки.
Я бы не стал предлагать если бы не был уверен. Крайние разы я имено так вручную регулировал: задал мощность, подал брагу, довел подачу до 92-94 верха, смотря на давление. Если оно знаситеьно меньше рабочего добавил мощи, подождал и добавил подачу чтобы попасть в искомые 92-94. На низ же я только смотрел. В итоге отжатие максимальное.

Добавлено через 31мин.:

показателем служит отсутствие реализации авто-работы НБК в распространенных коммерческих версиях автоматик.msg31, 19 Окт. 16, 05:07
Не видел ни одной автоматики коммерческой с датчиком давления, а в НБК это один из главных показателей, поэтому алгоритмов и нет.
titan777 Специалист Москва 192 134
Отв.5613  19 Окт. 16, 14:40
Нижняя температура не устанавливается пользователем, а сама встает, по максимально достигнутой.
Потом уже работа идет по дельте от этой максималки.
Так-что каждый раз температура саморегулируется, даже в процессе если поднимется еще больше, по ней установится.
Вот только если вниз пойдет, то это не отработает.


  if (maxTempRK20_Nbk<temps[TEMP_RK20] || maxTempRK20_NbkCnt>30) {
      maxTempRK20_Nbk=temps[TEMP_RK20];
      maxTempRK20_NbkCnt=0;
  }
bengoor Доцент Кронштадт 1.8K 1.1K
Отв.5614  19 Окт. 16, 14:48, через 8 мин
Вот только если вниз пойдет, то это не отработает.titan777, 19 Окт. 16, 14:40
Ну чтобы вниз пошла это надо часов на 12 зарядить чтобы давление атмосферное упало.

Добавлено через 33мин.:

titan777, все конечно круто, но если тупо вставить этот кусок в скетч Максима, то нифига не заработает, так как половина переменных ты использовал свои и сам их объявил, многие до этого не додумаются.

Добавлено через 2мин.:

msg31, а можешь реализовать мой алгоритм в режиме бета теста? Я бы тестанул и отписался о результатах. Так как по давлению не получилось стабильно работать я отключил авторегулировку и делал все вручную.
Pauedi Бакалавр Добруш 69 16
Отв.5615  19 Окт. 16, 15:35, через 47 мин
Подскажите, господа, в какой строке нужно поменять значение на 255 если BEEPер с низким уровнем управления?
BarberXP Доцент Клин, МО 1.1K 419
Отв.5616  19 Окт. 16, 15:52, через 18 мин
Подскажите, господа, в какой строке нужно поменять значение на 255 если BEEPер с низким уровнем управления?Pauedi, 19 Окт. 16, 17:35
[сообщение #12285934]
Pauedi Бакалавр Добруш 69 16
Отв.5617  19 Окт. 16, 16:00, через 9 мин
В чем проблема? Не компилируется скетч
Arduino: 1.6.11 (Windows 7), Плата: "Arduino / Genuino Мега или Мега 2560, ATmega2560 (Mega 2560)"

Скрытый текст
D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 757: 0: предупреждение:" PRESS_SELECT "переопределены

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 748: 0: примечание: это место предыдущего определения

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 758: 0: предупреждение:" PRESS_RIGHT "переопределены

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 749: 0: примечание: это место предыдущего определения

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 759: 0: предупреждение:" PRESS_LEFT "переопределены

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 750: 0: примечание: это место предыдущего определения

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 760: 0: предупреждение:" PRESS_UP "переопределены

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 751: 0: примечание: это место предыдущего определения

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 761: 0: предупреждение:" PRESS_DOWN "переопределены

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: 752: 0: примечание: это место предыдущего определения

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: В функции 'ничтожной настройки ()':

HelloDistiller341-1i: 1143: ошибка: 'zero_crosss_int' не был объявлен в этой области

HelloDistiller341-1i: 1259: ошибка: 'my_lcdprint' не был объявлен в этой области

HelloDistiller341-1i: 1282: ошибка: 'writeEEPROM' не был объявлен в этой области

HelloDistiller341-1i: 1299: ошибка: 'readEEPROM' не был объявлен в этой области

HelloDistiller341-1i: 1337: ошибка: 'GetPhonePDU' не был объявлен в этой области

HelloDistiller341-1i: 1343: ошибка: 'CloseAllKLP' не был объявлен в этой области

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: В функции 'пустота ScanKbd ()':

HelloDistiller341-1i: 2809: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 2819: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 3287: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 3308: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 3473: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 3497: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 3650: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 3799: ошибка: 'CloseAllKLP' не был объявлен в этой области

HelloDistiller341-1i: 3940: ошибка: 'SetAngle' не был объявлен в этой области

HelloDistiller341-1i: 4241: ошибка: 'SetAngle' не был объявлен в этой области

HelloDistiller341-1i: 4262: ошибка: 'SetAngle' не был объявлен в этой области

HelloDistiller341-1i: 4285: ошибка: 'DisplayData' не был объявлен в этой области

HelloDistiller341-1i: 4416: ошибка: 'CloseAllKLP' не был объявлен в этой области

HelloDistiller341-1i: 4559: ошибка: 'SetAngle' не был объявлен в этой области

HelloDistiller341-1i: 4857: ошибка: 'SetAngle' не был объявлен в этой области

HelloDistiller341-1i: 4878: ошибка: 'SetAngle' не был объявлен в этой области

HelloDistiller341-1i: 4900: ошибка: 'DisplayData' не был объявлен в этой области

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: В функции 'пустота ProcessTermostat ()':

HelloDistiller341-1i: 4979: ошибка: 'ProcessPIDTemp' не был объявлен в этой области

D: \ Р "РћРљРЈРњР • РќРўР« \ Р РμРєС,РёС "РёРєР ° С † РёСЏ \ HelloDistiller341-1i \ HelloDistiller341-1i.ino: В функции 'пустота ProcessTimerMaxPower ()':

HelloDistiller341-1i: 5039: ошибка: 'StateToSMS' не был объявлен в этой области

статус выхода 1
'Zero_crosss_int' не был объявлен в этой области

bengoor Доцент Кронштадт 1.8K 1.1K
Отв.5618  19 Окт. 16, 16:09, через 9 мин
Pauedi, для начала надо чтобы путь до папки со скетчем был полностью на латинице, у тебя русскими буквами.
Pauedi Бакалавр Добруш 69 16
Отв.5619  19 Окт. 16, 16:10, через 2 мин
Понял, спасибо.