Với vốn kiến thức được tiếp thu trong quá trình học không chỉ là nền tảng cho quá trình làm đề tài mà còn là hành trang quý báu để chúng em bước vào đ i một cách vững chắờ c và tự tin..
Trang 1Giảng viên hướng dẫn: GV LÊ THỊ HỒNG VÂN
Hà Nội, 06-09-2021
Trang 2Nhóm 17: Đồng hồ sóng nhạc
Trang 3MỤC LỤC
MỤC LỤC i
LỜI MỞ ĐẦU 2
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 3
1.1 Tổng quan về đề tài đồ án Error! Bookmark not defined 1.2 Tìm hiểu về lập trình nhúng 3
1.2.1 Khái niệm 3
1.2.2 Các ngôn ngữ sử dụng cho lập tình nhúng 4
1.2.3 Các thiết bị phần cứng cho lập trình nhúng 4
1.2.4 Ứng dụng của lập trình nhúng với đời sống thực tiễn 4
1.3 Tìm hiểu về lập trình nhúng trên nền tảng Arduino 4
1.3.1 Tìm hiểu về Arduino 4
1.4 Cơ sở lý thuyết của đồ án 14
1.4.1 Tìm hiểu về lập trình nhúng thời gian thực 14
1.4.2 Tìm hiểu về âm thanh và xử lý âm thanh 14
CHƯƠNG 2 THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 17
2.1 Ý tưởng thiết kế phần cứng 17
2.1.1 Bo mạch: Esp32 Wroom DEV( dual core) 17
2.1.2 Cảm biến âm thanh Max9812 22
2.1.3 Module Led matrix P5 22
2.1.4 Sơ đồ nối chân 24
2.2 Thiết kế phần mềm 24
CHƯƠNG 3 KẾT QUẢ THỰC NGHIỆM 31
3.1 Vẽ mạch và chạy thử trong phần mềm Proteus 31
3.2 Phương án phát triển và tối ưu 31
3.3 Báo cáo kết quả khi hoàn thành 31
TÀI LIỆU THAM KHẢO 31
Trang 4LỜI MỞ ĐẦU
Xã hội ngày càng phát triển, nhu cầu giải trí thư giãn ngày một nhiều, âm nhạc dần trở thành một món ăn tinh thần của mọi người Âm nhạc giúp chúng ta thư giãn và có giá trị tinh thần tốt Đi kèm nó là các sản phẩm nâng cao chất lượng và trải nghi m cệ ủa người dùng đố ới âm nhạc, trong đó i vphải kể đến công nghệ ánh sáng
Đèn LED ra đời mang lạ ự đội s t biến trong nhiều lĩnh vực đời sống, làm thay đổi toàn bộ bộ mặt ngành công nghiệp giải trí Nó có mặt trong tấ ả t c các
cơ sở kinh doanh nhà hàng, cơ sở kinh doanh dịch vụ như Karaoke, Café, Bar, v.v , hay có mặt trong các đồ điện tử, gia dụng để mang lạ ự bắt mắi s t và nâng cao trải nghiệm của người dùng Trong đó, việc đèn LED kế ợp vớt h i các sản phẩm âm thanh cũng được nhiều người yêu thích
Nắm bắ âm lý này, nhóm sinh viên chúng em quyế ịnh tìm hiểu, nghiên t t t đcứu, kế ợp vớ ền tảng kiến thức có được khi họt h i n c b môn ộ “Công nghệ phần mềm nhúng cho ra mắ ản phẩ”, t s m công ngh “ Đồng hồ led nháy theo nhạc” ệ
Mục đích c a sản phẩm giúp ngườủ i dùng có phút giây thư giãn và có thải nghiệm tốt nhấ ới âm nhạt v c
Để hoàn thành được bài báo cáo này, trước hết, nhóm chúng em kính gửi lời cảm ơn sâu sắc tới cô Lê Thị Hồng Vân, giảng viên khoa Công nghệ thông tin -Học viện Kỹ thuật mật mã, đã tận tình chỉ bảo, hướng dẫn và hỗ ợ trong thờtr i gian chúng em nghiên cứu và thực hiện đề tài này
Nhóm chúng em cũng chân thành cảm ơn quý Thầy, Cô đang công tác tại Học viện Kỹ thuật Mật mã đã tận tình truyền đạt kiến thức trong những năm học tập vừa qua Với vốn kiến thức được tiếp thu trong quá trình học không chỉ
là nền tảng cho quá trình làm đề tài mà còn là hành trang quý báu để chúng em bước vào đ i một cách vững chắờ c và tự tin
Cuối cùng nhóm chúng em kính chúc quý Thầy, Cô dồi dào sức khỏe và thành công trong sự hiệp cao quý.ng
Chúng em xin chân thành cảm ơn!
Trang 5CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 Tìm hiểu về lập trình nhúng
1.1.1 Khái niệm
Lập trình nhúng là một thuật ngữ lập trình dùng để chỉ đến một hệ thống có khả năng tự trị và nó thường được nhúng vào trong một môi trường hoặc một hệ thống mẹ bất kỳ nào đó.Đây là các hệ thống tích hợp cả một phần mềm và phần cứng
Trang 6Mục đích chủ yếu lập trình nhúng chính là phục vụ các bài toán chuyên dụng trong các lĩnh vực công nghiệp, tự động hóa điều khiển và truyền tin Thông thường, hệ thống nhúng sẽ được thiết kế để thực hiện các chức năng chuyên trách hoặc riêng biệt nào đó
Bởi vì đây là lập trình chỉ được xây dựng cho một nhiệm vụ nhất định nên người tạo lập thường sẽ tối ưu hóa được nó nhằm tối thiểu kích thước và chi phí cho lập trình Hệ thống nhúng này thường rất đa dạng và phong phú về chủng loại
1.1.2 Các ngôn ngữ sử dụng cho lập tình nhúng
Có rất nhiều ngôn ngữ đượ ử dụng cho lập trình nhúng Có thể kể đến như c scác ngôn ngữ như C, C++, Java, Java Script, Python, Go, Rust, Parasail, B#, Assembly, Forth …v.v…
1.1.3 Các thiết bị phần cứng cho lập trình nhúng
Các thiế ị phần cứng dùng cho hệ ống nhúng là các linh kiện điện tử, chip t b th
xử lí và các thi t bế ị lưu trữ, các thiế ị ngoại vi, cảm biến…t v
1.1.4 Ứng dụng của lập trình nhúng vớ ời sống thựi đ c tiễn
Lập trình nhúng mang lại r t nhiấ ều ứng dụng trong đờ ống của chúng ta, nó đi i sđôi và gần như là không thể ếu trong các thiế ị điện tử và công nghệ.thi t bLập trình nhúng mang các đặc điểm về sự ện lợ ự động, an toàn và thông ti i, tminh khi áp dụng vào các lĩnh vực của đờ ống i s VD: các thiết bị điện tử gia dụng (nồi cơm, máy giặt, v.v.), các thiế ị ,máy tính, máy in, cây ATM, máy t bbán hang tự động…
1.2 Tìm hiểu về lập trình nhúng trên nền tảng Arduino
1.2.1 Tìm hiểu v Arduino ề
1.2.1.1 Khái niệm
Arduino là nền tảng mã nguồn mở giúp tạo tính liên kết và tương tác với nhau tốt hơn giữa các các ứng dụng điện tử do con người xây dựng nên Arduino dùng để thay thế các công cụ chuyên nạp code giúp người dùng lập
Trang 7trình, thực hiện các dự án điện tử một cách đơn giản, dễ dàng, hiệu quả và ít tốn kém hơn rất nhiều
1.2.1.2 Phần cứng lập trình nhúng nền tảng Arduino:
Có nhiều loại bo mạch nền tảng Arduino sử dụng cho các mục đích khác
nhau, nhưng hầu hết các bo mạch Arduino có các thành phần như dưới đây:
Hình 2 1 Ảnh minh họa kit Arduino
- Nguồn (USB / Đầu cắm nguồn cái)
Mỗi bo mạch Arduino có một cách nối nguồn Arduino UNO được cấp nguồn từ cáp USB hoặc đầu cắm nguồn cái Trong hình trên, cổng USB được đánh số (1) và đầu cắm nguồn cái được đánh số (2)
Cổng USB cũng hỗ trợ tải mã lên bo mạch Arduino
LƯU Ý: KHÔNG sử dụng nguồn điện lớn hơn 20 Vôn sẽ làm hư Arduino Điện áp thích hợp cho hầu hết các mô hình Arduino là từ 6 đến 12 Vôn
- Các chân (5V, 3.3V, GND, Analog, Kỹ thuật số, PWM, AREF)
Các chân trên Arduino là chỗ nối dây để xây dựng mạch (để liên kết bo mạch với dây thường có các đầu cắm bằng nhựa đen để bạn có thể cắm ngay dây vào bo mạch) Arduino có nhiều loại chân khác nhau, mỗi loại được ghi chú trên bo mạch và được sử dụng cho các chức năng khác nhau
Trang 8GND (3): Viết tắt của ‘Ground’ Có một số chân GND trên Arduino, có thể
sử dụng bất kỳ chân nào để nối đất cho mạch
5V (4) & 3.3V (5): Chân 5V cấp nguồn 5 vôn, và chân 3.3V cấp nguồn 3,3 vôn Hầu hết các linh kiện đơn giản sử dụng với Arduino chạy ổn định ở 5 hoặc 3,3 vôn
Analog (6): Khu vực các chân có ký hiệu 'Analog In' (A0 đến A5 trên UNO) là các chân nhận tín hiệu đầu vào Các chân này có thể đọc tín hiệu từ một cảm biến tương tự (như cảm biến nhiệt độ) và chuyển đổi nó thành một giá trị số mà chúng ta có thể đọc
Digital (7): Qua khu vực các chân analog là tới các chân digital (0 đến 13 trên UNO) Các chân này sử dụng cho cả đầu vào digital (ví dụ như cho biết nút nào được nhấn) và đầu ra digital (như cấp năng lượng cho đèn LED) PWM (8): Bạn có thể thấy dấu ngã (~) bên cạnh một số chân số (3, 5, 6, 9,
10 và 11 trên UNO) Các chân này hoạt động như các chân digital thông thường, ngoài ra có thể sử dụng cho điều chế độ rộng xung (PWM)
AREF (9): Là viết tắt của tham chiếu analog Chân này thường ít được sử dụng Thỉnh thoảng nó được dùng để thiết lập điện áp tham chiếu bên ngoài (giữa 0 và 5 Vôn) làm giới hạn trên cho các chân analog đầu vào
- Nút reset
Cũng giống như Nintendo gốc, Arduino có nút reset (10) Nếu nhấn nút này
sẽ tạm thời kết nối chân reset với đất và khởi động lại bất kỳ mã nào được nạp trên Arduino Nó rất hữu dụng nếu mã của bạn không lặp lại và bạn muốn kiểm tra nó nhiều lần
Trang 9- Đèn LED báo nguồn
Ngay bên dưới và bên phải của từ “UNO” trên bảng mạch có một đèn LED nhỏ bên cạnh chữ ‘ON’ (11) Đèn LED này sẽ sáng lên khi cắm Arduino vào nguồn điện
- Đèn LED RX TX
TX là viết tắt của truyền, RX là viết tắt của nhận Những ký hiệu này xuất hiện khá nhiều trong các thiết bị điện tử để chỉ ra các chân chịu trách nhiệm về giao tiếp nối tiếp Trong trường hợp bo mạch ở trên, có hai vị trí trên UNO Arduino nơi TX và RX xuất hiện - vị trí thứ nhất là chỗ các chân số 0 và 1, và
vị trí thứ hai bên cạnh đèn LED báo TX và RX (12) Những đèn LED này sẽ cung cấp chỉ dẫn trực quan bất cứ khi nào Arduino nhận hoặc truyền dữ liệu
- Bộ điều chỉnh điện áp
Bộ điều chỉnh điện áp (14) là thứ bạn không có tương tác với Arduino Nhưng nó điều chỉnh lượng điện áp được đưa vào bo mạch Arduino Giống như người gác cổng, nó sẽ xử lý điện áp phụ có thể gây hại cho mạch Tất nhiên, nó
có giới hạn của nó, do đó, không cấp điện cho Arduino lớn hơn 20 vôn
Trang 10Hình 2 2 Ảnh Arduino Uno R3
Lilypad Arduino
LilyPad là một công nghệ dệt e-textile được phát triển bởi Leah Buechley
và được hợp tác thiết kế bởi Leah và SparkFun Mỗi LilyPad được thiết kế cho phép chúng có thể gắn lên quần áo bằng chỉ dẫn điện LilyPad có đầu vào, đầu
ra, điện, và bo mạch cảm biến xây dựng chuyên cho công nghệ dệt e-textile Thậm chí có thể rửa được
Trang 11Hình 2 3 Ảnh Lilypad Arduino
RedBoard
RedBoard có thể được lập trình qua cáp USB Mini B sử dụng Arduino IDE
-Nó sẽ hoạt động trên Windows 8 mà không phải thay đổi cài đặt bảo mật -Nó
ổn định hơn nhờ chip USB / FTDI, cộng với chip hoàn toàn phẳng ở mặt sau, giúp bạn dễ dàng nhúng vào các project hơn Chỉ cần cắm bo mạch, chọn
“Arduino UNO từ menu là có thể tải mã lên Bạn có thể cấp nguồn cho ” RedBoard qua USB hoặc qua đầu cắm nguồn cái Bộ điều chỉnh nguồn trên bo mạch có thể xử lý từ 7 đến 15V DC
Hình 2 4 Ảnh RedBoard
Arduino Mega 2560
Trang 12Arduino Mega giống như anh trai của UNO Nó có rất nhiều chân đầu vào / đầu ra digital (14 chân có thể được sử dụng làm đầu ra PWM), 16 chân đầu vào analog, kết nối USB, giắc cắm nguồn và nút reset Nó chứa mọi thứ cần thiết để
hỗ trợ vi điều khiển; chỉ cần kết nối nó với một máy tính bằng cáp USB hoặc cấp điện cho nó bằng bộ chuyển đổi dòng xoay chiều thành một chiều hoặc pin
Vì có nhiều chân nên bo mạch này rất tiện dụng cho các project cần nhiều các đầu vào hoặc đầu ra digital (như nhiều đèn LED hoặc nhiều nút)
Hình 2 5 Ảnh Arduino Mega R3
Arduino Leonardo
Leonardo là bo mạch arduino đầu tiên sử dụng một vi điều khiển tích hợp USB Vì thế nên nó rẻ hơn và đơn giản hơn Ngoài ra, bởi vì bo mạch xử lý USB trực tiếp, các thư viện mã có sẵn cho phép bo mạch mô phỏng bàn phím máy tính, chuột và nhiều thứ nữa
Trang 13Hình 2 6 Ảnh Arduino Leonardo
1.2.1.4 Ứng dụng của nền tảng Arduino
Arduino là một nền tảng tốt, với phần cứng nhỏ gọn, rất thích hợp để sinh viên nghiên cứu các dự án nhỏ gọn như robot, xe tự hành thiết bị cầm , tay, điều khiển thiết bị gia dụng thông minh v.v…
Trang 14
Hình 2 7 Một số ứng dụng của Arduino
Trang 151.2.1.5 Ngôn ngữ sử dụng cho lập trình Arduino
Ngôn ngữ:
Có hai ngôn ngữ chính thường được dùng cho Arduino, đó là và C C++
( Trong đồ án này, em sẽ thực hiện bằng ngôn ngữ lập trình bậc cao C)
Phần mềm hỗ trợ:
Có rất nhiều công cụ từ đơn giản tới phức tạp, hỗ ợ người dùng trong lậtr p trình nhúng Trên nền tảng Arduino, có 2 phiên bản phần mềm hỗ ợ lậtr p trình nhúng:
Arduino IDE: Thường được sử dụng nhiều, ứng dụng trên nền tảng HDH Window, Mac…
Arduino Droid: Sử dụng trên nền tảng HDH Android, thường ít khi được dùng
Trong đồ án này, chúng em sẽ sử dụng phần mềm hỗ ợ lập trình bằng ngôn trngữ bậc cao C trên nền tảng Arduino, đó là Arduino IDE
Trang 161.3 Cơ sở lý thuyết của đồ án
1.3.1 Tìm hiểu về lập trình nhúng thời gian thực
1.3.2 Tìm hiểu về âm thanh và xử lý âm thanh
1.3.2.1 Tìm hiểu về âm thanh
Khái niệm:
Âm thanh là các dao động cơ học của các phân tử, nguyên tử hay các hạt làm nên vật ch và lan truyền trong vật chất như cácất sóng
(Ảnh dạng sóng âm thanh từ 1 nguồn)
Âm thanh, giống như nhiều sóng, được đặc trưng bởi tần số, bước sóng, chu
kỳ, biên độ vàvận tốc lan truyền (tốc độ âm thanh)
1.3.2.2 Xử âm thanhlý
Trên thực tế, âm thanh xung quanh chúng ta không đơn giản như hình trên, mà
nó bao gồm âm thanh từ nhiều nguồn phát ra, được trộn lại với nhau, có tần số và biên
độ biến thiên không tuần hoàn theo thời gian
Trang 17Trên đây là hình ảnh về sóng âm thanh trong thực tế, ta có thể ấy chúng là thmột hỗn hợp các sóng âm vớ ần số và biên độ khác nhau i t
Tìm hiểu cách xử lý âm thanh
Sau khi đã tìm hiểu được nguyên lí và cách thu phát âm thanh, ta có thể xử lý
âm thanh để hiển thị lên màn hình dưới dạng sóng Cụ ể, có hai phương pháp để xử th
lý âm thanh thu nhận được:
Phương pháp thứ nhất: VuMeter
VuMeter là phương pháp nhận dạng và xử lí âm thanh dựa trên độ lớn của tín hiệu đầu vào, biến chúng thành lí tường bằng cách lấy độ lớn cực đại trừ đi độ lớn cực tiểu của âm thanh trong một khoảng thời gian nhất định đủ nhỏ để không gây sai số quá lớn
Phương pháp thứ hai: Biến đổ ourier nhanh (FFT).i f
Đây là phương pháp chuyên sâu hơn, chúng ta có thể dung FFT để nhận dạng
và tách các âm thanh đến từ các nguồn khác nhau dựa trên tần số của chúng, phương pháp này có độ chính xác cao hơn
Trang 18Để cho dễ hiểu, với hình vẽ ở trên, với phương pháp VuMeter, ta sẽ coi nó là tuần hoàn và làm tròn tín hiệu như đường màu đỏ Còn đối với phương pháp biến đổi FFT, Ta sẽ tách riêng cách màu và chia kênh để ển thị chúng.hi
Trang 19CHƯƠNG 2 THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG
2.1 Ý tưởng t ết kế hi phần cứng
- Sau khi nghiên cứu và tìm hiểu, chúng em đã chọn được mộ ố linh kiện phù t shợp để làm dự án
2.1.1 Bo mạch: Esp32 Wroom DEV( dual core)
2.1.1.1 Giới thiệu Esp32
Esp32 là một loại bo mạch đến từ nhà sản xuất espressif, loại bo mạch này có thể được lập trình bằng nền tảng phần mềm lập trình của Arduino Có rất nhiều phiên bản Esp32 được tùy biến khác nhau, song chúng đều có nhiều chân giao tiếp cũng như các module tiện ích đi kèm như Wifi, Bluetooh, Oled Screen,…v.v…
2.1.1.2 Cấu tạo Esp32
Tốc độ xung nhịp đọc flash chip 40mhz > 80mhz (tùy chỉnh khi lập trình)
RAM: 520 KByte SRAM
520 KB SRAM liền chip
–(trong đó 8 KB RAM RTC tốc độ cao – 8 KB RAM RTC tốc độ thấp (dùng ở ế độ DeepSleep).ch
Hỗ ợ 2 giao tiếp không dâytr
Wi-Fi: 802.11 b/g/n/e/i
Bluetooth: v4.2 BR/EDR and BLE
Hỗ ợ tất cả tr các loại giao tiếp chân
8-bit DACs( digital to analog) 2 cổng
Analog(ADC) 12 bit- 16 cổng
Trang 20 Băm xung PWM (tấ ả t c các chân )
Ultra low power analog pre-amplifier’
Cảm biến tích hợp trên chip esp32
Cảm biến Hall (cảm biến từ trường) 1 đầu vào
Cảm biến đo nhiệt độ 1 đầu vào
Cảm biến chạm (điện dung) với 10 đầu vào khác nhau
1024-bit OTP, up to 768 bit for customers
- Cryptographic hardware acceleration: AES, SHA 2, RSA, elliptic curve cryptography (ECC), random number generator (RNG)
- Nguồn điện hoạt động
Nhiệt độ hoạ ộng 40 t đ - + 85C
Điện áp hoạ ộng: 2.2t đ -3.6V
Số cổng GPIOs : 34
Trang 21Sơ đồ chân
Các loại Esp32 trên thị trường có cấu tạo chân gần giống nhau Các tài liệu về
sơ đồ chân của các loại Esp 32 cũng khá phổ biến Dưới đây là sơ đồ chân của Esp32 DevKitC
Esp 32 rất hữu dụng và đa năng, do vậy, bố cục các linh kiện cũng như cách sử dụng các chân rất phức tạp Các chân với các tính năng cụ ể làm cho chúng phù th
hợp hoặc không phù hợp cho một dự án khi xây dựng Cần cẩn trọng khi sử dụng các chân để có thể tối ưu, tránh mắc sai sẽ gây giảm hiệu năng hoặc gây hư hỏng bo
mạch