SmaTrig 2.1

DigiGong - SD card digital door bell with an AVR

This article describes a microcontroller based digital door bell circuit that plays different sounds from an SD card. Instead of the boring "ding-dong" you can play your favourite song, a cool 303 acid sound, a Stephen Hawking phrase, a drum solo, animal sounds or what ever comes into your mind. The video above shows an example implementation of the digital door bell in a mask inspired by this guy.

While playing with the first prototype I noticed that having just one sound is quite boring and doesn't allow to distinguish visitors with their different ringing habits. Finally I added some functionality to the code to play different sounds for a different number of door bell presses and press durations. There is also a second input so you can use the gong for two doors, e.g. the house and the garden door. The code can be easily customised for your particular needs. The code and the eagle PCB layout can be downloaded in the Download section below.

Here are the features in short:

  • Two button inputs, e.g. different sounds for house and garden door
  • Different sounds depending on the number of button presses and press duration. This way the circuit supports "ringing codes" and "aggressive ringing"
  • Sounds are given as WAV files of arbitrary length
  • All SD cards work (as far as I could test)
  • 12 VAC inputs for simple replacement of your standard door bell
  • Audio amp for higher speaker power
  • No external supply needed, extreme battery live
  • AVR based, DIY friendly
  • Open source C code and eagle layout allow easy customisation


The circuit

DigiGong DigiGong

The circuit is based on the ATtiny861 AVR microcontroller from Atmel. This chip provides some extended PWM functionality which allows playing sounds at high quality. My starting point for the development was the 255-Voice PCM Sound Generator project published by ChaN from Japan. Thanks for sharing! The circuit relies on Chan's own Petit FatFs FAT implementation and needs just a few external components.
I adapted the circuit in several aspects to work as a door bell. My major concern was the high stand-by current of the original circuit that would drain a standard battery in less than one year. I have reduced the hunger for energy of the uC by disabling the watchdog and using the "power down" mode (0.2 uA versus 7 uA). The SD card has been connected through a PMOS transistor and is activated on demand (50 uA vs 0 uA). The audio amp is shut down when not needed. All in all a negligible stand-by current of about 0.2 uA could be achieved. The batteries should reach their "shelf life" of usually 10 years, unless you ring the bell like crazy.

The schematics of the circuit is shown below followed by the technical explanation of the interesting parts.

DigiGong schematics

The sounds

DigiGong can play files in the uncompressed WAV (PCM) format, mono or stereo, 8 or 16 bits, up to 48 kHz sampling rate. The sound quality is noticeably better with 16 bits because of less noise. Check this site for more info and the original implementation.

As shown in the video above, DigiGong plays different sounds depending on the number of button presses, press duration and input channel (door). In the current implementation you have to provide 12 WAV files if you want to make sure the bell responds to all possible ringing options. You need just 6 sounds if using only one door. If you don't want to prepare so many sounds, just copy one file and change the name accordingly.
I can recommend Audacity for editing and audio file conversion. Linux users can use the command line tool sox for the conversion to WAV from any other format. Please make sure, your WAV files are not 24 bit coded. This is not supported. The tool soxi allows to check the format quickly under Linux.

The naming scheme of the WAV files is

  NNN.wav
  |||
  ||*-presses: 1, 2, 3
  |*--press duration: 0-short, 1-long
  *---door: 0-A, 1-B

and translates to

button pressespress durationdoor A door B
1short001.wav101.wav
long 011.wav111.wav
2short002.wav102.wav
long 012.wav112.wav
3short003.wav103.wav
long 013.wav113.wav

Software

Something worth mentioning is the button polling function "readbuttons()" in the source code package downloadable below. It is extremely robust to bouncing, reads two buttons simultaneously and returns the number of presses and press duration for each button. It allows complex user input while occupying just a single or double uC line. I used a similar principle in the SmaTrig project.

Audio amp

The audio amp in the circuit has several pin-compatible replacements: LM4861, LM4864, LM4871, LM4889 and TS4990.
At 3V you will get an output power of roughly 250, 400 and 600 mW into a 16, 8 and 4 Ohm speaker respectively. Many more ICs exist for the purpose, but the modern ones are not offered in human-solderable packages (>=SOIC). BTW, the LM4861 and LM4871 I tested pop when waking up from standby. TS4990 is advertised with "near-zero pop and click" in the data sheet. This chip might be a better choice, but seems to be less popular compared to the TI types (ex Linear).
The older amps like the TDA7052 or LM386 need more than 4 V and will not operate from 2xAAA batteries.

Input section

The inputs are designed to be connected to 12 VAC or VDC directly. Two AC opto-couplers provide a galvanic separation and pull down two inputs in the AVR. You can use standard DC couplers if you use DC voltages of known polarity. If you want to use simple passive switches as inputs, bridge the couplers or wire the uC lines directly to the input clamps. Note that this solution might pick up noise with longer wires. Adding external pull-ups to the uC lines might be a good idea.

The AC inputs create the problem of zero-crossing spikes, similar to a bouncing switch or a chattering relay. Initially I added two caps to filter out the spikes and simplify software debouncing. Unfortunately the caps were in the MOSI and SCK lines of the ISP and programming didn't work anymore. Finally I solved the problem in software making the button reading routine robust. In the scope graph below you see the signal at the uC side of the coupler with an AC voltage applied to the IR emitters.

The DIP4 package of the coupler can be easily converted into SMD by bending or cutting the pins. You can use two single couplers or a double one. They are stackable.

DigiGong AC input signal

Battery

I used two AA cells for prototyping, but designed the first board with the CR123A lithium cell. This cell known from compact cameras looked like the perfect choice because of it's long life, but turned out to "sag" a lot under load (high inner resistance). Practically, the uC couldn't read the SD card at higher volume settings and got confused. The SD card is designed to work at 3.3 V and the operation at 3 V is already at the limit.

Finally I changed the design to two AAA cells which have a much lower inner resistance of less than 0.5 Ohm. A comparison of the 2xAAA and the CR123A behaviour is shown below. The upper lines show the supply voltage going down with the load (lower line is CR123A). The wiggly signal in the middle is the voltage on one of the speaker terminals. It shows the music played.

DigiGong sagging supply voltage

PCB

The eagle layout of the single-sided PCB is available below. The PCB size is 5 x 5 cm (roughly 2 x 2 inch) and the traces 16 mil wide (0.4 mm). I recommend to tin the PCB for easier SMD soldering.

Components

This is a list of components and possible replacement types.

SymbolTypeComment
IC1ATtimy861
ATtiny861V
ATtiny861A
PDIP, SOIC, Segor, Reichelt, TME
IC2LM4861
LM4864
LM4871
LM4889
TS4990
SOIC, Segor.de, Reichelt.de, TME.eu
PDIP, SOIC Segor, TME
SOIC, Segor, TME
SOIC, TME
SOIC, advertised with anti-pop circuit
OK1SFH620
TLP620
TLV814/824
AC coupler, DIP4, Segor
T1 IRLML6401
IRLML6402
IRLML5203
SI2301
BSS215
SOT23, Ron=0.1 Ohm, Segor, Reichelt
SOT23, Ron=0.1 Ohm
SOT23
SOT23 higher Ron
SOT23 high Ron
LED1use bright LED for good low
current performance, any color
C1 330 uFRM3.5, low ESR
C2, C51 uF1206 X7R
C3 10 nF1206 X7R
C4, C6330 nF1206 X7R
P1 47kPiher PT6V, PT10V, Vishay T7YA
R1, R21k1206, use 1k for 12 VAC inputs
R3 330R - 1kcontrols LED brightness
R41k1206
R522k1206
R6270k1206
SD Amphenol 101-00708-64
Wuerth SD 693063020911
short SD card holder
batt Keystone 82AAA battery clip
J1+J2MPT 0,5/4-2,54 PHOENIX
2.54 mm, 4 pole or 2x2 if stackable
J3 MPT 0,5/2-2,54 PHOENIX
2 pole 2.54 mm
ISP
2x3 pole 2.54 mm pin header
SPEAKER4-8 OhmRead amp data sheet for more info

Suppliers: TME.eu, segor.de, reichelt.de



Gallery

The images below show my door bell at home. One of the DigiGong circuits has been integrated in a wooden housing and connected to trombone. The housing was one of the first things I have made with my new toy. The two cables for both doors are not connected here. They are threaded through a tiny hole in the enclosure.

DigiGong trombone DigiGong trombone DigiGong driver

The development of the project is depicted below. As always, the project started as a perf-board prototype. I prefer connector boards over the standard white "matrix" types.

DigiGong prototype
DigiGong prototype

This is DIY SD card slot

DIY SD card slot

First circuit version with the CR123 lithium battery and the 12 VAC input signal dummy.

DigiGong battery

Bottom side of the homebrew single-sided PCB. The traces are 16 mil.

DigiGong PCB

Download

The source code and the eagle PCB layout can be downloaded here: digigong.zip

Comments

Name
E-mail (Will not appear online)
Title
Comment
To prevent automated Bots form spamming, please enter the text you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.



This comment form is powered by GentleSource Comment Script. It can be included in PHP or HTML files and allows visitors to leave comments on the website.