Sử dụng micro với Arduino


18

EDIT : Tôi đã nghiên cứu vấn đề này khá lâu. Nó hóa ra là một dự án khó khăn hơn tôi nghĩ và không phải là thứ dành cho người mới bắt đầu. Điều này đòi hỏi phần cứng đắt tiền (micro & bộ khuếch đại) và một số phân tích âm thanh tinh vi trên vi điều khiển. Ngay cả một micrô hoàn chỉnh với mạch amplyfier cũng không cung cấp kết quả mong muốn (theo nhận xét về sản phẩm này)


Tôi hoàn toàn mới với Arduino (nhưng tôi quen với lập trình). Để chế tạo đồng hồ VU , tôi muốn đặt micrô vào chân 0 tương tự của Arduino và hiển thị giá trị thông qua kết nối nối tiếp.

Tôi googled và tìm thấy mạch này:

Bộ khuếch đại âm thanh đơn giản

... và tôi đã cố gắng xây dựng nó với kết quả này:

(Tôi hiện đang sử dụng mạch được đề xuất bởi Oli Glaser trong câu trả lời của mình)

Các giá trị trên màn hình nối tiếp không thay đổi tùy thuộc vào âm lượng nhạc.

Cách dễ nhất để đo âm lượng trên đầu vào tương tự của Arduino là gì?

Ngoài ra, tôi có TDA2822M , nhưng tôi không biết liệu nó có hữu ích cho dự án này không. Chú thích trên micrô đọc XF-18D .

Chỉnh sửa: Mã arduino của tôi:

void setup() {
  Serial.begin(9600); 
}

void loop() {
  Serial.println(analogRead(0));
  delay(300);
}

Đầu ra nối tiếp: 1023 1022 1022 1022 1022 1023 1022, v.v.

Làm cách nào để kiểm tra xem micro có hoạt động không? Có định hướng không?

Chỉnh sửa: Tôi hiện đang sử dụng một bóng bán dẫn S9014. ADC và công việc kết nối nối tiếp (tôi đã thử nghiệm chúng với một chiết áp).

Đầu ra nối tiếp bây giờ là khoảng 57.

Ngoài ra, tôi không có đồng hồ vạn năng hoặc dao động. Tôi có một vạn năng bây giờ.


Bạn đã xác minh với một phạm vi mà bạn có thể thấy một dạng sóng âm thanh ở đầu ra của mạch của bạn chưa?
HikeOnPast

Whoa, tại sao chân 3V3 và 5V bị rút ngắn trong sơ đồ? Đó có thể là một vấn đề.
Sói Connor

Không, tôi chỉ không vẽ sơ đồ đúng.
Bánh mì nướng

Câu trả lời:


14

Cách "dễ nhất" chỉ đơn giản là áp dụng tín hiệu và mẫu với ADC. Lưu trữ kết quả vào bộ đệm sau đó hiển thị như mong muốn (trong trường hợp của bạn gửi đến PC qua RS232)
Nếu bạn muốn mức RMS của tín hiệu thì bạn sẽ cần tính toán điều này tại một số điểm, trước khi gửi tới PC hoặc sau đó.

Mạch khuếch đại của bạn như được hiển thị là không lý tưởng, nhưng nên hoạt động hợp lý cho máy đo VU cơ bản. EDIT - Tôi chỉ chú ý đến C2, loại bỏ điều này vì nó sẽ chặn sai lệch DC khỏi bóng bán dẫn và tín hiệu sẽ dao động dưới mặt đất.

EDIT - đây là một mạch tốt hơn cho bóng bán dẫn khuếch đại:

Electret amp

Điều này không nên quan tâm quá nhiều về bóng bán dẫn được sử dụng, độ lệch đầu ra nên ở khoảng 2,5V.
Các giá trị chính xác cho bộ chia đầu vào (R3 và R4) không quá quan trọng, tỷ lệ 1: 4 là như vậy. Vì vậy, bạn có thể sử dụng, ví dụ 400k và 100k, hoặc 40k và 10k, v.v (cố gắng không vượt lên trên hoặc dưới các giá trị tương ứng này). C2 nên> 10uF. C1 phải là> 1uF (thay thế C1 trong sơ đồ của bạn)
R1 và R2 thực sự cần phải là những giá trị này.
Tất cả những gì bạn cần là điện từ với điện trở phân cực (R1 trong sơ đồ của bạn)

Một điểm đáng quan tâm là các đường Arduino 3.3V và 5V dường như được gắn với nhau - Tôi cho rằng đây là lỗi sơ đồ, nhưng nếu đây là trường hợp trong mạch thực tế thì nó sẽ không hoạt động và có thể làm hỏng thứ gì đó.
Để xác định (các) vấn đề, sẽ giúp xem mã của bạn và những gì bạn đang thấy ở phía PC. Ngoài ra những gì bạn đang sử dụng bóng bán dẫn?

Nếu bạn có máy hiện sóng, thì bạn có thể kiểm tra xem mic / bóng bán dẫn của bạn có hoạt động chính xác không. Nếu không, thì có thể sử dụng đồng hồ vạn năng để thực hiện một số thử nghiệm cơ bản hơn (ví dụ: xác nhận + 5V hiện tại, xác nhận cơ sở của bóng bán dẫn ở mức ~ 0,6V, bộ thu kiểm tra để đảm bảo rằng nó không được ghim vào + 5V hoặc nối đất không có tín hiệu)

Ngoài ra, bạn cần đảm bảo rằng RS232 hoạt động chính xác, do đó, viết một số mã đơn giản để gửi một số giá trị thử nghiệm sẽ là một ý tưởng tốt.

Nếu bạn có thể cung cấp thông tin được yêu cầu và cho chúng tôi biết những công cụ nào bạn có sẵn trợ giúp cụ thể hơn có thể được cung cấp.

EDIT - nếu bạn lấy mẫu quá chậm, thì bạn sẽ cần một mạch phát hiện cực đại như thế này:

Phát hiện đỉnh

Bạn sẽ đặt mạch này ở giữa bóng bán dẫn và chân Arduino (trừ C2)

Các diode có thể chỉ là về bất kỳ diode. Các giá trị nắp và điện trở chỉ là một hướng dẫn, chúng có thể được thay đổi một chút. Giá trị của chúng chỉ ra thời gian điện áp sẽ thay đổi theo mức tín hiệu. Bạn có thể tính toán giá trị này bằng hằng số RC (tức là R * C - trong ví dụ trên, hằng số RC là 1e-6 * 10e3 = 10ms. Điện áp sẽ mất khoảng 2,3 thời gian không đổi để giảm 90% giá trị ban đầu, vì vậy trong ví dụ trên nếu điện áp bắt đầu ở 1V và bạn loại bỏ tín hiệu, nó sẽ giảm xuống 0,1V sau khoảng 23ms sau đó.

EDIT - okay, nghĩ rằng tôi tìm thấy một vấn đề lớn. Transitor S9012 của bạn là một bóng bán dẫn PNP (cũng như S9015), bạn cần một bóng bán dẫn NPN cho mạch này. Các S9014 là một transistor NPN, vì vậy bạn sẽ phải sử dụng thế này.

Các tụ điện được đánh dấu "104" gần như chắc chắn là tụ gốm 0,1uF. Giá trị (tính bằng pF) là 2 số đầu tiên theo sau là một số không được đặt theo số cuối. Vì vậy, đối với 104, giá trị là 10 + 4 số không, hoặc 100.000pF. 100.000pF là 100nF hoặc 0,1uF.

EDIT - Không có phạm vi hoặc đồng hồ vạn năng khiến cuộc sống ở đây rất khó khăn (bạn nên nắm giữ một hoặc cả hai ngay khi có thể)
Tuy nhiên, có một số máy hiện sóng âm thanh PC cơ bản có thể được sử dụng để kiểm tra mạch điện / bóng bán dẫn của bạn. Phân tích hình ảnh là một ví dụ khá hay:

Phân tích thị giác

Nếu bạn thay thế C2 (không thực sự cần thiết nhưng là một ý tưởng tốt), bạn sẽ có thể truyền tín hiệu trực tiếp vào PC và quan sát trong phần mềm để xem micrô và khuếch đại có hoạt động chính xác không. Nếu PC của bạn có dòng sử dụng, nhưng đầu vào micrô thường tốt cho tối đa 2V IIRC. Bạn cũng có thể kiểm tra điện tử trực tiếp - chỉ cần loại bỏ bit bóng bán dẫn và giữ R1 và C1, lấy tín hiệu từ phía bên kia của C1.
Lưu ý rằng phương pháp này sẽ không kiểm tra các mức DC, chỉ có AC (do nắp chặn DC trong đầu vào souncard) nhưng tín hiệu AC (âm thanh) là điều bạn quan tâm ở đây.

Nếu bạn thử điều này, hãy đăng ảnh chụp màn hình để chúng tôi có thể biết được chuyện gì đang xảy ra.


3.3V và 5V không được gắn với nhau. Đây là lần đầu tiên tôi sử dụng phần mềm này - xin lỗi. Tôi sẽ đặt mã của mình vào câu hỏi nhưng không có gì có thể sai với nó. Ngoài ra, tôi đã thực hiện một dự án ngày hôm nay sử dụng một quang điện trở và hiển thị giá trị trên sáu đèn led như tôi muốn đồng hồ vu của mình trông giống như vậy và tôi đã thử nghiệm kết nối nối tiếp với nó. Tôi không có máy hiện sóng hay đồng hồ vạn năng. Transitor có chú thích "S9012 H 331" Tôi cũng có "S9014 C 331" và S9015.
Bánh mì nướng

@Toast - xem chỉnh sửa về C2, xóa cái này và kết nối trực tiếp.
Oli Glaser

Tôi đã loại bỏ C2 và thêm các phần khi Kristoffon mô tả nó trong câu trả lời của anh ấy. Vẫn kết quả như vậy.
Bánh mì nướng

1
Nếu bạn có một chiết áp hoặc nguồn điện áp thay đổi, bạn có thể áp dụng đầu vào 0-5V cho đầu vào của ADC để kiểm tra mã của bạn, độc lập với mạch đầu vào của bạn. Bạn đang cố gắng gỡ lỗi hai thứ cùng một lúc - cô lập mạch và xác minh hành vi của nó bằng cách sử dụng máy hiện sóng và / hoặc cô lập mã của bạn và cung cấp đầu vào biến đổi nhưng có thể dự đoán được để xác thực mã của bạn.
HikeOnPast

1
@OliGlaser Mình bối rối vì mạch. "Electret" là micro? Trường hợp dây khác của micro đi, GND hoặc VCC? Tôi có kết nối 5 hoặc 3,3V với mạch đó không? Bạn có thể vui lòng bằng cách nào đó loại bỏ các EDITkhối và chỉnh sửa nó để nó có thể được hiểu mà không cần đọc chủ đề bình luận? Tôi cũng là người mới bắt đầu và tôi không hiểu vấn đề đã được giải quyết như thế nào và liệu tôi có thể sử dụng mạch mà bạn đã đăng không.
Tomáš Zato - Phục hồi Monica

4

Giả sử mạch của bạn hoạt động, tín hiệu âm thanh nằm trong phạm vi kHz trong khi Arduino có ADC phù hợp với các mức DC. Thành phần DC trên tín hiệu của bạn bằng không, nghĩa là nó nổi trên một điện áp cố định. Đó là điện áp cố định mà ADC của bạn đang đọc.

Để khắc phục điều đó, bạn sẽ đặt một diode nối tiếp với đầu ra của bạn kết nối với ADC và với một tụ điện và điện trở.

Nắp sẽ sạc đến giá trị cực đại được nhận trong khi điện trở sẽ xả nắp khi tín hiệu tắt.

--|>|---*---- adc
        *---- resistor -----*----ground
        \----- capacitor ---/

Chỉnh sửa: Đầu vào ADC thực sự nổi vì nó không có bất kỳ sai lệch nào do tụ điện nối tiếp. Nếu bạn đang cố gắng giải pháp của tôi, hãy xóa C2.


Được rồi, tôi đã thêm nó vào mạch và tín hiệu trên màn hình nối tiếp bây giờ là 458 (nhưng vẫn không thay đổi khi có nhiễu).
Bánh mì nướng

Tôi đã trao đổi bóng bán dẫn từ "S9012 H 331" thành "S9014 C 331" và giá trị là 56.
Toast

1
Arduino ADC có khả năng lấy mẫu đủ nhanh cho âm thanh. Tôi không sử dụng chúng, nhưng tôi nghĩ rằng 10ksps (băng thông lên đến 5kHz) là có thể với các chức năng thư viện, điều này rất tốt cho các công cụ lo-fi (tôi khá chắc chắn rằng ATMega thực tế có thể lấy mẫu nhanh hơn nếu được sử dụng bình thường)
Oli Glaser

@ Toast - Bạn lấy mẫu nhanh như thế nào? Nếu nó rất chậm thì máy dò đỉnh là một ý kiến ​​hay. Bạn có thể làm điều này trong phần mềm mặc dù.
Oli Glaser

2
@Kristoffon - Không phải với Arduino no, nhưng tôi đã sử dụng micros 8 bit tương tự (ví dụ PIC16F, 18F, v.v.) để lấy mẫu và phát lại âm thanh nhiều lần. 10ksps là dễ dàng có thể làm được. Để trích dẫn tài liệu ADC ADC này :When using single-ended mode, the ADC bandwidth is limited by the ADC clock speed. Since one conversion takes 13 ADC clock cycles, a maximum ADC clock of 1 MHz means approximately 77k samples per second. This limits the bandwidth in single-ended mode to 38.5 kHz, according to the Nyquist sampling theorem.
Oli Glaser

4

Bài đọc của bạn về 1022, 1023 về cơ bản là quy mô đầy đủ trên ADC của Arduino. Giả sử bạn đã cài đặt một tụ điện không bị lỗi như trong sơ đồ của mình, mức này không thể đến từ mạch micrô bạn đã tạo, vì điều đó chỉ có thể ghép đôi điện áp thay đổi (ví dụ: AC).

Do đó, tôi nghi ngờ bạn đang đọc dòng điện rò rỉ trong chính ATMEGA - bạn có thể sẽ nhận được kết quả tương tự trên bất kỳ chân tương tự (không được kết nối) nào khác.

Hãy thử tạo một bộ chia điện áp rất "nhẹ" với một số điện trở có giá trị cao (trong khoảng từ 10K đến 100K) và sử dụng công cụ này để phân cực đầu vào tương tự xuống một nửa điện áp tham chiếu (bạn cũng có thể sử dụng một chiết áp, cung cấp cho bạn một số khả năng kiểm tra bổ sung). Sau đó, việc đọc của bạn không có đầu vào nên nằm trong vùng lân cận 512.

Khi bạn có đầu vào ADC được thiên vị phù hợp, bạn có thể bắt đầu làm việc để thử xem bạn có biến thể thông qua nó không. Bạn có thể nhấn mạnh băng thông của mình một số, điều đó có nghĩa là bạn sẽ lấy bí danh của các thành phần tần số cao, nhưng nếu tất cả những gì bạn đang cố gắng là ước tính âm lượng tổng thể không phải là quá nhiều vấn đề.


Nghe có vẻ đúng, tôi đoán nó đã quá tải. OP có bạn nghĩ đến việc kết nối một loa nhỏ để gỡ lỗi dòng tương tự mà bạn đọc. Khi tôi thực hiện một đồng hồ đo, tôi lấy các đường dây từ giắc cắm tai nghe, về cơ bản là đi thẳng vào AnalogRead và bỏ qua kết quả.
Hellonearthis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.