Проект на dfplayer mini

Тема в разделе "Глядите, что я сделал", создана пользователем Рокки1945, 14 дек 2020.

  1. Рокки1945

    Рокки1945 Гуру

    Здравствуйте!
    Устройство считывает показания датчиков температуры и влажность - 1 датчик на улице - DHT22 - дома, также с DHT22 считывается влажность. Добавил DS3231SN - для времени. В дальнейшем покащания конвертируются в голосовое сообщение и выводится при нажатии сенсорной кнопки на TP223.
    В проекте применил DFplayer mini - отличное устройство!
    В скетче оставил возможность снять показания с аналогового датчика 1047 и измерение напряжения на аккумуляторе если будет желание сделать устройство автономным.
    Делал плату, к 14 выводу Ds3231 - подключен аккумулятор.
    Снимок.PNG
    Видео проекта
    Код (C++):
    /*-----------------------------------------------------------------------------------------*/
    #include <avr/sleep.h>
    #include <Wire.h>
    #include "DS3231.h"
    RTClib RTC;
    DS3231 Clock;
    #include "DHT.h"
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <SoftwareSerial.h>    // библиотека для обмена данными
    #include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini
    //SoftwareSerial mySerial(0,1); // RX, TX
    /*-----------------------------------------------------------------------------------------*/
    int buff_temp_street [166] = {-40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28,
    -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10,
    -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
    62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
    85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
    107, 108,109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125};
    /*-----------------------------------------------------------------------------------------*/
    bool flag = false; int temp_street = 0; int temp_home = 0; int humidity = 0;byte Hour = 15;byte Minute = 43;int analog = 0;float analog_read = 0; int analog_celoe = 0;int analog_dec = 0;
    /*-----------------------------------------------------------------------------------------*/
    OneWire oneWire(8);//18b20
    DallasTemperature ds(&oneWire);
    #define DHTPIN 7 //dht22
    #define DHTTYPE DHT22
    DHT dht(DHTPIN, DHTTYPE);
    /*-----------------------------------------------------------------------------------------*/
    void setup () {
      Serial.begin (9600);
      //mySerial.begin (9600);
      mp3_set_serial (Serial);
      mp3_set_volume (1); // громкость
      pinMode(0, INPUT_PULLUP);//подтяжка кнопки прерывания
      attachInterrupt(0, blink, FALLING);
      ds.begin();
      dht.begin();
      Wire.begin();
      Clock.setClockMode(false);
      Clock.setHour(Hour);
      Clock.setMinute(Minute);
      set_sleep_mode(SLEEP_MODE_PWR_DOWN); // PowerDown - самый экономный режим
      //sleep_mode(); // Переводим МК в сон
      //analogReference(EXTERNAL);
    }

    void loop () {

        if (flag)
            {
            ds.requestTemperatures();
            temp_street = round(ds.getTempCByIndex(0));// округлить
           
            for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == temp_street)
              {
                mp3_play (166);
                delay(1800);
                mp3_play (i);
                break;
              }
            }
              delay(2000);//заддержка чтобы успел сказать
              float t = dht.readTemperature();
              temp_home = round(t);
                   
            for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == temp_home)
              {
                mp3_play (167);
                delay(1500);
                mp3_play (i);
                break;
              }
            }
              delay(2000);//заддержка чтобы успел сказать
              float h = dht.readHumidity();
              humidity = round(h);
           
            for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == humidity)
              {
                mp3_play (168);
                delay(1500);
                mp3_play (i);
                break;
              }
            }
             delay(2000);//заддержка чтобы успел сказать
             DateTime now = RTC.now();
             Hour = now.hour(), DEC;
             Minute = now.minute(), DEC;
             for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == Hour)
              {
                mp3_play (169);
                delay(1500);
                mp3_play (i);
                break;
              }
            }
             delay(2000);//заддержка чтобы успел сказать
             for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == Minute)
              {
                mp3_play (170);
                delay(1800);
                mp3_play (i);
                break;
              }
            }
            /*
            delay(2000);//заддержка чтобы успел сказать
            analog = analogRead(A0);
            analog_read = analog*2*0.0032;
            analog_celoe = analog_read;
            analog_dec = (analog_read - analog_celoe)*100;
           
             for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == analog_celoe)
              {
                mp3_play (171);
                delay(2000);
                mp3_play (i);
                break;
              }
            }
              delay(2000);//заддержка чтобы успел сказать
             for (int i = 0; i < 166; i++)
            {
              buff_temp_street[i];
              if (buff_temp_street[i] == analog_dec)
              {
                mp3_play (172);
                delay(2000);
                mp3_play (i);
                break;
              }
            }
           
            Serial.println(analog_read);Serial.println(analog_celoe);Serial.println(analog_dec);*/

            delay(1200);
            flag = false;
            set_sleep_mode(SLEEP_MODE_PWR_DOWN);
            sleep_mode();
           
      }
    }

    void blink()
    {
      flag  = true;
    }

    //temp_street_sum = 0;
            //delay(30000);
    //float temp_street_float = 0; int temp_street_sum = 0;
            /*for (int i = 0; i != 100; i++)
            {
              temp_street  = analogRead(A0);
              temp_street_sum += temp_street;        
              }
            temp_street = temp_street_sum / 100;
            temp_street_float = ((temp_street * 0.0049) - 0.5)*100;
            //temp_street = round(temp_street_float);
            temp_street = temp_street_float;
            //Serial.print(temp_street);
            //Serial.print(temp_street_float); */

    /*
    void loop () {
      mp3_play (1); // проигрываем "mp3/0001.mp3"
      delay (6000); // пауза 60 секунд
      mp3_play (2); // проигрываем "mp3/0001.mp3"
      delay (6000); // пауза 60 секунд
      mp3_play (3); // проигрываем "mp3/0001.mp3"
      delay (6000); // пауза 60 секунд
    }
    int buff_temp_home [31] = {10, 11, 12, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40};

    int buff_humidity [101] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
    62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
    85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};

    */
     
    ИгорьК, Deniskyn и Tomasina нравится это.
  2. Deniskyn

    Deniskyn Гик

    Прикольно, но DHT показывает рандом.... посмотрите в сторону BMx датчиков, можно еще и давление прикрутить...
     
    Последнее редактирование: 16 дек 2020
  3. Рокки1945

    Рокки1945 Гуру

    хорошо спасибо
     
  4. Un_ka

    Un_ka Гуру

    Какой чип посерёдке? Atmega328?
     
  5. Рокки1945

    Рокки1945 Гуру

    Так да мега 328 - но и в 168 можно, вроде влазил по коду