Ардуино УНО с импульсным клапаном
- Войдите на сайт для отправки комментариев
Втр, 26/11/2019 - 19:44
Подскажите, пожалуйста, как соединить Ардуино УНО с импульсным электроклапаном подачи воды DC3,6v-6,5v серии Z201 с 2 проводами (давление до 1МРа, длительность импульса 30мс, ток управления 500ма, сопротивление 9ом)? Принцип работы крана: подаем импульс - вода потекла, меняем полярность питания кран закрывается.
Любой модуль управления мотором постоянного тока.
И развяжите по питанию - при включении-выключении будут броски напряжения, которые могут привести к перезагрузке ардуинки. В идеале - питать от разных блоков питания или принять меры для устранения помех.
Не будут, не надо выдумывать.
такого двойного реле хватит, подключать по схеме электрозамка в авто.
Подскажите, пожалуйста, как соединить Ардуино УНО с импульсным электроклапаном подачи воды 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; }Схема там в коменте.
Спасибо. А транзисторы какие лучше поставить?
Вот не помню уже. Лет шесть как спаял, засунул между труб, слышу только как щелкает. Но чтото из хлама, типа кт815.