Detecting Intercom Doorbell with ADS1115 ADC

Hi All,
I’ve built a system which detects if someone presses the intercom and sends me a push notification.

I’m using an ADS1115 ADC in differential mode to measure the analog voltage across the buzzer and negative terminal of the intercom. It works but I end up getting some noise and maybe some kind of feedback loop which causes buzzing to come through the speaker.

The speaker is connected to both the buzzer and voice terminals of the intercom. See diagram.

Does anyone have any ideas for how I can detect when the buzzer rings without introducing noise into the intercom circuit?

Thanks in advance!
Fred

Hi,
Welcome to the forum.

Please read the first post in any forum entitled how to use this forum.
http://forum.arduino.cc/index.php/topic,148850.0.html .

Try putting a 0.1uF bypass capacitor across the A3 and A4 pins.

What are the lengths of your wires, that is ADS to buzzer etc, ADS to Arduino controller.
What model controller are you using?

Tom… :slight_smile:

Hi Tom, Thanks for the help. Does it matter where exactly the capacitor goes?

For convenience, I just tried adding one across the Buzzer and Analogue screw terminal connections rather than soldering across A3 & A4, but the noise still occurred.

Ultimately, I'll be using a Pi Zero W so it can grab and image from an IP cam and communicate with the Push API, but I've been using an Uno for testing how to detect the buzzer.

There's 10cm of wire between the intercom screw terminal and the ADC, then 4cm between the ADC and my Arduino/Pi.

I thought that maybe I could use a SparkFun Opto-Isolator Breakout but I don't know if the 1.5v would be enough to cause a change in the output voltage since they are designed for 5V control.

The other idea was to put an LED across the buzzer+ Analogue- and tape a photo resistor to it so I can measure the voltage across it, though probably not the most reliable option!

Can you just use an optoisolator to detect the buzzer signal? Herb

That would be my idea as well :)

Thanks,

I have a 4n35 optoisolator. I’ll give it a try. Would also negate the need for the ADC.

The input has a forward voltage of 1.3V at 10mA. Here’s the circuit I’ll use. Does it look correct to you? Is there anything else I should add?

Have I calculated the input resistance correctly?

Fred

Does the buzzer indeed use such a small voltage? Sure it's not AC?

1k resistor can be left off. And if you connect the emitter to GND you can use the internal pull up resistor so you don't need resistors on the output side.

I'm not sure what exactly the voltage is across the Buzzer and - terminals. I don't have an oscilloscope, only a multimeter which gives me a consistent 1.5 DC.

I doubt it is 1.5 DC in actual fact though. The circuit board inside the intercom handset is super simple. As far as I can tell, the phone speaker is pretty much connected directly to the terminals and the buzzer signal itself is sent down the cable rather than a constant DC or AC voltage which rings and internal buzzer.

Not sure what I did wrong, but I've managed to fry the IC. Time to order some new ones...

fwhitten: Not sure what I did wrong, but I've managed to fry the IC. Time to order some new ones...

How do you mean "fry"? The opto? Tom... :)

fwhitten: Not sure what I did wrong, but I've managed to fry the IC. Time to order some new ones...

You can NOT use the ADS1115 in differential mode like that (image post#1, 2). There still needs to be a ground reference, and input voltages MUST stay WITHIN power/ground of the chip.

Use an opto, with the transistor connected between pin and ground, and internal pull up enabled on the pin (NO resistors). Use a 1k resistor (NOT 20ohm) for the opto LED, and use a (1N4148) diode across the opto LED (reverse direction) to protect the opto LED from negative voltages. Leo..

I indeed think the voltage to the buzzer might be AC or pulsed DC. You could try to measure it with a small cap via a diode to roughly measure the top voltage and via a resistor and cap (LP filter) to get an average. But yeah, you can also try a higher resistor and indeed a reverse protection diode.

Wawa:
You can NOT use the ADS1115 in differential mode like that (image post#1, 2).
There still needs to be a ground reference, and input voltages MUST stay WITHIN power/ground of the chip.

Use an opto, with the transistor connected between pin and ground, and internal pull up enabled on the pin (NO resistors).
Use a 1k resistor (NOT 20ohm) for the opto LED, and use a (1N4148) diode across the opto LED (reverse direction) to protect the opto LED from negative voltages.
Leo…

Thanks Leo,
Would you mind checking that I have understood you correctly. Is this the circuit you described?
Would it be beneficial to add a capacitor to smooth out the voltage at all?
Thanks!

|500x273

Yeah, this is correct. No real need to add a capacitor, if the buzzer signal isn't stable you can probably filter ( "debounce") in software. But a 100n on the output does not hurt and can be easier if the buzzer is really running on AC.

"GPIO with pull up resistor" should be "GPIO with internal pull up"

pinMode (optoPin, INPUT_PULLUP); // enable internal pull up (no physical resistor needed)

Leo..

It works! The new opto-isolators arrived today and the circuit works. One slight change I made was a used a 10k rather than a 1k resistor for the input since when I was testing the circuit with an LED, the LED would glow slightly when loud speech was coming through the speaker, swapping it out for a 10k meant the LED only lit up when the buzzer signal was sent. Thanks everyone!

Great news! Appreciated coming back to use :)

I may have spoken slightly prematurely! It does work and it’s a better solution than using the ADC that I was before. But after relocating from a proto board to soldered perf board, and assembling the intercom back together, there is a slight buzzing noise coming through the phone.

So far, it doesn’t sound as bad as the noise was with the ADC version. The only thing which I’ve noticed make a difference to the volume of the noise is if I hold the phone cable nearer to the Pi.

The noise might be bearable this time (I’ll check in the morning if some kind of feedback loop has made the noise get louder overnight like last time). But any ideas on what I could do to reduce it?

Sounds like the phone is just picking op noise from the Pi which of course has all kinds of switching going on. With an opto you have electrical isolation between the two but does not give you electromagnetic isolation. Aka, you probably hear that same noise with the opto disconnected and the Pi nearby.

Although, having said that, the wire between the opto and the buzzer may also pick up noise. So to reduce change there I would place the opto in the intercom (don't even really need a PCB for an opto and a resistor) and run a twisted pair to the Raspberry.