Temporizador de sequência industrial usando RTC e Arduino

Temporizador de sequência industrial usando RTC e Arduino

O temporizador de sequência é usado em muitas indústrias de manufatura para LIGAR e DESLIGAR processos um por um automaticamente. O temporizador de sequência é necessário no máximo quando há cadeia de processos – significa 1st o processo termina, ele aciona 2e processo, quando 2e termina, aciona 3terceiro processo e assim por diante (como reação em cadeia !!!….). Os horários e durações de cada processo devem ser definidos inicialmente. Cada processo requer uma duração de tempo específica. A duração de cada processo em sequência é definida (programada) antes do início de todo o processo em cadeia. Então o 1st processo é acionado. Ele é executado por uma duração definida e quando termina, 2e o processo começa e assim a cadeia começa. Cada processo é executado por uma duração definida e quando termina, ativa o próximo processo. Isso continua até o último processo. Pode haver vários desses processos. Quando o último processo termina, a cadeia para. Se estiver no modo contínuo ou de repetição, novamente 1st o processo será iniciado e este ciclo se repetirá continuamente.

Exemplos de tal processo podem ser encontrados nas indústrias de fabricação de metal ou soldagem. No processo de soldagem existem quatro subprocessos que devem ser acionados um após o outro. (1) o trabalho (a ser soldado) é colocado sob os eletrodos através do transportador (ou por qualquer outro meio) (2) os eletrodos comprimem o trabalho para aplicar a pressão adequada (3) o contator é ligado para passar a corrente através dos eletrodos e do trabalho (4) finalmente o trabalho é colocado sob pressão para ser soldado corretamente. Todos esses processos são acionados um após o outro e cada processo requer um tempo específico. As durações de tempo para cada processo são definidas inicialmente e então o processo é iniciado.

Aqui, o projeto apresentado demonstra tal temporizador de sequência com chip de relógio em tempo real. Ele usa microcontrolador Arduino e chip DS1307 RTC para definir o tempo real e a duração dos processos. A duração do processo pode ser definida em horas, minutos e segundos. O processo é executado em tempo real de acordo com o tempo fornecido pelo chip RTC. Há LCD 16×4 no projeto para exibir o status do processo, outras mensagens diferentes e em tempo real. O usuário pode definir e programar o horário de início do processo e a duração de 3 subprocessos diferentes. Nesta demonstração, 3 relés são LIGADOS e DESLIGADOS em sequência e presume-se que o relé LIGARÁ e DESLIGARá o processo. Então, vamos primeiro ver o diagrama do circuito e seu funcionamento seguido do programa.

Diagrama de circuito:

Descrição do circuito:

Conforme mostrado na figura acima, o circuito é construído usando módulo de chip RTC DS1307, LCD 16 × 4, arduino Placa UNO e alguns outros componentes como botões, relés, transistores, resistores etc.

· O módulo RTC possui interface de quatro fios Vcc, Gnd, SDA e SCL. Os pinos Vcc e Gnd são conectados à placa Arduino 5 V e Gnd respectivamente, o que fornece tensão de polarização para sua operação

· Os pinos SCL e SDA são conectados aos pinos SCL e SDA do Arduino. Arduino se comunica com o chip RTC DS1307 usando esses dois pinos

· Quatro botões são conectados aos pinos digitais 1, 2, 3 e 4 do Arduino. Todos os botões são puxados para o terra por meio de resistores de 10 K, conforme mostrado. quando qualquer botão é pressionado, o respectivo pino do Arduino obtém a entrada lógica 1 (ALTA)

· Os pinos digitais 5, 6 e 7 acionam três relés de 12 V através de 3 transistores tipo NPN conforme mostrado. As bobinas do relé são conectadas entre a fonte externa de 12 V e os terminais coletores do transistor

· Três dispositivos diferentes (não mostrados na figura) estão conectados com terminais de contato de relé. Significa que o dispositivo está ligado quando o relé está ligado. O dispositivo remonta qualquer processo da indústria.

· Os pinos de dados D4-D7 do LCD estão conectados aos pinos 10 – 13 do Arduino. Dois pinos de controle Rs e En estão conectados aos pinos 8 e 9, respectivamente. Os pinos de controle RW e VEE (controle de contraste) estão conectados ao terra

· LED de retroiluminação do LCD recebe alimentação de 5V

Operação do circuito:

· Quando a energia é fornecida ao circuito através de USB, inicialmente todos os três relés e, portanto, os dispositivos estão desligados. A pessoa deve primeiro definir os tempos para cada dispositivo (processo)

· A mensagem inicial é exibida no LCD como “Definir horário de início da sequência

· Agora a pessoa precisa definir o horário de início da sequência# em horas, minutos e segundos usando botões. Dados 4 botões tem as seguintes funções.

. Assim, pressionando o botão 1, botão 2 e botão 3, a pessoa definirá a hora, minuto e segundo necessários e, em seguida, pressionará o botão Enter para definir o horário de início da sequência

· A mensagem é exibida no LCD como “O horário de início da sequência está definido como XX:XX:XX ”(este é o momento real em que o processo sequencial será iniciado) ·

· Próximo, pessoa é solicitado a entrar duração do processo 1 em hora, minuto e segundo. O LCD exibe mensagemDefinir duração do processo 1 para 00:00:00

· Novamente, a pessoa deve inserir a duração total do processo 1 em horas, minutos e segundos – significa por quanto tempo o processo 1 será executado.

· A pessoa deve definir a duração* (não o tempo!!!!!) para o processo 1 usando botões. Quando a duração é definida e o botão Enter é pressionado, a mensagem é exibida no LCD como “A duração do processo 1 é XX hora XX minuto e XX seg.

· Da mesma forma, a pessoa deve definir a duração do processo 2 e do processo 3 também. Quando a duração é definida, uma mensagem semelhante é exibida no LCD como “A duração do processo X é XX hora XX minuto e XX seg.

· Quando todas as 3 durações do processo são definidas e o botão Enter é pressionado, a operação real do circuito começa

· O Arduino lê a hora atual do módulo RTC e a exibe no LCD como “Hora: – XX:XX:XX”. Junto com este LCD também exibe a hora de início do processo 1 (a hora de início da sequência que o usuário inseriu)

· Em seguida, ele compara continuamente a hora atual e a hora de início do processo 1. Quando eles coincidem, ele liga o primeiro relé e assim o processo 1 enviando a lógica HIGH (1) no pino digital 5. A mensagem exibida no LCD como “processo 1 começa

· O LCD também exibe a mensagem “hora de início do processo 2 xx:xx:xx”- esse é o tempo real em que o processo 1 terminará e o processo 2 começará

· Agora, novamente, o Arduino compara a hora atual com a hora de início do processo 2. Quando ambos combinam, primeiro desliga 1st relé e liga 2e retransmissão. Então o 2e o processo é iniciado. O LCD exibe “processo 2 começa” e “Hora de início do processo 3 xx:xx:xx

· Novamente quando a hora atual for igual à hora de início do processo 3, 2e relé está desligado e 3terceiro relé é ligado para iniciar 3terceiro processo.

· O LCD exibe “processo 3 começa”E a última mensagem no LCD é“processo 3 hora de término xx:xx:xx

· Finalmente, quando o tempo de término do processo 3 for atingido, 3terceiro o relé também é desligado e assim a sequência completa é finalizada

# Nota 1: hora de início da sequência significa do utilizador tem que inserir a hora real em que todo o processo sequencial será iniciado. Ele tem que inserir o horário real desejado como 10:00:00 (am) ou 15:30:00 (pm) quando quiser processo para ser iniciado.

* Nota 2 : duração do processo significa quanto tempo o processo levará para ser finalizado. Aqui do utilizador tem que entrar duração de processo não é a hora

É assim que o temporizador sequencial inicia o processo um por um de acordo com o tempo e duração programados. Aqui está o snap de o circuito arranjo

Código-fonte do projeto

###

//Program to 


#include 

#include "RTClib.h"

#include 

#include

#define set_hr 1

#define set_min 2

#define set_sec 3

#define enter 4

#define device1 5

#define device2 6

#define device3 7


LiquidCrystal lcd(8, 9, 10, 11, 12, 13);


RTC_DS1307 rtc;

int hr=0, minut=0,sec=0,set_time_flag=1,sys_en_flag=0;

int process1_time_flag=0,process2_time_flag=0,process3_time_flag=0;

int process1_hr,process1_min,process1_sec;

int process2_hr,process2_min,process2_sec;

int process3_hr,process3_min,process3_sec;

int strt_hr,strt_min,strt_sec,time_flag=1;

void setup  

{

  Serial.begin(9600);   

  lcd.begin(16, 4);

  lcd.clear ;   

  pinMode(set_hr,INPUT);

  pinMode(set_min,INPUT);

  pinMode(set_sec,INPUT);

  pinMode(enter,INPUT);

  pinMode(device1,OUTPUT);

  pinMode(device2,OUTPUT);

  pinMode(device3,OUTPUT);

  digitalWrite(device1,LOW);

  digitalWrite(device2,LOW);

  digitalWrite(device3,LOW);

}


void loop  

{

    int hr_set_but,min_set_but,ent_but,sec_set_but;       

    hr_set_but = digitalRead(set_hr);

    min_set_but = digitalRead(set_min);

    sec_set_but = digitalRead(set_sec);

    ent_but = digitalRead(enter);


///////////////// turn device ON or OFF ////////////////////////////////  

  if(time_flag)

    {

      DateTime now = rtc.now ; 

      lcd.print("current time is");

      lcd.setCursor(0,1);

      lcd.print(now.hour );

      lcd.print(':');

      lcd.print(now.minute );

      lcd.print(':');

      lcd.print(now.second );  

      delay(3000);

      lcd.clear ;

      lcd.print("Set sequence ");

      lcd.setCursor(0,1);

      lcd.print("start time:");

      lcd.setCursor(0,2);

      lcd.print("00:00:00");

      time_flag=0;

    }

  if(sys_en_flag)

  { 

    DateTime now = rtc.now ; 

    ///////////// display current time on LCD //////////////////////////

    lcd.setCursor(6,0);

    lcd.print("          ");

    lcd.setCursor(6,0); 

    lcd.print(now.hour );

    lcd.print(':');

    lcd.print(now.minute );

    lcd.print(':');

    lcd.print(now.second );  

    if(now.hour ==EEPROM.read(11) && now.minute ==EEPROM.read(12) && now.second ==EEPROM.read(13))

      {

        digitalWrite(device1,HIGH);

        lcd.setCursor(8,1);

        lcd.print('2');

        lcd.setCursor(6,2);

        lcd.print(EEPROM.read(14));

        lcd.print(':');

        lcd.print(EEPROM.read(15));

        lcd.print(':');

        lcd.print(EEPROM.read(16));       

        lcd.setCursor(0,3);

        lcd.print("Process 1 starts");

      }

   if(now.hour ==EEPROM.read(14) && now.minute ==EEPROM.read(15) && now.second ==EEPROM.read(16))

      {

        digitalWrite(device1,LOW);

        digitalWrite(device2,HIGH);

        lcd.setCursor(8,1);

        lcd.print('3');

        lcd.setCursor(6,2);

        lcd.print(EEPROM.read(17));

        lcd.print(':');

        lcd.print(EEPROM.read(18));

        lcd.print(':');

        lcd.print(EEPROM.read(19));  

        lcd.setCursor(0,3);

        lcd.print("Process 2 starts");

      }

    if(now.hour ==EEPROM.read(17) && now.minute ==EEPROM.read(18) && now.second ==EEPROM.read(19))

      {

        digitalWrite(device2,LOW);

        digitalWrite(device3,HIGH);

        lcd.setCursor(8,1);

        lcd.print("3 end   ");

        lcd.setCursor(6,2);

        lcd.print(EEPROM.read(20));

        lcd.print(':');

        lcd.print(EEPROM.read(21));

        lcd.print(':');

        lcd.print(EEPROM.read(22));  

        lcd.setCursor(0,3);

        lcd.print("Process 3 starts");

      }

    if(now.hour ==EEPROM.read(20) && now.minute ==EEPROM.read(21) && now.second ==EEPROM.read(22))

      {

        digitalWrite(device3,LOW);       

        lcd.setCursor(0,3);

        lcd.print("Process 3 ends  ");

      }     

    delay(1000); 

  }    

///////////// set ON time and OFF time for device ///////////////////

   if(hr_set_but)

     {

        if(hr<24) hr++;

        if(hr==24) hr=0;

        lcd.setCursor(0,2);

        lcd.print("  ");

        lcd.setCursor(0,2);

        lcd.print(hr);

        delay(200);

     }

    if(min_set_but)

     {

        if(minut<60) minut++;

        if(minut==60) minut=0;

        lcd.setCursor(3,2);

        lcd.print("  ");

        lcd.setCursor(3,2);

        lcd.print(minut);

        delay(200);

     }

    if(sec_set_but)

     {

        if(sec<60) sec++;

        if(sec==60) sec=0;

        lcd.setCursor(6,2);

        lcd.print("  ");

        lcd.setCursor(6 ,2);

        lcd.print(sec);

        delay(200);

     }

    if(ent_but)

      {

        if(set_time_flag==1)

          {

            strt_hr=hr;

            strt_min = minut;

            strt_sec = sec;

            EEPROM.write(11,strt_hr);

            EEPROM.write(12,strt_min);

            EEPROM.write(13,strt_sec);

            set_time_flag=0;

            process1_time_flag=1;

            lcd.setCursor(0,0);

            lcd.print("sequence start  ");

            lcd.setCursor(0,1);

            lcd.print("time is set to  ");

            lcd.setCursor(0,2);

            lcd.print(strt_hr);

            lcd.print(':');

            lcd.print(strt_min);

            lcd.print(':');

            lcd.print(strt_sec);

            delay(2000);

            lcd.setCursor(0,0);

            lcd.print("Set Process 1   ");

            lcd.setCursor(0,1);

            lcd.print("Time duration   ");

            lcd.setCursor(0,2);

            lcd.print("00:00:00");

            hr = 0;

            minut = 0;

            sec = 0;

          }

       else if(process1_time_flag==1)

          {

            process1_sec = sec + EEPROM.read(13);

            if(process1_sec>60)

              {

                process1_sec = process1_sec-60;

                minut++;

              }

            process1_min = minut+EEPROM.read(12);

            if(process1_min>60)

              {

                process1_min = process1_min-60;

                hr++;

              }

            process1_hr = hr+EEPROM.read(11);   

            EEPROM.write(14,process1_hr);

            EEPROM.write(15,process1_min);

            EEPROM.write(16,process1_sec);

            process1_time_flag=0;

            process2_time_flag=1;

            lcd.setCursor(0,0);

            lcd.print("Process 1 time  ");

            lcd.setCursor(0,1);

            lcd.print("duration is     ");

            lcd.setCursor(0,2);

            lcd.print(hr);

            lcd.print(" Hr ");

            lcd.print(minut);

            lcd.print(" minute");

            lcd.setCursor(0,3);

            lcd.print("and ");

            lcd.print(sec);

            lcd.print(" sec");

            delay(2000);

            lcd.clear ;

            lcd.setCursor(0,0);

            lcd.print("Set Process 2   ");

            lcd.setCursor(0,1);

            lcd.print("Time duration   ");

            lcd.setCursor(0,2);

            lcd.print("00:00:00");

            hr = 0;

            minut = 0;

            sec = 0;

          }  

       else if(process2_time_flag==1)

          {

            process2_sec = sec + EEPROM.read(16);

            if(process2_sec>60)

              {

                process2_sec = process2_sec-60;

                minut++;

              }

            process2_min = minut+EEPROM.read(15);

            if(process2_min>60)

              {

                process2_min = process2_min-60;

                hr++;

              }

            process2_hr = hr+EEPROM.read(14);

            EEPROM.write(17,process2_hr);

            EEPROM.write(18,process2_min);

            EEPROM.write(19,process2_sec);

            process2_time_flag=0;

            process3_time_flag=1;

            lcd.setCursor(0,0);

            lcd.print("Process 2 time  ");

            lcd.setCursor(0,1);

            lcd.print("duration is     ");

            lcd.setCursor(0,2);

            lcd.print(hr);

            lcd.print(" Hr ");

            lcd.print(minut);

            lcd.print(" mn ");

            lcd.setCursor(0,3);

            lcd.print("and ");

            lcd.print(sec);

            lcd.print(" sec");

            delay(2000);

            lcd.clear ;

            lcd.setCursor(0,0);

            lcd.print("Set Process 3   ");

            lcd.setCursor(0,1);

            lcd.print("Time duration   ");

            lcd.setCursor(0,2);

            lcd.print("00:00:00");

            hr = 0;

            minut = 0;

            sec = 0;

          }

       else if(process3_time_flag==1)

          {

            process3_sec = sec + EEPROM.read(19);

            if(process3_sec>60)

              {

                process3_sec = process3_sec-60;

                minut++;

              }

            process3_min = minut+EEPROM.read(18);

            if(process3_min>60)

              {

                process3_min = process3_min-60;

                hr++;

              }

            process3_hr = hr+EEPROM.read(17);

            EEPROM.write(20,process3_hr);

            EEPROM.write(21,process3_min);

            EEPROM.write(22,process3_sec);

            process3_time_flag=0;

            lcd.setCursor(0,0);

            lcd.print("Process 3 time  ");

            lcd.setCursor(0,1);

            lcd.print("duration is     ");

            lcd.setCursor(0,2);

            lcd.print(hr);

            lcd.print(" Hr ");

            lcd.print(minut);

            lcd.print(" mn ");

            lcd.setCursor(0,3);

            lcd.print("and ");

            lcd.print(sec);

            lcd.print(" sec");

            delay(2000);

            lcd.clear ;

            lcd.print("Time:-");

            lcd.setCursor(0,1);

            lcd.print("Process 1 Start ");

            lcd.setCursor(0,2);

            lcd.print("Time: ");

            lcd.print(strt_hr);

            lcd.print(':');

            lcd.print(strt_min);

            lcd.print(':');

            lcd.print(strt_sec);

            sys_en_flag=1;

          }          

     }  

 }

###

Diagramas de circuito

Temporizador de sequência industrial usando RTC e Arduino_circuit-Diagram

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.