Долго сидеть за монитором компьютера нельзя – это знает практически каждый. Но как вовремя прерываться от сидения за компьютером, чтобы глаза отдохнули? Для решения данной задачи мы можем сделать довольно простое устройство на основе Arduino, которое будет оповещать о необходимости оторваться от компьютера, отдохнуть и, возможно, сделать зарядку для глаз, что наверняка позволит вам не посадить зрение.

Каждые 20 минут светодиодный индикатор будет указывать на то, что пользователь компьютера должен сделать перерыв от своего экрана. Если таймер работает более 2 часов, пользователю будет предложено сделать 20-минутный перерыв.

Для управления Arduino в данном случае использовался шилд DFRobot 1602 LCD Keypad Shield с экраном и клавиатурой. Светодиод был подключен на цифровую линию 2.

На клавиатуре нажмите кнопку RIGHT (ВПРАВО) в течение 2 секунд, чтобы запустить таймер. Нажмите LEFT (ВЛЕВО) кнопку, чтобы приостановить таймер. Нажмите кнопку RIGHT после нажатия кнопки LEFT, чтобы возобновить таймер. Нажмите кнопку RST (СБРОС), чтобы сбросить таймер. Таймер имеет ограничение в 24 часа и автоматически сбрасывается через 24 часа. Код программы Arduino представлен далее.
#include <LiquidCrystal.h>
const int pin_RS = 8;
const int pin_EN = 9;
const int pin_d4 = 4;
const int pin_d5 = 5;
const int pin_d6 = 6;
const int pin_d7 = 7;
LiquidCrystal lcd( pin_RS, pin_EN, pin_d4, pin_d5, pin_d6, pin_d7);
int sec = 0;
int min = 0;
int hou = 0;
int bulkmin= 0, bulksec = 0, bulkhou = 0;
long start_time = 0;
boolean time_two_hour = false;
int button = 0;
int safe=0;
int pause = 0 ;
void setup(){
pinMode(2, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Screen Time");
Serial.begin(9600);
}
void loop(){
button = analogRead(0);
if ( button <= 60){
pause = 1;
}
if (button >=400 && button <= 600){
pause = 2;
}
if(pause == 1){
sec = sec + 1;
if(sec == 20){
digitalWrite(2, LOW);
}
if(sec == 60){
lcd.setCursor(11,1);
lcd.print(" ");
lcd.setCursor(12,1);
lcd.print(" ");
bulksec = sec;
sec = 00;
min = min + 1;
if (min == 20 || min == 40 || min == 60){
digitalWrite(2, HIGH);
}
if(min == 60){
lcd.setCursor(8,1);
lcd.print(" ");
lcd.setCursor(9,1);
lcd.print(" ");
bulkmin = min;
min = 00;
hou = hou + 1;
if((hou % 2) ==0){
digitalWrite(2, HIGH);
time_two_hour = true;
start_time = millis();
}
if(hou == 23 && bulkmin == 60){
lcd.setCursor(5,1);
lcd.print(" ");
lcd.setCursor(6,1);
lcd.print(" ");
hou = 00;
}
}
}
printTime();
Timer_Time();
}
else{
printTime();
Timer_Time();
}
delay(1000);
}
void Timer_Time()
{
if(time_two_hour == true)
{
if(start_time + 90000 <= millis())
{
digitalWrite(2, LOW);
time_two_hour = false;
}
}
}
void printTime()
{
if(hou<=9)
{ lcd.setCursor(4,1); lcd.print("0");
lcd.setCursor(5,1); lcd.print(hou); }
else
{lcd.setCursor(4,1); lcd.print(hou); }
lcd.setCursor(6,1);
lcd.print(":");
if(min<=9)
{ lcd.setCursor(7,1); lcd.print("0");
lcd.setCursor(8,1); lcd.print(min); }
else
{lcd.setCursor(7,1); lcd.print(min); }
lcd.setCursor(9,1);
lcd.print(":");
if(sec<=9)
{
lcd.setCursor(10,1);
lcd.print("0");
lcd.setCursor(11,1);
lcd.print(sec);
}
else{
lcd.setCursor(10,1);
lcd.print(sec);
}
}
© digitrode.ru