Ардуино УНО с импульсным клапаном

Klat
Offline
Зарегистрирован: 26.11.2019

Подскажите, пожалуйста, как соединить Ардуино УНО с импульсным электроклапаном подачи воды DC3,6v-6,5v серии Z201 с 2 проводами (давление до 1МРа, длительность импульса 30мс, ток управления 500ма, сопротивление 9ом)? Принцип работы крана: подаем импульс -  вода потекла, меняем полярность питания кран закрывается.

rkit
Offline
Зарегистрирован: 23.11.2016

Любой модуль управления мотором постоянного тока.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

И развяжите по питанию - при включении-выключении будут броски напряжения, которые могут привести к перезагрузке ардуинки. В идеале - питать от разных блоков питания или принять меры для устранения помех.

rkit
Offline
Зарегистрирован: 23.11.2016

Не будут, не надо выдумывать.

lean_74
Offline
Зарегистрирован: 22.12.2015

такого двойного реле хватит, подключать по схеме электрозамка в авто.

Logik
Offline
Зарегистрирован: 05.08.2014

Klat пишет:

Подскажите, пожалуйста, как соединить Ардуино УНО с импульсным электроклапаном подачи воды DC3,6v-6,5v серии Z201 с 2 проводами (давление до 1МРа, длительность импульса 30мс, ток управления 500ма, сопротивление 9ом)? Принцип работы крана: подаем импульс -  вода потекла, меняем полярность питания кран закрывается.

Есть такой в хозяйстве, на аквастопе работает.

/*  АКВАСТОП - открытие электромагнитного клапана воды при включеном приборе */


/* Для защиты от частого клацанья */
#define  MIN_TIME_ON  25*3*60 //минимальное время включенного состояния
#define  MIN_TIME_OFF 25*1*60 //минимальное время отключенного состояния

/* Вход измерения */
#define  InpTT A1

/* Выводы управления */
#define  OUT1 3  // открывающий транзистор
#define  OUT2 2  // закрывающий транзистор

/* Пороговое значение тока */
#define  POROG_mA    400
/* Параметры измерительной схемы  */
#define  R_transform 220           // нагрузка трансформатора тока
#define  K_transform (10000/5)     // коэфф. трансформации
#define  K_ADC       (102400/256)  // единиц АЦП на 1 вольт

/* Расчет порогового значения на выходе АЦП*/
#define  POROG_ADC   ((K_ADC*POROG_mA/1000)*R_transform/K_transform)

/* Степень сглаживания, больше значение - сильней сгладит */
#define  BIX_EXP 6

/* Расчет порогового значения после сглаживания*/
#define  POROG (POROG_ADC<<BIX_EXP)

/* Время открытия клапана, время закрытия програмно не задаем 
   определяется разрядом конденсатора на клапан */
#define  TIME_OPEN 30

/*
  схема управлениия клапаном
 OUT1    120      
   ------[__]--Б   npn 500mA
 +5V           Э---,
   -------+----К   |
          |        |
          |  1к    |
          '--[__]--+ 
                   |   
 OUT2    120       |
    -----[__]--Б   |
            ,--Э   |   6v3 1000mkF
            |  К---+-----||----> (красный) ---------, 
 GND        | npn 500mA  +                         [ ] клапан
    --------+------------------> (черный)  ---------'
            
*/

  byte OutState;
  byte OldState;
  word Timer; 
  unsigned long SrMax;

boolean FirsStep;
void setup()
{
  Serial.begin(115200);
//  myOLED.begin();
  pinMode(13, OUTPUT);
  analogReference(INTERNAL);

  digitalWrite(OUT1,LOW);  
  digitalWrite(OUT2,LOW); 
  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT); 
  
//  myOLED.clrScr();
//  myOLED.setFont(SSD1306::FONT_SIZE_1);
  FirsStep=true;
  SrMax=0;
  OutState=0;
  OldState=0;
  
  for(byte i=20;i;i--)
  {
      digitalWrite(13,HIGH); delay(25); 
      digitalWrite(13,LOW); delay(25); 
  }
  
  Timer=68;  //1,5 секунда
  CloseK(); //закрываем при включении
  
  for(byte i=20;i;i--)
  {
      digitalWrite(13,HIGH); delay(25); 
      digitalWrite(13,LOW); delay(25); 
  }

}
void strmapU(long i, char* d)
{
 char s[6];

 ltoa(i, s, 10);

 for(char* p=s;*p;d++) {*d=*p;p++;}
}

//открываем клапан
void OpenK(void)
{
  digitalWrite(OUT2,LOW); 
  digitalWrite(OUT1,HIGH); 
  delay(TIME_OPEN); 
  digitalWrite(OUT1,LOW);  

}

//закрываем и держим   OUT2 до открытия в 1 
//для недопущения заряда конденсатора
void CloseK(void)
{
   digitalWrite(OUT2,HIGH); 
}

void loop()
{
  unsigned int AnMax;   
   
  AnMax=0;
   
  for (byte i=0;i<240;i++)
  {
    unsigned int AnInp = analogRead(InpTT);
    if (AnInp>AnMax) AnMax=AnInp;
    delayMicroseconds(100);
    if(FirsStep) Serial.println(AnInp);
  }
  
  /* Сглаживаем максимальніе значения мгновенного тока простім БИХ-фильтром */
  SrMax=SrMax-(SrMax>>BIX_EXP)+AnMax;

  byte CurrState = SrMax>POROG?1:0; 
  
  if (CurrState>2*POROG) 
       CurrState=2*POROG;
  
  if(Timer) //таймер еще не завершил отсчет с прошлого переключения
  {
    Timer--; 
    if (CurrState!=OldState) //переключение как несоответствие текущего и предыдущего
    {
       Timer=CurrState?MIN_TIME_ON:MIN_TIME_OFF; // продлим интервал
    }
  }
  else
  {
    if (CurrState!=OutState) //переключение как несоответствие текущего и выводимого
    {
       if(CurrState)
       { 
             OpenK();  
       }
       else
       {
             CloseK();  
       }
       
       OutState=CurrState;   //меняем состояние вывода
       Timer=CurrState?MIN_TIME_ON:MIN_TIME_OFF;
    }
  }
  
  OldState=CurrState;
  
  // светодиод отображает состояние выхода и таймера
  if(!(Timer&0x07))
  {
    byte out=OutState?HIGH:LOW;
    if((Timer&0x018)==0x08)
       out=!out;
    digitalWrite(13,out);  
  }
  
  FirsStep=false;
}

Схема там в коменте.

Klat
Offline
Зарегистрирован: 26.11.2019

Спасибо. А транзисторы какие лучше поставить?

Logik
Offline
Зарегистрирован: 05.08.2014

Вот не помню уже. Лет шесть как спаял, засунул между труб, слышу только как щелкает. Но чтото из хлама, типа кт815.