Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Ultrasonic.h> //Biblioteca para a utilização do sensor
- //Biblioteca necessárias para o uso do Ethernet Shield
- #include <SPI.h>
- #include <Ethernet.h>
- //Biblioteca necessárias para a comunicação modbus
- #include <Mudbus.h>
- #include <Modbus.h>
- Mudbus Mb;
- int alar, bomb, selecao, conta, botAL, BOMBA1LIGADA, BOMBA2LIGADA, BDOSADORA, POCO, Pagua, ALARME, botEmer, estadoNivel, selecao1, selecao2, PRESSAO, PRESSAOATUAL, NivelAl;
- unsigned long TEMPOATUAL, TVERIFICACAO;
- float NI1, NIVELATUAL;
- int contp=0;
- long TPEDEAGUA = 0;
- int butal=0;
- int butem=0;
- //Define os pinos para o trigger e echo
- #define pino_trigger 5
- #define pino_echo 6
- //Inicializa o sensor nos pinos definidos acima
- Ultrasonic ultrasonic(pino_trigger, pino_echo);
- void setup() {
- //Configurações de endereços de rede do Ethernet Shield.
- uint8_t mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x33 };
- uint8_t ip[] = { 192, 168, 0, 15 };
- uint8_t gateway[] = { 192, 168, 0, 1 };
- uint8_t subnet[] = { 255, 255, 255, 0 };
- Ethernet.begin(mac, ip, gateway, subnet);
- //Os pinos 4,10,11,12,13 são utilizados pelo Ethernet Shield.
- delay(5000);
- Serial.begin(9600);
- //Definição dos pinos do Arduino.
- POCO = 2;
- BOMBA1LIGADA = 8;
- BOMBA2LIGADA = 9;
- BDOSADORA = 3;
- ALARME = 7;
- PRESSAO = A2;
- botAL = A0;
- botEmer = A1;
- pinMode(PRESSAO, INPUT);
- pinMode(botAL, INPUT_PULLUP);
- pinMode(botEmer, INPUT_PULLUP);
- pinMode(ALARME, OUTPUT);
- pinMode(BDOSADORA, OUTPUT);
- pinMode(POCO, OUTPUT);
- pinMode(BOMBA1LIGADA, OUTPUT);
- pinMode(BOMBA2LIGADA, OUTPUT);
- digitalWrite(POCO,HIGH); //desliga a bomba do poço
- digitalWrite(BDOSADORA,HIGH); //desliga a bomba dosadora
- digitalWrite(BOMBA1LIGADA,HIGH); //desliga a bomba de pressão 1
- digitalWrite(BOMBA2LIGADA,HIGH); //desliga a bomba de pressão 2
- digitalWrite(ALARME, HIGH);
- //Atribuindo valor a variáveis.
- conta = 0;
- bomb = 0;
- selecao = 0;
- NIVELATUAL = 0;
- estadoNivel = 0;
- NI1 = 100;
- alar = 0;
- selecao1 = 0;
- selecao2 = 1;
- }
- //=====================================================================================================================================================
- void loop() {
- Mb.Run(); //Inicializa a comunicação modbus
- butal = digitalRead(botAL); //Leitura do Botão de Alarme
- butem = digitalRead(botEmer); //Leitura do Botão de Emergência
- if (butal == LOW){
- //verifica o estado do botão de alarme
- digitalWrite(ALARME, HIGH);
- conta =0;
- contp = 0;
- alar=0;
- }
- if (butem == HIGH){
- //Verifica o estado do botão de emergência.
- digitalWrite(POCO,HIGH); //desliga a bomba do poço (OBS: Modulo relé acionado em nível logico baixo - LOW)
- digitalWrite(BDOSADORA,HIGH); //desliga a bomba dosadora
- digitalWrite(BOMBA1LIGADA,HIGH); //desliga a bomba de pressão 1
- digitalWrite(BOMBA2LIGADA,HIGH); //desliga a bomba de pressão 2
- }
- //Leitura e conversão do valor do nível
- NIVELATUAL = 0;
- float cmMsec;
- long microsec = ultrasonic.timing(); //recebe o valor do tempo entre a emissão e a recepção do sinal
- cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); //converte o valor obtido para centímetros
- delay(500);
- NIVELATUAL = (50 - (cmMsec - 60))/50; //cálculo do nível do reservatório
- NIVELATUAL = NIVELATUAL *100;
- delay(500);
- if (NIVELATUAL > (NI1 + 8)){ //Etapa criada para diminuir a grande variação do sensor
- NIVELATUAL = NI1;
- }
- else{
- NI1 = NIVELATUAL;
- }
- if ((conta == 0)) {
- if ((butem == LOW)) {
- // BOMBA 1 LIGADA
- if ((selecao == 0) && (NIVELATUAL > 20)){
- digitalWrite(BOMBA2LIGADA,HIGH); //Desliga a Bomba de pressão 2
- digitalWrite(BOMBA1LIGADA,LOW); //Liga a Bomba de pressão 1
- }
- // BOMBA 2 LIGADA
- if ((selecao == 1) && (NIVELATUAL > 20)){
- digitalWrite(BOMBA1LIGADA,HIGH); //Desliga a Bomba de pressão1
- digitalWrite(BOMBA2LIGADA,LOW); //Liga a Bomba de pressão 2
- }
- if (NIVELATUAL <= 15){
- digitalWrite(BOMBA1LIGADA,HIGH); //Desliga a Bomba de pressão1
- digitalWrite(BOMBA2LIGADA,HIGH); //Liga a Bomba de pressão 2
- }
- switch(estadoNivel) { //Controle On-off bomba do poço.
- case 0:
- if(NIVELATUAL <= 15) {
- digitalWrite(POCO,LOW); //liga a bomba do poço
- digitalWrite(BDOSADORA,LOW); //liga a bomba dosadora
- Pagua = 1; //retorna o valor 1
- estadoNivel = 1;
- }
- else
- digitalWrite(POCO,HIGH); //desliga a bomba do poço
- digitalWrite(BDOSADORA,HIGH); //desliga a bomba dosadora
- Pagua = 0;
- break;
- case 1:
- if(NIVELATUAL >= 100) {
- digitalWrite(POCO,HIGH); //liga a bomba do poço
- digitalWrite(BDOSADORA,HIGH); //liga a bomba dosadora
- Pagua = 0; //retorna o valor 1
- estadoNivel = 0;
- }
- else
- digitalWrite(POCO,LOW); //desliga a bomba do poço
- digitalWrite(BDOSADORA,LOW); //desliga a bomba dosadora
- Pagua = 1;
- break;
- }
- TEMPOATUAL = millis(); //recebe o tempo atual desde o início da execução do arduino
- TVERIFICACAO = 15000; //tempo de espera até a verificação
- // VERIFICA SE A BOMBA DO POÇO ESTA LIGADA
- if (Pagua == 1){
- if (contp==0){
- TPEDEAGUA = millis();
- contp=1;
- NivelAl = NIVELATUAL;
- }
- // CONTA O TEMPO E VERIFICA SE O NÍVEL AINDA ESTÁ IGUAL OU DIMINUINDO
- if ((TEMPOATUAL - TPEDEAGUA > TVERIFICACAO) && (NivelAl >= NIVELATUAL)){
- alar = 1;
- }
- }
- if (Pagua == 0){
- contp = 0;
- }
- }
- }
- PRESSAOATUAL = analogRead(PRESSAO); //Faz a leitura da entrada analógica
- PRESSAOATUAL = map(PRESSAOATUAL,0,1023,0,30); //converte o valor
- if (PRESSAOATUAL <= 10) {
- alar = 1;
- }
- if (alar ==1){ //Etapa do alarme
- digitalWrite(ALARME, LOW); //Liga o Alarme
- digitalWrite(POCO,HIGH); //desliga a bomba do poço
- digitalWrite(BDOSADORA,HIGH); //desliga a bomba dosadora
- digitalWrite(BOMBA1LIGADA,HIGH); //desliga a bomba de pressão 1
- digitalWrite(BOMBA2LIGADA,HIGH); //desliga a bomba de pressão 2
- conta = 1;
- }
- bomb = bomb +1; //Etapa de troca de bombas booster, como o loop tem em torno de 1.5 segundos devido aos delays a cada 30s as bombas se alternam
- if (bomb >= 20){
- if ((selecao1 == 1) && (selecao2 == 0)) {
- selecao1 = 0;
- selecao2 = 1;
- selecao = 0;
- bomb = 0;
- }
- }
- if (bomb >= 20){
- if ((selecao1 == 0) && (selecao2 == 1)) {
- selecao1 = 1;
- selecao2 = 0;
- selecao = 1;
- bomb = 0;
- }
- }
- delay(500);
- //ATUALIZA VARIAVEIS MODBUS
- Mb.R[10] = NIVELATUAL;
- Mb.R[13] = PRESSAOATUAL;
- Mb.C[14] = digitalRead(ALARME);
- Mb.C[15] = digitalRead(botEmer);
- Mb.C[16] = digitalRead(BOMBA1LIGADA);
- Mb.C[17] = digitalRead(BOMBA2LIGADA);
- Mb.C[18] = digitalRead(BDOSADORA);
- Mb.C[19] = digitalRead(POCO);
- }
- //=================================================================================================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement