Our clock project

Dependencies:   SPI_TFT_ILI9341 TFT_fonts Adafruit_RTCLib RTC-DS1307 TSI

IoT Clock

We have been given a task to design a clock with internet features, the 'Internet Clock'. First of all, we identified what features we want:

Display: Split into 4 parts:

  • Analogue clock - the good ol' fashioned circle display, complete with minute, hour and second hands.
  • Digital clock - equipped with date for the modern human.
  • Weather display - for those who cannot be bothered to look out of the window.
  • Alarm - just what you need when you have to get up or be somewhere.

Wifi module:

  • For collecting data for weather, alarm times and so it can be an 'Internet Clock'.

Speaker:

  • To make the annoying sound to let you know your alarm is going off.

Range finder:

  • To wave your hand in front of to turn the alarm off, because pressing a button is too last centurary.

The roles:

  • Soroush's first task was to get the LCD screen to work. Meanwhile Adam sorted out the speaker system.
  • When these were done, Adam worked on the screen to display a clock face and date/year. Soroush then connected the wifi module to extract data for weather, location and date. /media/uploads/amilner1/img_0285.jpg Connecting the wifi module.
  • The next part was to get the range-finder hooked up and responding to a hand passing, and switch the alarm off.
  • Finally, it was time for assembly.

Difficulties: There were many issues faced throughout the project. First of all, Adam's coding knowledge was a lot less than Soroush's which slowed down some completion of tasks. Although, this did help us sort out the roles. Next was the wifi connectivity which caused several problems during the project, and we couldn't get the connection or fetch data, which further slowed the process. Another difficulty was finding the range-finder's set-up page for mbed. However, when we got past these set backs we managed to put everything together quickly, /media/uploads/amilner1/img_0294.jpg All the hardware wired in.

Outcome:

  • Our LCD screen has 2 displays:
  1. 1 An analogue clock filling the screen.

/media/uploads/amilner1/img_0304.jpg

  1. 2 An analogue clock, date and year, weather and location, and alarm time.

/media/uploads/amilner1/img_0305.jpg

This is changed by holding (not passing quickly) your hand in front of the range-finder.

  • An RTC to keep track of the time rather than collecting the information from then internet. However, we have had a lot of problems setting this up, and it doesn't seem to respond.
  • Wifi is also not connected, so we have the default date, time, weather and location.
  • You are able to change the alarm time by swiping the touch pad on the back.

Perhaps given more time we'd be able to fix these problems. But a key point is that we have got all the other features working, except the correct time. /media/uploads/amilner1/img_0303.jpg

Committer:
sfaghihi
Date:
Thu May 25 21:56:06 2017 +0000
Revision:
19:450dbcda696e
Parent:
18:2afeed90c051
Child:
20:e8ff6955c24e
Child:
21:fe1769d5a01c
safety

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sfaghihi 7:5269fbadd5d7 1 #ifndef __UTILITY__
sfaghihi 7:5269fbadd5d7 2 #define __UTILITY__
sfaghihi 7:5269fbadd5d7 3
sfaghihi 7:5269fbadd5d7 4 // Headers inclusion
sfaghihi 16:a639477091ad 5 #include "stdio.h"
sfaghihi 2:56a27b66d03a 6 #include "mbed.h"
sfaghihi 8:e7fce7d9ebdd 7 #include "math.h"
sfaghihi 7:5269fbadd5d7 8 #include "string"
sfaghihi 17:7ba6c8e4945b 9 #include "string.h"
sfaghihi 19:450dbcda696e 10 #include "DS1307.h"
sfaghihi 7:5269fbadd5d7 11
sfaghihi 7:5269fbadd5d7 12 // Some macros
sfaghihi 8:e7fce7d9ebdd 13 extern RawSerial pc_io;
sfaghihi 19:450dbcda696e 14 #define LOG(...) pc_io.printf(__VA_ARGS__)
sfaghihi 8:e7fce7d9ebdd 15 #define M_PI 3.14159265358979323846 /* pi */
sfaghihi 8:e7fce7d9ebdd 16 #define REFRESH_PERIOD 1 // (s)
sfaghihi 17:7ba6c8e4945b 17 #define FETCH_PERIOD 3600
sfaghihi 18:2afeed90c051 18 #define RANGE_THRESHOLD 9.0 // (inches)
sfaghihi 19:450dbcda696e 19 #define CHANGE_SCREEN_TIME 1
sfaghihi 19:450dbcda696e 20 #define CHANGE_SET_ALARM_TIME 3
sfaghihi 19:450dbcda696e 21
sfaghihi 19:450dbcda696e 22 // THe pin macros
sfaghihi 19:450dbcda696e 23 #define ALARM_PIN PTD4
sfaghihi 19:450dbcda696e 24 #define RTC_SDA PTC11 //PTC2
sfaghihi 19:450dbcda696e 25 #define RTC_SCL PTC10 //PTC1
sfaghihi 19:450dbcda696e 26 #define RANGE_AN PTB1
sfaghihi 19:450dbcda696e 27 #define RANGE_CS PTA5
sfaghihi 19:450dbcda696e 28
sfaghihi 17:7ba6c8e4945b 29 static const char *WEATHER_PLACE = "Oxford";
sfaghihi 17:7ba6c8e4945b 30 static const char *WIFI_SSID = "VM1688183";
sfaghihi 17:7ba6c8e4945b 31 static const char *WIFI_PASS = "brk3msjzKvCj";
sfaghihi 14:85c51b4eff4b 32
sfaghihi 2:56a27b66d03a 33 class TimeClass {
amilner1 4:519ffdf16d25 34 public:
amilner1 4:519ffdf16d25 35 int hour;
amilner1 4:519ffdf16d25 36 int minute;
sfaghihi 8:e7fce7d9ebdd 37 float second;
sfaghihi 8:e7fce7d9ebdd 38 TimeClass(int h, int m, float s);
sfaghihi 11:80a6facfd9f1 39 void inc(TimeClass *prev, float i);
sfaghihi 2:56a27b66d03a 40 };
sfaghihi 2:56a27b66d03a 41
sfaghihi 13:334c591a982b 42 enum weatherType {
sfaghihi 13:334c591a982b 43 sunny, cloudy, rainy, snowy
sfaghihi 13:334c591a982b 44 };
sfaghihi 13:334c591a982b 45
sfaghihi 2:56a27b66d03a 46 class WeatherClass {
sfaghihi 7:5269fbadd5d7 47 public:
sfaghihi 13:334c591a982b 48 weatherType type;
sfaghihi 13:334c591a982b 49 int temp;
sfaghihi 13:334c591a982b 50 bool isCelsius;
sfaghihi 14:85c51b4eff4b 51 char *place;
amilner1 15:452425c099ef 52 WeatherClass(weatherType, int, bool, char *);
sfaghihi 2:56a27b66d03a 53 };
sfaghihi 2:56a27b66d03a 54
sfaghihi 2:56a27b66d03a 55 class DateClass {
amilner1 5:fe6910712822 56 public:
amilner1 5:fe6910712822 57 int day;
amilner1 5:fe6910712822 58 int month;
amilner1 5:fe6910712822 59 int year;
amilner1 5:fe6910712822 60 int dow;
amilner1 5:fe6910712822 61 DateClass(int d, int m, int y, int dow);
sfaghihi 7:5269fbadd5d7 62 };
sfaghihi 7:5269fbadd5d7 63
sfaghihi 7:5269fbadd5d7 64 class StateClass {
sfaghihi 7:5269fbadd5d7 65 public:
sfaghihi 7:5269fbadd5d7 66 TimeClass *time;
sfaghihi 11:80a6facfd9f1 67 TimeClass *prevTime;
sfaghihi 7:5269fbadd5d7 68 WeatherClass *weather;
sfaghihi 7:5269fbadd5d7 69 DateClass *date;
sfaghihi 7:5269fbadd5d7 70 TimeClass *alarm;
sfaghihi 7:5269fbadd5d7 71 int screenState;
sfaghihi 7:5269fbadd5d7 72 bool screenActive;
amilner1 15:452425c099ef 73 bool duringAlarm;
sfaghihi 11:80a6facfd9f1 74 StateClass(TimeClass *t, TimeClass *p, WeatherClass *w, DateClass *d, TimeClass *a);
sfaghihi 7:5269fbadd5d7 75 };
sfaghihi 7:5269fbadd5d7 76
amilner1 15:452425c099ef 77 void playAlarmSound(StateClass *ps);
sfaghihi 17:7ba6c8e4945b 78 bool getDistance();
sfaghihi 19:450dbcda696e 79 void read_rtc(StateClass *ps);
sfaghihi 19:450dbcda696e 80 void update_rtc(StateClass *ps);
amilner1 15:452425c099ef 81
sfaghihi 7:5269fbadd5d7 82 #endif