Как закрыть датчик влажности при определенной влажности

Я использую датчик влажности и температуры dht на arduino и хотел бы добавить реле и зуммер в систему. Что я хотел бы сделать, так это закрыть его через зуммер и при влажности 65% запустить зуммер. Код, который я использую:

/* DHT-22 sensor with 12c 16x2 LCD with Arduino uno
   Temperature and humidity sensor displayed in LCD
   based on: http://www.ardumotive.com/how-to-use-dht-22-sensor-en.html and
   https://www.ardumotive.com/i2clcden.html for the i2c LCD library by Michalis Vasilakis
   Recompile by adhitadhitadhit
   Notes: use LCD i2c Library from link above, i'm not sure why but new Liquidcristal library from Francisco Malpartida  isn't working for me
   other thing, check your */

//Libraries
#include <dht.h> // sensor library using lib from https://www.ardumotive.com/how-to-use-dht-22-sensor-en.html
#include <LiquidCrystal_I2C.h> // LCD library using from  https://www.ardumotive.com/i2clcden.html for the i2c LCD library 
#include <Wire.h> 
dht DHT;

//Constants
#define DHT22_PIN 2     // DHT 22  (AM2302) - pin used for DHT22 
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 after finding it from serial monitor (see comment above) for a 16 chars and 2 line display

//Variables
float hum;  //Stores humidity value
float temp; //Stores temperature value

void setup()
{
    Serial.begin(9600);
    lcd.init();                      // initialize the lcd 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setBacklight(HIGH);
}

void loop()
{
    int chk = DHT.read22(DHT22_PIN);
    //Read data and store it to variables hum and temp
    hum = DHT.humidity;
    temp= DHT.temperature;
    //Print temp and humidity values to LCD
    lcd.setCursor(0,0);
    lcd.print("Humidity: ");
    lcd.print(hum);
    lcd.print("%");
    if (humidity <= 50) 
{ 
   digitalWrite(ledPin, HIGH); 
   digitalWrite(buzzer, HIGH); 

 } 

 else 

 { 

 digitalWrite(ledPin, LOW); digitalWrite(buzzer, LOW);
    
    lcd.setCursor(0,1);
    lcd.print("Temp: "); 
    lcd.print(temp);
    lcd.println("Celcius");
    delay(2000); //Delay 2 sec between temperature/humidity check.
}

Как добавить реле и зуммер, чтобы закрыть его с помощью зуммера, работающего при значении влажности 65%?

, 👍0

Обсуждение

Знаете ли вы, как реализовать необходимые подзадачи (реле управления/зуммер, сравнение значений)? Если да, то где именно у вас есть проблемы?, @Sim Son

Да, я сделал это один раз, но на этот раз я изменил свое ЖК-соединение с разъемом. Определение зуммера и реле дает ошибку на ide. У меня есть официальный код arduino. Поэтому мне нужно адаптировать его к вышеуказанному коду, который обеспечивает влажность и температуру на ЖК-дисплее, @krank s

Хм, нам нужно увидеть код, который *не* работает и с которым у вас есть проблемы... как вы на самом деле "определяете" реле/зуммер? Вам просто нужно установить нужные контакты на выходы и управлять ими с помощью "digitalWrite ()" и " tone ()", соответствующих некоторой логике, которую вы должны реализовать. Не видя, что вы делаете, мы не можем знать, что вы делаете неправильно., @Sim Son

у вас нет кода, который говорит: "если влажность равна 65%, то звоните зуммер"., @jsotola

Я бы также предложил вам включить вашу схему, а не нечеткий рисунок, который очень поможет., @Gil

Для зуммера я добавил if (влажность <= 50) { digitalWrite(ledPin, HIGH); digitalWrite(зуммер, ВЫСОКИЙ); } еще { digitalWrite(ledPin, LOW); digitalWrite(зуммер, НИЗКИЙ); } Но он обеспечивает ошибку. Мое соединение выглядит следующим образом: LCD: SCL to A5 CDA до A4 GND к GND VCC до 5V Данные DHT в D2 VCC до 5V GND к GND Зуммер: Данные до 7 GND к GND, @krank s

А) отредактируйте код в вопросе вместо того, чтобы публиковать фрагменты кода в комментариях. Б) какая ошибка?! В) хотя это, вероятно, не связано с аппаратным обеспечением, если вы хотите сообщить нам о своей схеме, вы должны нарисовать *принципиальную схему*., @Sim Son

Я загрузил информацию, которую вы просили. Я не мог решить, что такое релейное соединение, поэтому мне нужна ваша помощь в релейном соединении и коде., @krank s

Это релейный модуль или автономное реле?, @Sim Son

Это внешнее реле 12V. Я буду кормить его отдельно от arduino. Что я хочу, так это запустить зуммер при влажности 65% и закрыть систему через реле около 80% huımidity. Я знаю, что я не добавил код ретрансляции и библиотеку зуммера, потому что эта сторона полностью является той частью, которая мне нужна., @krank s

"ledPin" и "зуммер" не объявлены/не определены, и соответствующие контакты не настроены в качестве выходов. Я предполагаю, что черная точка на рисунке-это зуммер. Проблема здесь в том, что вы не должны подключать зуммер между Vin (подключенным к батарее 9V) и GPIO - **это поджарит arduino!** Что это за зуммер (datasheet)?, @Sim Son

Вы на самом деле Google для "arduino зуммер"/"arduino реле"? Есть тонны учебников там... те также показывают, как подключить все, @Sim Son

https://components101.com/misc/buzzer-pinout-working-datasheet, @krank s

да, я так и сделал. Но это не сработало. Как я уже упоминал, однажды я уже делал ту же систему, но я не стал бы использовать ЖК-дисплей IC12, и он испортил все :), @krank s

Обычно я являюсь разработчиком python и уже много лет не использую C#. В данный момент мне это кажется полной чушью., @krank s

да, КСТАТИ, я погуглил его. У меня есть проблема, где я должен добавить зуммер и релейные линии., @krank s

В настоящее время я могу показывать значения температуры и влажности на жидкокристаллическом дисплее. Другие стороны я развратил., @krank s

Можете ли вы порекомендовать свое решение по черновику и коду, если это возможно?, @krank s

Подумайте о модернизации вашего источника питания, батарея 9 В его не перережет. Кроме того, схема была бы большим подспорьем, эта вьющаяся штука трудно поддается интерпретации. Вы можете получить KiCad бесплатно, но приятно оставить пожертвование., @Gil

да, вместо этого я использую внешний адаптер 12 В., @krank s


1 ответ


Лучший ответ:

0

В этом коде:

void loop()
{
   sample temp and humidity;
   display temp;
   display humidity;

   if humidity <= 50
      LED on;
      buzzer on;
   else
      display temp
      wait 2 sec
   end
  • Отсутствует символ'}', чтобы закрыть if/else.
  • Почему вы показываете температуру дважды в цикле?
  • Где логика для реле и зуммера на 65%?
  • Номера выводов для светодиода и зуммера не определены.
  • Вывод светодиода и зуммера должен быть установлен в режим вывода в функции setup ().

Если я понимаю ваше описание, вам, вероятно, нужно что-то вроде следующего, в вашей функции цикла:

   if humidity <= 50
      LED on;
      buzzer on;
   else if hum >= 65%m
      close relay;
      buzzer on;
   end

Когда у меня возникает проблема с программной логикой, которая мне неочевидна, я записываю ее в псевдокод, как и выше. Как только я разберусь с логикой, то наберу код на C++ с правильным синтаксисом. Если я не понял ваших намерений в приведенном выше псевдокоде, я бы посоветовал вам делать то же самое, пока вы не поверите в то, что написали. Только после этого попытайтесь превратить его в рабочий код.

,

То, что я пропустил, было, кажется, добавлено функцией влажности в основную функцию void. Проверив c# , я решил эту проблему. Теперь система работает нормально., @krank s