Некорректная отработка вентилятора

BepwyTa
Offline
Зарегистрирован: 04.04.2017

Есть проект:

Arduino Nano, реле твердотельное, макетная плата, ультразвуковой дальномер HC-SR04, блок питания 12В для питания вентилятора через реле.

Проблема в том, что когда система запитана и работает и если датчик показывает значения меньше 20, то вентилятор не крутится (что и должен делать по условию), но когда значение становится больше 20, что по условию означает включение вентилятора, то он не включается. И ещё когда ардуино запитана и дальномер видит значение большее 20, то при включении в сеть вентилятора, он включается, а когда значение становится меньшее 20, то выключается, но это только один раз происходит! Ничего больше не повторяется, вентилятор как буд-то бы отказывается работать в цикле, не пойму почему, вот листинг, помогите чем сможете:

const int trigPin = 12;
const int echoPin = 11;
const int Relay = 5;
long duration, cm; 

void setup()  {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(Relay, OUTPUT);
Serial.begin(2400);
}

void loop()  { 
digitalWrite(trigPin, LOW); 
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); 
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH); 
cm = duration * 1.7 * 0.01;
Serial.print(cm);
Serial.println();
delay (1000);

if (cm >= 20) 
{
  digitalWrite(Relay, HIGH);}
else
{
  digitalWrite(Relay, LOW);}
} 

 

 

xazard
Offline
Зарегистрирован: 04.01.2017

Я новичек, но может поможет. Ошибку вижу в проверке условий, луп крутится быстро, может не успевает состояние измениться и он скачет ВКЛ\ВЫКЛ, а кулер достаточно инертный.

if (cm >= 20)
{
  digitalWrite(Relay, HIGH);}
else
{
  digitalWrite(Relay, LOW);}
}

Вот так будет работать? 

if((cm>= 20) && (digitalRead(Relay) == 0)){ 

digitalWrite(Relay, HIGH);

} else if ((cm<= 20) && (digitalRead(Relay) == 1)){

digitalWrite(Relay, LOW)

}

 

BepwyTa
Offline
Зарегистрирован: 04.04.2017

без изменений :(

BepwyTa
Offline
Зарегистрирован: 04.04.2017

xazard пишет:

Я новичек, но может поможет. Ошибку вижу в проверке условий, луп крутится быстро, может не успевает состояние измениться и он скачет ВКЛ\ВЫКЛ, а кулер достаточно инертный.

if (cm >= 20)
{
  digitalWrite(Relay, HIGH);}
else
{
  digitalWrite(Relay, LOW);}
}

Вот так будет работать? 

if((cm>= 20) && (digitalRead(Relay) == 0)){ 

digitalWrite(Relay, HIGH);

} else if ((cm<= 20) && (digitalRead(Relay) == 1)){

digitalWrite(Relay, LOW)

}

 

 

Без изменений :(

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

что в сериал выводит, и выводит вообще?

BepwyTa
Offline
Зарегистрирован: 04.04.2017

xDriver пишет:

что в сериал выводит, и выводит вообще?

Выводит кореектные значения в сантиметрах - если 10, то 10, если 50, то 50

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

реле, щелкает ?

BepwyTa
Offline
Зарегистрирован: 04.04.2017

BepwyTa
Offline
Зарегистрирован: 04.04.2017

xDriver пишет:

реле, щелкает ?

У меня твердотельное, оно не щелкает, но загорается по условию программы индикатор (лампочка на нем)

evgta
Offline
Зарегистрирован: 02.09.2016

реле какое? может оно только для переменки предназначено

BepwyTa
Offline
Зарегистрирован: 04.04.2017

evgta пишет:

реле какое? может оно только для переменки предназначено

https://ru.aliexpress.com/item/5V-2-Channel-OMRON-SSR-High-Level-Solid-S...

evgta
Offline
Зарегистрирован: 02.09.2016

у него на нагрузку можно вешать только переменку

BepwyTa
Offline
Зарегистрирован: 04.04.2017

evgta пишет:

у него на нагрузку можно вешать только переменку

И как быть? что мне на выходе реле еще нужно поставить?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я тоже напоролся,давно, включалось а при пропадании управляющего сигнала, так и не выключалось (залипало)

12 постоянка 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

менять

BepwyTa
Offline
Зарегистрирован: 04.04.2017

xDriver пишет:

менять

релешку менять? если есть примеры скинь пожалуйста

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
BepwyTa
Offline
Зарегистрирован: 04.04.2017

спасибо за помощь, товарищи!

evgta
Offline
Зарегистрирован: 02.09.2016

вентилятор какой ток потребляет? может проще будет транзистор поставить

BepwyTa
Offline
Зарегистрирован: 04.04.2017

evgta пишет:

вентилятор какой ток потребляет? может проще будет транзистор поставить

 0,4 А обычный кулер 120 мм для ПК

BepwyTa
Offline
Зарегистрирован: 04.04.2017

evgta пишет:

вентилятор какой ток потребляет? может проще будет транзистор поставить

даже 0,3 А потребляет, а не 0,4

evgta
Offline
Зарегистрирован: 02.09.2016

tip122 даже греться небудет стоит 15-30руб

резистор на 1К поставить

 

BepwyTa
Offline
Зарегистрирован: 04.04.2017

evgta пишет:

tip122 даже греться небудет стоит 15-30руб

резистор на 1К поставить

 

Благодарю!