Projetos de circuito eletrônicoProjetos de engenharia do ArduinoSistema de campainha de escola/faculdade automática Arduino

Sistema de campainha de escola/faculdade automática Arduino

Relacionados

Neste post vamos construir um sistema automático de campainha escolar/faculdade usando Arduino, display 16 x 2 e módulo de relógio em tempo real. Você pode programar este projeto para tocar a campainha até 16 vezes por dia na hora e minuto de sua preferência. O comprimento do toque da campainha pode ser programado em segundos.

Procurando uma versão mais simples sem codificação? Pegue AQUI

Visão geral

Já se foram os dias em que um peão em uma escola tocava a campainha “lata, latinha” e os alunos corriam para fora da entrada da escola com louvor. Alguns podem ficar ainda mais felizes quando o peão tocou o último sino alguns minutos antes.

Este era o cenário de 15 a 20 anos atrás, mas agora todas as escolas e faculdades estritamente limitadas no tempo e os sinos são automatizados.

A rápida infância/adolescência do autor lembre-se:

Durante a minha escola primária e secundária, o relógio digital que eu usava era sincronizado com o sistema de campainha da escola com precisão de 1 segundo.

Eu gritava “a campainha vai tocar em 5 segundos” depois que a campainha tocou todos os alunos me encaram com surpresa, isso acontece quase todos os dias. Em algum dia eu e meus amigos mais próximos começamos a contagem regressiva 10, 9, 8, 7…..antes do último sino.

Todos os meus amigos dizem que é um relógio de pulso mágico, mas eles não perceberam um simples fato de que o sino da escola era automatizado. LOL!!

Vamos fazer um desses sinos de escola/faculdade usando Arduino.


Você também pode estar interessado em um sistema School Bell baseado em IC 4017


Exibição para conexão do Arduino

As conexões do display para o Arduino são um pouco diferentes do que normalmente fazemos, os pinos 9, 8, 7, 6, 5 e 4 usados ​​aqui. Os pinos 2 e 3 são usados ​​como interrupção de hardware por meio de botões.

Use o potenciômetro de 10K para ajustar o contraste da tela.

LCD DE SINO DA ESCOLA ARDUINO

SISTEMA AUTOMÁTICO DE CAMPAINHA ESCOLA/FACULDADE USANDO ARDUINO

Informações detalhadas sobre conexões de campainha e relé:

CIRCUITO DE TEMPORIZADOR DE SINO DA ESCOLA COM ARDUINO

ATUALIZAÇÃO: A5 para SCL e A4 para SDA (não A4 para SCK)

Módulo Relógio em Tempo Real

O módulo de relógio em tempo real mantém o controle do tempo mesmo após um longo corte de energia. Um relé de 9V é fornecido para ligar e desligar a campainha.

Por favor, conecte um diodo 1N4007 em polarização reversa através do relé (que não é mostrado no esquema) que absorverá EMF de volta de alta tensão prejudicial do relé.

Alimente o circuito usando um adaptador de parede de 9V / 500mA.

Três botões de pressão são fornecidos, um para operar manualmente a campainha durante algumas situações. Pressionar o botão “sair” parará a campainha depois de tocar a campainha manualmente.

O “botão de desativação da campainha” desativará a campainha para sempre. Para reativar a campainha, pressione o botão “Sair”.

Como definir a hora para o módulo RTC:

Baixe a biblioteca RTC:
Link: github.com/PaulStoffregen/DS1307RTC

————————————————– —————
Baixe timeLib.h:
github.com/PaulSoffregen/Time
————————————————– —————-

Carregar o programa

Carregue o programa abaixo que definirá a hora para RTC

//----------------------------------------------------//
#include
#include
#include
int P=A3; //Assign power pins for RTC
int N=A2;
const char *monthName[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
tmElements_t tm;
void setup() {
pinMode(P,OUTPUT);
pinMode(N,OUTPUT);
digitalWrite(P,HIGH);
digitalWrite(N,LOW);
bool parse=false;
bool config=false;
// get the date and time the compiler was run
if (getDate(__DATE__) && getTime(__TIME__)) {
parse = true;
// and configure the RTC with this info
if (RTC.write(tm)) {
config = true;
}
}
Serial.begin(9600);
while (!Serial) ; // wait for Arduino Serial Monitor
delay(200);
if (parse && config) {
Serial.print("DS1307 configured Time=");
Serial.print(__TIME__);
Serial.print(", Date=");
Serial.println(__DATE__);
} else if (parse) {
Serial.println("DS1307 Communication Error :-{");
Serial.println("Please check your circuitry");
} else {
Serial.print("Could not parse info from the compiler, Time=\"");
Serial.print(__TIME__);
Serial.print("\", Date=\"");
Serial.print(__DATE__);
Serial.println("\"");
}
}
void loop() {
}
bool getTime(const char *str)
{
int Hour, Min, Sec;
if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
tm.Hour = Hour;
tm.Minute = Min;
tm.Second = Sec;
return true;
}
bool getDate(const char *str)
{
char Month[12];
int Day, Year;
uint8_t monthIndex;
if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
for (monthIndex = 0; monthIndex < 12; monthIndex++) {
if (strcmp(Month, monthName[monthIndex]) == 0) break;
}
if (monthIndex >= 12) return false;
tm.Day = Day;
tm.Month = monthIndex + 1;
tm.Year = CalendarYrToTm(Year);
return true;
}
//----------------------------------------------------//

Após fazer o upload do código, abra o monitor serial, ele dirá que a hora está definida.
Uma vez que a etapa acima seja realizada com sucesso, passe para a próxima.
Agora faça o upload do código abaixo para o Arduino.

Código do programa principal:

//------------Program developed by R.GIRISH------------//
#include
#include
#include
#include
#include
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
int i = 0;
int H = 0;
int M = 0;
int S = 0;
int setting_value;
const int bell = 10;
const int P = A3;
const int N = A2;
const int setting_address = 0;
const int over_ride_off = 11;
boolean bell_status = true;
boolean Over_ride = true;
//------------------- Set Bell Timings from hours 1 to 23 hrs -------------------//
//---- 1st bell ------//
const int h1 = 0; //hours
const int m1 = 0; //Minutes
//---- 2nd bell ------//
const int h2 = 0;
const int m2 = 0;
//---- 3rd bell ------//
const int h3 = 0;
const int m3 = 0;
//---- 4th bell ------//
const int h4 = 0;
const int m4 = 0;
//---- 5th bell ------//
const int h5 = 0;
const int m5 = 0;
//---- 6th bell ------//
const int h6 = 0;
const int m6 = 0;
//---- 7th bell ------//
const int h7 = 0;
const int m7 = 0;
//---- 8th bell ------//
const int h8 = 0;
const int m8 = 0;
//---- 9th bell ------//
const int h9 = 0;
const int m9 = 0;
//---- 10th bell ------//
const int h10 = 0;
const int m10 = 0;
//---- 11th bell ------//
const int h11 = 0;
const int m11 = 0;
//---- 12th bell ------//
const int h12 = 0;
const int m12 = 0;
//---- 13th bell ------//
const int h13 = 0;
const int m13 = 0;
//---- 14th bell ------//
const int h14 = 0;
const int m14 = 0;
//---- 15th bell ------//
const int h15 = 0;
const int m15 = 0;
//---- 16th bell ------//
const int h16 = 0;
const int m16 = 0;
//--------------- bell ring lenght in seconds -------//
const int Lenght = 3; //in seconds
//-------------------------- -------------------------//
void setup()
{
lcd.begin(16, 2);
pinMode(P, OUTPUT);
pinMode(N, OUTPUT);
pinMode(bell, OUTPUT);
pinMode(over_ride_off, INPUT);
digitalWrite(P, HIGH);
digitalWrite(N, LOW);
digitalWrite(over_ride_off, HIGH);
attachInterrupt(0, over_ride, RISING);
attachInterrupt(1, bell_setting, RISING);
if (EEPROM.read(setting_address) != 1)
{
bell_setting();
}
}
void loop()
{
tmElements_t tm;
lcd.clear();
if (RTC.read(tm))
{
H = tm.Hour;
M = tm.Minute;
S = tm.Second;
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.print(tm.Hour);
lcd.print(":");
lcd.print(tm.Minute);
lcd.print(":");
lcd.print(tm.Second);
lcd.setCursor(0, 1);
lcd.print("DATE:");
lcd.print(tm.Day);
lcd.print("/");
lcd.print(tm.Month);
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year));
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0);
lcd.print("RTC stopped!!!");
lcd.setCursor(0, 1);
lcd.print("Run SetTime code");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Read error!");
lcd.setCursor(0, 1);
lcd.print("Check circuitry!");
}
}
if (EEPROM.read(setting_address) == 1)
{
if (H == 0 && M == 0 && S == 0)
{
digitalWrite(bell, LOW);
}
if (H == h1 && M == m1 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h2 && M == m2 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h3 && M == m3 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h4 && M == m4 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h5 && M == m5 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h6 && M == m6 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h7 && M == m7 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h8 && M == m8 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h9 && M == m9 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h10 && M == m10 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h11 && M == m11 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h12 && M == m12 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h13 && M == m13 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h14 && M == m14 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h15 && M == m15 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
if (H == h16 && M == m16 && S == 0)
{
for (i = 0; i < Lenght; i++)
{
digitalWrite(bell, HIGH);
delay(1000);
}
digitalWrite(bell, LOW);
i = 0;
}
}
delay(1000);
}
void over_ride()
{
lcd.clear();
while (Over_ride)
{
digitalWrite(bell, HIGH);
lcd.setCursor(0, 0);
lcd.print("Press Exit to");
lcd.setCursor(0, 1);
lcd.print("Stop the bell!!!");
if (digitalRead(over_ride_off) == LOW)
{
Over_ride = false;
digitalWrite(bell, LOW);
}
}
Over_ride = true;
}
void bell_setting()
{
setting_value = 0;
EEPROM.write(setting_address, setting_value);
lcd.clear();
while (bell_status)
{
lcd.setCursor(0, 0);
lcd.print("Bell is Disabled");
lcd.setCursor(0, 1);
lcd.print("Press Exit.");
if (digitalRead(over_ride_off) == LOW)
{
bell_status = false;
}
}
bell_status = true;
setting_value = 1;
EEPROM.write(setting_address, setting_value);
}
//------------Program developed by R.GIRISH------------//

Após fazer o upload do código acima, você deverá ver o tempo em horas no visor.

Isso conclui o código do programa.

Como usar este sistema de campainha automática:

Faça isso com a configuração de hardware concluída.

1. Carregue primeiro o código “time setting” e abra o monitor serial.
2. No programa principal, defina aqui a hora em que o relé precisa ser acionado.

//---- 1st bell ------//
const int h1 = 0; //hours
const int m1 = 0; //Minutes
//---- 2nd bell ------//
const int h2 = 0;
const int m2 = 0;
//---- 3rd bell ------//
const int h3 = 0;
const int m3 = 0;
//---- 4th bell ------//
const int h4 = 0;
const int m4 = 0;

• Defina h1 em horas de 1 a 23 horas e m1 em minutos de 0 a 59.
• O mesmo para h1 a h16 e m1 a m16.
• Se você quiser desabilitar alguma campainha, deixe o valor h = 0 e m = 0, por exemplo: h5 = 0 e m5 = 0, zero irá desabilitar aquela campainha em particular.

3. Defina o período de tempo para o período de ativação e desativação da campainha, aqui:

//————— Duração do toque da campainha em segundos ——-//
const int Comprimento = 3; //em segundos

Por padrão, o valor é definido para 3 segundos. Ao chegar o tempo definido o relé será ligado por 3 segundos e desliga. Altere isso se precisar.

4. Carregue o código modificado no Arduino.
5. Para desativar a campainha, pressione “botão de desativação da campainha”. Para reativar, pressione o botão “Sair”.
6. Para tocar a campainha manualmente pressione o “interruptor manual da campainha” e para parar a campainha pressione “exit”.

Isso conclui o projeto, se você tiver alguma dúvida sobre este projeto, sinta-se à vontade para expressar na seção de comentários.

Hashtags: #Sistema #campainha #escolafaculdade #automática #Arduino
 

FONTE


Nota: Este conteúdo foi traduzido do Inglês para português (auto)
Pode conter erros de tradução

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc…
Veja na FONTE até ser revisado o conteúdo.
Status (Ok Até agora)


Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!

Relacionados

Relacionados