Автоматика управления вентилятором в ванной

shizgara
Offline
Зарегистрирован: 03.07.2017

Добрый день.

Вопрос к знатокам.

Собрал простейшую схему на NANO V3 ATmega328, одноканальном релейном модуле, датчике движения (из комплекта Arduino), датчик температуры и влажности (то же из комплекта Arduino).

Написал простейший скеч при котором по условиям превышении температуры или влажности или если долго по времени детектируется движение, релейный модуль замыкается и тем самым сключается вентилятор вытяжки. Соответственно работает 3 минуты.

Вобщем собрал, спаял. Протестил. На колнке всё работает. В мониторинг порта данные идут на отлично, реле щёлкает как положено.

НО, стоит подключить на реле вентилятор и вся эта конструкция перестаёт отвечать по com порту, уходит в постоянную перезагрузку, вобщем полный неадекват.

Как только снимаю питание вентилятора с реле, всё опять как новенькое.

ПОМОГИТЕ. Что я делаю не так???????

Очень прошу помощи знающих людей.

 

ЗЫ Схему не рисую, всё до безобразия тупа и приметивно собранно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shizgara пишет:

ЗЫ Схему не рисую, всё до безобразия тупа и приметивно собранно.

Вот именно поэтому и не работает.

Давайте схему, не ленитесь. А также ссылку на Ваш модуль реле и датчики. Ну, и скетч, конечно.

shizgara
Offline
Зарегистрирован: 03.07.2017

Схема выглядит так. Сама ардуинка запитывается через USB (как нарисовать не знаю) от блока питания (или компьютера).

 

Скетч только вечером свогу выложить.

Но в скетче врятли дело, без подключения вентилятора то работает. Как только вентилятор со своими питание в схеме появляется, всё накрывается медным тазиком.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, что-то подобное я ожидал увидеть. Очевидно Ардуина питается в конечном счетё от той же розетки, что и мотор.

Подключите осциллограф к пинам +5В и Gnd Ардуины и посмотрите, что происходит в момент включения вентиллятора с питанием контроллера. Всё поймёте.

shizgara
Offline
Зарегистрирован: 03.07.2017

У меня нет осцелогрофа((((

Вот Вы же знаете ответ, подскажите.

Как исправить, что бы заработало?

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

от чего питается Ардуина ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shizgara пишет:

У меня нет осцелогрофа((((

Постарайтесь приобрести хотя бы полуигрушечный DSO138. Одна тысяча рублей ведь не разорит Вас, а поможе ещё не раз.

shizgara пишет:

Вот Вы же знаете ответ, подскажите.

Нет, не знаю. Предполагаю с большой долей вероятности, но точно не знаю. Необходимо проверить.

Давайте так, если у Вас нет осциллоргафа, найдите какой-нибудь аккумулятор на 8-16 вольт (автомобильный, от шуруповёрта, какой угодно на указанные напряжения).

Запитайте ардуину и датчики от аккумулятора (так чтобы они к розетке вообще никаким боком!) и проверьте. Если, как я предполагаю, беда с питанием, то в такой конфигурации всё должно заработать нормально.

После этого будет понятно куда копать дальше. А пока - надо либо подтвердить, либо исключить проблему с питанием.

Сделайте это.

shizgara
Offline
Зарегистрирован: 03.07.2017

Добрый день.

Спасибо что пытаетесь помочь, это сразу.

При экспериментах запитывал ардуино (nano) через юсб от ноутбука (ноут даже в розетку не втыкал).

Пока питание вентилятора не подключаю к реле, ардуинка в монитор порта пишет всю тестовую инфу (см. скетч), как только подключаю питание вентилятора, только первую строчку "DHTxx test!" и уходит в перезагрузку.

#include <DHT.h>
#define DHTPIN A5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

int vent = 13;
int light = 2;
int motion = 4;
int varvent;
int varlight;
int varmotion;
int varh;
int timeh;
int timem;
int timel;
int lightvar;
int i;
int alert;

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  pinMode(vent, OUTPUT);
  pinMode(light, INPUT);
  pinMode(motion, INPUT);
  dht.begin();
}

void loop() {
  delay(1000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("----------------------------------------------");
    Serial.println("\t");
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C\t");
    Serial.print("Light: ");
    Serial.print(digitalRead(light));
    Serial.println("\t");
    Serial.print("Motion: ");
    Serial.print(digitalRead(motion));
    Serial.println("\t");
    Serial.print("VENT: ");
    Serial.print(digitalRead(vent));
    Serial.println("\t");
    Serial.print("alert = ");
    Serial.print(alert);
    Serial.println("\t");
  }

 //условие по движению
  if (digitalRead(motion) == HIGH) 
  {
    timem++;
    Serial.print("------------------");
    Serial.println("\t");
    Serial.print("timem = ");
    Serial.print(timem);
    Serial.println("\t");
  }
  else
  {
    timem = 0;
  }

//условие по влажности или температуре
if (h >= 50 || t >= 35) 
  {
   timeh++;
    Serial.print("------------------");
    Serial.println("\t");
    Serial.print("timeh = ");
    Serial.print(timeh);
    Serial.println("\t"); 
  }
  else
  {
    timeh = 0;
  }


//условие по свету
  if (digitalRead(light) == HIGH) 
  {
    timel++;
    Serial.print("------------------");
    Serial.println("\t");
    Serial.print("timel = ");
    Serial.print(timel);
    Serial.println("\t");

    if (timel >= 10)
    {
      Serial.print("wate LIGHT OFF");
      Serial.println("\t");
      lightvar = 2;   //взвели по условию что свет был долго включен
      Serial.print("lightvar = ");
      Serial.print(lightvar);
      Serial.println("\t");
    }
  }
  else
  {
    timel = 0;
  }

//после выключения света включаем вентилятор

 if (lightvar == 2 && digitalRead(light) == LOW)
 {
  digitalWrite(vent, HIGH);
  Serial.print("VEN HIGH after light OFF");
  delay(30000);
  lightvar = 0;
 }


//защита от постоянной работы

if (alert >= 20)
{
  digitalWrite(vent, LOW);
  Serial.print("VEN LOW - ALERT");
  delay(6000000);
}



//ИТОГ

if (timeh >= 5 || timem >= 10)
  {
  digitalWrite(vent, HIGH);
  Serial.print("VEN HIGH after h% or motion");
  alert++;
  delay(30000);
  }
else
{
  digitalWrite(vent, LOW);
  alert = 0;
}


//конец 
}

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

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

SLKH
Offline
Зарегистрирован: 17.08.2015

Baks пишет:

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

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

 

shizgara
Offline
Зарегистрирован: 03.07.2017

SLKH пишет:

Baks пишет:

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

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

 

 

А в чём особенность 13 пина по сравнению с более другими?

SLKH
Offline
Зарегистрирован: 17.08.2015

shizgara пишет:

SLKH пишет:

Baks пишет:

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

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

 

 

А в чём особенность 13 пина по сравнению с более другими?

http://arduino.ru/Hardware/ArduinoBoardUno , ищем "13"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shizgara пишет:

При экспериментах запитывал ардуино (nano) через юсб от ноутбука (ноут даже в розетку не втыкал).

Пока питание вентилятора не подключаю к реле, ардуинка в монитор порта пишет всю тестовую инфу (см. скетч), как только подключаю питание вентилятора, только первую строчку "DHTxx test!" и уходит в перезагрузку.

Это ближе к делу. Значит, моё первоначальное предположение оказалось неправильным. А Вы "знаете - скажите" - не всё так просто! :)

Теперь более или менее понятно, что происходит (хотя глянуть осциллографом не помешало бы).

Вы на схеме не нарисовали откуда питаете модуль реле. Рискну предположить, что от пина 5В ардуины. Так? А саму ардуину от USB. Всё правильно?

И ещё один момент. (вопрос №1) Я правиьно понял, что если реле стоит без нагрузки (но подключено), то оно нормально щёлкает и всё работает как надо? Оно щелкает? Или всё работает без реле, а среле даже без нагрузки не работает? Обязательно ответьте на это. И если работает, то сделайте как Вам советовали - подключите лампу накаливания в качестве нагрузки и  (вопрос №2) - напишите как с ней

В любом случае, давайте подтвердим или исключим ещё одну гипотезу: возможно, в момент включения реле (а оно жрёт 70мА) происходит скачок напряжения, который убивает Ваш контроллер (вот тут бы осциллограф! Я Вам уже написал совсем недорогой полуигрушечный, но очень бы выручил - подумайте!). Попробуйте поставить достаточно большой (1000-10000 μF) конденсатор между Vcc и GND модуля реле (только полярность не перепутайте).

Жду результата эксперимента и ответов на вопросы №№1-2 выше.

shizgara
Offline
Зарегистрирован: 03.07.2017

Спасибо за помощь.

Всё верно, реле питаю от ардуинки.

По второму вопросу не совсем верно. Если в реле не подключать провода (физически в клемы реле) вентилятора. то всё таботает, реле щёлкает согласно программе. Питания точно хватат.

Проблема именно появляется в момент втыкания проводов вентилятора в клемы реле (хотя как я понимаю это же гальванически развязаная система).

Лампу подключу вечером, завтра отсчитаюсь.

Осцилограф заказал, но почта россии мсит не быстро)))

Если с лампочкой не прокатит (тоже будет сума сходить). попробую поставить конденсатор. Опять же отчёт только завтра.

Всем спасибо за советы.

sergey1q2w3e
Offline
Зарегистрирован: 06.04.2017

У самого стоит что-то подобное в ванной. Намучался я с этим щелкающим реле.
Проблема в том, что как раз таки "на коленке" всё работает, а с нагрузкой нет. Как я понял проблема вот в чем: в момент включения/отключения реле между контактами проскакивает искра, которая создает помеху. У меня так NRF24 зависал и намертво вешал ардуину за собой. Как решение можно использовать твердотельные реле или попробовать физически отвести МК от реле подальше(да и от вентилятора тоже не помешало бы, т.к. он сам по себе создает относительные помехи)

shizgara
Offline
Зарегистрирован: 03.07.2017

Всем дорый день.

Попробывал с лампочкой (60 ват, накаливания), история один в один - ардуинка виснет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Конденсатор?

shizgara
Offline
Зарегистрирован: 03.07.2017

ЕвгенийП пишет:

Конденсатор?

К сожалению не успел, слишком поздно приехал((((

Buldakov
Offline
Зарегистрирован: 17.01.2016

Поскольку осцилографа нет - попробуйте развязать питание Arduino и платы реле. У контроллера и реле земляные провода обьедините. контроллер питайте от одного 5в блока питания. Плату реле от другого блока питания. на 5в.  Вывод  +5в отдельных блоков питания между собой не соединять. Так не должно быть влияния реле на контроллер. В качестве блоков питания лучше использовать конечно не ноутбук, а две зарядки от телефона.