Coding quiz mate
Made by Nik Kim
Made by Nik Kim
Making circuit version of Time Timer
Created: November 22nd, 2023
In this project, I want to combine what I have learned until now. Therefore, I mixed the components of motors, lights, and switches. This product is great mate when you are preparing for time-limited tasks such as quizzes or tests. The Solenoid ticker will run for 30 seconds and will repeat this process until the desired input time.
1. Wiring up Timer. The timer in this circuit is a Servo.
2-a. Wiring up Solenoid. The first intention was to make a solenoid sound to indicate a few seconds left until the time was over. However, the solenoid didn't work properly.
2-b. As an alternative, I used Neopixel to gradually glow up when there are less than 1/3 times left compared to the user's input time.
3. Make a switch that starts the whole process. After the user types in the desired time through the console and toggles the switch, the solenoid Time Timer will begin.
// NeoPixel
#include <neopixel.h>
// Set pixel COUNT, PIN and TYPE
#define PIXEL_PIN D6
#define PIXEL_COUNT 16
#define PIXEL_TYPE WS2812
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
// Servo
Servo servo;
int servoPin = A3;
// Switch
int switchPin = D3;
// User input
int minutes = 0;
void setup() {
// Setup particle serial monitor
Serial.begin(9600);
// Setup neopixel
strip.begin();
strip.show();
// Setup servo
servo.attach(servoPin);
servo.write(0);
delay(500);
servo.write(180);
delay(500);
// Set up switch
pinMode(switchPin, INPUT_PULLUP);
// Set up particle function
Particle.function("Set your timer in minutes:", setTime);
}
void loop() {
// Read switch mode
int switchState = digitalRead(switchPin);
int count = 0;
// this loop represents 30 sec timer
// this loop repeats the number of times of the user input
if(switchState == LOW) {
for (int i = 0; i < minutes * 2; i++ ) {
for (int a = 0; a <= 180; a = a + 6) {
count++;
servo.write(a);
delay(1000);
// if remaining time is lower that 1/3 of the user input
// slowly neoPixel glows up into gentle color
Serial.println(count);
if (count >= 2 * 60 * minutes / 3) {
for (int i = 0; i < strip.numPixels(); i++) {
int color = map(count, 0, 60 * minutes, 0, 10);
strip.setPixelColor(i, 0, color, 0);
}
strip.show();
}
}
}
switchState = digitalRead(switchPin);
// turn off neopixels
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, 0, 0, 0);
}
strip.show();
count = 0;
}
}
int setTime(String cmd) {
minutes = cmd.toInt();
return -1;
}
Click to Expand
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Making circuit version of Time Timer