Alarme Beba Água
This tutorial is not available in English

Projeto
Esquecer de tomar água durante o trabalho? Não mais. Com a ajuda de componentes eletrônicos e programação personalizada, manter-se hidratado enquanto realiza suas atividades diárias fica fácil!?
Lista de materiais
- 1x BlackBoard Edge H
- 1x Módulo de Gravação e Reprodução de Áudio ISD1820
- 1x Jumpers Fêmea-Fêmea x40 Unidades
Circuito
Para realizarmos esse projeto, montamos um circuito como o mostrado abaixo.
Código
O código abaixo foi desenvolvido para a nossa aplicação, e por isso, dependendo do seu projeto, pode ser que seja necessário algumas adaptações.
x
1
/*******************************************************************************
2
RoboCore - Projeto Alerme Beba Agua (V1.0)
3
4
Exemplo de aplicacao usando uma BlackBoard Edge e um Modulo de Gravacao
5
e Reproducao de Audio, para lembrar os desidratados a tomarem agua! haha
6
7
Copyright 2024 RoboCore.
8
Escrito por Vini (15/04/2024).
9
10
This program is free software: you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation, either version 3 of the License, or
13
(at your option) any later version (<https://www.gnu.org/licenses/>).
14
*******************************************************************************/
15
16
// Bibliotecas
17
#include <WiFi.h>
18
#include "time.h"
19
#include "RoboCore_MMA8452Q.h"
20
21
// Objeto de leitura do acelerometro
22
MMA8452Q acel;
23
24
// Variaveis para conexao Wi-Fi
25
const char* ssid = "sua-rede-aqui";
26
const char* password = "senha-da-rede";
27
28
// Variaveis para conectar no servidor NTP
29
const char* ntpServer = "pool.ntp.org";
30
const long gmtOffset_sec = -3L * 60L * 60L; // -3 horas de diferença do GMT
31
const int daylightOffset_sec = 0;
32
33
// Horarios para alerta de beber agua
34
int hoursToNotify[10] = {8, 9, 10, 11, 12, 13, 14, 15, 16, 17}; // Altere como desejar
35
36
// Pino LED na Edge
37
const int edge_led = 27;
38
39
// Flag para saber se ja houve notificacao nessa hora
40
int lastHourNotified = 0;
41
42
void setup() {
43
44
// Inicializacao do monitor serial
45
Serial.begin(115200);
46
47
// Connecta no Wi-Fi
48
Serial.print("Conectando na rede: ");
49
Serial.println(ssid);
50
WiFi.begin(ssid, password);
51
while (WiFi.status() != WL_CONNECTED) {
52
delay(500);
53
Serial.print(".");
54
}
55
Serial.println("");
56
Serial.println("Conectando");
57
58
// Inicie e obtenha a hora
59
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
60
struct tm timeinfo;
61
if (!getLocalTime(&timeinfo)) {
62
Serial.println("Erro na conexão do servidor NTP");
63
}
64
65
// Desconecta o Wi-Fi
66
WiFi.disconnect(true);
67
WiFi.mode(WIFI_OFF);
68
69
// Inicia o acelerometro
70
acel.init();
71
72
// Configura o pino do LED como saida
73
pinMode(edge_led, OUTPUT);
74
75
}
76
77
78
void loop() {
79
80
// Confere se a leitura atual do RTC e uma das horas configuradas no codigo
81
int hourNow = checkHour();
82
for (int index = 0; index < sizeof(hoursToNotify) / sizeof(int); index++) {
83
if (hourNow == hoursToNotify[index]) {
84
85
// Notificacao sera realizada uma vez por hora apenas, e so para se placa for virada.
86
if (lastHourNotified != hourNow) {
87
acel.read(); // Faz a leitura do acelerometro
88
if (acel.y > 0.50) {
89
// Os tempos de delay irao variar conforme o que voce gravar no modulo de gravacao de som
90
digitalWrite(edge_led, HIGH);
91
delay(2100);
92
digitalWrite(edge_led, LOW);
93
delay(250);
94
95
} else {
96
digitalWrite(edge_led, LOW);
97
lastHourNotified = hourNow;
98
}
99
}
100
}
101
}
102
103
}
104
105
// Funcao para realizar a leitura de hora do RTC
106
int checkHour() {
107
struct tm timeinfo;
108
if (!getLocalTime(&timeinfo)) {
109
Serial.println("Falha ao obter tempo");
110
return 0;
111
}
112
char timeHour[3];
113
strftime(timeHour, 3, "%H", &timeinfo);
114
int hourNow = atoi(timeHour);
115
return hourNow;
116
}
117