I. Giới thiệu
Bài viết này mình sẽ cùng các bạn làm một hệ thống máy phát nhạc tự động theo cài đặt. Công dụng của nó thì vô cùng hữu ích, như là phát thông báo nội dung cần nhắc theo giờ, hay phát nhạc thư giãn theo giờ nghỉ giải lao…
II. Chuẩn bị
+) Mạch C88
+) Nguồn cấp từ 7 đến 24V
+) Tủ điện nhựa gắn tường ML-12 (256x200x95mm)
+) Keypad 1x4 SMD
+) Module DFPlayer Mini MP3
+) Thẻ nhớ Micro SD
+) Jack Audio và 1 Chiếc Loa
+) Chân nguồn và dây cắm AC - 3
+) Dây điện đấ u mạch.
III. Sơ đồ
1. Sơ đồ khối:
2. Sơ đồ đấu nối
3. Hình ảnh thực tế
IV. Hoạt động
Hệ thống điều khiển có 4 nút nhấn: 1 (nút chuyển), 2 (nút giảm), 3 (nút tăng), 4 (nút xác nhận).
Để cài đặt: nhấn nút CHUYỂN để qua giao diện cài đặt -> tiếp theo ta có thể cài nhiều khung giờ phát nhạc, chế độ, thời gian khác nhau khi sử dụng 2 phím TĂNG/GIẢM và nhấn phím XÁC NHẬN để chuyển sang cài giờ và phút -> cuối cùng là chọn nhạc và chế độ ON/OFF. Như vậy là ta đã cài đặt xong.
Khi đến giờ đã cài đặt máy tự động phát bài hát đã chọn. Cài đặt tối đa là 30 khung giờ trên 1 ngày.
V. Chương trình điều khiển
Tải xuống thư viện: https://4dot0.net/upload/file/music_alarm_timer_c88.rar
Và để cùng thư mục với chương trình chính:
// ------- code -------- //
#include "Music_alarm_timer_C88.h"
DFRobotDFPlayerMini DFPlayer;
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
lcd.init();
lcd.backlight();
LiquidCrystal_I2C lcd (0x27, 16, 2);
// Cấu hình cho nút nhấn chiều vào
pinMode(nut_chuyen, INPUT);
pinMode(nut_giam, INPUT);
pinMode(nut_tang, INPUT);
pinMode(nut_chon, INPUT);
lcd.createChar(1, degree);
lcd.setCursor(4, 0);
lcd.print("Hen gio");
lcd.setCursor(0, 1);
lcd.print("thong bao chuong");
delay(2000);
lcd.clear();
if (! rtc.begin())
{
lcd.clear();
lcd.print("LOI!.");
while (1);
}
if (! rtc.isrunning())
{
lcd.clear();
lcd.print("LOI!..");
}
if (!DFPlayer.begin(Serial, true, false)) {
while (true);
}
// XOA DU LIEU EEPROM
// for (int i = 0; i < 512; i++) {
// EEPROM.write(i, 0);
// delay(5);
// }
// END XOA EEPROM
doc_eeprom();
DFPlayer.volume(30);
}
void loop () {
chuyen();
DateTime now = rtc.now(); //Trả về ngày & giờ hiện tại.
if (giao_dien == 0)// trạng thái ban đầu cho dem = 0
{
//lcd.clear();
for (int y = 1; y < 37; y ++)
{
cai_dat[y] = 0;
delayMicroseconds(800);
}
z = 0;
che_do = 1;
tg_thuc();
for (int i = 1; i < 37; i++)
{
delayMicroseconds(10);
// Xử lý báo nhạc
((eeprom_gio[i] == now.hour()) && (eeprom_phut[i] == now.minute()) && (eeprom_cd[i] == true) &&
(set_nhac[i] == 0)) ? DFPlayer.play(eeprom_nhac[i]), delay(1000), set_nhac[i] = 1 : false;
(eeprom_phut[i] != now.minute()) ? set_nhac[i] = 0 : false;
delay(2);
}
}
if (giao_dien == 1)
{
chon_khung_gio();
for (int c1 = 1; c1 < 37; c1 ++)
{
int c2 = c1 + 36;
int c3 = c1 + 73;
int c4 = c1 + 110;
set_che_do (c1, c1, c2, c3, c4);
delayMicroseconds(100);
}
}
if (giao_dien == 2)
{
lcd.setCursor(0, 0);
lcd.print("RESET:");
if (digitalRead(nut_chon) == 0)
{
for (int i = 0; i < 150; i++)
{
eeprom_gio[i] = 0;
eeprom_phut[i] = 0;
eeprom_cd[i] = 0;
eeprom_nhac[i] = 0;
EEPROM.update(i, 0);
delay(5);
}
lcd.print("OK");
delay(1000);
//-----
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CAI DAT XONG");
delay(150);
lcd.print(".");
delay(150);
lcd.print(".");
delay(150);
lcd.print(".");
delay(600);
lcd.clear();
//resetFunc();
giao_dien = 0;
}
}
if (giao_dien >= 3)
{
giao_dien = 0;
}
delay(50); // trễ 500 ms
//doc_EEPROM_Serial();
}
//----END
VI. Hoạt động
Video: https://youtu.be/xt3PHtBa-u0