Show Posts
Pages: [1] 2 3 ... 6
1  International / Hardware / Sensor de vibracion on: February 14, 2014, 07:06:43 pm
Buenas a todos, quiero hacer una simple alarma usando diferentes sensores de vibración, actualmente tengo este:

http://www.bricogeek.com/shop/sensores/345-transductor-piezo.html

Pero me gustaría que fuera mas sensible, se podría usar un amplificador operacional para ganar esa sensibilidad? de ser asi cual podria usar ya que hace mas de 10 años que no toco la electronica.

Tambien tengo pensado usar este otro sensor:

http://www.solostocks.com/venta-productos/otros-productos-equipamiento-electrico/sensor-de-vibracion-sw-18020p-para-arduino-8256221

Pero aun faltan 2 semanas hasta tenerlo en mi poder para poder jugar con el.

Saludos y gracias
2  International / Hardware / Re: Detector de golpes con transductor on: February 28, 2013, 05:02:28 am
Me autorespondo, no necesito amplificador operacional solo una resistencia.

Aqui esta como se monta por si a alguien mas le interesa.

http://www.arduino.cc/es/Tutorial/KnockSensor


Saludos
3  International / Hardware / Detector de golpes con transductor on: February 28, 2013, 03:46:08 am
Buenas a todos, estoy pensando hacer un detector de golpes para acoplarlo en unas ventanas, y me encontrado con esto:

http://www.bricogeek.com/shop/sensores/345-transductor-piezo.html

Ahora la pregunta es: tengo que poner tambien un amplificador operacional o crea la suficiente tension como para que el arduino detecte cuando se produce un golpe o vibracion?



Saludos
4  International / Proyectos / Re: Proyecto medidor comparador de nivel deposito on: October 01, 2012, 10:21:51 am
Trataria de afinarlo lo maximo posible y ver la sensibilidad que puede llegar a tener si se puede bajar de cantidades tan altas como 100l/h a 10 litros incluso menos, pero claro hasta que no tenga el material y ver si soy capaz de hacer el programa no lo sabre jejeje, pero en teoria podria funcionar.
5  International / Proyectos / Re: Proyecto medidor comparador de nivel deposito on: October 01, 2012, 05:45:51 am
Claro, como el medidor de presión tiene para realizar 2 lecturas, pues lo que haria es comparar siempre las 2 de manera que aunque varie la presion Atmosferia, tambien varia la presion del deposito, solo tengo que ir comparandolas continuamente y hacer que si en algun momento aumenta la diferencia muy rapido, pues que salte una alarma.

O por ejemplo, se sabe que funcionando el sistema de dosificacion del tractor tarda en consumir 300litros en 1hora, pues si tarda menos de una hora pues que salte una alamarla, esta claro que se trataria de hacer con la mayor sensibilidad posible ya que estaria bueno que saltada la alarma cuando ya ha tirado 300 litros de producto jeje
6  International / Proyectos / Re: Proyecto medidor comparador de nivel deposito on: October 01, 2012, 05:00:44 am
Buenas, por ultrasonidos lo habia pensado, el motivo de usarlo por presion es porque iria instalado instalado en un tractor para un deposito dosificador que tiene, entonces del movimiento el medidor por ultrasonidos se mojaria, ya que no va estar parado, de hay que haya pensado en usar el sistema mediante presiones, asi tenemos controlado el nivel del deposito y si tiene alguna fuga como ya ha pasado en varias ocasiones por rota de alguna manguera o habiendo desperdiciado mucho producto cuando se han dado cuenta.


saludos
7  International / Proyectos / Proyecto medidor comparador de nivel deposito on: October 01, 2012, 04:29:21 am
Buenas a todos, quiero montar un proyecto similar a este:

http://www.ponteduino.es/2010/07/mpx2010/

Pero añadiendo que compare el nivel que hay y que salte una alarma cuando baje el nivel muy rapidamente como cuando hay una fuga o algo parecido.

De momento estoy pillando el material y me surgen unas dudas ya que no encuentro el mismo material que se usa aqui.

Amplificardor Operacional usa el LM324 y yo usare el LM324N.
Medidor de presion usare este que tiene mayor rango.
http://todoelectronica.com/sensor-presion-cebek-p-14098.html?osCsid=15ca36f74f8badc85902639fb320b8f6

y la duda viene a la ahora de pillar los condensadores para el circuito del amplificador Operacional que no los encuentro como los de la imagen y he pensado en pillar condesadores ceramicos de 10n.

No he encontrado que haya diferencia con los amplificadores que usa en el proyecto y los que yo he encotrado y con los condensadores tampoco tendria q haber problema.

En cuando se me resuelvan esas dudas pillo todo el material.

Saludos
8  International / Software / Re: Contador de presencia on: June 28, 2012, 04:01:57 am
Gracias por recordarmelo jeje, ira colocado en una caja y esta puesta dentro del porche atornillada a la pared, de manera que la unica forma de poder acceder a ella es entrar por el porche activando el pir y la alarma, eso si consigo hacer que me cuente cada vez que salta el pir y me lo muestre en el LCD jajaja.

Por cierto lo del potenciometro digital me estado informando y es una muy buena idea jejeje graciass
9  International / Software / Re: Contador de presencia on: June 28, 2012, 03:26:29 am
Buenas jorge, lo que quiero hacer es ver si regulando la sensibilidad con el potenciometro que tiene el sensor Pir, puedo hacer que no detecte al perro.

Si no detecta al perro y si a personas el sensor iria colocado en un porche que da acceso a la vivienda cubriendo con un solo sensor el acceso a puerta principal y 2 ventanas de manera que si va un CACO con solo entrar al porche ya se pondria la cuenta a tras de la alama.

Si detecta al perro pues tendria que desistir de colocarlo en el porche ya que estaria saltando cada 2 x 3 y lo pondria dentro de la vivienda.

Aunque creo que seria mucho mejor si lo puedo colocar en el poche ya que se anticipa la alarma a saltar antes de que lleguen a entrar o forzar nada.

Por eso quiero montar el contador de presencia, asi voy variando la sensibilidad, lo conecto por la noche y a la mañana siguiente veo si a saltado con el perrillo o si sigue a 0.

Otra solucion es cerrar el porche para que no entre el perro, pero hay es donde duerme el pobre porque esta mas resguardado de frio, lluvia, calor etc.


uno de los problemas es que en los manuales que encontrado no he visto como hacer para que muestre la variable del cuenta personas en el LCD, lo mas que consigo es que salga 0, pero solo la primera vez que te pilla el pir, el resto de las veces nada de nada.
Que tendria que poner para que me salga ya con la suma?


Code:
void loop()
{
  ...
  
  // Led se enciende durante la detección de presencia
  if (estadoPir1 == HIGH)
  {
    digitalWrite(ledEstado, HIGH);  //Pone led Estado pin 13 a nivel alto
  }
  else
  {
    digitalWrite(ledEstado, LOW);   //Pone led Estado pin 13 a nivel bajo
  }
    
  // Contador histórico de presencias detectadas
  if (estadoPir1 == LOW && estadoPir1_anterior == HIGH)
  {
    contadorPresencia++;

lcd.backlight();             // Iluminacion LCD
lcd.setCursor(9,1);          // Seleccionamos posicion del cursor
lcd.print (contadorPresencia);



Jorgepl gracias por ayudarme con el codigo.

Saludos a gracias por vuestra ayuda a todos

PD: uso la version 0023 ya que la ultima me dio problemas con una libreria y al final use este, por si interfiere en algo.
10  International / Software / Re: Contador de presencia on: June 28, 2012, 02:15:54 am
Para ajustar la sensibilidad y no tener que montar-desmontar el detector PIR un monton de veces del techo se me ocurre que puedes quitar el potenciometro de sensibilidad y conectarle un potenciometro digital de 50K.

Buena idea, aunque nunca lo he usado, es mas ni sabia que existía jejejje.

volviendo al contador de presencia, tengo que ser tonto o algo porque con el codigo que modifico el compañero lo he integrado al mio para que funcione lcd, reloj... y nada lo ponga como lo ponga lo mas que aparece es 0 ni cuenta ni nada de nada...

Code:
// Alarma Chalet
#include <Wire.h>                   // Libreria para I2C
#include <LiquidCrystal_I2C.h>      // Libreria para LCD
#define DS1307_I2C_ADDRESS 0x68     // Direccion bus Reloj

LiquidCrystal_I2C lcd(0x27,16,2);  // Direccion de bus pantalla

const int pir1 = 4;            // Pin de entrada señal Pir 1

const int ledEstado = 13;      // Led en pin 13 salto Pir 1 y Pir 2
int estadoPir1 = 0;            // Estado de Pir 1 "0"
int estadoPir1_anterior = 0;    // Estado de Pir 1
int contadorPresencia = 0;      // Contador de presencias detectadas


byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.send(0);
   Wire.send(decToBcd(second));   
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));     
   Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y la hora del reloj
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar porque ciertos bits son bits de control   

  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

void setup()

{
  lcd.init();                  // Inicializacion LCD
  pinMode(ledEstado, OUTPUT);  // Funcion de salida LedEstado pin 13
  pinMode(pir1, INPUT);        // Funcion de entrada Pir 1 pin 2
 
 
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
 
 
 
  // la primera vez debemos poner en hora, active esta parte y luego vuelva a quitarla
  /*second = 00;
  minute = 33;
  hour = 15;
  dayOfWeek = 6;
  dayOfMonth = 11;
  month = 2;
  year = 12;
 
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */
   
 
}

void loop()
{
 
   lcd.backlight();             // Iluminacion LCD
   lcd.setCursor(0,0);          // Seleccionamos posicion del cursor
   
 
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 

  lcd.setCursor(6,0);
    lcd.print(year, DEC);
  lcd.setCursor(2,0);
  lcd.print("/");
  lcd.setCursor(3,0);
    if (month < 10) lcd.print("0");
  lcd.print(month, DEC); 
  lcd.setCursor(5,0);
  lcd.print("/");   
  lcd.setCursor(0,0);
    if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC);
  lcd.print("");
  lcd.setCursor(0,1);
    if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.setCursor(2,1);
  lcd.print(":"); 
  lcd.setCursor(3,1);
    if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(5,1);
  lcd.print(":");
    if (second < 10) lcd.print("0");
  lcd.print(second, DEC); 
 
     switch (dayOfWeek)
   
    {
     
    case 1:
      lcd.setCursor(9,0);
      lcd.print("Lunes");
      break;
    case 2:
      lcd.setCursor(9,0);
      lcd.print("Martes");
      break;
    case 3:
      lcd.setCursor(9,0);
      lcd.print("Miercoles");
      break;
    case 4:
      lcd.setCursor(9,0);
      lcd.print("Jueves");
      break;
    case 5:
      lcd.setCursor(9,0);
      lcd.print("Viernes");
      break;
    case 6:
      lcd.setCursor(9,0);
      lcd.print("Sabado");
      break;
    case 7:
      lcd.setCursor(9,0);
      lcd.print("Domingo");
      break;
   }
   
   

  delay(1000); //Pausa durante 1 segundo
 
 
 
  estadoPir1 = digitalRead(pir1);  // Leer estado Pir 1
 
 
  lcd.backlight();             // Iluminacion LCD
  lcd.setCursor(9,1);          // Seleccionamos posicion del cursor
 
  lcd.print (contadorPresencia);

  // Led se enciende durante la detección de presencia
  if (estadoPir1 == HIGH)
    digitalWrite(ledEstado, HIGH);  //Pone led Estado pin 13 a nivel alto
   
   
 
  else {
    digitalWrite(ledEstado, LOW);   //Pone led Estado pin 13 a nivel bajo
   
  // Contador histórico de presencias detectadas
  if (estadoPir1 == LOW && estadoPir1_anterior == HIGH)
    contadorPresencia++;
  estadoPir1_anterior = estadoPir1;
 
 
 }
}

a ver que estoy poniendo mal, al final desistiré ya que seguramente el perro lo pille si o si ( es un mastin de 90kg ) y seguire con lo que es la alarma...

Saludos
11  International / Software / Re: Contador de presencia on: June 27, 2012, 04:06:37 am
Muchas gracias compañeros, los sensores tienen un potenciometro para cambiar la sensibilidad, entonces quiero ponerlo un par de dias a ver si puedo ajustarlo para que no salte con el perro y gatos, entonces habia pensado en montarlo de esta manera.


Cuando llegue a casa cargo el codigo a ver que tal me va.

Muchas gracias jorgepl
12  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: June 27, 2012, 02:39:07 am
Claro ahora si cuadra jejeje valla cabeza....


Saludos
13  International / Software / Contador de presencia on: June 27, 2012, 02:31:25 am
Buenas a todos, estoy montando una alarmar y se como hacer para que salte cuando detecta movimiento y hasta ahi de momento bien, ahora quiero conectar un sensor Pir al arduino y que me valla sumando cada vez que detecte movimiento para asi saber si salta con el perro que tengo e intentar regular la sensibilidad para que con el perro no salte.

He buscado ejemplos y no he dado con ninguno que me sirva lo mas cercano ha sido un video y nada de la programacion, en uno de los manuales que tengo pone usar X++ para sumar uno, pero no trae ejemplo y creo que lo hago mal.

Code:
// Alarma Chalet
#include <Wire.h>                   // Libreria para I2C
#include <LiquidCrystal_I2C.h>      // Libreria para LCD
#define DS1307_I2C_ADDRESS 0x68     // Direccion bus Reloj

LiquidCrystal_I2C lcd(0x27,16,2);  // Direccion de bus pantalla

const int pir1 = 4;            // Pin de entrada señal Pir 1

const int ledEstado = 13;      // Led en pin 13 salto Pir 1 y Pir 2
int estadoPir1 = 0;            // Estado de Pir 1 "0"


byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.send(0);
   Wire.send(decToBcd(second));   
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));     
   Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y la hora del reloj
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar porque ciertos bits son bits de control   

  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

void setup()

{
  lcd.init();                  // Inicializacion LCD
  pinMode(ledEstado, OUTPUT);  // Funcion de salida LedEstado pin 13
  pinMode(pir1, INPUT);        // Funcion de entrada Pir 1 pin 2
 
 
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
 
 
 
  // la primera vez debemos poner en hora, active esta parte y luego vuelva a quitarla
  /*second = 00;
  minute = 33;
  hour = 15;
  dayOfWeek = 6;
  dayOfMonth = 11;
  month = 2;
  year = 12;
 
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */
   
 
}

void loop()
{
 
   lcd.backlight();             // Iluminacion LCD
   lcd.setCursor(0,0);          // Seleccionamos posicion del cursor
   
 
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 

  lcd.setCursor(6,0);
    lcd.print(year, DEC);
  lcd.setCursor(2,0);
  lcd.print("/");
  lcd.setCursor(3,0);
    if (month < 10) lcd.print("0");
  lcd.print(month, DEC); 
  lcd.setCursor(5,0);
  lcd.print("/");   
  lcd.setCursor(0,0);
    if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC);
  lcd.print("");
  lcd.setCursor(0,1);
    if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.setCursor(2,1);
  lcd.print(":"); 
  lcd.setCursor(3,1);
    if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(5,1);
  lcd.print(":");
    if (second < 10) lcd.print("0");
  lcd.print(second, DEC); 
 
     switch (dayOfWeek)
   
    {
     
    case 1:
      lcd.setCursor(9,0);
      lcd.print("Lunes");
      break;
    case 2:
      lcd.setCursor(9,0);
      lcd.print("Martes");
      break;
    case 3:
      lcd.setCursor(9,0);
      lcd.print("Miercoles");
      break;
    case 4:
      lcd.setCursor(9,0);
      lcd.print("Jueves");
      break;
    case 5:
      lcd.setCursor(9,0);
      lcd.print("Viernes");
      break;
    case 6:
      lcd.setCursor(9,0);
      lcd.print("Sabado");
      break;
    case 7:
      lcd.setCursor(9,0);
      lcd.print("Domingo");
      break;
   }
   
   

  delay(1000); //Pausa durante 1 segundo
 
 
 
  estadoPir1 = digitalRead(pir1);  // Leer estado Pir 1
 
 
  lcd.backlight();             // Iluminacion LCD
  lcd.setCursor(9,1);          // Seleccionamos posicion del cursor
  int x=0;

  if (estadoPir1 == HIGH) {        // Si esta sl sensor Pir 1 activado activa led Pin 13
  digitalWrite(ledEstado, HIGH);    //Pone led Estado pin 13 a nivel alto
  int x=++;     // Se inicia bucle cuenta atras desde 35s
  lcd.print(x);               // Se imprime bucle en puerto serie
  lcd.setCursor (9,1);            // Se establece el curso en el LCD
  lcd.print(x);                    // Se imprime el valor de x por donde va.
     
     
     
   
 
  }
 
  else {                           // Si no se da las condiciones anteriores pone led Estado a nivel bajo
  digitalWrite(ledEstado, LOW);
   
   
       
     
 
 
     
 }
}

Esta es una de las formas que he probado medio sacado de otro proyecto a ver si conseguia enteder algo o hacer funcionar algo y nada, cuando detecta movimiento parece en el 0, 1, 2 depende de cuandos x=++ ponga o como ahora se pone a contar como un loco en cuanto detecta movimiento una sola vez.


Saludoss
14  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 27, 2012, 02:55:25 am
Ayer probé así y quizas puse algo mal porque no se encendia.

Tambien intente asi:

Code:
// Desde 12:00 hasta 20:00
  if (hour >= 12 && hour < 20 )
  {
  digitalWrite (ledEstado, HIGH);
 
  }

Y no funciona porque asi me ahorro el tener que poner hora de encendido y hora de apagado independientes de esta manera:

Code:
//A las 12:40 se encienden 100% luces
  if(hour == 12 && minute == 40)
  {
  digitalWrite (ledEstado, HIGH); 
 
  }
// Apagado a las 14:15
if(hour == 14 && minute == 15)
  {
  digitalWrite (ledEstado, LOW); 
 
  }
15  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 26, 2012, 05:46:44 pm
Buenas de nuevo, he hecho este  simple codigo, pero no hace nada a la hora que le indico.

Cual puede ser el fallo?
Code:
// Alarma Chalet
#include <Wire.h>                   // Libreria para I2C
#include <LiquidCrystal_I2C.h>      // Libreria para LCD
#define DS1307_I2C_ADDRESS 0x68     // Direccion bus Reloj

LiquidCrystal_I2C lcd(0x27,16,2);  // Direccion de bus pantalla
int ledEstado = 13;      // Led en pin 13 salto Pir 1 y Pir 2


byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.send(0);
   Wire.send(decToBcd(second));    
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));      
   Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y la hora del reloj
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar porque ciertos bits son bits de control    

  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f);  
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

void setup()

{
 
  lcd.init();                  // Inicializacion LCD
  lcd.backlight();             // Iluminacion LCD
 
  pinMode(ledEstado, OUTPUT);  // Funcion de salida LedEstado pin 13
  
 
  Serial.begin(9600);          // Puerto serie configurado a 9600 baudios.
  
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
  
  
 
  // la primera vez debemos poner en hora, active esta parte y luego vuelva a quitarla
  /*second = 00;
  minute = 33;
  hour = 15;
  dayOfWeek = 6;
  dayOfMonth = 11;
  month = 2;
  year = 12;
  
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */
  
  
}

void loop()
{
  
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);  

  lcd.setCursor(6,0);
    lcd.print(year, DEC);
  lcd.setCursor(2,0);
  lcd.print("/");
  lcd.setCursor(3,0);
    if (month < 10) lcd.print("0");
  lcd.print(month, DEC);  
  lcd.setCursor(5,0);
  lcd.print("/");  
  lcd.setCursor(0,0);
    if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC);
  lcd.print("");
  lcd.setCursor(0,1);
    if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.setCursor(2,1);
  lcd.print(":");  
  lcd.setCursor(3,1);
    if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(5,1);
  lcd.print(":");
    if (second < 10) lcd.print("0");
  lcd.print(second, DEC);  
  
     switch (dayOfWeek)
    
    {
    
    case 1:
      lcd.setCursor(9,0);
      lcd.print("Lunes");
      break;
    case 2:
      lcd.setCursor(9,0);
      lcd.print("Martes");
      break;
    case 3:
      lcd.setCursor(9,0);
      lcd.print("Miercoles");
      break;
    case 4:
      lcd.setCursor(9,0);
      lcd.print("Jueves");
      break;
    case 5:
      lcd.setCursor(9,0);
      lcd.print("Viernes");
      break;
    case 6:
      lcd.setCursor(9,0);
      lcd.print("Sabado");
      break;
    case 7:
      lcd.setCursor(9,0);
      lcd.print("Domingo");
      break;
   }
  
  

  delay(1000); //Pausa durante 1 segundo
  
  
   //A las 12:40 se encienden 100% luces
  if (hour == 12 && minute == 40)
  {
  digitalWrite (ledEstado, HIGH);  
  
  }
  
 
}

Saludos

Edito: buenas, ya he conseguido que se enciendan y apaguen a la hora que yo quiero, pero lo que no consigo es que lo haga a distintos dias de la semana, haciendolo de la siguiente manera:


Code:
//A las 12:40 se encienden 100% luces
  if(dayOfMonth == 27 && hour == 12 && minute == 40)
  {
  digitalWrite (ledEstado, HIGH);  
  
  }
Pages: [1] 2 3 ... 6