- Vật liệu thiết yếu:
- Sơ đồ mạch:
- Sử dụng phương pháp hồi quy để tính dB từ giá trị ADC:
- Chương trình Arduino để đo mức âm thanh theo dB:
- Hoạt động của Máy đo mức âm thanh Arduino:
- Bộ khuếch đại với mạch lọc:
Ô nhiễm tiếng ồn đã thực sự bắt đầu trở nên quan trọng do mật độ dân số cao. Tai người bình thường có thể nghe thấy các mức âm thanh từ 0dB đến 140dB, trong đó mức âm thanh từ 120dB đến 140dB được coi là tiếng ồn. Độ ồn hoặc mức âm thanh thường được đo bằng decibel (dB), chúng tôi có một số công cụ có thể đo tín hiệu âm thanh bằng dB nhưng những máy đo này hơi đắt và đáng buồn là chúng tôi không có mô-đun cảm biến ngoại vi để đo mức âm thanh bằng decibel. Và sẽ không kinh tế nếu mua các micrô đắt tiền cho một dự án Arduino nhỏ để đo mức âm thanh trong một lớp học hoặc phòng khách nhỏ.
Vì vậy, trong dự án này, chúng tôi sẽ sử dụng micrô Electret Condenser bình thường với Arduino và thử đo mức độ ô nhiễm âm thanh hoặc tiếng ồn tính bằng dB càng gần với giá trị thực càng tốt. Chúng tôi sẽ sử dụng một mạch khuếch đại bình thường để khuếch đại tín hiệu âm thanh và đưa nó đến Arduino, trong đó chúng tôi sẽ sử dụng phương pháp hồi quy để tính toán các tín hiệu âm thanh theo dB. Để kiểm tra xem các giá trị thu được có chính xác hay không, chúng tôi có thể sử dụng ứng dụng android “Máy đo âm thanh”, nếu bạn có máy đo tốt hơn, bạn có thể sử dụng ứng dụng đó để hiệu chuẩn. Lưu ý rằng dự án này không nhằm mục đích đo dB chính xác và sẽ chỉ cung cấp các giá trị càng gần giá trị thực càng tốt.
Vật liệu thiết yếu:
- Arduino UNO
- Cái mic cờ rô
- LM386
- 10K biến POT
- Điện trở và tụ điện
Sơ đồ mạch:
Mạch cho Máy đo mức âm thanh Arduino này rất đơn giản, trong đó chúng tôi đã sử dụng mạch khuếch đại âm thanh LM386 để khuếch đại tín hiệu từ micrô tụ điện và cung cấp cho cổng Analog của Arduino. Chúng tôi đã sử dụng IC LM386 này để xây dựng một mạch khuếch đại âm thanh điện áp thấp và mạch ít nhiều vẫn giữ nguyên.
Độ lợi của op-amp cụ thể này có thể được đặt từ 20 đến 200 bằng cách sử dụng điện trở hoặc tụ điện trên chân 1 và 8. Nếu chúng được để tự do, độ lợi sẽ được đặt là 20 theo mặc định. Đối với dự án của chúng tôi, chúng tôi đạt mức tối đa có thể của mạch này, vì vậy chúng tôi sử dụng một tụ điện có giá trị 10uF giữa các chân 1 và 8, lưu ý rằng chân này là cực nhạy và chân âm của tụ điện phải được kết nối với chân 8. Bộ khuếch đại hoàn chỉnh mạch được cấp nguồn bởi chân 5V từ Arduino.
Tụ C2 được sử dụng để lọc nhiễu DC từ Micrô. Về cơ bản khi micro cảm nhận được âm thanh thì sóng âm thanh sẽ được chuyển thành tín hiệu AC. Tín hiệu AC này có thể có một số nhiễu DC kết hợp với nó sẽ được lọc bởi tụ điện này. Tương tự, ngay cả sau khi khuếch đại, tụ điện C3 được sử dụng để lọc bất kỳ nhiễu DC nào có thể đã được thêm vào trong quá trình khuếch đại.
Sử dụng phương pháp hồi quy để tính dB từ giá trị ADC:
Khi chúng tôi đã sẵn sàng với mạch của mình, chúng tôi có thể kết nối Arduino với máy tính và tải lên chương trình Ví dụ “Đọc nối tiếp tương tự” từ Arduino để kiểm tra xem chúng tôi có nhận được các giá trị ADC hợp lệ từ micrô của mình hay không. Bây giờ chúng ta phải chuyển đổi các giá trị ADC này thành dB.
Không giống như các giá trị khác như đo nhiệt độ hoặc độ ẩm, đo dB không phải là một nhiệm vụ đơn giản. Vì giá trị của dB không tuyến tính với giá trị của ADC’s. Có một số cách mà bạn có thể đến nhưng mọi bước có thể mà tôi đã thử đều không mang lại kết quả tốt. Bạn có thể đọc qua diễn đàn Arduino này tại đây nếu bạn muốn dùng thử.
Đối với ứng dụng của tôi, tôi không cần nhiều độ chính xác khi đo các giá trị dB và do đó quyết định sử dụng một cách dễ dàng hơn để hiệu chỉnh trực tiếp các giá trị ADC với các giá trị dB. Đối với phương pháp này, chúng tôi sẽ cần một máy đo SPL (Máy đo SPL là một công cụ có thể đọc các giá trị dB và hiển thị nó), nhưng đáng buồn là tôi không có và chắc chắn rằng hầu hết chúng ta sẽ không có. Vì vậy, chúng tôi có thể sử dụng ứng dụng Android có tên "Máy đo âm thanh" có thể được tải xuống miễn phí từ cửa hàng Play. Có rất nhiều loại ứng dụng như vậy và bạn có thể tải xuống bất cứ thứ gì bạn chọn. Các ứng dụng này sử dụng micrô có sẵn của điện thoại để phát hiện mức độ tiếng ồn và hiển thị trên điện thoại di động của chúng tôi. Chúng không chính xác lắm, nhưng chắc chắn sẽ phù hợp với nhiệm vụ của chúng tôi. Vì vậy, hãy bắt đầu bằng cách cài đặt ứng dụng Android, của tôi khi mở ra trông giống như sau
Như tôi đã nói trước đó, mối quan hệ giữa giá trị dB và Analog sẽ không phải là tuyến tính do đó chúng ta cần so sánh hai giá trị này ở các khoảng thời gian khác nhau. Chỉ cần ghi lại giá trị của ADC được hiển thị trên màn hình cho các dB khác nhau được hiển thị trên điện thoại di động của bạn. Tôi đã đọc khoảng 10 bài đọc và chúng trông như thế này bên dưới, bạn có thể thay đổi một chút
Mở một trang excel và nhập các giá trị này, bây giờ chúng ta sẽ sử dụng Excel để tìm các giá trị hồi quy cho số trên. Trước đó, hãy vẽ một biểu đồ và kiểm tra xem chúng có liên quan như thế nào, của tôi trông như thế này bên dưới.
Như chúng ta có thể thấy giá trị dB không liên quan tuyến tính với ADC, nghĩa là bạn không thể có một hệ số nhân chung cho tất cả các giá trị ADC để có được giá trị dB tương đương của nó. Trong trường hợp này, chúng ta có thể sử dụng phương pháp "hồi quy tuyến tính". Về cơ bản, nó sẽ chuyển đổi đường thẳng màu xanh không đều này thành đường thẳng gần nhất có thể (đường đen) và cho chúng ta phương trình của đường thẳng đó. Phương trình này có thể được sử dụng để tìm giá trị tương đương của dB cho mọi giá trị của ADC mà Arduino đo được.
Trong excel, chúng tôi có một trình cắm thêm để phân tích dữ liệu sẽ tự động tính toán hồi quy cho tập giá trị của bạn và xuất bản dữ liệu của nó. Tôi sẽ không trình bày cách làm điều đó với excel vì nó nằm ngoài phạm vi của dự án này, bạn cũng có thể dễ dàng sử dụng Google và tìm hiểu nó. Khi bạn tính toán hồi quy cho giá trị, excel sẽ đưa ra một số giá trị như hình dưới đây. Chúng tôi chỉ quan tâm đến những con số được đánh dấu bên dưới.
Khi bạn nhận được những con số này, bạn sẽ có thể hình thành phương trình dưới đây như
ADC = (11,003 * dB) - 83,2073
Từ đó bạn có thể suy ra dB là
dB = (ADC + 83,2073) / 11,003
Bạn có thể phải điều khiển phương trình của riêng mình vì hiệu chuẩn có thể khác nhau. Tuy nhiên, hãy giữ giá trị này an toàn vì chúng ta sẽ cần nó trong khi lập trình Arduino.
Chương trình Arduino để đo mức âm thanh theo dB:
Chương trình hoàn chỉnh để đo dB được đưa ra bên dưới, một số dòng quan trọng được giải thích bên dưới
Trong hai dòng trên, chúng tôi đọc giá trị ADC của chân A0 và chuyển đổi nó thành dB bằng cách sử dụng phương trình mà chúng tôi vừa suy ra. Giá trị dB này có thể chúng tôi không chính xác với giá trị dB thực nhưng vẫn khá gần với các giá trị được hiển thị trên ứng dụng di động.
adc = analogRead (MIC); // Đọc giá trị ADC từ amplifer dB = (adc + 83.2073) / 11.003; // Chuyển đổi giá trị ADC thành dB bằng các giá trị hồi quy
Để kiểm tra xem chương trình có hoạt động bình thường hay không, chúng tôi cũng đã thêm một đèn LED vào chân kỹ thuật số 3, đèn này được tạo ra ở mức cao trong 1 giây khi Arduino đo tiếng ồn lớn trên 60dB.
if (dB> 60) {digitalWrite (3, HIGH); // bật đèn LED (CAO là mức điện áp) delay (1000); // đợi một digitalWrite thứ hai (3, LOW); }
Hoạt động của Máy đo mức âm thanh Arduino:
Khi bạn đã sẵn sàng với mã và phần cứng, chỉ cần tải mã lên và mở màn hình nối tiếp của bạn để xem các giá trị dB được đo bởi Arduino của bạn. Tôi đã thử nghiệm mã này trong phòng của mình, nơi không có nhiều tiếng ồn ngoại trừ giao thông bên ngoài và tôi nhận được các giá trị dưới đây trên màn hình nối tiếp của mình và ứng dụng android cũng hiển thị một cái gì đó gần với giá trị này
Hoạt động hoàn chỉnh của dự án có thể được tìm thấy tại video được cung cấp ở cuối trang này. Bạn có thể sử dụng để chiếu để phát hiện âm thanh trong phòng và kiểm tra xem có bất kỳ hoạt động nào hoặc có bao nhiêu tiếng ồn được tạo ra trong mỗi lớp học hoặc tương tự như vậy. Tôi vừa tạo một đèn LED để tăng cao trong 2 giây nếu có âm thanh được ghi trên 60dB.
Công việc làm hài lòng một cách kỳ lạ, nhưng chắc chắn có thể được sử dụng cho các dự án và các nguyên mẫu cơ bản khác. Với một vài lần đào sâu hơn, tôi nhận thấy rằng vấn đề thực sự là ở phần cứng, điều này thỉnh thoảng vẫn khiến tôi bị nhiễu. Vì vậy, tôi đã thử các mạch khác được sử dụng trong bảng micrô vui nhộn tia lửa có bộ lọc thông thấp và thông cao. Mình có giải thích mạch bên dưới để bạn thử.
Bộ khuếch đại với mạch lọc:
Ở đây chúng tôi đã sử dụng các bộ lọc thông thấp và thông cao cùng với Amplifier để giảm nhiễu trong mạch đo mức âm thanh này để có thể tăng độ chính xác.
Trong mạch trên, chúng tôi đã sử dụng bộ khuếch đại LM358 phổ biến để khuếch đại tín hiệu từ micrô. Cùng với bộ khuếch đại, chúng tôi cũng đã sử dụng hai bộ lọc, bộ lọc thông cao được hình thành bởi R5, C2 và bộ lọc thông thấp được sử dụng bởi C1 và R2. Các bộ lọc này được thiết kế để cho phép tần số chỉ từ 8Hz đến 10KHz, vì bộ lọc thông thấp sẽ lọc bất kỳ thứ gì dưới 8Hz và bộ lọc High Pass sẽ lọc bất kỳ thứ gì trên 15KHz. Dải tần số này được chọn là do micrô tụ điện của tôi chỉ hoạt động từ 10Hz đến 15KHZ như được hiển thị trong biểu dữ liệu bên dưới.
Nếu nhu cầu tần số của bạn thay đổi thì bạn có thể sử dụng các công thức dưới đây để tính giá trị của Điện trở và tụ điện cho tần số yêu cầu của bạn.
Tần số (F) = 1 / (2πRC)
Ngoài ra, lưu ý rằng giá trị của điện trở được sử dụng ở đây cũng sẽ ảnh hưởng đến Độ lợi của bộ khuếch đại. Tính giá trị của điện trở và tụ điện được sử dụng trong mạch này được hiển thị bên dưới. Bạn có thể tải xuống trang tính excel từ đây để sửa đổi các giá trị của Tần suất và tính toán các giá trị hồi quy.
Mạch trước đây hoạt động thỏa mãn mong đợi của tôi, vì vậy tôi chưa bao giờ thử cái này. Nếu bạn tình cờ thử mạch này, hãy cho tôi biết nếu nó hoạt động tốt hơn mạch trước thông qua các ý kiến.