Como e por adicionar um relógio de tempo real para arduino

Manter tempo em projetos Arduino não é tão fácil como se poderia pensar: uma vez que a conexão com o computador não está lá, seu unpowered Arduino simplesmente pára de funcionar, incluindo o seu ticker interno.

A fim de manter o seu Arduino em sincronia com o mundo ao seu redor, você vai precisar que é chamado de “módulo de relógio de tempo real”. Veja como usar um.

Qual é o ponto de um relógio de tempo real (RTC)?

Seu computador provavelmente sincroniza o seu tempo com a internet, mas ainda tem um relógio interno que continua indo mesmo sem uma ligação à Internet ou a energia é desligada. Quando você usa um Arduino conectado a um computador, ele tem acesso ao tempo exato fornecido pelo seu relógio do sistema. Isso é muito útil, mas a maioria dos projetos Arduino são projetados para ser usado longe de um computador - altura em que, a qualquer momento o poder é desligado, ou o Arduino reiniciado, ele vai ter absolutamente nenhuma idéia de qual é a hora. O relógio interno será redefinido e começar a contar do zero novamente na próxima vez que for ligado.

Video: Exemplo de controle com RTC no Arduino

Se o seu projeto tem nada a ver com a necessidade do tempo - como o meu relógio noturna e alarme nascer do sol - este é claramente vai ser um problema. Nesse projeto, temos em torno da questão, definindo manualmente o tempo cada noite de uma forma bastante grosseira - o usuário deve pressionar o botão de reset pouco antes de irem para a cama, oferecendo uma sincronização de tempo manual. Claramente isso não é uma solução de longo prazo ideal.Arduino Night Light and Sunrise Projeto AlarmArduino Night Light and Sunrise Projeto AlarmHoje, nós estaremos fazendo um relógio nascer do sol de alarme, que vai suave e lentamente acordá-lo sem recorrer a uma máquina de fazer barulho ofensiva.consulte Mais informação

Um módulo RTC é um bit adicional de circuitos, o que requer uma bateria de célula pequena, que continua a contar o tempo mesmo quando o Arduino é desligado. Depois de ser definida uma vez - ele vai manter esse tempo para a vida da bateria, geralmente um bom ano ou assim.

TinyRTC

O RTC mais popular para Arduino é chamado TinyRTC e pode ser comprado por cerca de US $ 5- $ 10 no eBay. Você provavelmente terá que fornecer seu próprio bateria (que é ilegal para enviar estes para o exterior para muitos lugares), e alguns cabeçalhos (os pinos que o slot para os buracos, o que você precisa para solda em si mesmo).

Este é o módulo que tenho:

Video: Relógio de Arduino - Desafio concluido

rtc-módulo

Ele ainda tem um sensor de temperatura integrado, que a bateria vai durar mais tempo, se você não estiver usando.

O número de furos no essa coisa parece muito 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 um para os dados. Na verdade, você mesmo encadear até 121 dispositivos I2C nos mesmos dois pinos - confira esta página Adafruit para uma seleção de outros dispositivos I2C você pode adicionar, porque há um monte!

Começando



Ligar o seu módulo TinyRTC de acordo com o diagrama abaixo - não é necessária a linha DS rosa, já que é para o sensor de temperatura.

fiação

Em seguida, baixar as bibliotecas de tempo e DS1307RTC e coloque as pastas resultantes em sua / bibliotecas pasta.

Saia e relançar o ambiente Arduino para carregar nas bibliotecas e exemplos.
ds1307rtc-exemplo menu

Você vai encontrar dois exemplos no menu DS1307RTC: carregar e executar o Definir tempo primeiro exemplo - o que irá definir o RTC para a hora correta. O código real não vale a pena entrar em detalhes com, só sei que você precisa para executá-lo uma vez para executar a sincronização de tempo inicial.

Em seguida, olhar para o exemplo de uso com ReadTest.

#incluir #incluir #incluir void setup() {Serial.begin(9600)-enquanto (!Serial) - // esperar para serialdelay(200)-Serial.println("DS1307RTC Leia Teste")-Serial.println("-------------------")-}void loop() {tmElements_t tm-E se (RTC.read(tm)) {Serial.print("Ok, Tempo = ")-print2digits(tm.Hour)-Serial.write(`:`)-print2digits(tm.Minute)-Serial.write(`:`)-print2digits(tm.Second)-Serial.print(", Data (D / M / Y) = ")-Serial.print(tm.Day)-Serial.write(`/`)-Serial.print(tm.Month)-Serial.write(`/`)-Serial.print(tmYearToCalendar(tm.Year))-Serial.println()-} outro {E se (RTC.chipPresent()) {Serial.println("O DS1307 está parado. Por favor, execute o SetTime")-Serial.println("exemplo para inicializar o tempo e começar a correr.")-Serial.println()-} outro {Serial.println("DS1307 erro de leitura! Por favor, verifique o circuito.")-Serial.println()-}demora(9000)-}demora(1000)-}print2digits vazios(número int) {E se (número gt; = 0 && número 

Note que nós também incluímos o núcleo Wire.h biblioteca - isso vem com Arduino e é utilizado para comunicar por I2C. Carregar o código, abra o console serial em 9600, e assistir e seu Arduino emite o tempo atual a cada segundo. Maravilhoso!

O código mais importante no exemplo é a criação de um tmElements_t tm - este um estrutura que vamos preencher com o tempo-corrente ea RTC.read (TM) função, que obtém a hora atual do módulo RTC, coloca-lo em nossa tm estrutura, e retorna verdadeiro se tudo correu bem. Adicione a sua depuração ou código de lógica dentro dessa "E se" declaração, tais como imprimir o tempo ou reagir a ela.

Agora que você sabe como chegar o momento certo com Arduino, você poderia tentar reescrever o projeto de alarme nascer do sol ou criar uma palavra relógio LED - as possibilidades são infinitas! O que você vai fazer?


Artigos relacionados