Manter o tempo nos projetos do Arduino não é tão fácil quanto você imagina: uma vez que a conexão com o computador não está lá, seu Arduino sem energia simplesmente pára de funcionar, incluindo seu ticker interno.
Para manter seu Arduino em sincronia com o mundo ao seu redor, você precisará do que é chamado de “módulo de relógio em tempo real”. Veja como usar um.
Qual é o objetivo de um relógio de tempo real (RTC)?
Seu computador provavelmente sincroniza seu tempo com a Internet, mas ainda tem um relógio interno que continua mesmo sem uma conexão com a Internet ou quando a energia é desligada. Quando você usa um Arduino conectado a um computador, ele tem acesso ao tempo exato fornecido pelo relógio do seu sistema. Isso é muito útil, mas a maioria dos projetos do Arduino são projetados para serem usados longe de um computador - a qualquer momento, quando a energia é desconectada, ou o Arduino é reiniciado, ele não faz a menor ideia de que horas são. O relógio interno será reiniciado e começará a contar a partir do zero novamente na próxima vez que for ligado.
Se o seu projeto tem alguma coisa a ver com a necessidade do tempo - como a minha luz noturna e despertador Arduino Night Light e Sunrise Alarm Project Arduino Night Light e Sunrise Alarm Project Hoje, vamos fazer um despertador do nascer do sol, que vai gentilmente e Acorde-o lentamente sem recorrer a uma máquina ofensiva de fazer barulho. Leia mais - isso claramente será um problema. Nesse projeto, resolvemos o problema definindo manualmente a hora a cada noite de uma maneira bastante bruta - o usuário pressionava o botão de reinicialização logo antes de ir para a cama, fornecendo uma sincronização manual de horário. Obviamente, essa não é uma solução ideal de longo prazo.
Um módulo RTC é um bit adicional de circuito, exigindo uma pequena bateria de célula tipo moeda, que continua a contar o tempo mesmo quando o seu Arduino está desligado. Depois de ser definido uma vez - ele vai manter esse tempo para a vida útil da bateria, geralmente um bom ano ou mais.
TinyRTC
O RTC mais popular para o Arduino é chamado TinyRTC e pode ser comprado por cerca de US $ 5 a US $ 10 no eBay. Você provavelmente precisará fornecer sua própria bateria (é ilegal enviar esses produtos para outros lugares) e alguns cabeçalhos (os pinos que entram nos furos, que você precisará soldar em você).
Este é o módulo que tenho:
Ele ainda tem um sensor de temperatura integrado, embora a bateria durará mais tempo se você não estiver usando.
O número de buracos nessa coisa parece bem assustador, mas você só precisa de quatro deles; GND, VCC, SCL e SDA - você pode usar os pinos relevantes em ambos os lados do módulo RTC. Você fala com o relógio usando o protocolo I2C, o que significa que apenas dois pinos são usados - um para o “relógio” (um relógio de dados de comunicação serial, nada a ver com o tempo) e outro para os dados. Na verdade, você até encadeia até 121 dispositivos I2C nos mesmos dois pinos - confira esta página Adafruit para uma seleção de outros dispositivos I2C que você poderia adicionar, porque há muito!
Começando
Conecte seu módulo TinyRTC de acordo com o diagrama abaixo - a linha DS rosa não é necessária, pois é para o sensor de temperatura.
Em seguida, baixe as bibliotecas Time e DS1307RTC e coloque as pastas resultantes em sua pasta / libraries .
Saia e reinicie o ambiente do Arduino para carregar nas bibliotecas e nos exemplos.
Você encontrará dois exemplos no menu DS1307RTC: carregue e execute o exemplo SetTime primeiro - isso definirá o RTC para a hora correta. O código real não vale a pena entrar em detalhes, basta saber que você precisa executá-lo uma vez para executar a sincronização de tempo inicial.
Em seguida, observe o uso de exemplo com o ReadTest .
#include #include #include void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(200); Serial.println("DS1307RTC Read Test"); Serial.println("-------------------"); } void loop() { tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); print2digits(tm.Hour); Serial.write(':'); print2digits(tm.Minute); Serial.write(':'); print2digits(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number
Observe que também incluímos a biblioteca principal Wire.h - isso é fornecido com o Arduino e é usado para se comunicar com o I2C. Carregue o código, abra o console serial a 9600 baud, e assista e seu Arduino produz a hora atual a cada segundo. Maravilhoso!
O código mais importante no exemplo é criar um tmElements_t tm - essa é uma estrutura que vamos preencher com a hora atual; e a função RTC.read (tm), que obtém a hora atual do módulo RTC, a coloca em nossa estrutura tm e retorna true se tudo correr bem. Adicione seu código de depuração ou lógica dentro da instrução "if", como imprimir a hora ou reagir a ela.
Agora que você sabe como obter o tempo certo com o Arduino, você pode tentar reescrever o projeto de alarme do nascer do sol ou criar um relógio de palavra LED - as possibilidades são infinitas! O que você vai fazer?
Créditos da Imagem: Snootlab Via Flickr