/*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: 18/10/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 DO 262 //Define variavel do como frequência de 262 Hz
#define re 294 //Define variavel ré como frequência de 294 Hz
#define VD 13 //Define variavel VD associado a Sala Vazia e a Trabalhadores no Local
#define VM 12 //Define variavel VM associado a Emergencia
#define Buzzer 11 //Define variavel Buzzer associado ao pino 13
#define button 10 //Define button como botão associado ao pino 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
int tara;
void setup() //Inicia a função setup
{ //Abertura da função setup
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);
scale1.set_scale();
scale2.set_scale();
scale3.set_scale();
scale4.set_scale();
scale5.set_scale();
scale6.set_scale();
scale7.set_scale();
scale8.set_scale();
Serial.print("Leitura da Tara: ");
//Serial.println(tara1.read());
Serial.println("Aguarde!");
Serial.println("Iniciando ...");
// Ajustar o valor adicionando o peso do sensor+ piso+ estrado de borracha.
Serial.println(scale1.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale2.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale3.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale4.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale5.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale6.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale7.read()); // Aguada até o dispositivo estar pronto
Serial.println(scale8.read()); // Aguada até o dispositivo estar pronto
/* Arrumar a tara*/
/*scale1.set_scale(); // Substituir o valor encontrado para escala
scale2.set_scale(); // Substituir o valor encontrado para escala
scale3.set_scale(); // Substituir o valor encontrado para escala
scale4.set_scale(); // Substituir o valor encontrado para escala
scale5.set_scale(); // Substituir o valor encontrado para escala
scale6.set_scale(); // Substituir o valor encontrado para escala
scale7.set_scale(); // Substituir o valor encontrado para escala
scale8.set_scale(); // Substituir o valor encontrado para escala
scale1.tare(5250); // Fixa o peso como tara
scale2.tare(5250); // Fixa o peso como tara
scale3.tare(5250); // Fixa o peso como tara
scale4.tare(5250); // Fixa o peso como tara
scale5.tare(5250); // Fixa o peso como tara
scale6.tare(5250); // Fixa o peso como tara
scale7.tare(5250); // Fixa o peso como tara
scale8.tare(5250); // Fixa o peso como tara*/
Serial.println("Posicione o piso e o estrado de borracha");
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
/*
Serial.println(scale1.get_units(20), 3);
Serial.println(scale2.get_units(20), 3);
Serial.println(scale3.get_units(20), 3);
Serial.println(scale4.get_units(20), 3);
Serial.println(scale5.get_units(20), 3);
Serial.println(scale6.get_units(20), 3);
Serial.println(scale7.get_units(20), 3);
Serial.println(scale8.get_units(20), 3);
*/
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(11);
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(11);
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 >= 81) //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>=80 && digitalRead(button)==HIGH)
{
Serial.println(cont);
delay(300);
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);
if(digitalRead(button)==LOW){
Serial.println("Reiniciando!!!");
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)==HIGH){
noTone(Buzzer);
digitalWrite(VD, HIGH);
digitalWrite(VM, LOW);
Serial.println("Reiniciando!!!");
delay(6000);
}
}