Propaganda

Manter o tempo em projetos do Arduino não é tão fácil quanto você imagina: uma vez que a conexão do computador não está lá, o seu Arduino sem energia simplesmente para de executar, incluindo seu código interno.

Para manter seu Arduino sincronizado com o mundo ao seu redor, você precisará do que é chamado de "módulo de relógio em tempo real". Aqui está como usar um.

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

Seu computador provavelmente sincroniza seu tempo com a Internet, mas ainda possui um relógio interno que continua funcionando mesmo sem uma conexão com a Internet ou com a energia desligada. Quando você usa um Arduino conectado a um computador, ele tem acesso à hora exata fornecida pelo relógio do sistema. Isso é bastante útil, mas a maioria dos projetos do Arduino é projetada para ser usada longe de um computador - no qual ponto, sempre que a energia for desconectada ou o Arduino reiniciado, ele não fará absolutamente nenhuma idéia de que horas isto é. O relógio interno será redefinido e começará a contar do zero novamente na próxima vez em que for ligado.

Se o seu projeto tem algo a ver com a necessidade de tempo - como o meu luz noturna e nascer do sol despertador Projeto Arduino Night Light e Sunrise AlarmHoje, estaremos fazendo um despertador do nascer do sol, que acordará você lenta e suavemente, sem recorrer a uma máquina ofensiva de fazer barulho. consulte Mais informação - isso claramente será um problema. Nesse projeto, contornamos o problema, definindo manualmente o horário todas as noites de uma maneira um tanto grosseira. maneira - o usuário pressionava o botão de reset antes de ir para a cama, fornecendo um tempo manual sincronizar. Claramente, 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 Arduino está desligado. Depois de ser definido uma vez - ele manterá esse tempo durante a vida útil da bateria, geralmente um bom ano ou mais.

TinyRTC

O RTC mais popular do Arduino é chamado TinyRTC e pode ser comprado por cerca de $ 5- $ 10 no eBay. Você provavelmente precisará fornecer sua própria bateria (é ilegal enviá-las para o exterior para muitos lugares) e alguns cabeçalhos (os pinos que se encaixam nos orifícios, que você precisará soldar em si mesmo).

Este é o módulo que eu tenho:

rtc-module

Ele ainda possui um sensor de temperatura embutido, embora a bateria dure mais tempo se você não estiver usando.

O número de buracos nessa coisa parece bastante assustador, mas você só precisa de quatro; 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 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 relacionado ao tempo) e um para os dados. Na verdade, você ainda encadeia até 121 dispositivos I2C nos mesmos dois pinos - confira esta página Adafruit para uma seleção de outros dispositivos I2C que você pode adicionar, porque existem muitos!

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.

fiação

Em seguida, faça o download do Tempo e DS1307RTC bibliotecas e coloque as pastas resultantes no seu /libraries pasta.

Saia e reinicie o ambiente do Arduino para carregar nas bibliotecas e exemplos.
ds1307rtc-example-menu

Você encontrará dois exemplos no menu DS1307RTC: faça upload e execute o Definir tempo exemplo primeiro - isso definirá o RTC para a hora correta. Não vale a pena entrar em detalhes com o código real; saiba que você precisa executá-lo uma vez para executar a sincronização de horário inicial.

Em seguida, observe o exemplo de uso com ReadTest.


#incluir 
#incluir 
#incluir  void setup () {Serial.begin (9600); while (! Serial); // aguarde o atraso serial (200); Serial.println ("Teste de leitura DS1307RTC"); Serial.println (""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Hora); Serial.write (':'); print2digits (tm. Minuto); Serial.write (':'); print2digits (tm. Segundo); Serial.print (", Data (D / M / A) ="); Serial.print (tm. Dia); Serial.write ('/'); Serial.print (tm. Mês); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Ano)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("O DS1307 está parado. Por favor, execute o SetTime "); Serial.println ("exemplo para inicializar a hora e começar a executar."); Serial.println (); } else {Serial.println ("DS1307 erro de leitura! Por favor, verifique o circuito. "); Serial.println (); } atraso (9000); } atraso (1000); } void print2digits (número int) {if (número> = 0 && número <10) {Serial.write ('0'); } Serial.print (número); }

Observe que também incluímos o núcleo Wire.h library - isso vem com o Arduino e é usado para se comunicar pelo I2C. Faça o upload do código, abra o console serial a 9600 baud e observe e o seu Arduino gera a hora atual a cada segundo. Maravilhoso!

O código mais importante no exemplo é criar um tmElements_t tm - isso é estrutura que preencheremos com a hora atual; e a RTC.read (tm), que obtém a hora atual do módulo RTC, coloca-a em nossa tm estrutura e retorna true se tudo correu bem. Adicione seu código de depuração ou lógica dentro dessa instrução "if", como imprimir o tempo ou reagir a ele.

Agora que você sabe como obter a hora certa com o Arduino, tente reescrever o projeto do alarme do nascer do sol ou criar um relógio com palavras em LED - as possibilidades são infinitas! O que você vai fazer?

Créditos da imagem: Snootlab Via Flickr

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.