Kids 2 min timer for brushing teeth

It is a pretty simple project, if you have an RTC clock and an Arduino compatible board you can get it done.

Step 1: 3 Steps for full progress

 Step 1: Material
1 Sparkfun Redboard (or any Arduino compatible)
 
1 Seven Segment Display kit
 
1 RTC DS1307 Clock kit (see Adafruit Tutorial on how to get or build one your self)
 
1 push button
 
Some Plexiglass for overall case. I just make a box from it and glue them together. Nothing fancy.
 
The RTC Clock is put inside an empty dental floss container so I don&/project/share/#39;t have to cover or worry about short circuiting the board inside the case.
Step 2: Setup your connections
Time to get your breadboard out.
 
I used Sparkfun tutorial here to connect the 7 segment
 
 
I am opting for the Serial UART connection.
 
Similarly I use this Adafruit tutorial for my RTC clock connection with i2C connection
Step 3: Program
/* Serial 7-Segment Display Example Code
    Serial Mode Stopwatch
   by: Jim Lindblom
     SparkFun Electronics
   date: November 27, 2012
   license: This code is public domain.
 
   This example code shows how you could use software serial
   Arduino library to interface with a Serial 7-Segment Display.
 
   There are example functions for setting the display&/project/share/#39;s
   brightness, decimals and clearing the display.
 
   The print function is used with the SoftwareSerial library
   to send display data to the S7S.
 
   Circuit:
   Arduino -------------- Serial 7-Segment
     5V   --------------------  VCC
     GND  --------------------  GND
      8   --------------------  RX
*/
 
/*ADDING 2 MINUTE TIMER*/
 
/project/share/#include <SoftwareSerial.h>
 
// These are the Arduino pins required to create a software seiral
//  instance. We&/project/share/#39;ll actually only use the TX pin.
const int softwareTx = 8;
const int softwareRx = 7;
 
int timerbutton = 12;
int timerstart = 0;
 
SoftwareSerial s7s(softwareRx, softwareTx);
 
unsigned int counter = 0;  // This variable will count up to 65k
char tempString[10],char_hour[2],char_minute[2];  // Will be used with sprintf to create strings
String str_hour,str_minute,str_time;
/project/share/#include <Wire.h>
/project/share/#include "RTClib.h"
 
RTC_DS1307 RTC;
int s7spowerpin = 9;
void setup()
{
  pinMode(timerbutton,INPUT_PULLUP);
  pinMode(s7spowerpin,OUTPUT);
  digitalWrite(s7spowerpin,HIGH);
  // Must begin s7s software serial at the correct baud rate.
  //  The default of the s7s is 9600.
  s7s.begin(9600);
 
  // Clear the display, and then turn on all segments and decimals
  clearDisplay();  // Clears display, resets cursor
  s7s.print("-HI-");  // Displays -HI- on all digits
  setDecimals(0b111111);  // Turn on all decimals, colon, apos
 
  // Flash brightness values at the beginning
  setBrightness(0);  // Lowest brightness
  delay(1500);
  setBrightness(127);  // Medium brightness
  delay(1500);
  setBrightness(255);  // High brightness
  delay(1500);
 
  // Clear the display before jumping into loop
  clearDisplay();  
 
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  
  
}
 
void loop()
{
  DateTime now = RTC.now();
  str_hour=String(now.hour(), DEC);
  str_minute=String(now.minute(), DEC);\
  Serial.println(digitalRead(timerbutton));
  if (digitalRead(timerbutton)==LOW) {timerstart=1;}
  while (timerstart==1)
  {
    Serial.println("timer started");
    int timer=0;
    clearDisplay();
    do
    {
    s7s.print(String(timer));
    timer=timer+1;
    delay(1000);
    clearDisplay();
    }
    while (timer<=120);
    timer=0;
    timerstart=0;
    
  }   
  if (now.hour()>9) {
    if (now.minute()>9) {
      str_time=str_hour+str_minute;
      Serial.println(str_time);
    }
  }
  if (now.hour()>9) {
    if (now.minute()<=9) {
      str_time=str_hour+"0"+str_minute;
      Serial.println(str_time);
    }
  }
  if (now.hour()<9) {
    if (now.minute()>9) {
      str_time="0"+str_hour+str_minute;
      Serial.println(str_time);
    }
  }
  if (now.hour()<9) {
    if (now.minute()<9) {
      str_time="0"+str_hour+"0"+str_minute;
      Serial.println(str_time);
    }
  }  
  // Magical sprintf creates a string for us to send to the s7s.
  //  The %4d option creates a 4-digit integer.
  //sprintf(tempString, "%4d", counter);
 
  // This will output the tempString to the S7S
  //s7s.print(tempString);
  s7s.print(str_time);
  setDecimals(0b00000010);  // Sets digit 3 decimal on
 
  ///counter++;  // Increment the counter
  delay(1000);  // This will make the display update at 10Hz.
}
 
// Send the clear display command (0x76)
//  This will clear the display and reset the cursor
void clearDisplay()
{
  s7s.write(0x76);  // Clear display command
}
 
// Set the displays brightness. Should receive byte with the value
//  to set the brightness to
//  dimmest------------->brightest
//     0--------127--------255
void setBrightness(byte value)
{
  s7s.write(0x7A);  // Set brightness command byte
  s7s.write(value);  // brightness data byte
}
 
// Turn on any, none, or all of the decimals.
//  The six lowest bits in the decimals parameter sets a decimal 
//  (or colon, or apostrophe) on or off. A 1 indicates on, 0 off.
//  [MSB] (X)(X)(Apos)(Colon)(Digit 4)(Digit 3)(Digit2)(Digit1)
void setDecimals(byte decimals)
{
  s7s.write(0x77);
  s7s.write(decimals);
}
 





Mar 06,2015
2,389 viewsReport item
  • Comments(0)
  • Likes(0)
Upload photo
You can only upload 5 files in total. Each file cannot exceed 2MB. Supports JPG, JPEG, GIF, PNG, BMP
0 / 10000