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:

  • Arduino
  • Potenciômetro 10K
  • RTC DS1307
  • Relé 5V
  • Fonte externa para alimentação da sirene (Vai depender de qual sirene vai utilizar)
  • Sirene
  • O projeto pode ser montado com ou sem o LCD.


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>

Exibições: 6568

Responder esta

Respostas a este tópico

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 ?

Ainda não mas vou implantar na escola em que trabalho

 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? 

Sim a função de dar brilho no LCD mas eu não sei como 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.

Bem interessante isso vou experimentar e posto aqui o resultado

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.

RTC 1302

acho que é mesmo 3,3V

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);
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço