простой датчик влажности для ванной комнаты

Тема в разделе "Глядите, что я сделал", создана пользователем Slaiterx, 25 июн 2016.

Метки:
  1. Slaiterx

    Slaiterx Гик

    с включением вытяжного вентилятора
    Код (C++):
    #include <DHT.h>
    #define DHTPIN A0 //нога для датчика влажности
    #define DHTTYPE DHT22 // DHT 22 (AM2302)
    DHT dht(DHTPIN, DHTTYPE);
    int ledPin = 13;//нога для реле или светодиода

    void setup () {
       delay(2000);
       dht.begin();
       pinMode(ledPin, OUTPUT);//конфигурируем выход
    }
    void loop () {
       // читаем влажность
      float h = dht.readHumidity();

      if(h >= 60 )digitalWrite(ledPin, HIGH);//если влажность больше  или равно 60% то включаем выход на 13 ноге
      else digitalWrite(ledPin, LOW);//если меньше выключаем выход
    }
     
     
  2. Limoney

    Limoney Гик

    // Подождать несколько секунд между измерениями
    delay(2000);
    loop();
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    #include <DHT.h>
    #define DHT_PIN  A0 // нога для датчика влажности
    #define LED_PIN  13 // нога для реле или светодиода
    #define HUMI     60 // порог срабатывания
    #define DHT_TYPE DHT22 // DHT 22 (AM2302)
    DHT dht(DHT_PIN, DHT_TYPE);

    void setup ()
    {
       pinMode(LED_PIN, OUTPUT); // конфигурируем пин как выход
       delay(2000);
       dht.begin();
    }

    void loop ()
    {
      digitalWrite(LED_PIN, dht.readHumidity() > HUMI));
      delay(2000);
    }
    ;)
     
  4. yul-i-an

    yul-i-an Гик

    С millis както практичней будет
    Код (C++):
    #include <DHT.h>
    #define DHT_PIN A0 //нога для датчика влажности
    #define LED_PIN 13 //нога для реле или светодиода
    #define currentHumi dht.readHumidity()
    #define upHumiLimit 60 //порог срабатывания
    #define DHT_TYPE DHT22 // DHT 22 (AM2302)
    DHT dht(DHT_PIN, DHT_TYPE);
    #define interval 2000//интервал замера
    unsigned long currentMillis;

    void setup ()
    {
        pinMode(LED_PIN, OUTPUT); // конфигурируем пин как выход
        dht.begin();
    }

    void loop ()
    {
    currentMillis = millis();//получаем текущий millis
    static unsigned long preMillis=currentMillis;
    if (currentMillis-preMillis>interval){//проверяем интервал
    preMillis = currentMillis;//запоминаем время для следующей проверки
    boolean state = 0;
    (currentHumi > upHumiLimit)? state=true: state=false;
       digitalWrite(LED_PIN, state);
    }
    //тут еще делаем много чего без задержки
    }
     
    Последнее редактирование: 25 июн 2016
  5. Slaiterx

    Slaiterx Гик

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

    Slaiterx Гик

    вот добавил потэнциометр для установки влажности
    Код (C++):
    #include <DHT.h>
    #define DHTPIN A0 //нога для датчика влажности
    #define DHTTYPE DHT22 // DHT 22 (AM2302)
    #define pot A1//нога потенциометра
    DHT dht(DHTPIN, DHTTYPE);
    int ledPin = 13;//нога для реле или светодиода

    void setup () {
       delay(2000);
       pinMode(pot, INPUT);
       dht.begin();
       pinMode(ledPin, OUTPUT);//конфигурируем выход
    }
    void loop () {
       // читаем влажность
      float h = dht.readHumidity();
     
      int x;
      x = (map(analogRead(A1), 0, 1023, 10, 90));
      //delay(50);
      if(h >= x )digitalWrite(ledPin, HIGH);//если влажность больше  или равно установленной потенциометром то включаем выход на 13 ноге
      else digitalWrite(ledPin, LOW);//если меньше выключаем выход
     
     
    }
     
  7. Tomasina

    Tomasina Сушитель лампочек Модератор

    ну не надо так писать. Пожалуйста. Это разрушает мой перфекционизм. :cool:
     
  8. Slaiterx

    Slaiterx Гик

    а как надо так
    #define LED_PIN 13
     
  9. Slaiterx

    Slaiterx Гик

    так будет по фэншую :)
    Код (C++):
    #include <DHT.h>
    #define DHTPIN A0 //нога для датчика влажности
    #define pot A1//нога потенциометра
    #define LED_PIN 13//нога для реле или светодиода
    #define DHTTYPE DHT22 // DHT 22 (AM2302)
    DHT dht(DHTPIN, DHTTYPE);


    void setup () {
       delay(2000);
       pinMode(pot, INPUT);
       dht.begin();
       pinMode(LED_PIN, OUTPUT);//конфигурируем выход
    }
    void loop () {
       // читаем влажность
      float h = dht.readHumidity();
     
      int x;
      x = (map(analogRead(A1), 0, 1023, 10, 90));
      if(h >= x )digitalWrite(LED_PIN, HIGH);//если влажность больше  или равно установленной потенциометром то включаем выход на 13 ноге
      else digitalWrite(LED_PIN, LOW);//если меньше выключаем выход
     
     
    }
     
  10. Slaiterx

    Slaiterx Гик

    Код (C++):
    #include <DHT.h>
    #define DHTPIN A0 //нога для датчика влажности
    #define pot A1//нога потенциометра
    #define LED_PIN 13//нога для реле или светодиода
    #define DHTTYPE DHT11 // DHT 22 (AM2302)
    DHT dht(DHTPIN, DHTTYPE);


    void setup () {
       Serial.begin(9600);
       delay(2000);
       pinMode(pot, INPUT);
       dht.begin();
       pinMode(LED_PIN, OUTPUT);//конфигурируем выход
    }
    void loop () {
      delay(2000);
       // читаем влажность
      float h = dht.readHumidity();
     
      int x;
      x = (map(analogRead(A1), 0, 1023, 10, 90));
      if(h >= x )digitalWrite(LED_PIN, HIGH);//если влажность больше  или равно установленной потенциометром то включаем выход на 13 ноге
      else digitalWrite(LED_PIN, LOW);//если меньше выключаем выход
     
      Serial.print("  Humidity =");
      Serial.print(h);
      Serial.print("  Humidity+- = ");
      Serial.print(x);
    }
     
    подумал как настраивать добавил вывод в сом порт
     
  11. ANV

    ANV Гуру

    Автономный датчик влажности без кода и Ардуин: http://www.tavika.ru/2015/06/gigrometr.html
    К стрелочке приделать кнопку для вентилятора и готово.
     
  12. yul-i-an

    yul-i-an Гик

    Для millis всё просто
    Код (C++):
    #define period_1 230//период для первого задания
    #define period_2 1000//период для второго задания
    unsigned long currentMillis;//переменная для текущего времени
    unsigned long prePeriod_1 = 0;//хранит время предыдущего выполнения period_1
    unsigned long prePeriod_2 = 0;//хранит время предыдущего выполнения period_2

    void setup(){
     
    }

    void loop(){
      currentMillis=millis();//получаем текущее время

      if(currentMillis-prePeriod_1>=period_1){//если подошол period_1
        prePeriod_1 = currentMillis;//сохраняем время для следующего цикла
        //тут что то делаем с периодичностью period_1
      }

      if(currentMillis-prePeriod_2>=period_2){//если подошол period_2
        prePeriod_2 = currentMillis;//сохраняем время для следующего цикла
        //тут что то делаем с периодичностью period_2
      }

    }