0

In an effort to make a wearable piece of electronics, I would like to be able to control a large number of buzzers, sewn together on a string, from a single output pin on my Arduino.

The idea already exists: Several companies offer ready-made LED chains which can be controlled through a single pin (see for instance here). These purpose-made LEDs have 4 pins: Two for electricity and two for receiving and transmitting a signal. If I understood it correctly (and please correct me if I am wrong), this is simply a serial shift register: Bits are pushed through the system until all are in place, then only requiring a latch signal to activate them.

However, in my case, the buzzers I intend to use have only the electricity wires and have no way to be chained together, yet controlled separately. So this got me thinking: Can I, through simple means/tools, construct my own chain which I can address through a single pin on the Arduino? If so, what would I need to do & buy to accomplish it? In essence, what I am trying to achieve is maybe captured in this picture.

I am aware that this could be solved with shift registers and/or I/O expansions, but this causes problems for me because I would need one wire per buzzer, and so with a large number of buzzers, I would be forced to purchase a big number of shift registers and sew a large amount of conductive thread to serve as wire.

I have seen similar questions to this one (see here, here and here), but the answers there always tended to go for solutions which would allow me to create 8 wires out of a single one (so using shift registers, 1-wire 8-channel switches, etc.), which is exactly what I am trying to avoid, if at all possible.

Edit: Clarification - What I mean by more wires is this: If I can link and control all the buzzers (which will probably be upwards of 30), through a single chain, that means that I have 3 distinct wires, as in the example website for the LED design I gave above: two power lines and one to send controls over.

On the other hand, if I placed multiple shift registers (I'd probably need at least four chained shift registers?), I'd need one wire from the SRs to each of the buzzers, which means I would need two power lines and 30 wires, which is a nuisance.

Mark Anderson
  • 135
  • 1
  • 5
  • 1
    Could you please define what you mean by 'large number', controlling 10 buzzers is whole lot different to controlling 100 or a 1000 etc. and I don't consider those numbers particularly large. The problem could be reduced to three wires (power +. power -, data) quite easily. – JIm Dearden Jan 05 '15 at 16:12
  • Also maybe you can elaborate on how this isn't a duplicate of the questions you already link. If each buzzer has two wires, you need two wires per buzzer, somewhere, otherwise you'd have no way to physically connect to each one individually. There's no way around that. Or am I not understanding whatever it is you are "trying to avoid"? – Phil Frost Jan 05 '15 at 16:26
  • @PhilFrost I have added a small clarification at the end, I hope this makes it more clear. If I should be completely mistaken as to how such a situation is usually dealt with, please let me know. I am a complete beginner when it comes to electrical engineering, so some obvious things might not be at all clear to me. – Mark Anderson Jan 05 '15 at 16:44
  • Your picture link gives a 403-forbidden. – Wouter van Ooijen Jan 05 '15 at 16:51
  • What is the real issue here? And what is your definition of 'wire'? From reading the above, one wire is one continuous connected piece/thread. If the concern is the length of conductive thread used (causing sewing is a burden), I think you won't have any savings by moving to one wire, versus multiple separate threads. Solutions to use only 1 continuous wire will require a bus of sorts (1-wire, or a modified version of SPI/I2C), and will be a lot more overhead on the firmware end, especially if you want to use stock components. – darudude Jan 05 '15 at 18:02
  • 1
    @darudude conductive thread is expensive, and multiple threads are hard to route properly in most clothing. OP is looking for exactly that, a serial bus setup. – Passerby Jan 05 '15 at 18:32

4 Answers4

3

From your question I think you have one of those black plastic buzzers in mind that has two wires?

enter image description here

If you restrict your design to 3 wires (daisy chained through all buzzer locations) you won't escape from having a chip at each location. Once you have a chip you will need a PCB. There are much smaller buzzers/speakers than the type you have in mind that can be mounted on a PCB. Put a small < $1 micro-controller (a PIC 10F200 would do, but I would prefer a small Cortex M0) and you can program it to do exactly what you want, including beeping at various frequencies etc. But this does require some programming!

enter image description here

enter image description here

Wouter van Ooijen
  • 48,407
  • 1
  • 63
  • 136
3

You could use the Dallas 1-wire protocol (eg. DS2413) to control many buzzers or LEDs.

Each chip has a unique 64-bit address, so each output could be addressed individually.

http://datasheets.maximintegrated.com/en/ds/DS2413.pdf

You would need one chip for each location.

Spehro Pefhany
  • 376,485
  • 21
  • 320
  • 842
2

With 1-bit shift registers (e.g. sn74lvc1g374 ) you'd have 30 chained shift registers. That would require 0V, +V, clock, data and enable wires. If it's OK to pulse the buzzers for microseconds while loading the data, you can do without the enable wire.

Having only 3 wires requires a more complicated protocol such as WS2811, which is designed for LED driving but you might be able to connect a buzzer to its PWM output via a suitable transistor.

Pete Kirkham
  • 1,976
  • 12
  • 16
1

It's simply a matter of combining a few parts. A shift register, or I2C or SPI or 1-wire gpio expander, depending on your microcontroller, which then connects to n channel transistors or mosfets, which drive the buzzers. Just like you would directly, but with the ic instead.

Misread the question. Given what you want to achieve, a string of buzzers without multiple wires, you would still need to purchase multiple ICs, one for each buzzer. These would be 1 or 2 bit shift registers, just like the smart led strips have. Either one ic per buzzer, or multiple wires per ic expander.

Passerby
  • 72,580
  • 7
  • 90
  • 202
  • Hello! Could you maybe elaborate on this a bit? Do you know of a way to either build these 1 bit shift registers by myself, or can they be purchased somewhere? Could you recommend a place where I might find more information? – Mark Anderson Jan 05 '15 at 16:46
  • Only practical way to make then yourself is by using small microcontrollers programmed as shift registers. – Passerby Jan 05 '15 at 16:53
  • A D flip-flop is basically a 1 bit shift register, you may be able to find ones in small enough packages for your uses. – Gorloth Jan 05 '15 at 17:13
  • This is really it. @MarkAnderson - read my comments if you additional info. – darudude Jan 05 '15 at 18:03