1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đồ án môn học phần mềm nhúng thời gian thực đề tài đồng hồ sóng nhạc

34 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 8,21 MB

Nội dung

HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN MÔN HỌC PHẦN MỀM NHÚNG THỜI GIAN THỰC Đề tài: ĐỒNG HỒ SÓNG NHẠC Sinh viên thực hiện: VŨ TRỌNG CHÍNH VŨ XN BÌNH NGUYỄN ANH ĐỨC VĂN THƯ THÁI Giảng viên hướng dẫn: GV LÊ THỊ HỒNG VÂN Hà Nội, 06-09-2021 Nhóm 17: Đồng hồ sóng nhạc MỤC LỤC MỤC LỤC i LỜI MỞ ĐẦU CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 Tổng quan đề tài đồ án Error! Bookmark not defined 1.2 Tìm hiểu lập trình nhúng 1.2.1 Khái niệm 1.2.2 Các ngôn ngữ sử dụng cho lập tình nhúng 1.2.3 Các thiết bị phần cứng cho lập trình nhúng 1.2.4 Ứng dụng lập trình nhúng với đời sống thực tiễn 1.3 Tìm hiểu lập trình nhúng tảng Arduino 1.3.1 Tìm hiểu Arduino 1.4 Cơ sở lý thuyết đồ án 14 1.4.1 Tìm hiểu lập trình nhúng thời gian thực 14 1.4.2 Tìm hiểu âm xử lý âm 14 CHƯƠNG 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 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 KẾT QUẢ THỰC NGHIỆM 31 3.1 Vẽ mạch chạy thử phần mềm Proteus 31 3.2 Phương án phát triển tối ưu 31 3.3 Báo cáo kết hoàn thành 31 TÀI LIỆU THAM KHẢO 31 LỜI MỞ ĐẦU Xã hội ngày phát triển, nhu cầu giải trí thư giãn ngày nhiều, âm nhạc dần trở thành ăn tinh thần người Âm nhạc giúp thư giãn có giá trị tinh thần tốt Đi kèm sản phẩm nâng cao chất lượng trải nghiệm người dùng âm nhạc, phải kể đến cơng nghệ ánh sáng Đèn LED đời mang lại đột biến nhiều lĩnh vực đời sống, làm thay đổi toàn bộ mặt ngành cơng nghiệp giải trí Nó có mặt tất sở kinh doanh nhà hàng, sở kinh doanh dịch vụ Karaoke, Café, Bar, v.v , hay có mặt đồ điện tử, gia dụng để mang lại bắt mắt nâng cao trải nghiệm người dùng Trong đó, việc đèn LED kết hợp với sản phẩm âm nhiều người yêu thích Nắm bắt tâm lý này, nhóm sinh viên chúng em định tìm hiểu, nghiên cứu, kết hợp với tảng kiến thức có học môn “Công nghệ phần mềm nhúng”, cho mắt sản phẩm công nghệ “ Đồng hồ led nháy theo nhạc” Mục đích sản phẩm giúp người dùng có phút giây thư giãn có thải nghiệm tốt với âm nhạc Để hoàn thành 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 bảo, hướng dẫn hỗ trợ thời gian chúng em nghiên cứu thực đề tài Nhóm chúng em chân thành cảm ơn quý Thầy, Cô công tác Học viện Kỹ thuật Mật mã tận tình truyền đạt kiến thức năm học tập vừa qua Với vốn kiến thức tiếp thu q trình học khơng tảng cho q trình làm đề tài mà cịn hành trang q báu để chúng em bước vào đời cách vững tự tin Cuối nhóm chúng em kính chúc quý Thầy, Cô dồi sức khỏe thành công nghiệp cao quý Chúng em xin chân thành cảm ơn! CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 Tìm hiểu lập trình nhúng 1.1.1 Khái niệm Lập trình nhúng thuật ngữ lập trình dùng để đến hệ thống có khả tự trị thường nhúng vào mơi trường hệ thống mẹ đó.Đây hệ thống tích hợp phần mềm phần cứng Mục đích chủ yếu lập trình nhúng phục vụ tốn chun dụng lĩnh vực cơng nghiệp, tự động hóa điều khiển truyền tin Thông thường, hệ thống nhúng thiết kế để thực chức chuyên trách riêng biệt Bởi lập trình xây dựng cho nhiệm vụ định nên người tạo lập thường tối ưu hóa nhằm tối thiểu kích thước chi phí cho lập trình Hệ thống nhúng thường đa dạng phong phú chủng loại 1.1.2 Các ngôn ngữ sử dụng cho lập tình nhúng Có nhiều ngơn ngữ sử dụng cho lập trình nhúng Có thể kể đến ngôn ngữ 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ết bị phần cứng dùng cho hệ thống nhúng linh kiện điện tử, chip xử lí thiết bị lưu trữ, thiết vị ngoại vi, cảm biến… 1.1.4 Ứng dụng lập trình nhúng với đời sống thực tiễn Lập trình nhúng mang lại nhiều ứng dụng đời sống chúng ta, đơi gần khơng thể thiếu thiết bị điện tử công nghệ Lập trình nhúng mang đặc điểm tiện lợi, tự động, an tồn thơng minh áp dụng vào lĩnh vực đời sống VD: thiết bị điện tử gia dụng (nồi cơm, máy giặt, v.v.), thiết bị ,máy tính, máy in, ATM, máy bán hang tự động… 1.2 Tìm hiểu lập trình nhúng tảng Arduino 1.2.1 Tìm hiểu Arduino 1.2.1.1 Khái niệm  Arduino tảng mã nguồn mở giúp tạo tính liên kết tương tác với tốt các ứng dụng điện tử người xây dựng nên Arduino dùng để thay công cụ chuyên nạp code giúp người dùng lập trình, thực dự án điện tử cách đơn giản, dễ dàng, hiệu tốn nhiều 1.2.1.2 Phần cứng lập trình nhúng tảng Arduino:  Có nhiều loại bo mạch tảng Arduino sử dụng cho mục đích khác nhau, hầu hết bo mạch Arduino có thành phần đây: Hình Ảnh minh họa kit Arduino - Nguồn (USB / Đầu cắm nguồn cái) Mỗi bo mạch Arduino có cách nối nguồn Arduino UNO cấp nguồn từ cáp USB đầu cắm nguồn Trong hình trên, cổng USB đánh số (1) đầu cắm nguồn đánh số (2) Cổng USB hỗ trợ tải mã lên bo mạch Arduino LƯU Ý: KHÔNG sử dụng nguồn điện lớn 20 Vơn làm hư Arduino Điện áp thích hợp cho hầu hết mơ hình Arduino từ đến 12 Vôn - Các chân (5V, 3.3V, GND, Analog, Kỹ thuật số, PWM, AREF) Các chân Arduino 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ó đầu cắm nhựa đen để bạn cắm dây vào bo mạch) Arduino có nhiều loại chân khác nhau, loại ghi bo mạch sử dụng cho chức khác GND (3): Viết tắt ‘Ground’ Có số chân GND Arduino, sử dụng chân để nối đất cho mạch 5V (4) & 3.3V (5): Chân 5V cấp nguồn vôn, chân 3.3V cấp nguồn 3,3 vôn Hầu hết linh kiện đơn giản sử dụng với Arduino chạy ổn định 3,3 vơn Analog (6): Khu vực chân có ký hiệu 'Analog In' (A0 đến A5 UNO) chân nhận tín hiệu đầu vào Các chân đọc tín hiệu từ cảm biến tương tự (như cảm biến nhiệt độ) chuyển đổi thành giá trị số mà đọc Digital (7): Qua khu vực chân analog tới chân digital (0 đến 13 UNO) Các chân sử dụng cho đầu vào digital (ví dụ cho biết nút nhấn) đầu digital (như cấp lượng cho đèn LED) PWM (8): Bạn thấy dấu ngã (~) bên cạnh số chân số (3, 5, 6, 9, 10 11 UNO) Các chân hoạt động chân digital thơng thường, ngồi sử dụng cho điều chế độ rộng xung (PWM) AREF (9): Là viết tắt tham chiếu analog Chân thường sử dụng Thỉnh thoảng dùng để thiết lập điện áp tham chiếu bên ngồi (giữa Vơn) làm giới hạn cho chân analog đầu vào - Nút reset Cũng giống Nintendo gốc, Arduino có nút reset (10) Nếu nhấn nút tạm thời kết nối chân reset với đất khởi động lại mã nạp Arduino Nó hữu dụng mã bạn không lặp lại bạn muốn kiểm tra nhiều lần - Đèn LED báo nguồn Ngay bên bên phải từ “UNO” bảng mạch có đèn LED nhỏ bên cạnh chữ ‘ON’ (11) Đèn LED sáng lên cắm Arduino vào nguồn điện - Đèn LED RX TX TX viết tắt truyền, RX viết tắt nhận Những ký hiệu xuất nhiều thiết bị điện tử để chân chịu trách nhiệm giao tiếp nối tiếp Trong trường hợp bo mạch trên, có hai vị trí UNO Arduino nơi TX RX xuất - vị trí thứ chỗ chân số 1, vị trí thứ hai bên cạnh đèn LED báo TX RX (12) Những đèn LED cung cấp dẫn trực quan Arduino nhận truyền liệu - Mạch tích hợp - IC IC hay mạch tích hợp (13) có màu đen với chân kim loại Bạn xem não Arduino IC Arduino bo mạch khác có khác nhau, thường dòng IC ATmega từ cơng ty ATMEL Điều quan trọng, bạn cần phải biết loại IC (cùng với loại bo mạch) trước tải lên chương trình Thơng tin thường viết phía IC Nếu bạn muốn biết thêm khác biệt IC khác đọc datasheet - Bộ điều chỉnh điện áp Bộ điều chỉnh điện áp (14) thứ bạn khơng có tương tác với Arduino Nhưng điều chỉnh lượng điện áp đưa vào bo mạch Arduino Giống người gác cổng, xử lý điện áp phụ gây hại cho mạch Tất nhiên, có giới hạn nó, đó, khơng cấp điện cho Arduino lớn 20 vơn 1.2.1.3 Một số loại bo mạch Arduino Arduino có nhiều bo mạch khác nhau, bo mạch có khả khác Thêm vào đó, phần cứng nguồn mở nên nhiều người sửa đổi tạo nhiều bo mạch Arduino khác với nhiều chức Dưới số loại phổ biến:  Arduino Uno (R3) Uno lựa chọn tuyệt vời bạn làm quen với arduino Nó có thứ cần thiết để bạn bắt đầu Nó có 14 chân đầu vào / đầu digital (trong chân sử dụng làm đầu PWM), đầu vào analog, kết nối USB, giắc cắm nguồn, nút reset nhiều thứ khác Nó chứa thứ cần thiết để hỗ trợ vi điều khiển; cần kết nối với máy tính cáp USB cấp điện cho chuyển đổi dòng xoay chiều thành dòng chiều pin Hình 2 Ảnh Arduino Uno R3  Lilypad Arduino LilyPad công nghệ dệt e-textile phát triển Leah Buechley hợp tác thiết kế Leah SparkFun Mỗi LilyPad thiết kế cho phép chúng gắn lên quần áo dẫn điện LilyPad có đầu vào, đầu ra, điện, bo mạch cảm biến xây dựng chuyên cho công nghệ dệt e-textile Thậm chí rửa  I²C – cổng  UART – cổng  SPI – cổng (1 cổng cho chip FLASH )  I²S – cổng  SD card /SDIO/MMC host  Slave (SDIO/SPI)  Ethernet MAC interface with dedicated DMA and IEEE 1588 support  CAN bus 2.0  IR (TX/RX)  Băm xung PWM (tất chân )  Ultra low power analog pre-amplifier’  Cảm biến tích hợp chip esp32  Cảm biến Hall (cảm biến từ trường) đầu vào  Cảm biến đo nhiệt độ đầu vào  Cảm biến chạm (điện dung) với 10 đầu vào khác  Bảo mật  IEEE 802.11 standard security features all supported, including WFA, WPA/WPA2 and WAPI  Secure boot  Flash encryption  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ạt động -40 + 85C  Điện áp hoạt động: 2.2-3.6V  Số cổng GPIOs : 34 Sơ đồ chân Các loại Esp32 thị trường có cấu tạo chân gần giống Các tài liệu sơ đồ chân loại Esp 32 phổ biến Dưới sơ đồ chân Esp32 DevKitC Esp 32 hữu dụng đa năng, vậy, bố cục linh kiện cách sử dụng chân phức tạp Các chân với tính cụ thể làm cho chúng phù hợp không phù hợp cho dự án xây dựng Cần cẩn trọng sử dụng chân để tối ưu, tránh mắc sai gây giảm hiệu gây hư hỏng bo mạch Tuy nhiên, biết chân tốt để sử dụng làm đầu vào, đầu chân bạn cần thận trọng Trong trường hợp đó, tham khảo bảng sau đây: GPIO Input Output Notes Pulled up OK xuất tín hiệu PWM khởi động TX pin OK đầu gỡ lỗi UART khởi động OK OK OK RX pin OK OK OK OK xuất tín hiệu PWM khởi động x x kết nối với nhớ SPI flash x x kết nối với nhớ SPI flash x x kết nối với nhớ SPI flash x x kết nối với nhớ SPI flash 10 x x kết nối với nhớ SPI flash 11 x x kết nối với nhớ SPI flash 12 OK OK mức cao khởi động thất bại 13 OK OK 14 OK OK xuất tín hiệu PWM khởi động 15 OK OK xuất tín hiệu PWM khởi động 16 OK OK 17 OK OK 18 OK OK 19 OK OK 21 OK OK 22 OK OK 23 OK OK mức cao khởi động 25 OK OK 26 OK OK 27 OK OK 32 OK OK 33 OK OK 34 OK nhận tín hiệu làm input 35 OK nhận tín hiệu làm input 36 OK nhận tín hiệu làm input 39 OK nhận tín hiệu làm input  Trong đó:  Các chân tơ màu xanh tốt để sử dụng  Những tô màu vàng tốt để sử dụng, bạn cần ý chúng có hành vi bất ngờ chủ yếu khởi động  Các chân tô sáng màu đỏ không khuyến khích sử dụng làm đầu vào đầu dùng kết nối với thành phần module ESP32 Một số loại Esp 32 Như trình bày trên, Esp32 có nhiều biến thể cấu tạo cấu hình khác thị trường tùy thuộc vào mục đích nghiên cứu sử dụng khác Tuy nhiên, kể tên vài loại Esp32 phổ biến:  ESP32-DevKitC  ESP-WROVER-KIT  ESP32-PICO-KIT  HUZZAH32 Ra đời tỏ hữu dụng, Esp32 ưa chuộng biết đến rộng rãi Nó sử dụng phổ biến môi trường học tập nghiên cứu 2.1.2 Cảm biến âm Max9812 - Sử dụng cảm biến âm Max9812 để nhận tín hiệu âm mơi trường lấy ngõ tín hiệu Analog Max9812 loại cảm biến âm có ngõ Analog, có thiết kế nhỏ gọn, tiết kiệm không gian thiết kế 2.1.3 Module Led matrix P5 2.1.3.1 Giới thiệu Module led matrix p5 module bao gồm nhiều bóng led (số lượng tùy theo phiên bản) Với bóng led coi pixel ( gọi p5 pixel cách mm) mang lại hiển thị tốt, chúng ưa dùng cách lĩnh vực giải trí , quảng cáo… Trong đồ án này, em sử dụng module Led matrix P5 indoor 160 mm x320 mm (2048 pixel) Led matrix p5 có nhiều ưu điểm hiển thị tốt (hỗ trợ đến 16 triệu màu hơn), tiêu thụ điện ít, dễ gia cơng, lắp đặt 2.1.3.2 Cấu hình Sơ đồ châ n led matrix p5 2.1.4 Sơ đồ nối chân 2.1.4.1 Sơ đồ nối chân cảm biến âm Đối với cảm biến âm ta nối sau:  VCC: nối với chân 3V3 Esp32  GND: nối chân tương tự Esp 32  Chân OUT: nối với chân 34 ESP 32 2.1.4.2 Sơ đồ nối chân Led matrix P5 Do có thiết kế nhiều điểm ảnh, nên việc điều khiển module led cách thử cơng phức tạp rườm rà, vậy, ta cần hỗ trợ thư viện điều khiển led P5 Adafruit Sơ đồ nối chân mặc định mà thư viện yêu cầu  Đối với dây nguồn VCC, ta đấu nối với chân 5V Esp32  Đối với dây GND, ta đấu nối với chân GND Esp32 2.2 Ý tưởng thiết kế phần mềm 2.2.1 Thiết kế đồng hồ Về đồng hồ, chúng em sử dụng đồng hồ lấy TimeZone thực Internet thông qua wifi Code đồng hồ: #include #include #include #include P3RGB64x32MatrixPanel matrix; char ssid[] = "TP_LINK"; char pass[] = “123456789"; int oldMin, newMin, rFre; #define TZ (7*60*60) /*JST*/ void setup() { Serial.begin(115200); Serial.print("Attempting to connect to Network named: "); Serial.println(ssid); // print the network name (SSID); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(1000); } Serial.println(""); IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); configTime(TZ, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // enable NTP matrix.begin(); // setup the LED matrix matrix.setCursor(2, 0); matrix.setTextColor(matrix.color444(150, 0, 150)); matrix.setFont(); matrix.printf("Connect to wifi"); matrix.swapBuffer(); delay(1000); } void loop() { if (WiFi.status() != WL_CONNECTED) ESP.restart(); time_t t; static time_t last_t; struct tm *tm; static const char* const wd[7] = {"Chu Nhat","Thu 2","Thu 3","Thu 4","Thu 5","Thu 6","Thu 7"}; t = time(NULL); if (last_t == t) return; // draw each second last_t = t; Serial.print(oldMin); tm = localtime(&t); newMin = tm->tm_min; matrix.fillScreen(0); matrix.setTextColor(matrix.color444(81, 34, 198)); // R,G,B matrix.setFont(&FreeSansBold9pt7b); matrix.setCursor(9, 13); matrix.printf("%02d:%02d", tm->tm_hour, tm->tm_min); // matrix.swapBuffer(); matrix.setFont(); //matrix.printf(":%02d", tm->tm_sec); matrix.setCursor(9, 16); matrix.setTextColor(tm->tm_wday == ? matrix.color444(15, 0, 0) : tm->tm_wday == ? matrix.color444(0, 6, 15) : matrix.color444(6, 15, 6)); matrix.printf("%s", wd[tm->tm_wday]); matrix.setCursor(2, 24); matrix.setTextColor(matrix.color444(150, 0, 150)); matrix.printf("%02d/%02d/%04d\n", tm->tm_mday, tm->tm_mon+1, tm->tm_year+1900); //if(newMin != oldMin) {matrix.swapBuffer();} } 2.2.2 Thiết kế hiển thị sóng nhạc Sau có liệu âm đầu vào, chúng em tiến hành xử lý đưa mức phù hợp cho độ cao sóng Code sóng nhạc: #include #include //Sound sensor pin int soundSensor=34; const int maxScale = 31; const int sampleWindow = 32; // 50ms = 20Hz unsigned int sample; unsigned long startMillis; unsigned long timeCycle; unsigned int signalMax; unsigned int signalMin; unsigned int peakToPeak[64]; unsigned int displayPeak[64]; unsigned int signalMaxBuff[64]; unsigned int signalMinBuff[64]; //set name of matrix P3RGB64x32MatrixPanel matrix; void setup() { Serial.begin(921600); pinMode(soundSensor,INPUT); //setup matrix matrix.begin(); matrix.setCursor(14,1); matrix.setTextColor(matrix.color444(80, 0, 10)); matrix.printf("RGB\nMatrix LED"); delay(2000); //turn off all pixel matrix.fillScreen(0); } void loop() { startMillis = millis(); int levelMax=0; signalMax = 0; signalMin = 1024; int index=0; // Get data in 50ms while (millis() - startMillis < sampleWindow) { sample = analogRead(soundSensor); if (sample signalMax) { signalMax = sample; } if (sample < signalMin) { signalMin = sample; } } signalMaxBuff[index] = signalMax; signalMinBuff[index] = signalMin; index ++; delayMicroseconds(50); } // Calculation after get samples (get display data) for (int i = 0; i = 0; row ){ for (int col=0; col

Ngày đăng: 25/05/2023, 19:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w