Project tutorial
Toastmasters Timer

Toastmasters Timer © GPL3+

Small board - great value (for how a little Arduino Nano is improving our Toastmasters meetings).

  • 2,260 views
  • 0 comments
  • 4 respects

Components and supplies

Ard nano
Arduino Nano R3
×1
181 02
Adafruit Standard LCD - 16x2 White on Blue
×1
Omron b3f 1000 image 75px
SparkFun Pushbutton switch 12mm
Any generic buttons
×8
5V power supply
×1
08377 02 l
Resistor 330 ohm
×1
Female Header 15 Pin
To hold the Arduino Nano
×2
12002 04
Breadboard (generic)
×1
09590 01
LED (generic)
6 Red, 6 Yellow, 6 Green
×18

About this project

Small board - great value (for how a little Arduino Nano is improving our Toastmasters meetings).

For those who are still wondering what Toastmasters means, it is a non-profit organization which helps people develop their communication and leadership skills. Take a look, you'll probably find a club near you that you can visit to learn a little more.

Anyway, one of the things we learn at Toastmasters is to deliver speeches and, on top of other evaluation criteria, we have a person controlling the time of your speech, as we have to keep it between specified thresholds.

This timing process often is manual, error-prone and a little boring. That's when I decided to find a nice project for my Arduino Nano.

Toastmasters Timer is basically a timer-controlled traffic light with some presets for specific tasks which are time-bound at any Toastmasters meeting. For instance a Standard Speech should be between 5 and 7 minutes: you get a green light when you reach the 5 minute mark, a yellow light at 6 minute and red one after 7 minutes. This project automates this process of turning lights on and off for the most common tasks.

I added an LCD screen to show the type of preset being used, and also a custom/manual timer for any specific need not covered by the presets.

Step 1: What Will You Need

  • 8 x Generic Buttons (Uxcell 10 x Momentary SPST NO Red Push Button Switch AC 250V/1.5A 125V/3A)
  • 1 x 330R resistor
  • 2 x 15 pin female header (to hold the Arduino Nano)
  • 1 x Snappable PC BreadBoard for all the wire soldering an to hold the Arduino Header
  • 18 LEDs: 6 Red, 6 yellow and 6 green for both the panel and the traffic light that goes on top of the device so people speaking can see it.
  • 2 pieces: 1/8" X 12" X 12" (3 X 300 x 300 mm) Baltic Birch Plywood
  • 5V power supply for the Arduino

Step 2: Prototyping = Carboard

A note about cardboard prototyping:

One thing I love to do is to create cardboard prototypes of everything I build so I can get a sense of what works and what doesn't, from an aesthetics perspective as well as usability. Then I use/test it for some time, adjust if necessary (moving buttons in cardboard is easy), and once I reach a model I like, I'll move the project to an official enclosure.

By the time I took these pictures it was a work in progress. Electronics and code were fine and didn't change. I ran several tests both at home and during Toastmasters meetings.

Step 3: The Circuit

Timer circuit is not a complex one. It is just a little tricky given you'll have to connect the LCD, 8 buttons and 3 LEDs to a single Arduino board. I used female headers in the board to keep the Arduino away from the mess of soldering, connecting it later on, as seen in the pictures.

Step 4: Lasercut the Box

As I said before, this project's case was made with 1/8" - 3mm plywood. I used the file attached to lasercut the wood. Then I glued the pieces together (in the pictures with tape to keep the parts in place right after gluing).

You'll need two 12x12 - 300x300mm wood pieces to do this, and the SVG file comes with all the models. It worked fine for me. I left two small gaps in the back: one for the traffic light wiring and another for the USB cable. If you'd like, you can make that part bigger and drill some holes in the back panel.

Step 5: Traffic Light

As I moved from the prototype to the final version, I thought about several possibilities for this part, but I decided to keep it simple: I just reused the LED wiring I had before, drilled some holes for the LEDs, used hot glue to keep them in place and used a heavy blue paper to do the finishing, a.k.a. hiding the wiring mess.

I also added a little round frame for each set of LEDs to make it more evident.

An idea for the future is to 3D print this, instead of using paper as I did (my 3D printer is currently offline for some improvements).

Step 6: Coding for the Nano

The code is straightforward and I added comments to the major sections of it.

You may use Arduino IDE. The only libraries needed are SPI and LiquidCrystal (you should have that as part of you Arduino IDE basic installation).

Ideas for next versions:

  • Replace the 16x2 LCD for a bigger one, 20x4, so we'll have space to show if we're in the grace period or not as well as other useful information.
  • Add a relay-board so we can control some bigger traffic lights with 127 V light bulbs. I know some clubs have cool/bigger traffic lights controlled by switches.
  • Add the relay board remotely, by adding radio capabilities with the nRF24L01 boards. Then we would be able to control the traffic light without the need for additional wiring.
  • Replace this interface (LCD, buttons and LEDs) for a 7" touch screen, completely revamping the user interface.

Step 7: How to Use It

The image shows a quick reference card I created to help people using the timer. I intend to print it out and place it along with the timer. I believe that by playing with the timer for a minute or two, folks will figure out how to deal with it.

I know this is a VERY specific project useful for Toastmasters out there, but if you need a timer with a traffic light, you might find this useful. It will just be a matter of changing the code and the box engraving to your needs.

I hope you enjoy!

Code

ToastMasters Timer CodeArduino
/*
 * ToastMasters timer
 * Created by: Wellington Duraes
 * Rev 0: Jan 13, 2017
 * Rev 1: Mar 8, 2017
 * Rev 2: Mar 19, 017 - Shipped!
 * Speakeasy ToastMasters Club
 */

#include <LiquidCrystal.h>
#include <SPI.h>

int EngageTimer = 0; 
int RedLED = 0; // Control the Red LED
int YellowLED = 0; //same for Yellow LED
int GreenLED = 0; //Same for Green LED

int RedTS = 10000; //Store the time threshold to turn the LED Red
int YellowTS = 10000;
int GreenTS = 10000;

String DisplayText ="";

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
unsigned long Start, finished, elapsed;

void setup() {

  pinMode(2,OUTPUT); //Red LED
  pinMode(3,OUTPUT); //Yellow LED
  pinMode(4,OUTPUT); //Green LED
  pinMode(A0,INPUT_PULLUP); // Std Speech button
  pinMode(A1,INPUT_PULLUP); // Table Topics button
  pinMode(A2,INPUT_PULLUP); // Evaluation button
  pinMode(A3,INPUT_PULLUP); // Start timer button
  pinMode(A4,INPUT_PULLUP); // Green button
  pinMode(A5,INPUT_PULLUP); // Yellow button
  pinMode(5,INPUT_PULLUP); // Red button
  pinMode(6,INPUT_PULLUP); // Stop/Reset button

  //setting up the LCD display
  lcd.begin(16, 2);
  lcd.print("  Toastmasters ");
  lcd.setCursor(0,1); // set the cursor to first character on line 2
  lcd.print("  Timer V1.0  ");
  delay(3000); // wait 2 seconds
  lcd.clear(); // clear the display

  lcd.print("Mar 2017 by");
  lcd.setCursor(0,1); // set the cursor to first character on line 2
  lcd.print("WellingtonDuraes");
  delay(3000); // wait 2 seconds
  lcd.clear(); // clear the display
  
  lcd.print("Select an option");
  lcd.setCursor(0,1); // set the cursor to first character on line 2
  lcd.print("   to begin");
}

void loop() {
 
//LEDs output control

      if(GreenLED==1){digitalWrite(4,HIGH);}
      else{digitalWrite(4,LOW);}
        
      if(YellowLED==1){digitalWrite(3,HIGH);}
      else{digitalWrite(3,LOW);}
        
      if(RedLED==1){digitalWrite(2,HIGH);}
      else{digitalWrite(2,LOW);}

//Check for Green/Yellow/Red button pressed

      if(digitalRead(A4)==LOW){
        GreenLED = 1;
        RedLED=0;
        YellowLED=0;}

      if(digitalRead(A5)==LOW){
        YellowLED = 1;
        RedLED=0;
        GreenLED=0;}

      if(digitalRead(5)==LOW){
        RedLED = 1;
        YellowLED=0;
        GreenLED=0;}

//Check for Stop button pressed

      if(digitalRead(6)==LOW){ 
          EngageTimer=0;
          elapsed = 0;
          GreenLED=0;
          YellowLED=0;
          RedLED=0;
          lcd.setCursor(8,1); // set the cursor to 8th character on line 2, while keeping the time onthe screen for note taking
          lcd.print(" STOPPED");
      }  

//Check for Std. Speech button pressed

      if(digitalRead(A0)==LOW){ 
        EngageTimer=1;
        elapsed = 0;
        Start= millis(); //capture the moment when the button was pressed
        GreenTS = 300; //green light on at this time
        YellowTS = 360; //yellow light on at this time
        RedTS = 420;  //red light on at this time
        DisplayText = "Std. Speech     "; //text to be displayed in the LCD while the timer goes on
      }

//Check for Table Topic button pressed

      if(digitalRead(A1)==LOW){
        EngageTimer=1;
        elapsed = 0;
        Start= millis(); 
        GreenTS = 60; 
        YellowTS = 90;
        RedTS = 120;
        DisplayText = "Table Topic     ";
      }

//Check for Evaluation button pressed

       if(digitalRead(A2)==LOW){
        EngageTimer=1;
        elapsed = 0;
        Start= millis();
        GreenTS = 120; 
        YellowTS = 150;
        RedTS = 180;
        DisplayText = "Evaluation      ";
      }


//Check for Custom Timer button pressed

      if(digitalRead(A3)==LOW){
        EngageTimer=1;
        elapsed = 0;
        Start= millis();
        GreenTS = 600000; 
        YellowTS = 600000;
        RedTS = 600000;
        DisplayText = "Custom Timer    ";
      }

//Check if the timer is engaged (as a result of any of the 4 events above)

      if(EngageTimer==1){
          float h, m, s, ms;
          unsigned long over;
          elapsed = millis()-Start;
          h = int(elapsed / 3600000);
          over = elapsed % 3600000;
          m    = int(over / 60000);
          over = over % 60000;
          s    = int(over / 1000);
          ms   = over % 1000;
          lcd.setCursor(0,0);
          lcd.print(DisplayText);
          lcd.setCursor(0,1);
          lcd.print(m, 0);
          lcd.print("m ");
          lcd.print(s, 0);
          lcd.print("s           "); 
      }


//LED on/off control: checks elapsed time and compare it with LED thresholds
          
          if((elapsed/1000)>=GreenTS){
            GreenLED=1;
            YellowLED=0;
            RedLED=0;}
           
           if((elapsed/1000)>=YellowTS){
            GreenLED=0;
            YellowLED=1;
            RedLED=0;}
          
           if((elapsed/1000)>=RedTS){
            RedLED=1;
            YellowLED=0;
            GreenLED=0;}
      
}

Schematics

The Circuit
Ftc4mtdj0cp0act large kyk5euxjbo

Comments

Similar projects you might like

Arduino Kitchen Timer

Project tutorial by Team I and myself

  • 65,449 views
  • 42 comments
  • 87 respects

Retro View Timer

Project tutorial by yilmazyurdakul

  • 989 views
  • 1 comment
  • 2 respects

Doggo Water Bowl Refill Monitor/Indicator - Part 1

Project tutorial by HeathenHacks

  • 1,167 views
  • 2 comments
  • 7 respects

Stopwatch and Lap Timer with Arduino

Project tutorial by LAGSILVA

  • 20,633 views
  • 17 comments
  • 40 respects

Alarm Clock and Timer Working Standalone

Project showcase by ozyRonald

  • 11,906 views
  • 10 comments
  • 15 respects

More than an Hour Timer

Project tutorial by Ian Cumming

  • 5,223 views
  • 1 comment
  • 5 respects
Add projectSign up / Login