i am able to send audio signal through mic and send it via arduino and receive it on speaker.

i need two things

1.) The voice i am hearing on speaker has on speaker has lots of noise with it. i need to reduce it 2.) I need to send that analog signal received from the mic via Ethernet/web to another arduino. i have Ethernet shield i am able data from switch but not from mic.

let me start from the beginning, i have attached mic to the audio amplifier and have attached output of the amplifier to the a0 pin of the arduino. The arduino is connected to the DAC(PCF8519) with a5 and a4 pin of the aurdino. The output of the dac is connected to the LM386 audio amplifier module and its output is connected speaker. when i speak via mic i am able to hear it on speaker but it has has some noise attached to it. IF you can suggest solution for that it will be great.

now i want to send the data of the mic to another arduino via web/Ethernet. i am able to get the data of the switch but not been able to get proper data from the mic.So pls help out with that.

here is my audio amplifier circuit: here is my audio amplifier circuit

here is my code for one arduino code that worked

`#include "Wire.h"` 
 #define PCF8591 (0x90 >> 1)
 void setup()
 void loop()

I need to reduce the noise on the speaker and i want to send the data of the mic via web/Ethernet to another arduino.

  • do you get the noise if the arduino is not in the circuit?
    – jsotola
    Mar 7, 2021 at 16:22
  • "i need two things". Unless you have reason to think the two problems are interrelated to the point where one can't be solved without solving the other, pick one and make your question about that.
    – timemage
    Mar 7, 2021 at 16:29
  • 2
    Streaming audio over ethernet or (heaven forbid) the web is a very hard thing to do. Not something we can help you with on here. Also the Arduino really cannot do audio, and an I2C DAC is probably the second worst idea for audio ever.
    – Majenko
    Mar 7, 2021 at 16:54
  • 1
    Dorian, their is no error with c4 capacitor Mar 9, 2021 at 11:45
  • 1
    @dorian I have already done that that's why I said there's no error with c4 Mar 10, 2021 at 13:04

1 Answer 1


ADC input has 100Mohm impedance. By placing C4 the signal at the ADC input has no DC path, is just floating between -0.7v and 5.7v , limited only by the input clamping diodes.

ADC can convert only voltages between 0 and the voltage reference, I suppose you use the default 5V reference.

But your signal is floating, and the ADC will cut any peaks outside of the conversion area giving the noise you hear.

Another issue I see here is that the data sheet of LM386 specifies a load between 4ohm and 32ohm. There is no warrantee that it will work without a load as in your case. Most likely not.

So you might want to connect C4 to a proper load and take the signal for ADC straight from pin 5 of LM386 which is auto balanced at half of the voltage supply.


simulate this circuit – Schematic created using CircuitLab

Later edit after I found the source of the schematic, there are also comments there that the schematic will never work with Arduino with the capacitor connected, the only working application was a sound detector where the signal distortion does not matter.

Please do not trust the content of any unknown website published by an anonymous just because it looks like a tutorial made by somebody who knows something.

Edit to add some info on how to debug the issue.

First, in the above schematic replace the resistor with a speaker and see if the sound is good. If not than see what is wrong with your amplifier.

If it's good and loud without any distortion then put the resistor back.

Use a binary mode serial monitor like Realterm to see how your data looks, the Arduino serial monitor works only in Ascii mode which turns a byte into three ascii chars which is slow.

Something like that

void setup() {
    Serial.begin(230400); // opens serial port, sets data rate to or maximum supported by your board to minimize latency

void loop()
     unsigned int temp;
     temp = analogRead(0);
     temp = temp>>4; //strip low bits to fit in a single byte

Then see how your data looks, if you have to many 00 or to many FF than you know that your data us upper or lower limited or what is wrong with your signal.

I hope you are aware that the ADC conversion takes 100us and the wire transmission also around 200us the maximum sample rate you can expect is around 3khz and a maximum bandwidth of the audio signal of 1.5kHz which is half of the telephony bandwidth, you might want to use a faster DAC and use some non blocking ADC reading to use the time while ADC is working like in this article

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.