Para los interesados en el timbre automático que estoy haciendo les dejo el código para la placa Arduino Uno (lo probe con la Mega y la Nano).Por el pin 13 comando una placa Relay.
Para ver su funcionamiento hago un reporte serial
Por cualquier información pueden escribirme a olafvgb61@gmail.com
/******************************************************************
* Autor : Olaf Albrecht *
* Release : 2.0 *
* Soft.Date : 20 junio, 2015 *
* Fecha Nuevo Release : 13 mayo , 2016 *
* Comments : Compara con el reloj la hora y minutos *
* y activa un Relay para disparar un timbre *
* *
* Hardware Used : - Arduino Uno R-3 module *
* - Display LCD Arduino Compatible (LCD 16x2) *
* - Display (Hitachi HD44780 driver). *
* - RTC Reloj base de tiempo *
*******************************************************************
*/
#include <Wire.h>
#include <LiquidCrystal.h>
#include "RTClib.h"
RTC_DS1307 RTC;
LiquidCrystal lcd(8, 7, 12, 11, 10,9);
int dia;
int seg;
int HORMIL;
int thisvecR;
int contrecreo[]={755,800,840,920,930,935,1010,1050,1100,1140,1220,1300,1335,1340,1455,1500,1540};
//int contrecreo[]={1905,1908,1910,1912,1915,1930,1920,1935,1940,1945,1950,1955,2000,2005,2010,2015,2020};
int cnttiporecreo[]={
1,3,1,1,2,3,1,1,3,1,1,1,2,2,1,2,1};
// 1 R corto - 2 R largo - 3 R L&Repet
int cntvec1=17;
void setup () {
Wire.begin(); // Inicio el puerto I2C
RTC.begin(); // Inicio la comunicación con el RTC
//RTC.adjust(DateTime(2016,4,4,11,49,00)); // Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Timbre IPEA 238");
pinMode(13, OUTPUT);
}
void loop(){
////*
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
delay(1000); // La información se actualiza cada 1 seg.
HORMIL=100*(now.hour())+ now.minute();
seg=now.second();
dia=now.dayOfWeek();
// Serial.println();
// Serial.print(now.second(), DEC);
// Esta rutina detecta la hora y acomoda el recreo
if(thisvecR=0)
{
for (int thatvecR = 0; thatvecR < cntvec1; thatvecR++)
{
if(HORMIL==contrecreo[thatvecR])
{
thisvecR=thatvecR;
}
}
}
// Lee el vector secuencia horarios timbre
if(dia>0 && dia<6){
lcd.setCursor(0,1);
lcd.print(now.day(), DEC); // Dia
lcd.print('/');
lcd.print(now.month(), DEC); // Mes
lcd.print('/');
lcd.print(now.year(), DEC); // Año
lcd.print(' ');
if (now.hour() < 10){
lcd.print("0");
}
lcd.print(now.hour(), DEC); // Horas
lcd.print(':');
if (now.minute() < 10){
lcd.print("0");
}
lcd.print(now.minute(), DEC); // Minutos
// COMPARO RELOJ CON EL VECTOR
for (thisvecR = 0; thisvecR < cntvec1; thisvecR++)
{
if(HORMIL==contrecreo[thisvecR] && seg<10)
{
switch (cnttiporecreo[thisvecR])
{
case 1:
Serial.println("Timbre Corto ");
timbre_corto();
break;
case 2:
Serial.println("Timbre Largo");
timbre_largo();
break;
case 3:
Serial.println("Timbre con Repeticion");
timbre_corto();
timbre_largo();
break;
}
if(thisvecR == cntvec1) // REPORTE SERIAL
{
thisvecR = 0;
}
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.print(" DS:");
Serial.print(now.dayOfWeek(), DEC);
Serial.print(" HM:");
Serial.print(HORMIL);
Serial.print(" contrecreo:");
Serial.print(contrecreo[thisvecR]);
Serial.print(" cntvec1:");
Serial.print(thisvecR);
Serial.println();
Serial.print("-------------------------------------------------------------");
Serial.println();
}
}
}
else
{
lcd.setCursor(0,0);
lcd.scrollDisplayLeft();
lcd.print("DESCONECTADO F/S");
lcd.setCursor(0,1);
lcd.print("Olaf Tc:15406600");
digitalWrite(13, LOW);
delay(150);
}
}
int timbre_corto()
{
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(4000);
}
int timbre_largo()
{
digitalWrite(13, HIGH);
delay(4000);
digitalWrite(13, LOW);
delay(2000);
}
// funcion reporte serial a PC
Para ver su funcionamiento hago un reporte serial
Por cualquier información pueden escribirme a olafvgb61@gmail.com
/******************************************************************
* Autor : Olaf Albrecht *
* Release : 2.0 *
* Soft.Date : 20 junio, 2015 *
* Fecha Nuevo Release : 13 mayo , 2016 *
* Comments : Compara con el reloj la hora y minutos *
* y activa un Relay para disparar un timbre *
* *
* Hardware Used : - Arduino Uno R-3 module *
* - Display LCD Arduino Compatible (LCD 16x2) *
* - Display (Hitachi HD44780 driver). *
* - RTC Reloj base de tiempo *
*******************************************************************
*/
#include <Wire.h>
#include <LiquidCrystal.h>
#include "RTClib.h"
RTC_DS1307 RTC;
LiquidCrystal lcd(8, 7, 12, 11, 10,9);
int dia;
int seg;
int HORMIL;
int thisvecR;
int contrecreo[]={755,800,840,920,930,935,1010,1050,1100,1140,1220,1300,1335,1340,1455,1500,1540};
//int contrecreo[]={1905,1908,1910,1912,1915,1930,1920,1935,1940,1945,1950,1955,2000,2005,2010,2015,2020};
int cnttiporecreo[]={
1,3,1,1,2,3,1,1,3,1,1,1,2,2,1,2,1};
// 1 R corto - 2 R largo - 3 R L&Repet
int cntvec1=17;
void setup () {
Wire.begin(); // Inicio el puerto I2C
RTC.begin(); // Inicio la comunicación con el RTC
//RTC.adjust(DateTime(2016,4,4,11,49,00)); // Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Timbre IPEA 238");
pinMode(13, OUTPUT);
}
void loop(){
////*
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
delay(1000); // La información se actualiza cada 1 seg.
HORMIL=100*(now.hour())+ now.minute();
seg=now.second();
dia=now.dayOfWeek();
// Serial.println();
// Serial.print(now.second(), DEC);
// Esta rutina detecta la hora y acomoda el recreo
if(thisvecR=0)
{
for (int thatvecR = 0; thatvecR < cntvec1; thatvecR++)
{
if(HORMIL==contrecreo[thatvecR])
{
thisvecR=thatvecR;
}
}
}
// Lee el vector secuencia horarios timbre
if(dia>0 && dia<6){
lcd.setCursor(0,1);
lcd.print(now.day(), DEC); // Dia
lcd.print('/');
lcd.print(now.month(), DEC); // Mes
lcd.print('/');
lcd.print(now.year(), DEC); // Año
lcd.print(' ');
if (now.hour() < 10){
lcd.print("0");
}
lcd.print(now.hour(), DEC); // Horas
lcd.print(':');
if (now.minute() < 10){
lcd.print("0");
}
lcd.print(now.minute(), DEC); // Minutos
// COMPARO RELOJ CON EL VECTOR
for (thisvecR = 0; thisvecR < cntvec1; thisvecR++)
{
if(HORMIL==contrecreo[thisvecR] && seg<10)
{
switch (cnttiporecreo[thisvecR])
{
case 1:
Serial.println("Timbre Corto ");
timbre_corto();
break;
case 2:
Serial.println("Timbre Largo");
timbre_largo();
break;
case 3:
Serial.println("Timbre con Repeticion");
timbre_corto();
timbre_largo();
break;
}
if(thisvecR == cntvec1) // REPORTE SERIAL
{
thisvecR = 0;
}
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.print(" DS:");
Serial.print(now.dayOfWeek(), DEC);
Serial.print(" HM:");
Serial.print(HORMIL);
Serial.print(" contrecreo:");
Serial.print(contrecreo[thisvecR]);
Serial.print(" cntvec1:");
Serial.print(thisvecR);
Serial.println();
Serial.print("-------------------------------------------------------------");
Serial.println();
}
}
}
else
{
lcd.setCursor(0,0);
lcd.scrollDisplayLeft();
lcd.print("DESCONECTADO F/S");
lcd.setCursor(0,1);
lcd.print("Olaf Tc:15406600");
digitalWrite(13, LOW);
delay(150);
}
}
int timbre_corto()
{
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(4000);
}
int timbre_largo()
{
digitalWrite(13, HIGH);
delay(4000);
digitalWrite(13, LOW);
delay(2000);
}
// funcion reporte serial a PC