Neste post você vai encontrar como montar uma sirene automática para (tocar o sino da escola), a sirene vai alarmar entrada para inicio das aulas, saída para o recreio, volta do recreio, e saída para termino das aulas nos dois períodos (manha e tarde).
Materiais necessários para montar o projeto:
Este é o esquema completo do projeto:
Uma correção no esquema acima faltou a alimentação do arduino na protoboard!!!
Vamos iniciar montando o LCD (creditos da montagem do lcd para Felipe Flop - http://www.filipeflop.com/pd-6b7e4-display-lcd-16x2.html)
Aqui seguimos montando nosso RTC:
Para finalizar vou postar um pequeno video demonstrativo do projeto:
https://youtu.be/TjPUANq9gwk
<code>
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 rtc;
int hora = 0;
int minuto = 0;
int segundo = 0;
void setup () {
Wire.begin();
rtc.begin();
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(6, OUTPUT);
digitalWrite(6, LOW);
if (!rtc.isrunning()) {
lcd.print("RTC parado, vou ajustar com a hora da compilacao...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void printnn(int n) {
// imprime um numero com 2 digitos
// acrescenta zero `a esquerda se necessario
String digitos = String(n);
if (digitos.length() == 1) {
digitos = "0" + digitos;
}
lcd.print(digitos);
}
void loop () {
// Obtem a data e hora correntes e armazena em tstamp
DateTime tstamp = rtc.now();
hora = (tstamp.hour());
minuto = (tstamp.minute());
segundo = (tstamp.second());
// Mostra no monitor serial a data e hora correntes
lcd.setCursor(3, 0);
printnn(tstamp.day());
lcd.print('/');
printnn(tstamp.month());
lcd.print('/');
lcd.print(tstamp.year(), DEC);
lcd.setCursor(3, 1);
lcd.print (' ');
printnn(tstamp.hour());
lcd.print(':');
printnn(tstamp.minute());
lcd.print(':');
printnn(tstamp.second());
delay(1000);
lcd.clear();
//lcd.println();
Serial.print (hora);
Serial.print (":");
Serial.print (minuto);
Serial.print (":");
Serial.println (segundo);
// Periodo da manha
if (hora == 7 && minuto == 35 && segundo == 0) {
alarme();
}
if (hora == 9 && minuto == 35 && segundo == 0) {
alarme();
}
if (hora == 9 && minuto == 50 && segundo == 0) {
alarme();
}
if (hora == 11 && minuto == 35 && segundo == 0) {
alarme();
}
//periodo da tarde
if (hora == 13 && minuto == 20 && segundo == 0) {
alarme();
}
if (hora == 15 && minuto == 35 && segundo == 0) {
alarme();
}
if (hora == 15 && minuto == 50 && segundo == 0) {
alarme();
}
if (hora == 17 && minuto == 20 && segundo == 0) {
alarme();
}
}
void alarme() {
digitalWrite(13, HIGH);
digitalWrite(6, HIGH);
lcd.setCursor(6, 0);
lcd.print ("CURSO");
lcd.setCursor(3, 1);
lcd.print ("PROGRAMACAO");
delay(10000);
digitalWrite(13, LOW);
digitalWrite(6, LOW);
lcd.clear();
}
</code>
Tags:
Oi EJS, bom dia,
eu não sou muito criativo, exceto qdo era criança (Criava muito caso kkkk),
e por isto gosto de 2 sites, por terem muitas ideias legais, são ideias simples e muito criativas.
http://www.comofazerascoisas.com.br/
http://www.manualdomundo.com.br/
Rui
Everaldo muito legal ! Parabéns !
Uma sugestão sobre o relógio - use o ds3231, pois ele é mais preciso.
Os colegas estão reclamando do ds1307 - muito irregular.
http://labdegaragem.com/forum/topics/ajuda-rtc-ds1307
Seu projeto esta em uso em alguma escola ?
Everaldo José de Souza é necessário a utilização do potenciômetro?
Qual é a função do potenciômetro 10K?
Se for dar o brilho no display, eu posso deixar fixo?
Para usar resistores ao invès de um potenciometro, faça o seguinte:
O poteciometro simplesmente divide a tensão que é usada no brilho do LCD.
Monte o LCD com um potenciometro e ajuste o brilho desejado.
Depois meça as resistências do potenciometro com um multimetro.
Meça as resistencias das extremidades em relação ao pino central .
Faça a montagem com dois resistores (medições do Pot.) e ligue o junção dos dois resistores ao
pino de brilho do LCD.
Bao noite
tentei fazer esse projeto mais no meu LCD so aparece
165/165/2165
165:165:85
sabe o que pode ser?
o meu modulo RTC tens as seguintes entradas VCC, GND, CLK, DAT, RST
a minha ligação ficou assim
VCC - 3,3V
GNC - GND
CLK -A5
DAT -A4
RST- não liguei
Bom dia,
Informe o modelo do seu módulo RTC (Link).
Veja que a alimentação é de 3,3V. O Arduino usa 5V.
Ok ja funciona mais não consegui aplicar neste projeto, pode me ajudar com o codigo?
ja esta assim:
#include <virtuabotixRTC.h>
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
virtuabotixRTC myRTC(6, 7, 8);
const int PINO_RELE = 13; //pino definido para conexao com o rele
const int HORA = 10; //variavel de hora que o rele ira acionar
const int MINUTO = 53; //variavel de minuto que o rele ira acionar
void setup() {
Serial.begin(9600);
lcd.begin (16,2); //Initialize the LCD
lcd.home ();
//myRTC.setDS1302Time(15, 31, 15, 5, 12, 1, 2018); //Here you write your actual time/date as shown above
//but remember to "comment/remove" this function once you're done as I did
//The setup is done only one time and the module will continue counting it automatically
}
void loop() {
lcd.clear(); //Here after clearing the LCD we take the time from the module and print it on the screen with usual LCD functions
myRTC.updateTime();
lcd.setCursor(0,0);
DateTime agora = virtuabotixRTC myRTC.now();
lcd.print(myRTC.dayofmonth);
lcd.print("/");
lcd.print(myRTC.month);
lcd.print("/");
lcd.print(myRTC.year);
lcd.setCursor(0,1);
lcd.print(myRTC.hours);
lcd.print(":");
lcd.print(myRTC.minutes);
lcd.print(":");
lcd.print(myRTC.seconds);
delay(1000);
pinMode(PINO_RELE, OUTPUT);
digitalWrite(PINO_RELE, LOW);
if ((agora.hour() == HORA) && (agora.minute() == MINUTO)) { //se no instante que hora atual for igual a hora da variavel
digitalWrite(PINO_RELE, HIGH); //aciona rele
} else { //senao
digitalWrite(PINO_RELE, LOW);
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por