1
0
mirror of https://github.com/taigrr/arduinolibs synced 2025-01-18 04:33:12 -08:00
arduinolibs/doc/alarm-clock.dox
2012-05-17 11:37:47 +10:00

125 lines
6.0 KiB
Plaintext

/*
* Copyright (C) 2012 Southern Storm Software, Pty Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
/**
\file alarm-clock.dox
\page alarm_clock Wind-Up Alarm Clock
\section clock_power Power supply
This section describes the power supply for the wind-up alarm clock,
which consists of a hand-cranked dynamo, a 3.6 volt NiMH battery, and a
charge pump DC-to-DC converter to boost the voltage up to 5 volts.
Here is the circuit:
\image html dynamo_power_supply.png
The dynamo must be based on a DC motor rather than AC (bicycle light dynamos
are typically AC). If you are using an AC dynamo, then replace D1 with a
full 4-diode rectifier bridge to convert the AC into DC first.
In Australia, <a href="http://www.jaycar.com.au">Jaycar</a> sells a suitable
<a href="http://www.jaycar.com.au/productView.asp?ID=MD7000">DC dynamo</a>.
Diode D1 stops the voltage in the battery from flowing backwards into
the motor. If you hook things up the wrong way around, then the motor
will spin without being cranked! In this case, reverse the + and - leads
on the dynamo and try again.
After D1, the main energy storage for the circuit is the 3.6 volt NiMH
battery (at least 1000 mAh capacity). These are commonly used in
cordless phones and can be obtained from most consumer electronics stores:
\image html battery.jpg
The main part of the circuit is next, consisting of a MAX619 regulated 5 volt
charge pump DC-to-DC converter chip. This chip boosts an input voltage of
between 2 and 3.6 volts up to 5 volts and regulates it into a nice flat
supply for the rest of the alarm clock.
Note: the MAX619 has a maximum rating of 3.6 volts, but when the dynamo is
being cranked rapidly the voltage at the cathode of D1 can spike to 4 volts
or more. The battery is fine with this for short periods of time,
but the MAX619 won't be happy. Hence the forward voltage drop on D2
is used to drop the supply down by 0.7 volts which will keep it within
the MAX619's input range. If the dynamo is rated higher than 5VDC,
then add extra diodes at D1 to drop the voltage down before it
hits the battery.
For normal uncranked operation the battery will need to be between 2.7 and
3.6 volts. If it falls below 2.7, then the battery is considered "empty".
A diode with a smaller voltage drop can be substituted for D2 for longer
operation times as long as the maximum dynamo output minus the voltage
drop is less than or equal to 3.6 volts. The "Sense Battery Status" output
is hooked up to an analog input pin on the Arduino to let it monitor
the battery voltage and display the current status to the user (after
adding 0.7 to account for the voltage drop on D2).
If you don't have 1N4001 diodes to hand, then 1N4004 will work just as well.
\section clock_arduino_board Arduino board
Because we want to keep power consumption low, we actually don't want a full
Arduino Uno or similar board. The USB interface is unnecessary, as is the
on-board power supply. We also don't want the power and D13 status LED's
to be draining power. Therefore, a cut-down version of the Arduino is
recommended. We used the <a href="http://www.freetronics.com/collections/arduino/products/kitten">KitTen</a>
kit from <a href="http://www.freetronics.com/">Freetronics</a>, and didn't
solder up anything that wasn't strictly necessary. A
<a href="http://www.freetronics.com/ftdi-cable">5v FTDI USB-to-Serial cable</a>
is necessary for programming. Similar minimalistic built-it-yourself
Arduino designs should also work.
\section clock_main_circuit Main circuit
The main clock circuit consists of an Arduino Uno compatible board, a 16x2
LCD module, a realtime clock chip, and a piezo buzzer for the alarm:
\image html alarm_circuit.png
Some of the components can be purchased ready-made as the
<a href="http://www.freetronics.com/pages/16x2-lcd-shield-quickstart-guide">Freetronics
16x2 LCD Shield</a> and the <a href="http://www.sparkfun.com/products/99">SparkFun
Realtime Clock Module</a>. I used the ready-made realtime clock module,
but made my own equivalent to the LCD shield from parts to aid in spacing
out the LCD and pushbuttons on the exterior of the box.
The clock module is based on the DS1307 chip and has an on-board coin battery
to keep the time and date ticking over even if the main circuit loses power.
The chip is I2C-based and has an auxillary SQW output that can be configured
to provide a 1 Hz squarewave signal. This signal is used by the software
running on the Arduino to detect when a new time or date is available for
display on the LCD. The DS1307RTC class takes care of the details of
talking to the chip via I2C.
Note: the above circuit works just as well for a non-wind-up clock powered
from batteries or mains power. The only difference will be the "Sense
Battery Status" input on A1. Either remove the battery monitoring logic
from the source code or tie A1 to 5V via a 10K resistor.
I had a spare 2N7000 FET from the KitTen kit that I wasn't using on the
Arduino board, so I used that for the back light control. If you don't
have a FET, then you can use a regular NPN transistor instead:
\image html transistor_back_light.png
*/