#include "HX711.h"
HX711 scale;
//define pinos led
#define VD 13 //Define variavel VD associado a Sala Vazia e a Trabalhadores no Local
#define AM 6 //Define variavel AM
#define VM 12 //Define variavel VM associado a Emergencia
//define pino sirene e frequencia para sirene
#define Buzzer 11 //Define variavel Buzzer associado ao pino 11
#define mi 330 //Define variavel mi como frequência de 330 Hz
#define fa 900 //define variavel fa como frequência de 900 HZ
//define botoes
#define button_reset 10 //Define button como botão de reset associado ao pino 10
#define button_start 9 //define a entrada 9 como botão de inicio
#define button_em 8 //define reset emergencia
int peso; // variavel que sera atribuida o valor da celula de carga
int kg; // variavel que recebe o valor tratado do valor da celula de carga
int cont;
int cont2;
int ciclo; //Declara variavel inteira como cont
void setup() {
Serial.begin(9600); //inicializa porta serial
pinMode(VD, OUTPUT); //Define modo de opereção do pino 13 como saida
pinMode(AM, OUTPUT); //Define o modo de operação do pino 6 como saida
pinMode(VM, OUTPUT); //Define o modo de operação do pino 12 como saida
pinMode(9, INPUT_PULLUP); //define o modo de operação do pino 9 como entrada
pinMode(10, INPUT_PULLUP); //define o modo de operação do pino 9 como entrada
pinMode(8, INPUT_PULLUP); //define o modo de operação do pino 8 como entrada
scale.begin(A1, A0); //inicia a porta da celula de carga
}
void loop()
{
peso = scale.get_value();
kg = peso/420;
delay(1000);
inicio:
Serial.println("pressione start para inicializar o sistema ");
if (digitalRead(button_start) == LOW)
{
for(ciclo = 5000; ciclo > 0; ciclo --)
{
peso = scale.get_value();
kg = peso/420;
if (kg <= 10 ) //Serial faz a varredura continua, valor zero "Sala vazia"
{
digitalWrite(VD, HIGH); //Coloca a variável digital VD em nível lógico alto
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
Serial.print("Sala vazia: "); //Imprime no monitor serial o texto entre aspas duplas
Serial.print(kg); //Imprime no monitor serial o texto entre aspas duplas
Serial.println(" KG");
delay(1000);
}
if (kg > 10 && kg <= 50 ) //serial detecta alguma alteração, valor diferente de zero mas ainda não atingiu o pico "Trabalhadores no local"
{
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
digitalWrite(VD, HIGH); //Coloca a variável digital VD em nível lógico alto
Serial.print("Trabalhador No Local: "); //Imprime no monitor serial o texto entre aspas duplas
Serial.print(kg); //Imprime no monitor serial o texto entre parênteses
Serial.println(" KG");
delay(3000);
}
if (kg > 50 ) //Compara se a condição A0 e maior que o valor e se o botão está desligado
{ //Abertura da estrutura if (condicional)
digitalWrite(VD, LOW); //Coloca a variável digital VD em nível lógico baixo
digitalWrite(VM, HIGH); //Coloca a variável digital VD em nível lógico alto
delay(1000);
digitalWrite(VM, LOW); //Coloca a variável digital VD em nível lógico baixo
delay(1000);
Serial.println("POSSIVEL QUEDA DO TRABALHADOR "); //Imprime no monitor serial o texto entre aspas duplas
Serial.println("PRESSIONE O BOTÃO AMARELO EM CASO DE ALARME FALSO "); //Imprime no monitor serial o texto entre aspas duplas
Serial.println("CONTAGEM REGRESSIVA 15S: "); //Imprime no monitor serial o texto entre aspas duplas
Serial.print(kg); //Imprime no monitor serial o texto entre parênteses
Serial.println(" KG");
for (cont = 15; cont >= 0; cont--) //Inicia estrutura de repetição for (inicio, condição, incremento)
{
Serial.print(cont);
Serial.println("s");
delay(500);
digitalWrite(VM, HIGH); //Coloca a variável digital VM em nível lógico alto
delay(300);
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
delay(300);
tone(11, mi); //Executa a função tone no pino 13 utilizando o vetor melodia
delay(200);
if (digitalRead(button_reset) == LOW ) // Compara se a condição BOT e nivel logico alto
{
noTone(11);
delay(10);
goto inicio;
}
if(cont == 0)
{
for (cont2 = 1000; cont2 >=0; cont2 --)
{
digitalWrite(VM, HIGH); //Coloca a variável digital VM em nível lógico alto
delay(300);
digitalWrite(VM, LOW); //Coloca a variável digital VM em nível lógico baixo
delay(300);
tone(11, fa);
Serial.println("TRABALHADOR EM RISCO "); //Imprime no monitor serial o texto entre aspas duplas
Serial.println("PRESSIONE O BOTÃO VERMELHO PARA DESLIGAR A SIRENE "); //Imprime no monitor serial o texto entre aspas duplas
if(digitalRead(button_em) == LOW)
{
noTone(11);
delay(10);
goto inicio;
}
} } } }
} }
}