0

Como fazer uma Casa Inteligente com Arduino – RTC (Parte 1/9)

Smart-House

Todos nós, nos dias correntes, ficamos intrigados e com vontade de ter uma casa inteligente e perceber como esta funciona. No post de hoje vamos mostrar o funcionamento destas casas e ainda como montar o nosso próprio projeto.

 

RTC

Neste projeto vamos utilizar um modulo RTC para que nos seja possível, verificar as horas de forma digital e ainda definir alarmes.

Para isso seguiremos o esquema e o código apresentados a seguir.

#include <Wire.h>
#define DS1307_ADDRESS 0x68
byte zero = 0x00;

void setup()
  {
  Wire.begin();;
  Serial.begin(9600);
   
  
  // A linha abaixo pode ser retirada depois de defenir a data e hora
  SelecionaDataeHora();
 
  }
 
void loop()
  {
    Mostrarelogio();
    delay(1000);
 
  }
 
  void SelecionaDataeHora() //define a data e a hora do DS1307
{
  byte segundos = 40; // Valores de 0 a 59
  byte minutos = 40; // Valores de 0 a 59
  byte horas = 13; // Valores de 0 a 23
  byte diadasemana = 2; // Valores de 0 a 6 (0=Domingo, 1 = Segunda, 2 = Terça, ...)
  byte diadomes = 07; // Valores de 1 a 31
  byte mes = 11; // Valores de 1 a 12
  byte ano = 18; // Valores de 0 a 99
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
 
  /* As linhas abaixo escrevem no CI os valores de
  data e hora que foram colocados nas variaveis acima*/
  Wire.write(ConverteParaBCD(segundos));
  Wire.write(ConverteParaBCD(minutos));
  Wire.write(ConverteParaBCD(horas));
  Wire.write(ConverteParaBCD(diadasemana));
  Wire.write(ConverteParaBCD(diadomes));
  Wire.write(ConverteParaBCD(mes));
  Wire.write(ConverteParaBCD(ano));
  Wire.write(zero); //Inicio no CI
  Wire.endTransmission();
}
 
byte ConverteParaBCD(byte val)
{
  // Converte o número de decimal para BCD
  return ( (val / 10 * 16) + (val % 10) );
}
 
byte ConverteparaDecimal(byte val)
{
  // Converte de BCD para decimal
  return ( (val / 16 * 10) + (val % 16) );
}
 
void Mostrarelogio()
{
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int segundos = ConverteparaDecimal(Wire.read());
  int minutos = ConverteparaDecimal(Wire.read());
  int horas = ConverteparaDecimal(Wire.read() & 0b111111);
  int diadasemana = ConverteparaDecimal(Wire.read());
  int diadomes = ConverteparaDecimal(Wire.read());
  int mes = ConverteparaDecimal(Wire.read());
  int ano = ConverteparaDecimal(Wire.read());
 
  Serial.print (horas);
  Serial.print (":");
  Serial.print (minutos);
  Serial.print(":");
  Serial.println (segundos);
 
  if (minutos < 01)
  {
    Serial.println("acerto de hora");
  }
}

Lista de Material:

Todos os produtos foram adquiridos na loja de eletrónica e robótica ElectroFun: www.electrofun.pt.

Outros produtos que possam ser úteis:

 

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?   “

SUBSCREVA A NOSSA NEWSLETTER PARA NÃO PERDER O PRÓXIMO ARTIGO!

Comments

Comentários

ArduinoPortugal.pt

Deixar uma resposta

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.