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!