Помогите сделать метеостанцию

Тема в разделе "Arduino & Shields", создана пользователем Нериюс, 14 авг 2018.

Метки:
  1. Нериюс

    Нериюс Нуб

    На сегодняшний момент я пользуюсь arduino Uno и Ethernet W5100 вместе с датчиком температуры 18B20. И вот на сегодняшний момент хочу каким-то образом совместить два датчика 18B20 и DHT11. То есть получается один датчик для улицы 2 датчик для квартиры. Так как с программированием написания кода У меня есть сложности хотел спросить Может уже есть какие-нибудь готовые проекты по данному вопросу? И самое главное хотелось бы что все выводимые данные с двух датчиков выводились через веб-сервера на платье Ethernet W5100. Заранее огромное Спасибо всем кто может помочь по данному проекту.
     
  2. parovoZZ

    parovoZZ Гуру

    новое веяние?
    У меня на подоконнике на балконе лежит такой проект. Выходит на связь каждые 10 секунд и уже год сцука не может разрядить батарейку 123.
    Впрочем, в тырнетах таких говнопроектов полно.
     
  3. DetSimen

    DetSimen Guest

    они прекрасно совмещаются, только если 18В20 работает, а DHT11 лежит в мусорном ведре.... Только так.
     
    NikitOS и parovoZZ нравится это.
  4. Airbus

    Airbus Радиохулиган Модератор

    Где купить такую батарейку чтобы Ардуина год на ней работала?Да ещё 123.Она ж 3 вольта.Как у Вас Ethernet W5100 от неё работает?Ему ж 5 вольт надо?
     
    Последнее редактирование: 14 авг 2018
    Mitrandir и Limoney нравится это.
  5. Нериюс

    Нериюс Нуб

    Задача простая. Использовать солнечные панели и литий-ионный аккумулятор. Автономность гарантированная.
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Был тут один проект на Blynk.Есть посложнее.Ненужные датчики закоментировать/убрать или просто не подключать.Хотя мне больше нравиться Blynk.Если бы я делал то на нём.
     
  7. parovoZZ

    parovoZZ Гуру

    В ходе реализации проекта решено было отказаться от всяких проводов. Сейчас вымучиваю энергоэффектиную схему на солнечных батареях и ионисторе.
    А если есть Ethernet, то здесь напрашивается PoE.
     
  8. AlexVS

    AlexVS Гик

    Что вы имете под солнечной батареей? Солнечная панелька + аккум + контроллер заряда?
    Или все же просто солнечная панелька?
    Если второе - то в чем проблема соединить их (панельку и ионистр, если конечно панелька 5ти вольтовая)?
     
  9. parovoZZ

    parovoZZ Гуру

    А что можно ещё иметь ввиду под солнечной батареей)))???

    соединить - проблемы вообще нет. Проблема заставить их эффективно работать с полной отдачей.
     
  10. Airbus

    Airbus Радиохулиган Модератор

    Вот нашёл интересный проект для Esp-8266 и Blynk.То что нужно ТС и немного больше.Есть управление релюхой.Есть оповещение от датчика движения.Если не нужно то всю эту Лабуду подключать не надо и в Блинке на Смартфоне не задействовать.Или в коде ненужное убрать/закоментировать.К сожалению ссылку на Сайт Автора потерял и найти не могу.Но скетч рабочий вчера погонял-мне понравилось.Мой для DHT и DS18b20 наподобие только проще.
    Код (C++):
    #include <ESP8266WiFi.h>
    #include <BlynkSimpleEsp8266.h>
    #include <SimpleTimer.h>
    #include <OneWire.h>
    #include <SPI.h>
    #include <Ethernet.h>
    //#include <BlynkSimpleEthernet.h>
    #include <DallasTemperature.h>
    #include <WidgetRTC.h>
    #include <dht11.h>
    dht11 DHT;

    // определение входов/выходов на плате ESP8266 (ESP-12F/E)
    #define DHT11_PIN 12  // gpio12 датчик темп. DHT-11
    #define ONE_WIRE_BUS 13 // gpio13 датчик температуры DS2B18 или куча датчиков
    #define Light_PIN 4  // gpio4 рэле на включение света
    #define Electro_PIN 15  // gpio15 рэле на выключение розетки
    #define PIR_PIN 5 // gpio5 // определение пина на выход датчика движения HC-SR501
    #define BLYNK_MAX_SENDBYTES 600 // увеличить размер сообщений (по умолчанию 128)

    // цвета виджетов на смартфоне
    // здесь все просто – каждые 2 цифры в 16-тиричном коде соответствуют R,G и B
    // кодировки цвета, я в CorelDraw окрасил прямоугольник в нужный цвет
    // записал значения R,G и B, перевел в 16-тиричный код
    #define BLYNK_GREEN     "#23C48E"
    #define BLYNK_BLUE      "#04C0F8"
    #define BLYNK_YELLOW    "#ED9D00"
    #define BLYNK_RED       "#D3435C"
    #define BLYNK_DARK_BLUE "#5F7CD8"
    #define BLYNK_WHITE     "#FFFFFF"
    #define BLYNK_CYAN      "#99F7F1"
    #define BLYNK_YELLOW_L  "#E7F799"
    #define BLYNK_ROSE      "#F7B599"
    #define BLYNK_FIOLET    "#F799F2"
    #define BLYNK_GREEN_L   "#99F7B4"

    OneWire oneWire(ONE_WIRE_BUS);  // привязка OneWare-коммуникации к пину на плате
    DallasTemperature sensors(&oneWire); // привязка датчиков DS2B18 к шине OneWare

    // персональные данные
    char auth[] = "------------------------";   //код авторизации в Blynk
    char ssid[] = "------------------";  //название вашей сети Wi-Fi
    char pass[] = "------------";   //пароль вашего Wi-Fi

    SimpleTimer timer;
    WidgetRTC rtc; // инициализируем виджет часов реального времени

    // все переменные по свету, сигнализации и датчика движения HC-SR501
    bool flagAlarm = false; // произошло проникновение (сигнал с датчика)
    bool flagSetAlarm = false; // постановка на сигнализацию (сигнал с выджета "кнопка" на смартфоне)
    bool flagAlarmPrevious = false; // состояние по фронтам сигнала от датчика движения
    bool flagLightOn = false; // свет в корридоре постоянно включить (сигнал с выджета "кнопка" на смартфоне)
    bool isFirstConnect = true;
    bool LIG = false;
    int lightLev;

    BLYNK_CONNECTED()// Если установили связь первый раз, то синхонезируем все виджеты
    {
      rtc.begin();
      if (isFirstConnect) {
        Blynk.syncAll(); // синхонезируем все виджеты

       
    if (year() != 1970) {
        // Составляем строки с временем и датой и добовляем их к сообщению
        String currentTime = String(hour()) + ":" + minute() + ":" + second();
        String currentDate = String(day()) + "/" + month() + "/" + year() + " ";
        String Notif_first = "Оборудование Запущено  " + currentDate + " " + currentTime;
        Blynk.notify(Notif_first);
        isFirstConnect = false;
        }
      }
    }

    void setup()
    {
      Serial.begin(9600); // See the connection status in Serial Monitor
      Blynk.begin(auth, ssid, pass);
      sensors.begin();
      pinMode(Light_PIN,OUTPUT);
      pinMode(Electro_PIN,OUTPUT);
      pinMode(PIR_PIN,INPUT);
      setSyncInterval(10*60);
      timer.setInterval(5000L, sendUptime); // задаем 5 сек.
      }

    BLYNK_WRITE(V0) // Считываем состояние кнопки "Alarm_On"
    {
    if (param.asInt() == 1)
      {
      flagSetAlarm =true;
      Blynk.setProperty(V0,"onLabel","Объект на охране");
      Blynk.setProperty(V0,"color",BLYNK_RED);
      }
      else
      {
      flagSetAlarm =false;  
      Blynk.setProperty(V0,"offLabel","Снят с охраны");
      Blynk.setProperty(V0,"color",BLYNK_GREEN);
      Blynk.setProperty(V0,"label","Охрана Объекта");
      }
    }  //BLYNK_WRITE(V0)

    BLYNK_WRITE(V1) // Считываем состояние кнопки "включить свет"
    {
      if (param.asInt() == 1)
      {
      flagLightOn =true;
      Blynk.setProperty(V1,"onLabel","Свет горит");
      Blynk.setProperty(V1,"color",BLYNK_YELLOW_L);
      }
      else
      {
      flagLightOn =false;
      Blynk.setProperty(V1,"offLabel","Свет - auto mode");
      Blynk.setProperty(V1,"color",BLYNK_WHITE);
      }
    }  //  BLYNK_WRITE(V1)

    BLYNK_WRITE(V2) // Считываем состояние кнопки "выключить розетку"
    {
    if (param.asInt() == 1)
      {
      digitalWrite(Electro_PIN,HIGH); // выключаем розетку, поскольку контакты рэле Н.З.
      Blynk.setProperty(V2,"onLabel","Розетка отключена");
      Blynk.setProperty(V2,"color",BLYNK_RED);
      }
      else
      {
      digitalWrite(Electro_PIN,LOW);
      Blynk.setProperty(V2,"offLabel","Розетка включена");
      Blynk.setProperty(V2,"color",BLYNK_BLUE);
      }
    } //  BLYNK_WRITE(V2)

    BLYNK_WRITE(V3) // Считываем пороговую уставку уровня освещенности по которой включаем свет (при срабатывании датчика движения)
    {
      lightLev = param.asInt();
    } //  BLYNK_WRITE(V3)

    void readPIRSensor() // функция для считывания показаний датчика движения
    {
    if (digitalRead(PIR_PIN) == HIGH)
      {
      flagAlarm = true;
      }
      else
      {
      flagAlarm = false;
      }

    if ((flagAlarm) && (!flagAlarmPrevious))
        {
        flagAlarmPrevious = true;
        LIG = true;
        if (lightLev < analogRead(A0))
            {
            LIG = false;
            }
        if(flagSetAlarm)
            {
             // Составляем строки с временем и датой и добовляем их к сообщению
             String currentTime = String(hour()) + ":" + minute() + ":" + second();
             String currentDate = String(day()) + "/" + month() + "/" + year() + " ";
             String Notif = currentDate + " " + currentTime + " - проникновение";
             Blynk.notify(Notif);
             //String curMes = "Проникновение - " + currentTime;
             Blynk.setProperty(V0,"label",Notif);
            }
       }
    if ((!flagAlarm) && (flagAlarmPrevious))
      {
      flagAlarmPrevious = false;
      LIG = false;
      delay(200); //на всякий случай - время для восстановления параметров датчика освещенности после выключения света, на случай датчик движения выкл. и бысто вкл.
      }
    } // readPIRSensor

    // программа обработки иннформации от датчиков температуры
    // по заданному интервалу времени, у нас раз в 5 сек., см. строку 82 (поскольку датчик температуры DHT11 - тормознутый)
    void sendUptime()
    {
    //параметры отсылаем в Blynk
      Blynk.virtualWrite(10, DHT.temperature - 2); //virtual pin 10 - температура в корридоре
      Blynk.virtualWrite(11, DHT.humidity); // virtual pin 11 - влажность в корридоре
      Blynk.virtualWrite(12,analogRead(A0)); // virtual pin 12 освещенность в корридоре
     
      sensors.requestTemperatures(); // запрос от сенсоров ds2b18
      float tempAir = sensors.getTempCByIndex(0); // получение информ. от сенсора 1
      Blynk.virtualWrite(13, tempAir); // virtual pin 13 - температура на улице

      //float tempAir1 = sensors.getTempCByIndex(1);  //получение информ. от сенсора 2
      //Blynk.virtualWrite(14, tempAir1); // virtual pin 14 - температура в комнате
    }

    void loop()
    {
      Blynk.run(); // Initiates Blynk
      timer.run(); // Initiates SimpleTimer
      readPIRSensor();
    if (flagLightOn)
        {
        digitalWrite(Light_PIN,HIGH);//если мы из Blynk нажали клавишу вкл. свет - вкл. свет в безакцептном порядке
        }
      else
        {
        if (LIG)
           {
            digitalWrite(Light_PIN,HIGH); // включаем свет если сработал датчик движения и уровень освещенности меньше установленного в Blynk
           }
           else
           {
            digitalWrite(Light_PIN,LOW); // выключаем свет
           }
        }
      int  chk = DHT.read(DHT11_PIN); // чтение с сенсора DHT11
    }