Часы на ардуино с говорилкой, таймером, влажностью и температурой.
LCD 1602 I2CDHT11DS1302DFPlayer MiniArduino NANO
На ардуино любят собирать всякие часы так как это такое самостоятельное домашнее устройство которое можно собрать проверить и радоваться.
Я тоже не прошел мимо и предлагаю вашему вниманию такую сборку, в часах есть интересная фича то что они будут говорить каждый час что нибудь прикольное например " шестнадцать часов, работать кожанные мешки" и прочие приколы музыка из фильмов нарезки, мемы и пр. все ограниченно только вашей фантазией.
Далее будет видео где я все подробно объяснил, как собирать , где взять корпус , чем прошивать, где озвучить голосовым синтезатором, где взять звуки и смонтировать свой аудиотрек для часов.
Вот схема для сборки, нажмите для увеличения.
Вся схема питается от зарядника телефона с током около 1 ампера.
Вот скетч для прошивки все подробно закомментировано.
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); //запуск трека по таймеру
}
}
Видео про данные часы.
Вот архив со скетчем, библиотекой, схемой.
Будем собирать! Спасибки.
ОтветитьУдалитьсделайте пожалуйста кнопки для настройки времени даты
ОтветитьУдалитьи прошивку по дисплей 2004