Часы на ардуино с говорилкой, таймером, влажностью и температурой. 

LCD 1602 I2C 
DHT11 
DS1302
DFPlayer Mini 
Arduino NANO



На ардуино любят собирать всякие часы так как это такое самостоятельное домашнее устройство которое можно собрать проверить и радоваться.

Я тоже не прошел мимо и предлагаю вашему вниманию такую сборку, в часах есть интересная фича то что они будут говорить каждый час что нибудь прикольное например " шестнадцать часов, работать кожанные мешки" и прочие приколы музыка из фильмов нарезки, мемы и пр. все ограниченно только вашей фантазией.

Далее будет видео где я все подробно объяснил, как собирать , где взять корпус , чем прошивать, где озвучить голосовым синтезатором, где взять звуки и смонтировать свой аудиотрек для часов.

Вот схема для сборки, нажмите для увеличения.

Вся схема питается от зарядника телефона с током около 1 ампера.


Вот скетч для прошивки все подробно закомментировано.


#include <iarduino_RTC.h>  // подключаем библиотеку часов DS1302
iarduino_RTC time(RTC_DS1302,6,8,7);  // для модуля DS1302 - RST, CLK, DAT
#include <Wire.h>                             // подключаем библиотеку для устройств I2C 
#include <LiquidCrystal_I2C.h>       // подключаем библиотеку для дисплея
LiquidCrystal_I2C LCD(0x27,16,2);  // присваиваем имя дисплею
#include "SoftwareSerial.h" // подключаем библиотеку SoftwareSerial
#include "DFRobotDFPlayerMini.h" // подключаем библиотеку мп3 плеера
#include <dht11.h> // подключаем библиотеку датчика влажности и температуры
dht11 sensor;
#define DHT11PIN 2
const uint8_t PIN_button_SET  = 3;           // указываем номер вывода arduino, к которому подключена кнопка DOWN
const uint8_t PIN_button_UP   = 4;            // указываем номер вывода arduino, к которому подключена кнопка UP
const uint8_t PIN_button_DOWN = 5;           // указываем номер вывода arduino, к которому подключена кнопка SET
const uint8_t PIN_button_TMR  = 9;            // указываем номер вывода arduino, к которому подключена кнопка TMR
int SEC = 0; //переменная для таймера
int MIN = 0; //переменная для таймера
unsigned long timer;
byte w = 0;
SoftwareSerial mySoftwareSerial(10, 11); // 10 , 11 пин устанавливаем как SoftwareSerial RX, TX для плеера
DFRobotDFPlayerMini myDFPlayer;   // плеер мп3
void printDetail(uint8_t type, int value);
void setup() {
   delay(300);
   LCD.init();            // инициализация LCD дисплея
   LCD.backlight();  // включение подсветки дисплея
   time.begin();
    // time.settime(00, 22, 12, 24, 10, 21, 6); // установка времени, например  0  сек, 30 мин, 18 часов, 12, июня, 2020, дни недели(0-6)
  mySoftwareSerial.begin(9600);   //скорость порта
  if (!myDFPlayer.begin(mySoftwareSerial, true, false)) {  //Use softwareSerial to communicate with mp3.
    while(true){
      delay(0);   
   } }
  myDFPlayer.volume(28);  //громкость 0 to 30
  myDFPlayer.play(15); //трек играет при загрузке
  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ); // Устанавливаем эквалайзер с настройками джаз
 
   pinMode(PIN_button_SET,  INPUT_PULLUP);           // устанавливаем режим работы вывода PIN_button_SET,  как "вход"
   pinMode(PIN_button_UP,   INPUT_PULLUP);            // устанавливаем режим работы вывода PIN_button_UP,  как "вход"
   pinMode(PIN_button_DOWN,  INPUT_PULLUP);          // устанавливаем режим работы вывода PIN_button_DOWN, как "вход"
   pinMode(PIN_button_TMR,   INPUT_PULLUP);          // устанавливаем режим работы вывода PIN_button_TMR,  как "вход"
}
void loop() {
   
   if (millis() % 1000 == 0) {  // если прошла 1 секунда выводим время на дисплей
       LCD.setCursor(0,1);   //место на дисплее
       LCD.print(time.gettime("d m y "));   //выводим дату
       LCD.setCursor(0,0);  //место на дисплее
       LCD.print(time.gettime("H:i:s"));   //выводим время
       int chk = sensor.read(DHT11PIN); // читаем датчик влажности и температуры
       LCD.setCursor(9,1);  //место на дисплее
       LCD.print("B");   //выводим знак влажность
       LCD.setCursor(10,1);  //место на дисплее
       LCD.print(sensor.humidity); //выводим влажность
       LCD.setCursor(13,1);  //место на дисплее
       LCD.print("t"); //выводим знак температуры
       LCD.setCursor(14,1);  //место на дисплее
       LCD.print (sensor.temperature); //выводим температуру
      delay(1);

   

      
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==8){    // если совпали часы
             myDFPlayer.play(1);  // воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==9){    // если совпали часы
             myDFPlayer.play(2);  // воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==10){    // если совпали часы
             myDFPlayer.play(3);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}    
       if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==11){    // если совпали часы
             myDFPlayer.play(4);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==12){    // если совпали часы
             myDFPlayer.play(5);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==13){    // если совпали часы
             myDFPlayer.play(6);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==14){    // если совпали часы
             myDFPlayer.play(7);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==15){    // если совпали часы
             myDFPlayer.play(8);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==16){    // если совпали часы
             myDFPlayer.play(9);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==17){    // если совпали часы
             myDFPlayer.play(10);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
              
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==18){    // если совпали часы
             myDFPlayer.play(11);  //  воспроизвести трек()
             LCD.backlight(); // включить подсветку
}}}
      if(time.seconds==0){                  // если в текущем времени 0 секунд
        if(time.minutes==00){     // если совпали минуты
          if(time.Hours==19){    // если совпали часы
             myDFPlayer.play(12);  //  воспроизвести трек()
             LCD.noBacklight(); // отключить подсветку
}}}
      if(time.seconds==0){     //  новый год , если в текущем времени 0 секунд
        if(time.minutes==55){     // если совпали минуты
          if(time.Hours==23){    // если совпали часы
            if(time.day==31){    // если совпали дни 
              if(time.month==12){    // если совпали месяцы
               LCD.backlight(); // включить подсветку
                myDFPlayer.play(13);  //  воспроизвести трек()
               delay(10000);
                  LCD.noBacklight(); // отключить подсветку
}}}}}
       // if(time.weekday==3){    // если совпали дни недели 
}
      if(!digitalRead(PIN_button_DOWN)){                 
        time.settime(-1, (time.minutes==59?0:time.minutes+1), -1, -1, -1, -1, -1); // минуты плюс коррекция      
        delay(200); }
      if(!digitalRead(PIN_button_UP )){  
        time.settime(-1, (time.minutes==0?59:time.minutes-1), -1, -1, -1, -1, -1);  // минуты минус коррекция
        delay(200);} 
      if(!digitalRead(PIN_button_SET)){ // Уменьшение громкости
      myDFPlayer.volumeDown(); 
      LCD.setCursor(13,0); 
      LCD.print("3B-");
            delay(200);  
      }
   if(!digitalRead(PIN_button_TMR )){  //таймер по нажатию кнопки TMR
      MIN = MIN + 1;    // прибавляются минуты ( в счетчике не используются)
      SEC = SEC + 60;    // прибавляются секунды
      LCD.setCursor(9,0);  // место на дисплее
      LCD.print("TMP     "); // отображаем тмр и пробелы
      LCD.setCursor(13,0);  // место на дисплее
      LCD.print(MIN);  // отображаем минуты при нажатии 
      delay(200);
  }
     if (SEC < 1 ) { SEC = 1; }   // костыль чтоб таймер в минус не убегал
     if (millis() - timer > 999) {   // каждые 999 милисекунд
         timer = millis();
         SEC = SEC - 1;           // вычитаем 1 секунду
         LCD.setCursor(9,0);      // место на дисплее
         LCD.print("TMP     ");   // отображаем тмр и пробелы
         LCD.setCursor(13,0);    // место на дисплее
         LCD.print(SEC);        // отображакм секунды
      
      if (SEC == 1) {   // когда на таймере остается одна секунда
          MIN = 0 ; 
          myDFPlayer.play(14);  //запуск трека по таймеру
  }
   } 
    } 

            Видео про данные часы. 


         Вот архив со скетчем, библиотекой, схемой.

         

 Полезные ссылки
https://www.softportal.com/software-12584-audacity.html аудиомонтаж
https://zvukogram.com/speech/ озвучка бот максим и др.
https://texttospeech.ru озвучка бот максим и др.
https://zvukipro.com/529-zvuki-mem.html Сборник звуков и аудио эффектов
https://lesson.iarduino.ru/page/urok-17-podklyuchenie-mini-mp3-pleera-k-arduino/ DFPlayer Mini  
https://focma.com/dfplayer-mini/  DFPlayer Mini 
https://voltiq.ru/ds1302-rtc-and-arduino/  DS1302 модуль часов
https://arduinomaster.ru/datchiki-arduino/datchiki-temperatury-i-vlazhnosti-dht11-dht22/ датчик DHT11 
https://arduinomaster.ru/datchiki-arduino/lcd-i2c-arduino-displey-ekran/ LCD 1602 I2C

      

      

      

Комментарии

  1. сделайте пожалуйста кнопки для настройки времени даты
    и прошивку по дисплей 2004

    ОтветитьУдалить

Отправить комментарий