1.6V DC Input

Hi !

I'm new to the electronic world. I want to monitor an 1.6V signal that i receive from my building buzzer, so obviously i have 2 wire that gives me 1.6V when the button is pressed downstairs. As i said, i wan't to use this as a signal to trigger a relay (the raly part is done and working) that will open the door. I think i need to use the analog input cause the digital ones will not catch under 2.0V right ? May one of you could make a basic shematic to get me started and explain it to me. ?

Thank you :slight_smile:

An analog input would be the obvious answer, yes.

Otherwise a level-shifting circuit using a BJT would be needed to drive a digital input. BJT's only need 0.6V
or so to turn on. Something like 10k resistor from signal to base, emitter to ground, 10k from collector to 5V,
collector to digital pin.

If the wiring goes any distance you probably want to remove any noise pick-up from it by adding a 100nF capacitor to
ground at the Arduino end to short-out the high frequency noise.

Do you need any intelligence? If all you want is 1.6V to trigger the relay then all you need is a transistor.

fungus:
Do you need any intelligence? If all you want is 1.6V to trigger the relay then all you need is a transistor.

No i need knowledge and it's not "all i want". I need to process the input signal so the user can enter a "morse" code to open the relay.

I would use a transistor to level-shift from the 1.6V signal to 5V for the Arduino, rather than using analogRead().

Sorry, hit Send to quickly.

Or use a comparator with positive feedback to set a hysteresis. For something as slow as Morse code, an Op Amp will do.

Here's an online calculator, the top calculator is for a open collector comparator such as the LM339, the bottom calculator is for a comparator with push-pull output or for an Op Amp:
http://sim.okawa-denshi.jp/en/compkeisan.htm

V1 is the voltage the signal must drop below for the output to go low again.
V2 is the voltage the signal must rise above for the output to go high.

You should still filter for noise.

polymorph:
I would use a transistor to level-shift from the 1.6V signal to 5V for the Arduino, rather than using analogRead().

Ok i understand :slight_smile:

polymorph:
For something as slow as Morse code, an Op Amp will do.

I said morse code but it's really a simple algorithm where i'll check programatically if the use pressed the button X times within a Y amount of time. I'll educate myself and read about Op Amp.

polymorph:
I would use a transistor to level-shift from the 1.6V signal to 5V for the Arduino, rather than using analogRead().

Why?

You could also use the analog comparator in the Arduino mcu to compare the input against a voltage of (say) 1V obtained from a potential divider. But unless you need to respond to the signal extremely quickly, reading the input through an analog pin is simplest, insofar as it needs the smallest number of components.

fungus:

polymorph:
I would use a transistor to level-shift from the 1.6V signal to 5V for the Arduino, rather than using analogRead().

Why?

Less coding. It is on or it is off.

my building buzzer

Is this an electro-mechanical buzzer?

LarryD:

my building buzzer

Is this an electro-mechanical buzzer?

As a picture worth more than words:

This is the actual buzzer, i open the door by toogling a relay wired up to the pink and yellow wires. And the 1.6V signal come from the black and green wire.

dc42:
You could also use the analog comparator in the Arduino mcu to compare the input against a voltage of (say) 1V obtained from a potential divider. But unless you need to respond to the signal extremely quickly, reading the input through an analog pin is simplest, insofar as it needs the smallest number of components.

I don't understand the use of the potential divider here, i tough divider was to reduce voltage like 9V to 4.5V.

Give this a try:

polymorph:

fungus:

polymorph:
I would use a transistor to level-shift from the 1.6V signal to 5V for the Arduino, rather than using analogRead().

Why?

Less coding. It is on or it is off.

I prefer writing a couple of lines of code to soldering, so I would use analogRead. Also, if I want to adjust the threshold, I can do that just by changing a constant in the code rather than by changing the values of components (= more soldering).

I'm a hardware guy from way back, so I always think first of cleaning the signal up. A couple of trimpots, and I can change the setpoint and hysteresis on the fly.

Note that I am -not- saying that you are wrong.

If it was me, I'd also go with software...

Or use a comparator with positive feedback to set a hysteresis. For something as slow as Morse code, an Op Amp will do.

That can be done in software too...

Software is free*, it never fails**, burns-out or wears out, and it doesn't require any physical space.

One advantage to hardware is that you can field-adjust the threshold pot(s) without a computer and without re-coding or understanding the software.

  • Assuming you already have the microcontroller. There is programming labor, but I can write a few lines of code faster than I can build a comparator or level-shifter circuit. And, it's a lot easier to make changes... I can add two lines of code faster than I can add two resistors. Building a circuit could take a few days if you don't have the parts.

** Assuming no bugs.

polymorph:

fungus:

polymorph:
I would use a transistor to level-shift from the 1.6V signal to 5V for the Arduino, rather than using analogRead().

Why?

Less coding. It is on or it is off.

The only difference is:

if (analogRead(pin) > 200)

vs.

if (digitalRead(pin) == 0)

Not worth adding extra hardware just to avoid that, IMHO...

The best for this project will be the less hardware i think. The project is almost done all i need now if to get the signal from the two wires.

I'm a little confused by how the topic went here, too many different opinions that all seems good at some points but the fact that i'm a real noob in electronic almost bring me to zero.

If you guys can make me a schematic and explain it to me with the AnalogRead() method wich i think i'll go with it would be awesome.

Thank you guys :slight_smile:

Unless the signal is really dirty, Fungus is right.

You should have a resistor between the buzzer line and the Arduino, with protection diodes.

polymorph:
Unless the signal is really dirty, Fungus is right.

You should have a resistor between the buzzer line and the Arduino, with protection diodes.

From what i've seen on my multimeter (as far as i know how to use it) the current was good and really steady. Now for the maths, the resistor need to be calculated like R = V/I, so knowing i got 1.6v it's R = 1.6V/I, but i'm missing the I here. Guess it's the maximum current the arduino can handle?

The pin protection diodes in the Atmel mcus are good to at least 1mA according to an Atmel application note. So e.g. a 100K series resistor will offer protection to at least +/-100V. If you use more than 10K, it is a good idea to connect a 0.01uF or greater capacitor between the analog input pin and ground, to avoid crosstalk between the analog inputs, which is caused by the combination of higher source resistance and the very short sample time you get when using the standard analogRead code.