Muestra la hora y dispone de un luminoso que avisa de la falta de administración del medicamento como por ejemplo colirio.
A casi todos los medicados crónicos, (en mi caso un colirio para los ojos diario) nos ha pasado que nos acostamos y no recordamos si nos hemos aplicado la medicación o se nos ha olvidado hacerlo.
El reloj que presento se ha encargado de cubrir esa carencia.
Consta de dos partes:
Emisor (bote de desecho de colirio)
Un emisor, que se encuentra en el baño y que actuará cuando detecte que aplico el colirio enviando la señal de medicación tomada al receptor que se encuentra en la mesilla de noche del dormitorio.
Lista de materiales del emisor:

Receptor (reloj)
Un receptor, que es el reloj de la mesilla de noche en sí mismo con una bombilla led que se ilumina cuando a cierta hora no ha recibido la señal del emisor de medicación tomada.
Lista de materiales para el receptor:

El reloj de mesilla de noche se encarga de marcar la hora, y la intensidad del display depende de la luz de la habitación, pues cuenta con un sensor de luminosidad que se adaptará a las necesidades lumínicas de la habitación.
Además, dispone de unos leds rojos en las esquinas que se encenderán a una hora determinada para indicar que debe aplicarse la medicación, y permanecerán así encendidas hasta que esto suceda.
Aquí entra en juego el emisor, que consta de un bote dotado con un sensor de infrarrojos que almacenará las dosis sobrantes de colirio. De tal manera que al introducir una cápsula desechable en este tarro, emitirá una señal al reloj de la mesilla de noche para que las luces leds rojas se apaguen, dando así por aplicada la medicación.
De esta manera siempre puedes acostarte con la tranquilidad de que te has aplicado la medicación, pues a veces se olvida y lo recuerdas una vez ya a costado. O piensas que la has aplicado y no es así.
Esquema eléctrico.
Para el emisor
Para el receptor
Partes imprimibles
Receptor:
Se trata de una carcasa de reloj de mesilla de noche, que contiene la fuente de alimentación en su interior, lo que hace un poco peligroso el montaje. Para evitar accidentes, se ha diseñado un seguro contra tirones y caidas en el cable de alimenta con 220V.

Como pieza especial tener en cuenta los portadores de los pulsadores, deben acoplarse como en la siguiente imagen.
Imprimir las piezas de las esquina que albergarán los leds rojos con material traslúcido.
Emisor
Consta de dos partes unidas por rosca; el bote contenedor y la tapadera que contiene la electrónica.
Programación
Librerías
Se ha detectado cierto error en la carga del programa de forma aleatoria, ver imagen.

Programación del emisor:
#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // RX | TX
void setup() {
pinMode (A0, INPUT);
Serial.begin (9600);
BT1.begin(9600);
}
void loop() {
Serial.println (analogRead (A0));
if (analogRead (A0) >= 720) {
BT1.write (1);
}
}
Programación del receptor:
/************************************************
Nombre del proyecto: Reloj de mesilla de noche con recordatorio de aplicación de colirio.
Programado por Juan Carlos Pedrajas del Molino
Https:\\www.geniero.es
pedrajas@geniero.es
afelio11@gmail.com
Fecha de inicio: 18/02/22
Fecha de finalización:26/02/22
ESQUEMA DE CONEXION
+-----+
+----[PWR]-------------------| USB |--+
| +-----+ |
| GND/RST2 [ ][ ] |
| MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
| 5V/MISO2 [ ][ ] A4/SDA[ ] |
| AREF[ ] |
| GND[ ] |
| [ ]N/C SCK/13[ ] | TX HC-05
| [ ]IOREF MISO/12[ ] |
| [ ]RST MOSI/11[ ]~|
| [ ]3V3 +---+ 10[ ]~| LED IZQUIERDA
| [ ]5v -| A |- 9[ ]~| LED DERECHA
| [ ]GND -| R |- 8[ ] |
| [ ]GND -| D |- |
| [ ]Vin -| U |- 7[ ] | BOTON C
| -| I |- 6[ ]~| BOTON B
RX HC-05 | [ ]A0 -| N |- 5[ ]~|
LDR | [ ]A1 -| O |- 4[ ] | BOTON A
| [ ]A2 +---+ INT1/3[ ]~| CLK TM1637
| [ ]A3 INT0/2[ ] | DIO TM1637
SDA DS3231 | [ ]A4/SDA RST SCK MISO TX>1[ ] |
SCL DS3231 | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
| [ ] [ ] [ ] |
| UNO_R3 GND MOSI 5V ____________/
\_______________________/
********************************************************************
*/
#include <TimerOne.h>
#include "TM1637.h"
#include <Wire.h>
#include "DS3231.h"
#include <SoftwareSerial.h>
SoftwareSerial BT1(13, A0); // RX | TX
RTClib RTC;
DS3231 Clock;
#define ON 1
#define OFF 0
int8_t TimeDisp[] = {0x00, 0x00, 0x00, 0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
byte second, minute, hour; //variables globales de ajuste
#define CLK 3//pins definitions for TM1637 and can be changed to other ports
#define DIO 2
TM1637 tm1637(CLK, DIO);
int brillo;
const int izquierda = 10;
const int derecha = 9;
const int botA = 4;
const int botB = 6;
const int botC = 7;
int dato;
boolean colirio = 0;
int toma = 0;
void setup()
{
//Clock.setHour(19);
// Clock.setMinute(02);
// Clock.setSecond(0);
Serial.begin (9600);
BT1.begin(9600);
pinMode (A1, INPUT);
pinMode (botA, INPUT_PULLUP);
pinMode (botB, INPUT_PULLUP);
pinMode (botC, INPUT_PULLUP);
pinMode (izquierda, OUTPUT);
pinMode (derecha, OUTPUT);
tm1637.set(0);
tm1637.init();
// tm1637.set(7);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
Timer1.initialize(1000000);//timing for 1000ms
Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR
Wire.begin();
digitalWrite (izquierda, HIGH);
digitalWrite (derecha, HIGH);
}
void loop()
{
digitalWrite (izquierda, colirio);
digitalWrite (derecha, colirio);
DateTime now = RTC.now();
if ( now.hour() == 22 && now.minute() == 30 && now.second() == 0) { //Alarma activa a las 22:30 enciende las luces.
colirio = 1;
}
luz ();
botones();
bt();
if (Update == ON)
{
TimeUpdate();
}
}
void bt() {
if (BT1.available()) {
dato = BT1.read();
Serial.println(dato);
if (dato == 1) {
colirio = 0;
dato = 0;
}
}
}
void botones() {
DateTime now = RTC.now();
if (!digitalRead(botA) || !digitalRead(botB) || !digitalRead(botC)) {
colirio = 0;
}
if (!digitalRead (botC)) {
if (!digitalRead (botB)) {
delay (500);
Clock.setHour(now.hour() + 1);
Clock.setSecond(0);
delay (500);
now = RTC.now();
if (now.hour() >= 24) {
Clock.setHour(00);
}
}
if (!digitalRead (botA)) {
delay (500);
Clock.setMinute(now.minute() + 1);
Clock.setSecond(0);
delay (500);
now = RTC.now();
if (now.minute() >= 60) {
Clock.setMinute(00);
}
}
}
}
void TimingISR()
{
halfsecond ++;
Update = ON;
if (halfsecond == 2) {
halfsecond = 0;
}
ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
DateTime now = RTC.now();
if (ClockPoint)tm1637.point(POINT_ON);
else tm1637.point(POINT_OFF);
TimeDisp[0] = now.hour() / 10;
TimeDisp[1] = now.hour() % 10;
TimeDisp[2] = now.minute() / 10;
TimeDisp[3] = now.minute() % 10;
Update = OFF;
}
void luz() {
int sol = analogRead (A1);
if (sol <= 250)
brillo = 5; //MAXIMO BRILLO ES 7
if (sol >= 250 )
brillo = 0;
tm1637.set(brillo);
tm1637.display(TimeDisp);
}