Некорректная отработка вентилятора
- Войдите на сайт для отправки комментариев
Есть проект:
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);}
}
Я новичек, но может поможет. Ошибку вижу в проверке условий, луп крутится быстро, может не успевает состояние измениться и он скачет ВКЛ\ВЫКЛ, а кулер достаточно инертный.
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) }без изменений :(
Я новичек, но может поможет. Ошибку вижу в проверке условий, луп крутится быстро, может не успевает состояние измениться и он скачет ВКЛ\ВЫКЛ, а кулер достаточно инертный.
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) }Без изменений :(
что в сериал выводит, и выводит вообще?
что в сериал выводит, и выводит вообще?
Выводит кореектные значения в сантиметрах - если 10, то 10, если 50, то 50
реле, щелкает ?
реле, щелкает ?
У меня твердотельное, оно не щелкает, но загорается по условию программы индикатор (лампочка на нем)
реле какое? может оно только для переменки предназначено
реле какое? может оно только для переменки предназначено
https://ru.aliexpress.com/item/5V-2-Channel-OMRON-SSR-High-Level-Solid-S...
у него на нагрузку можно вешать только переменку
у него на нагрузку можно вешать только переменку
И как быть? что мне на выходе реле еще нужно поставить?
я тоже напоролся,давно, включалось а при пропадании управляющего сигнала, так и не выключалось (залипало)
12 постоянка
менять
менять
релешку менять? если есть примеры скинь пожалуйста
http://zelectro.cc/relayModule
спасибо за помощь, товарищи!
вентилятор какой ток потребляет? может проще будет транзистор поставить
вентилятор какой ток потребляет? может проще будет транзистор поставить
0,4 А обычный кулер 120 мм для ПК
вентилятор какой ток потребляет? может проще будет транзистор поставить
даже 0,3 А потребляет, а не 0,4
tip122 даже греться небудет стоит 15-30руб
резистор на 1К поставить
tip122 даже греться небудет стоит 15-30руб
резистор на 1К поставить
Благодарю!