/*Programa:Piso Sensorial de Segurança, Sensor célula de carga (ultrasônico), Buzzer e Led
Autores: Evilyn Santos, Gabriela Rosa.
Entradas a conectar: ECHO-9|
Saídas a conectar: LEDs: VD-3|AM-6|VM-7|TRIGGER-10|SDA|SCL
Revisão: 07/11/2023*/
#include "HX711.h"
HX711 scale1;
HX711 scale2;
HX711 scale3;
HX711 scale4;
HX711 scale5;
HX711 scale6;
HX711 scale7;
HX711 scale8;
#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 VD 13 //Define variavel VD associado ao pino 13, e a Sala Vazia e a Trabalhadores no Local
#define VM 12 //Define variavel VM associado ao pino 12, e a Emergencia
#define Buzzer 11 //Define variavel Buzzer associado ao pino 11
#define button 10
#define SCK1 A0
#define DT1 A1
#define SCK2 A2
#define DT2 A3
#define SCK3 A4
#define DT3 A5
#define SCK4 2
#define DT4 3
#define SCK5 4
#define DT5 5
#define SCK6 6
#define DT6 7
#define SCK7 8
#define DT7 9
#define SCK8 52
#define DT8 53
void setup() //Inicia a função setup
{ //Abertira da função setup pinMode(VD, OUTPUT); //Define modo de opereção do pino 3 como saida
Serial.begin(9600);
pinMode(VD, OUTPUT); //Define o modo de operação do pino 6 como saida
pinMode(VM, OUTPUT); //Define o modo de operação do pino 7 como saida
pinMode(Buzzer, OUTPUT); //Define o modo de operação do pino 10 como saida
pinMode(10, INPUT_PULLUP); //Define modo de operação do pino 12 como entrada com pull-up
scale1.begin(DT1,SCK1);
scale2.begin(DT2, SCK2);
scale3.begin(DT3, SCK3);
scale4.begin(DT4, SCK4);
scale5.begin(DT5, SCK5);
scale6.begin(DT6, SCK6);
scale7.begin(DT7, SCK7);
scale8.begin(DT8, SCK8);
//Inicia porta/monitor serial com taxa padrão de 9600 bps
Serial.println("INICIALIZANDO PISO SENSORIAL"); //Imprime no monitor serial o texto entre aspas duplas
delay(2000); // Inicia comunicação na porta serial
}
//Fechamento da função setup
void loop()
{
salto: //Abertura da função loop
float peso1 = scale1.get_units();
float peso2 = scale2.get_units();
float peso3 = scale3.get_units();
float peso4 = scale4.get_units();
float peso5 = scale5.get_units();
float peso6 = scale6.get_units();
float peso7 = scale7.get_units();
float peso8 = scale8.get_units();
float pesoTotal = ( peso1 + peso2 + peso3 + peso4 + peso5 + peso6 + peso7 + peso8 ) /420;
if (pesoTotal <= 40 ) { //Serial faz a varredura continua, valor zero "Sala vazia"
noTone(Buzzer);
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("Peso Total :" );
Serial.print(pesoTotal); //Imprime no monitor serial o texto entre aspas duplas
Serial.println("KG");
delay(1000);
} //Fechamento da estrutura if (condicional)
if (pesoTotal > 40 && pesoTotal <=80 ) //serial detecta alguma alteração, valor diferente de zero mas ainda não atingiu o pico "Trabalhadores no local"
{ //Abertura da estrutura if (condicional)
noTone(Buzzer);
digitalWrite(VD, HIGH); //Coloca a variável digital VM em nível lógico baixo
digitalWrite(VM, LOW); //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(pesoTotal); //Imprime no monitor serial o texto entre parênteses
Serial.println(" KG");
delay(1000);
}
if (pesoTotal >= 80) //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);
digitalWrite(VM, HIGH); //Coloca a variável digital VD em nível lógico alto
delay(500);
digitalWrite(VD,LOW);
digitalWrite(VM, HIGH); //Coloca a variável digital VD em nível lógico baixo
delay(500);
digitalWrite(VD,LOW);
digitalWrite(VM, HIGH); //Coloca a variável digital VD em nível lógico alto
delay(500);
Serial.println("Trabalhador em perigo!!! "); //Imprime no monitor serial o texto entre aspas duplas
Serial.println("CONTAGEM REGRESSIVA 15S: ");
Serial.print(pesoTotal); //Imprime no monitor serial o texto entre parênteses
Serial.println(" KG");
int cont; //Declara variavel inteira como cont
//Inicio da contagem regressiva de 15 segundos
for (cont = 15; cont >= 0; cont--) //Inicia estrutura de repetição for (inicio, condição, incremento)
{
//Abertura da estrutura for (repetição)
if(pesoTotal)
{
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 baixa
delay(300);
delay(200);
if (digitalRead(button) == LOW ) // Compara se a condição BOT e nivel logico alto
{
noTone(11);
delay(10);
goto salto;
}
if(digitalRead(button)==LOW)
{goto salto;}
}
if(cont==0 ){ //Compara a variavel cont é igual a 0 e se o botão esta ligado
digitalWrite(VM, HIGH);
digitalWrite(VD, LOW);
while(digitalRead(button)==HIGH){
tone(11, mi); //Executa a função tone no pino 13 utilizando o vetor melodia
delay (100);
}
}
//Ajustar botao de resetar
if(digitalRead(button) == LOW ){
noTone(Buzzer);
digitalWrite(VD, HIGH);
digitalWrite(VM, LOW);
Serial.println("Reiniciando!!!");
delay(6000);
}
}
}
}