From 9a1cd00521db6a17fdeb4707e33728b443174bf2 Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Thu, 10 May 2012 14:13:13 +1000 Subject: [PATCH] Begin alarm clock implementation --- AlarmClock/AlarmClock.pde | 337 +++++++++++++++++++++++ AlarmClock/battery.jpg | Bin 0 -> 23578 bytes AlarmClock/dynamo_power_supply.fig | 206 ++++++++++++++ AlarmClock/dynamo_power_supply.pdf | Bin 0 -> 11029 bytes AlarmClock/dynamo_power_supply.png | Bin 0 -> 11500 bytes AlarmClock/main_circuit.fig | 413 +++++++++++++++++++++++++++++ doc/Doxyfile | 2 +- doc/alarm-clock.dox | 86 ++++++ doc/mainpage.dox | 1 + 9 files changed, 1044 insertions(+), 1 deletion(-) create mode 100644 AlarmClock/AlarmClock.pde create mode 100644 AlarmClock/battery.jpg create mode 100644 AlarmClock/dynamo_power_supply.fig create mode 100644 AlarmClock/dynamo_power_supply.pdf create mode 100644 AlarmClock/dynamo_power_supply.png create mode 100644 AlarmClock/main_circuit.fig create mode 100644 doc/alarm-clock.dox diff --git a/AlarmClock/AlarmClock.pde b/AlarmClock/AlarmClock.pde new file mode 100644 index 00000000..6f7a709b --- /dev/null +++ b/AlarmClock/AlarmClock.pde @@ -0,0 +1,337 @@ +/* + * 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. + */ + +// include the library code: +#include +#include +#include + +// Initialize the LCD +FreetronicsLCD lcd; + +// Special characters for indicators. +#define IND_BATTERY_EMPTY 0 +#define IND_BATTERY_20PCT 1 +#define IND_BATTERY_40PCT 2 +#define IND_BATTERY_60PCT 3 +#define IND_BATTERY_80PCT 4 +#define IND_BATTERY_FULL 5 + +// Specialized time/date display field for the front screen of the clock. +class FrontScreenField : public Field +{ +public: + explicit FrontScreenField(Form &form); + ~FrontScreenField(); + + void enterField(bool reverse); + + int day() const { return _day; } + int month() const { return _month; } + int year() const { return _year; } + void setDate(int day, int month, int year); + + unsigned long time() const { return _time; } + void setTime(unsigned long time); + + int batteryStatus() const { return _batteryStatus; } + void setBatteryStatus(int batteryStatus); + +private: + int _day, _month, _year; + unsigned long _time; + int _batteryStatus; + int _batteryBars; + + void updateDate(); + void updateTime(); + void updateBatteryStatus(); +}; + +FrontScreenField::FrontScreenField(Form &form) + : Field(form, "") + , _day(1), _month(1), _year(2012) + , _time(9 * 60 * 60) + , _batteryStatus(100) + , _batteryBars(IND_BATTERY_FULL) +{ +} + +FrontScreenField::~FrontScreenField() +{ +} + +void FrontScreenField::enterField(bool reverse) +{ + updateDate(); + updateBatteryStatus(); + updateTime(); +} + +const char *months[] = { + " Jan ", " Feb ", " Mar ", " Apr ", " May ", " Jun ", + " Jul ", " Aug ", " Sep ", " Oct ", " Nov ", " Dec " +}; +uint8_t monthLengths[] = { + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +}; + +inline bool isLeapYear(int year) +{ + if ((year % 100) == 0) + return (year % 400) == 0; + else + return (year % 4) == 0; +} + +void FrontScreenField::setDate(int day, int month, int year) +{ + if (day != _day || month != _month || year != _year) { + if (day < 1) { + // Rolled back into the previous month. + if (month == 1) + month = 12; + else + --month; + if (month == 2 && isLeapYear(year)) + day = 29 + day; + else + day = monthLengths[month - 1] + day; + } if (month == 2 && isLeapYear(year)) { + if (day > 29) { + // Rolled forward from Feb into Mar in a leap year. + month = 3; + day -= 29; + } + } else if (day > monthLengths[month - 1]) { + // Rolled forward into the next month. + day -= monthLengths[month - 1]; + if (month == 12) + month = 1; + else + ++month; + } + _day = day; + _month = month; + _year = year; + if (isCurrent()) + updateDate(); + } +} + +void FrontScreenField::setTime(unsigned long time) +{ + if (time != _time) { + _time = time; + if (isCurrent()) + updateTime(); + } +} + +void FrontScreenField::setBatteryStatus(int batteryStatus) +{ + _batteryStatus = batteryStatus; + int ind; + if (batteryStatus >= 85) + ind = IND_BATTERY_FULL; + else if (batteryStatus >= 75) + ind = IND_BATTERY_80PCT; + else if (batteryStatus >= 55) + ind = IND_BATTERY_60PCT; + else if (batteryStatus >= 35) + ind = IND_BATTERY_40PCT; + else if (batteryStatus >= 15) + ind = IND_BATTERY_20PCT; + else + ind = IND_BATTERY_EMPTY; + if (ind != _batteryBars) { + _batteryBars = ind; + updateBatteryStatus(); + } +} + +void FrontScreenField::updateDate() +{ + lcd()->setCursor(0, 0); + if (_day < 10) { + lcd()->write('0' + _day); + } else { + lcd()->write('0' + _day / 10); + lcd()->write('0' + _day % 10); + } + lcd()->print(months[_month - 1]); + lcd()->print(_year); + lcd()->write(' '); +} + +void FrontScreenField::updateTime() +{ + lcd()->setCursor(0, 1); + int hour = (int)(_time / (60 * 60)); + int minute = ((int)(_time / 60)) % 60; + int second = (int)(_time % 60); + bool pm; + if (hour == 0 || hour == 12) { + lcd()->write('1'); + lcd()->write('2'); + pm = (hour == 12); + } else if (hour < 12) { + lcd()->write('0' + hour / 10); + lcd()->write('0' + hour % 10); + pm = false; + } else { + hour -= 12; + lcd()->write('0' + hour / 10); + lcd()->write('0' + hour % 10); + pm = true; + } + lcd()->write(':'); + lcd()->write('0' + minute / 10); + lcd()->write('0' + minute % 10); + lcd()->write(':'); + lcd()->write('0' + second / 10); + lcd()->write('0' + second % 10); + lcd()->print(pm ? " PM" : " AM"); +} + +void FrontScreenField::updateBatteryStatus() +{ + lcd()->setCursor(15, 0); + lcd()->write(_batteryBars); +} + +// Create the main form and its fields. +Form mainForm(lcd); +FrontScreenField frontScreen(mainForm); + +#define STATUS_LED 13 + +#define MILLIS_PER_DAY 86400000UL +#define MILLIS_PER_SECOND 1000UL +#define MILLIS_PER_HOUR 3600000UL + +unsigned long midnightTime; + +byte batteryEmpty[8] = { + B01110, + B10001, + B10001, + B10001, + B10001, + B10001, + B11111, + B00000 +}; +byte battery20Pct[8] = { + B01110, + B10001, + B10001, + B10001, + B10001, + B11111, + B11111, + B00000 +}; +byte battery40Pct[8] = { + B01110, + B10001, + B10001, + B10001, + B11111, + B11111, + B11111, + B00000 +}; +byte battery60Pct[8] = { + B01110, + B10001, + B10001, + B11111, + B11111, + B11111, + B11111, + B00000 +}; +byte battery80Pct[8] = { + B01110, + B10001, + B11111, + B11111, + B11111, + B11111, + B11111, + B00000 +}; +byte batteryFull[8] = { + B01110, + B11111, + B11111, + B11111, + B11111, + B11111, + B11111, + B00000 +}; + +void setup() { + // Turn off the status LED. Don't need it. + pinMode(STATUS_LED, OUTPUT); + digitalWrite(STATUS_LED, LOW); + + // We need some special characters for battery status and other indicators. + lcd.createChar(IND_BATTERY_EMPTY, batteryEmpty); + lcd.createChar(IND_BATTERY_20PCT, battery20Pct); + lcd.createChar(IND_BATTERY_40PCT, battery40Pct); + lcd.createChar(IND_BATTERY_60PCT, battery60Pct); + lcd.createChar(IND_BATTERY_80PCT, battery80Pct); + lcd.createChar(IND_BATTERY_FULL, batteryFull); + + //lcd.enableScreenSaver(); + + // At startup, make "now" be 9am. TODO: Read from an RTC chip instead. + midnightTime = millis() - MILLIS_PER_HOUR * 9; + + // Show the main form for the first time. + mainForm.show(); +} + +void loop() { + // Update the number of seconds since the last midnight event. + unsigned long sinceMidnight = millis() - midnightTime; + if (sinceMidnight >= MILLIS_PER_DAY) { + // We have overflowed into the next day. Readjust midnight. + midnightTime += MILLIS_PER_DAY; + sinceMidnight -= MILLIS_PER_DAY; + + // Increment the date using the rollover logic. + frontScreen.setDate(frontScreen.day() + 1, + frontScreen.month(), + frontScreen.year()); + } + frontScreen.setTime(sinceMidnight / MILLIS_PER_SECOND); + + // Dispatch button events to the main form. + int event = lcd.getButton(); + if (mainForm.dispatch(event) == FORM_CHANGED) { + // TODO + } +} diff --git a/AlarmClock/battery.jpg b/AlarmClock/battery.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af93c83303213d4e773e8d102645f388ebf17a3d GIT binary patch literal 23578 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 fAOR^PjOyDMYq;z~m`ekQAZjdVEh_M literal 0 HcmV?d00001 diff --git a/AlarmClock/dynamo_power_supply.fig b/AlarmClock/dynamo_power_supply.fig new file mode 100644 index 00000000..8c0bd80a --- /dev/null +++ b/AlarmClock/dynamo_power_supply.fig @@ -0,0 +1,206 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 2925 3105 3285 3195 +2 1 0 1 0 -1 0 0 20 0.000 1 0 -1 0 0 4 + 3150 3150 3060 3195 3060 3105 3150 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3150 3105 3150 3195 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3060 3150 2925 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3150 3150 3285 3150 +-6 +6 4950 3105 5310 3195 +2 1 0 1 0 -1 0 0 20 0.000 1 0 -1 0 0 4 + 5175 3150 5085 3195 5085 3105 5175 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 3105 5175 3195 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5085 3150 4950 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 3150 5310 3150 +-6 +6 6660 3960 6840 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6750 4095 6750 3960 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6750 4140 6750 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6660 4095 6840 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6660 4140 6840 4140 +-6 +6 8460 3960 8640 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8550 4095 8550 3960 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8550 4140 8550 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8460 4095 8640 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8460 4140 8640 4140 +-6 +6 9540 3960 9765 4275 +5 1 0 1 0 -1 0 0 -1 0.000 1 0 0 0 9675.000 4285.000 9585 4165 9675 4135 9765 4165 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 9675 4135 9675 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 9585 4095 9765 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 9675 4095 9675 3960 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 9611 3989 9611 4059 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 9581 4024 9641 4024 +-6 +6 7380 5130 7470 5220 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 7425 5175 30 30 7425 5175 7425 5205 +-6 +6 7830 5130 7920 5220 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 7875 5175 30 30 7875 5175 7875 5205 +-6 +6 9630 3105 9720 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9675 3150 30 30 9675 3150 9675 3180 +-6 +6 9630 5130 9720 5220 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9675 5175 30 30 9675 5175 9675 5205 +-6 +6 3465 3825 3735 4365 +2 1 0 1 0 -1 0 0 0 0.000 0 0 -1 0 0 2 + 3600 4140 3600 4365 +2 2 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 5 + 3510 4095 3690 4095 3690 4140 3510 4140 3510 4095 +2 1 0 1 0 -1 0 0 0 0.000 0 0 -1 0 0 2 + 3465 4050 3735 4050 +2 1 0 1 0 -1 0 0 0 0.000 0 0 -1 0 0 2 + 3600 4050 3600 3825 +-6 +6 3555 3105 3645 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 3150 30 30 3600 3150 3600 3180 +-6 +6 3555 5130 3645 5220 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 5175 30 30 3600 5175 3600 5205 +-6 +6 3960 3015 4500 3195 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 4095 3150 38 38 4095 3150 4133 3150 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 4365 3150 38 38 4365 3150 4403 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4055 3150 3960 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4405 3150 4500 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 4135 3129 4377 3033 +-6 +6 5580 3105 5670 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5625 3150 30 30 5625 3150 5625 3180 +-6 +6 5490 3960 5715 4275 +5 1 0 1 0 -1 0 0 -1 0.000 1 0 0 0 5625.000 4285.000 5535 4165 5625 4135 5715 4165 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 5625 4135 5625 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 5535 4095 5715 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 5625 4095 5625 3960 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 5561 3989 5561 4059 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 5531 4024 5591 4024 +-6 +6 5580 5130 5670 5220 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5625 5175 30 30 5625 5175 5625 5205 +-6 +6 2340 3825 2610 4455 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 2475 4140 135 135 2475 4140 2610 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 3915 2475 3825 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 4 + 2410 4015 2410 3915 2540 3915 2540 4015 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2450 3960 2500 3960 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 3935 2475 3985 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2450 4320 2500 4320 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 4 + 2410 4265 2410 4365 2540 4365 2540 4265 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 4365 2475 4455 +4 0 0 0 0 16 8 0.0000 4 105 210 2392 4180 DC\001 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2475 3825 2475 3150 3015 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5265 3150 7200 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 5 0 1.00 60.00 120.00 + 8100 3150 11025 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6750 4005 6750 3825 7200 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6750 4230 6750 4500 7200 4500 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8550 3960 8550 3825 8100 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8550 4230 8550 4500 8100 4500 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7200 2925 8100 2925 8100 4725 7200 4725 7200 2925 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7875 4725 7875 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7425 4725 7425 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9675 4005 9675 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9675 4230 9675 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 3870 3600 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 4365 3600 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3960 3150 3240 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3150 4950 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5625 4005 5625 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5625 4230 5625 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 + 5 0 1.00 60.00 120.00 + 5625 3150 5625 2250 11025 2250 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 + 5 0 1.00 60.00 120.00 + 2475 4410 2475 5175 11025 5175 +4 0 0 50 -1 0 12 0.0000 4 135 660 4815 3015 1N4001\001 +4 0 0 50 -1 0 12 0.0000 4 135 660 2835 3015 1N4001\001 +4 0 0 50 -1 0 12 0.0000 4 135 420 4995 4185 10uF\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7020 3060 2\001 +4 0 0 50 -1 0 12 0.0000 4 135 570 6030 4185 0.22uF\001 +4 0 0 50 -1 0 12 0.0000 4 135 570 8685 4185 0.22uF\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7065 4410 8\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7065 3735 1\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 8145 3735 4\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 8145 3060 3\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 8145 4455 5\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7470 4905 6\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7920 4905 7\001 +4 0 0 50 -1 0 12 0.0000 4 135 765 7290 2745 MAX619\001 +4 0 0 50 -1 0 12 0.0000 4 135 420 9855 4185 10uF\001 +4 0 0 50 -1 0 12 0.0000 4 135 510 11160 3195 5VDC\001 +4 0 0 50 -1 0 12 0.0000 4 135 405 11160 5220 GND\001 +4 0 0 50 -1 0 12 0.0000 4 135 465 11205 2070 Sense\001 +4 0 0 50 -1 0 12 0.0000 4 180 600 11205 2295 Battery\001 +4 0 0 50 -1 0 12 0.0000 4 135 495 11205 2520 Status\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3015 2835 D1\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 4995 2835 D2\001 +4 0 0 50 -1 0 12 0.0000 4 135 390 3870 4050 3.6V\001 +4 0 0 50 -1 0 12 0.0000 4 135 510 3825 4275 NiMH\001 +4 0 0 50 -1 0 12 0.0000 4 180 690 1530 4365 Dynamo\001 +4 0 0 50 -1 0 12 0.0000 4 135 510 1620 4140 5VDC\001 diff --git a/AlarmClock/dynamo_power_supply.pdf b/AlarmClock/dynamo_power_supply.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2b5bd1a35a649246be1327502cfb134a8e95b0dc GIT binary patch literal 11029 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 vD5< z1&O-LUo*dk@3Z|`W0sX%-(#{5=ikwj<8o;(WK8p2aqy19#{o)4+pVC z1)a!BlaC;*y6shSJnk^qCbOfk;Zn9|;gXr?;|n2yFsc&n6od1dr&2EN_bZ>bmp?A| z#_C{GB2w~cvigMIvFXb3cgqsikwSYyYZ{-%?nU_`vTlTtA-WZi#Z z7Jp!1@^Z12@PLI3Y~%Pof7NQya+%wUP4}nE4=p!ONgXPZk$UHMsdtU}67aOhO<;FCM7WtcWS(Ms@kMt>TzM?Bg58lN;&_#SwdP*h{T#X16gj@C zos52P@)fmJhN9B;9tD;ihwaZiwZW}Xyc%#LZ{4A!ubeX(w`7O$yaD!2P9sqV%!-Mu zZ{7U>gZ7RGi$(7-HC5Bp8(i8SWR~%bfgdlA3%hjSd(IjtE}k#%o)7YIkI@lwjbUk> z?`d5u)FFG8NaEghTex_g>Wp`Er1$a1T~fX_85{i{CK6S+ zaq!bT{%Nv`UyOm_J;v_r!Q?k~Hg|dHO@H?S9^>yCa_ZqSCF=_F;N~WvZBO?I^dD6U$eQ?sJ3I?*YzgSH^PqH-#0-S-)!C zve^@cp%)es7M~B9D+Y{3ki_evrufhae9z zS+Gq80|L-p6q2igfVrL_l!V8-x#CDrgt&}2TnvsBg*pr z;aCST7x?O_rUj`lDIN950eJbx4LkCDI*a3~~b0k9>yRLdDp zBz;e+LuJHa5(2;v#sB~10q5hNH3uj0hwAbmj;tP-ig)x^2g@Xi2pAk829pH!G=WRX zA`!B1qzD`)3xml6f5QYP93)i(Uw;B$hx#u_f5ZHZ6i+Y#-9XV1=Y+sueW0dT0+DQg zq&Naf1$`|!IwevrrmdV)!IGzqjn0J^DwqCD71!jastio1cR;zs)3aKn)UOV$nT;iMqoCx*c~qP^Wn z0*V-a541b}tS8vdOe@Qr#>p(wN>YtG>_)mc^1m60C3i0fQl7GGOZXPZ&amT;=)`27|%>0T1ync%XT} zwEmy8NC_FR&iW@zLQ)1STK)+G%VqxxLrHD`9P!W}HEeBlsFl2i zriMBKDXA{0f=0;V^JAA$)uq I2AYun1MgiXTL1t6 literal 0 HcmV?d00001 diff --git a/AlarmClock/dynamo_power_supply.png b/AlarmClock/dynamo_power_supply.png new file mode 100644 index 0000000000000000000000000000000000000000..8335e1e0309d5575b388cc9de0e707637a5db7af GIT binary patch literal 11500 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%0AC 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 U|LqOawzjlG{1-Zj{~B`s4TRg3=>Px# literal 0 HcmV?d00001 diff --git a/AlarmClock/main_circuit.fig b/AlarmClock/main_circuit.fig new file mode 100644 index 00000000..12cb3789 --- /dev/null +++ b/AlarmClock/main_circuit.fig @@ -0,0 +1,413 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 10800.000 3600.000 10755 3600 10800 3555 10845 3600 +6 3195 2700 3420 3240 +1 3 0 1 0 -1 0 0 -1 0.000 1 1.5708 3375 3105 38 38 3375 3105 3375 3067 +1 3 0 1 0 -1 0 0 -1 0.000 1 1.5708 3375 2835 38 38 3375 2835 3375 2797 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3375 3150 3375 3240 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3375 2790 3375 2700 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3285 2970 3195 2970 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 3285 3105 3285 2835 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 3195 3015 3195 2925 +-6 +6 3285 3240 3465 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3360 3510 3390 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3325 3465 3425 3465 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3285 3420 3465 3420 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3375 3240 3375 3420 +-6 +6 1755 3375 1845 3825 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 3730 1800 3825 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 1800 3465 1760 3492 1840 3546 1760 3600 1840 3654 1760 3708 + 1800 3735 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 3375 1800 3470 +-6 +6 1755 3825 1845 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 4180 1800 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 1800 3915 1760 3942 1840 3996 1760 4050 1840 4104 1760 4158 + 1800 4185 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 3825 1800 3920 +-6 +6 1755 4230 1845 4680 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 4585 1800 4680 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 1800 4320 1760 4347 1840 4401 1760 4455 1840 4509 1760 4563 + 1800 4590 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 4230 1800 4325 +-6 +6 1755 4680 1845 5130 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 5035 1800 5130 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 1800 4770 1760 4797 1840 4851 1760 4905 1840 4959 1760 5013 + 1800 5040 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 4680 1800 4775 +-6 +6 1755 5130 1845 5580 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 5485 1800 5580 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 1800 5220 1760 5247 1840 5301 1760 5355 1840 5409 1760 5463 + 1800 5490 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1800 5130 1800 5225 +-6 +6 990 3645 1530 3870 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1125 3825 38 38 1125 3825 1163 3825 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1395 3825 38 38 1395 3825 1433 3825 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1080 3825 990 3825 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1440 3825 1530 3825 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1260 3735 1260 3645 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1125 3735 1395 3735 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1215 3645 1305 3645 +-6 +6 990 4095 1530 4320 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1125 4275 38 38 1125 4275 1163 4275 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1395 4275 38 38 1395 4275 1433 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1080 4275 990 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1440 4275 1530 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1260 4185 1260 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1125 4185 1395 4185 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1215 4095 1305 4095 +-6 +6 990 4545 1530 4770 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1125 4725 38 38 1125 4725 1163 4725 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1395 4725 38 38 1395 4725 1433 4725 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1080 4725 990 4725 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1440 4725 1530 4725 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1260 4635 1260 4545 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1125 4635 1395 4635 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1215 4545 1305 4545 +-6 +6 990 5445 1530 5670 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1125 5625 38 38 1125 5625 1163 5625 +1 3 0 1 0 -1 0 0 -1 0.000 1 0.0000 1395 5625 38 38 1395 5625 1433 5625 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1080 5625 990 5625 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1440 5625 1530 5625 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1260 5535 1260 5445 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1125 5535 1395 5535 +2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2 + 1215 5445 1305 5445 +-6 +6 585 5805 765 6075 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 660 6075 690 6075 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 625 6030 725 6030 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 585 5985 765 5985 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 675 5805 675 5985 +-6 +6 1755 3780 1845 3870 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 1800 3825 30 30 1800 3825 1800 3855 +-6 +6 1755 4230 1845 4320 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 1800 4275 30 30 1800 4275 1800 4305 +-6 +6 1755 4680 1845 4770 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 1800 4725 30 30 1800 4725 1800 4755 +-6 +6 630 5580 720 5670 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 675 5625 30 30 675 5625 675 5655 +-6 +6 630 4680 720 4770 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 675 4725 30 30 675 4725 675 4755 +-6 +6 630 4230 720 4320 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 675 4275 30 30 675 4275 675 4305 +-6 +6 10755 4410 10845 4860 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10800 4765 10800 4860 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 10800 4500 10760 4527 10840 4581 10760 4635 10840 4689 10760 4743 + 10800 4770 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10800 4410 10800 4505 +-6 +6 10440 4815 10935 5400 +1 3 0 1 0 -1 0 0 -1 0.000 1 5.4978 10725 5085 191 191 10725 5085 10916 5085 +2 3 0 1 0 -1 0 0 20 0.000 0 0 0 0 0 4 + 10720 5085 10770 5060 10770 5110 10720 5085 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10710 5175 10800 5175 10800 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10710 5085 10800 5085 10800 5175 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10710 4950 10710 5220 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10710 4995 10800 4995 10800 4815 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10665 4995 10665 5175 10440 5175 +-6 +6 10710 5400 10890 5670 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10785 5670 10815 5670 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10750 5625 10850 5625 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10710 5580 10890 5580 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10800 5400 10800 5580 +-6 +6 3285 2025 3465 2340 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3375 2160 3375 2025 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3375 2205 3375 2340 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3285 2160 3465 2160 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3285 2205 3465 2205 +-6 +6 3330 2520 3420 2610 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3375 2565 30 30 3375 2565 3375 2595 +-6 +6 10125 3420 10575 3645 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 10350 3555 10385 3485 10315 3485 10350 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10220 3600 10125 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 10485 3600 10458 3560 10404 3640 10350 3560 10296 3640 10242 3560 + 10215 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10575 3600 10480 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10350 3420 10350 3510 +-6 +6 9810 3825 9990 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9885 4095 9915 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9850 4050 9950 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9810 4005 9990 4005 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9900 3825 9900 4005 +-6 +6 10980 3555 11070 3645 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 11025 3600 30 30 11025 3600 11025 3630 +-6 +6 7290 2475 7560 2925 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7425 2790 7425 2925 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 2790 7515 2790 +2 2 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 5 + 7315 2655 7535 2655 7535 2745 7315 2745 7315 2655 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 2610 7515 2610 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7425 2610 7425 2475 +-6 +6 7335 2880 7515 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7410 3150 7440 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7375 3105 7475 3105 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 3060 7515 3060 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7425 2880 7425 3060 +-6 +6 1935 7155 2115 7425 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2010 7425 2040 7425 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1975 7380 2075 7380 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 1935 7335 2115 7335 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 7155 2025 7335 +-6 +6 9855 3555 9945 3645 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9900 3600 30 30 9900 3600 9900 3630 +-6 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3825 2250 6750 2250 6750 6300 3825 6300 3825 2250 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3375 2745 3375 2565 3825 2565 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1800 3375 1800 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1800 3825 3825 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1530 3825 1800 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1530 4275 1800 4275 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1530 4725 1800 4725 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1530 5625 1800 5625 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 990 3825 675 3825 675 5850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 990 4275 675 4275 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1035 4725 675 4725 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 990 5625 675 5625 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1800 5580 1800 5625 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8100 3150 8100 3375 6750 3375 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8325 3150 8325 3600 6750 3600 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8550 3150 8550 3825 6750 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8775 3150 8775 4050 6750 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 9000 3150 9000 4275 6750 4275 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 9225 3150 9225 4500 6750 4500 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 9450 3148 9450 4725 6750 4723 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 9675 3150 9675 4950 6750 4950 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7875 2250 11250 2250 11250 3150 7875 3150 7875 2250 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4 + 1 1 1.00 60.00 120.00 + 11025 3150 11025 3600 11700 3600 11700 2925 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 10800 3150 10800 4410 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 10485 5175 6750 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3375 2565 3375 2295 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3375 2070 3375 1800 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 10350 3465 10350 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 10125 3600 9900 3600 9900 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 10575 3600 10755 3600 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 10845 3600 11025 3600 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3825 4725 3375 4725 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7425 2475 6750 2475 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3825 5175 2700 5175 2700 6075 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3825 5400 2925 5400 2925 6075 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3825 5625 3150 5625 3150 6075 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 2250 6075 3600 6075 3600 6975 2250 6975 2250 6075 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 2250 6300 2025 6300 2025 5940 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2250 6750 2025 6750 2025 7200 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9900 3600 9900 3150 +4 0 0 50 -1 0 12 0.0000 4 135 675 4950 4230 Arduino\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 3915 2610 Reset\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 1710 3060 5V\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3915 3870 A0\001 +4 0 0 50 -1 0 12 0.0000 4 135 345 1980 5400 2K3\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 1980 4995 1K\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 1980 4545 620R\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 1980 4050 330R\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 1980 3600 2K\001 +4 0 0 50 -1 0 12 0.0000 4 180 240 225 4320 Up\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 90 3870 Mode\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 45 4770 Down\001 +4 0 0 50 -1 0 12 0.0000 4 135 495 45 5760 Alarm\001 +4 0 0 50 -1 0 12 0.0000 4 180 375 135 5535 Stop\001 +4 0 0 50 -1 0 12 4.7124 4 135 405 8055 2610 GND\001 +4 0 0 50 -1 0 12 4.7124 4 135 240 8280 2790 5V\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 3645 5V\001 +4 0 0 50 -1 0 12 0.0000 4 135 405 6255 3420 GND\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 3870 D9\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 4095 D8\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 4320 D7\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 4545 D6\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 4770 D5\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 4995 D4\001 +4 0 0 50 -1 0 12 4.7124 4 135 120 8505 2925 E\001 +4 0 0 50 -1 0 12 4.7124 4 135 240 8730 2835 RS\001 +4 0 0 50 -1 0 12 0.0000 4 135 1545 8820 2565 16x2 LCD Module\001 +4 0 0 50 -1 0 12 4.7124 4 135 240 8955 2835 D7\001 +4 0 0 50 -1 0 12 4.7124 4 135 240 9180 2835 D6\001 +4 0 0 50 -1 0 12 4.7124 4 135 240 9405 2835 D5\001 +4 0 0 50 -1 0 12 4.7124 4 135 240 9630 2835 D4\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 11610 2835 5V\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 6300 5220 D2\001 +4 0 0 50 -1 0 12 0.0000 4 135 660 11025 5130 2N7002\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 11025 4680 150R\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3285 1665 5V\001 +4 0 0 50 -1 0 12 0.0000 4 135 525 2655 2250 100nF\001 +4 0 0 50 -1 0 12 4.7124 4 135 315 10755 2745 BL-\001 +4 0 0 50 -1 0 12 4.7124 4 135 360 10980 2745 BL+\001 +4 0 0 50 -1 0 12 0.0000 4 135 345 10170 3825 10K\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3915 4770 A1\001 +4 0 0 50 -1 0 12 0.0000 4 180 600 2745 4770 Battery\001 +4 0 0 50 -1 0 12 0.0000 4 135 465 2745 4545 Sense\001 +4 0 0 50 -1 0 12 0.0000 4 135 495 2745 4995 Status\001 +4 0 0 50 -1 0 12 4.7124 4 135 405 10305 2700 Cont\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 7200 2160 Piezo\001 +4 0 0 50 -1 0 12 0.0000 4 135 570 7155 2385 Buzzer\001 +4 0 0 50 -1 0 12 0.0000 4 135 345 6300 2520 D12\001 +4 0 0 50 -1 0 12 4.7124 4 135 375 2655 6120 Data\001 +4 0 0 50 -1 0 12 4.7124 4 135 495 2880 6120 Clock\001 +4 0 0 50 -1 0 12 4.7124 4 135 330 3105 6120 1Hz\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 1935 5850 5V\001 +4 0 0 50 -1 0 12 0.0000 4 135 1080 2430 6840 RTC Module\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3915 5445 A4\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3915 5670 A5\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3915 5220 A3\001 +4 0 0 50 -1 0 12 4.7124 4 135 375 9855 2745 R/W\001 diff --git a/doc/Doxyfile b/doc/Doxyfile index b06717ed..6ecba011 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -688,7 +688,7 @@ EXAMPLE_RECURSIVE = NO # directories that contain image that are included in the documentation (see # the \image command). -IMAGE_PATH = ../libraries/BlinkLED/examples/Cylon ../libraries/BlinkLED/examples/Cylon4 ../libraries/BlinkLED/examples/StarTrek ../libraries/FreetronicsLCD/examples/HelloWorld ../libraries/FreetronicsLCD/examples/Form +IMAGE_PATH = ../libraries/BlinkLED/examples/Cylon ../libraries/BlinkLED/examples/Cylon4 ../libraries/BlinkLED/examples/StarTrek ../libraries/FreetronicsLCD/examples/HelloWorld ../libraries/FreetronicsLCD/examples/Form ../AlarmClock # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/doc/alarm-clock.dox b/doc/alarm-clock.dox new file mode 100644 index 00000000..e33ecbb5 --- /dev/null +++ b/doc/alarm-clock.dox @@ -0,0 +1,86 @@ +/* + * 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, Jaycar sells a suitable +DC dynamo. + +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. + +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. + +\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 KitTen +kit from Freetronics, and didn't +solder up anything that wasn't strictly necessary. A +5v FTDI USB-to-Serial cable +is necessary for programming. Similar minimalistic built-it-yourself +Arduino designs should also work. + +*/ diff --git a/doc/mainpage.dox b/doc/mainpage.dox index 6bc79454..58b81d22 100644 --- a/doc/mainpage.dox +++ b/doc/mainpage.dox @@ -34,6 +34,7 @@ LCD shield. \li Form and Field classes to build simple property sheet UI's on LCD displays. \li \ref lcd_hello_world "Hello World" example for the Freetronics LCD shield. \li \ref lcd_form "Form" example for LCD displays. +\li \ref alarm_clock "Wind-Up Alarm Clock". \section main_BlinkLED BlinkLED Utility Library