Не работает метеостанция

Тема в разделе "Arduino & Shields", создана пользователем WinTor228, 12 апр 2019.

  1. WinTor228

    WinTor228 Нерд

    Собрал метеостанцию и тперь появились проблемы. На дисплее отображается температура 999 градусов и 999% влажности. Также есть вторая часть, котрая стоит на улице. На дисплее вообще не отображается информация части на улице. Все правильно подсоединил. Проблема в датчиках? Если да то в каком именно? Может проблема в коде?
    Вот ссылка на проект:
    https://howtomechatronics.com/tutorials/arduino/arduino-wireless-weather-station-project/
     
  2. WinTor228

    WinTor228 Нерд

    Вот код части внутри:
    Код (C++):
    #include <U8g2lib.h>
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <dht.h>
    #include <DS3231.h>
    #include <Wire.h>
    #define dataPin 8 // DHT22 sensor
    dht DHT; // Creats a DHT object
    DS3231  rtc(SDA, SCL);
    U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
    RF24 radio(10, 9); // CE, CSN
    const byte address[6] = "00001";
    char text[6] = "";
    int readDHT22, t, h;
    String inTemp, inHum, outTemp, outHum;
    String rtcTime, rtcDate;
    int draw_state = 0;
    unsigned long previousMillis = 0;
    long interval = 3000;
    #define Temperature_20Icon_width 27
    #define Temperature_20Icon_height 47
    static const unsigned char Temperature_20Icon_bits[] U8X8_PROGMEM = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00,
      0xc0, 0xe1, 0x00, 0x00, 0xe0, 0xc0, 0x01, 0x00, 0x60, 0x80, 0xf9, 0x03,
      0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x79, 0x00,
      0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0xf9, 0x03,
      0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x8c, 0x79, 0x00,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0xf9, 0x03,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x79, 0x00,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0xf9, 0x03,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00,
      0x70, 0x9e, 0x03, 0x00, 0x38, 0x1e, 0x07, 0x00, 0x18, 0x3e, 0x0e, 0x00,
      0x1c, 0x3f, 0x0c, 0x00, 0x0c, 0x7f, 0x18, 0x00, 0x8c, 0xff, 0x18, 0x00,
      0x8e, 0xff, 0x38, 0x00, 0xc6, 0xff, 0x31, 0x00, 0xc6, 0xff, 0x31, 0x00,
      0xc6, 0xff, 0x31, 0x00, 0x8e, 0xff, 0x38, 0x00, 0x8c, 0xff, 0x18, 0x00,
      0x0c, 0x7f, 0x1c, 0x00, 0x3c, 0x1c, 0x0e, 0x00, 0x78, 0x00, 0x06, 0x00,
      0xe0, 0x80, 0x07, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x80, 0xff, 0x00, 0x00,
      0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    };
    #define Humidity_20Icon_width 27
    #define Humidity_20Icon_height 47
    static const unsigned char Humidity_20Icon_bits[] U8X8_PROGMEM = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
      0x00, 0x70, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00,
      0x00, 0xdc, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x86, 0x03, 0x00,
      0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x07, 0x00, 0x80, 0x03, 0x06, 0x00,
      0x80, 0x01, 0x0c, 0x00, 0xc0, 0x01, 0x1c, 0x00, 0xc0, 0x00, 0x18, 0x00,
      0xe0, 0x00, 0x38, 0x00, 0x60, 0x00, 0x30, 0x00, 0x70, 0x00, 0x70, 0x00,
      0x30, 0x00, 0xe0, 0x00, 0x38, 0x00, 0xc0, 0x00, 0x18, 0x00, 0xc0, 0x01,
      0x1c, 0x00, 0x80, 0x01, 0x0c, 0x00, 0x80, 0x03, 0x0e, 0x00, 0x80, 0x03,
      0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x07,
      0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06,
      0x63, 0x00, 0x00, 0x06, 0x63, 0x00, 0x00, 0x06, 0x63, 0x00, 0x00, 0x06,
      0xe3, 0x00, 0x00, 0x06, 0xc7, 0x00, 0x00, 0x06, 0xc6, 0x01, 0x00, 0x07,
      0x86, 0x03, 0x00, 0x03, 0x0e, 0x1f, 0x00, 0x03, 0x0e, 0x1e, 0x80, 0x01,
      0x1c, 0x00, 0xc0, 0x01, 0x38, 0x00, 0xe0, 0x00, 0x78, 0x00, 0x70, 0x00,
      0xf0, 0x00, 0x38, 0x00, 0xe0, 0x07, 0x1f, 0x00, 0x80, 0xff, 0x0f, 0x00,
      0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
    };
    void setup() {
      radio.begin();
      radio.openReadingPipe(0, address);
      radio.setPALevel(RF24_PA_MIN);
      radio.startListening();
      u8g2.begin();
      rtc.begin();
    }
    void loop() {
      if (radio.available()) {
        radio.read(&text, sizeof(text)); // Read incoming data
        outTemp = String(text[0]) + String(text[1]) + char(176) + "C"; // Outdoor Temperature
        outHum = String(text[2]) + String(text[3]) + "%"; // Outdoor Humidity
      }
      unsigned long currentMillis = millis();
      if (currentMillis - previousMillis > interval) {
        previousMillis = currentMillis;
        u8g2.firstPage();
        do {
          switch (draw_state ) {
            case 0: drawDate(); break;
            case 1: drawInTemperature(); break;
            case 2: drawInHumidity(); break;
            case 3: drawOutTemperature(); break;
            case 4: drawOutHumidity(); break;
          }
        } while ( u8g2.nextPage() );
        draw_state++;
        if (draw_state > 4) {
          draw_state = 0;
        }
      }
    }
    void drawDate() {
      String dowa = rtc.getDOWStr();
      dowa.remove(3);
      rtcDate = dowa + " " + rtc.getDateStr();
      u8g2.setFont(u8g2_font_timB14_tr);
      u8g2.setCursor(0, 15);
      rtcTime = rtc.getTimeStr(); // DS3231 RTC time
      rtcTime.remove(5);
      u8g2.print(rtcDate);
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(8, 58);
      u8g2.print(rtcTime);
    }
    void drawInTemperature() {
      readDHT22 = DHT.read22(dataPin); // Reads the data from the sensor
      t = DHT.temperature; // Gets the values of the temperature
      inTemp = String(t) + char(176) + "C";
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(24, 15);
      u8g2.print("INDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(inTemp);
      u8g2.drawXBMP( 0, 17, Temperature_20Icon_width, Temperature_20Icon_height, Temperature_20Icon_bits);
    }
    void drawInHumidity() {
      h = DHT.humidity; // Gets the values of the humidity
      inHum = String(h) + "%";
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(24, 15);
      u8g2.print("INDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(inHum);
      u8g2.drawXBMP( 0, 17, Humidity_20Icon_width, Humidity_20Icon_height, Humidity_20Icon_bits);
    }
    void drawOutTemperature() {
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(12, 15);
      u8g2.print("OUTDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(outTemp);
      u8g2.drawXBMP( 0, 17, Temperature_20Icon_width, Temperature_20Icon_height, Temperature_20Icon_bits);
    }
    void drawOutHumidity() {
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(12, 15);
      u8g2.print("OUTDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(outHum);
      u8g2.drawXBMP( 0, 17, Humidity_20Icon_width, Humidity_20Icon_height, Humidity_20Icon_bits);
    }
     
  3. WinTor228

    WinTor228 Нерд

    Вот код части снаружи:
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include "dht.h"
    #include <LowPower.h>
    #define dataPin 8 // DHT22 data pin
    dht DHT; // Creates a DHT object
    RF24 radio(10, 9); // CE, CSN
    const byte address[6] = "00001";
    char thChar[32] = "";
    String thString = "";
    void setup() {
      radio.begin();
      radio.openWritingPipe(address);
      radio.setPALevel(RF24_PA_MIN);
      radio.stopListening();
    }
    void loop() {
      int readData = DHT.read22(dataPin); // Reads the data from the sensor
      int t = DHT.temperature; // Gets the values of the temperature
      int h = DHT.humidity; // Gets the values of the humidity
      thString = String(t) + String(h);
      thString.toCharArray(thChar, 12);
      // Sent the data wirelessly to the indoor unit
      for (int i = 0; i <= 3; i++) {           // Send the data 3 times
        radio.write(&thChar, sizeof(thChar));
        delay(50);
      }
      // Sleep for 2 minutes, 15*8 = 120s
      for (int sleepCounter = 15; sleepCounter > 0; sleepCounter--)
      {
        LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
      }
    }
     
  4. Daniil

    Daniil Гуру

    Что автор отвечает?
     
  5. WinTor228

    WinTor228 Нерд

    Игнорирует меня
     
  6. Daniil

    Daniil Гуру

    В таком случае если доверяете автору, то проверяйте соединения и правильность кода.
     
  7. Airbus

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

    А ОНО вообще работало?
     
  8. WinTor228

    WinTor228 Нерд

    С самого начала не работал дисплей. Его починил и думал, что сейчас все заработает. Но нет... Потом оказалось что ардуино не видит или вообще не работают DHT22. Может нужно новые купить?
     
  9. Daniil

    Daniil Гуру

    Надо проверять по отдельности
     
  10. noevile

    noevile Гик

    это хлам, а не метеостанция. датчиками дшт22 разве что только баловаться. уличный домик у автора вообще не по феншую сделан. песка и пыли налетит туда мама не горюй. там конструкция другая совсем. датчика давления совсем нет. поскупились хотя бы бме280 взять. подключи датчики к ардуинке и загрузи стандартный скетч из примера для датчиков дшт. так исключишь неисправность датчиков. а вообще я бы по коду раскидал бы вывод в терминал инфы от датчиков и уже потом смотрел на каком этапе получается бяка.
    и вот такие строчки в скетче смущают : inTemp = String(t)+char(176)+"C";.
    я конечно же не эксперт сишечки, но как-то странно наблюдать складывание переменной типа стринг с переменной типа чар. надо бы затестить и посмотреть что ардуинка скажет на такую строчку. чёт спмому интересно уже стало.
     
  11. parovoZZ

    parovoZZ Гуру

    если на алике, то купишь такие же. Если хочешь оригинал, то не купишь - ибо дорого.

    бабла подкинь
     
  12. b707

    b707 Гуру

    Со Стрингом все там нормально

    непонятно другое, нафига вообще такие проекты повторять? Там кода сотня строк, неужели самому такое написать не по силам? - зато разберешься во всем и не будешь задавать вопросов на форумах "почему не работает?"
     
    Airbus и DetSimen нравится это.
  13. noevile

    noevile Гик

    Действительно нормально.

    Это не наш метод :D
     
  14. Airbus

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

    Есть гораздо проще и притом рабочие.Даже в примерах от библиотек.Даже тот же Blynk
     
  15. Maikl2017

    Maikl2017 Нуб

    Вообщем ранее запустил этот проект с танцами с бубном. Проблемы с которыми столкнулся.
    1. Активировал датчик через begin в setup
    2. Библиотека название DHT. h , вместо маленьких букв,надо посмотреть свои библиотеки как написано
    3.Ну и что то ещё ... просто не помню. Посмотрю дома и если не запустится отпишусь.
    4. Датчик лучше проверить на тестовом примере от DHT лучше ничего нет. Они кстати горят как спички от неправильного подключения питания ( перепутал однажды + и -)
    5.nrf24 лучше подключать через шилд небольшой для них - на нем сразу стабилизатор питания( они очень критичны к качеству питания) .
    6.Были траблы с библиотекой для часов тоже ( две разных библиотеки конфликтовали)
    7. Удачи в этом проекте... есть и получше в инете проекты. Здесь был интерес потестить растояние для 2,4 ГГц и расход по потреблению для выносного датчика в городе.