Laminadora PCI

Boa noite pessoal.

Sou um apaixonado por eletrônica e a tenho como hobby, porém sou leigo em programação, entendo um pouquinho, tenho uma pequena noção, só não sei colocar as ordem nas ordens corretas de uma programação e nem resolver problemas mais complexos (as vezes até problemas simples).

Bom, com disse apaixonado em eletrônica. O ano passado cheguei a comprar uma licença do Eagle e como sonho de qualquer hobbysta é fabricar as PCIs.

Ora bem, tentei diversas técnicas, porém a ultima parece a que mais se encaixa em meu perfil (dry film).

Uma das fases do processo, é laminar o filme (dry film) com uma laminadora (plastificadora de documentos). Decidi fabricar uma com um antigo sistema de uma fusora da Lexmark (impressora laser).

Ela é perfeita, com um mecanismo muito favorável, os rolos (um mais macio que o outro) e tem um sistema de aquecimento perfeito.

Com este achado, parti para o sketch e meu proto para fazer as simulações.

A primeira dificuldade que tive foi fazer o motor de passo funcionar, isto já está superado.

Quando introduzi a parte dos delays, percebi que o motor parava, isto devido ao processamento que do próprio arduino.

Parti para o millis, começou a bagunçar tudo e a cabeça já não funcionou mais.

Simplesmente travei.

O que pretendo e espero que os amigos aqui do fórum me expliquem:

O motor utilizado é m pequeno e valente 28BYJ48, que tem um excelente torque.

Vou descrever como deverá ser o processo:

Primeiro: led1 - vermelho (indica funcionamento do sistema);
led2 (amarelo) - indica que o sistema está aquecendo;
led3 (verde) - indica que o sistema está aquecido e que já pode inserir a placa para laminação;
led4 (azul) - indica que o sistema está em resfriamento;
rele1 - aciona a lâmpada;
rele2 - aciona cooler;
botão (liga e desliga o sistema);

Processo: Ao primir o botão, deverá:

acender led1 (indicando o seu funcionamento);
acender led2 (indicando que a lâmpada está em aquecimento);
ligar rele1 (acionar a lâmpada);
ligar motor (acionamento dos rolos para não danificarem);

Após um determinado tempo para o aquecimento da lâmpada (FOI AQUI QUE COMEÇOU TODA A BAGUNÇA, PRIMEIRO COM O DELAY E DEPOIS COM OS MILLIS), deverá ocorrer o seguinte:

permanecer com o led1 ligado;
permanecer com o rele1 ligado;
permanecer com o motor ligado;

apagar o led2 (sistema em aquecimento); e;
acender led3 (sistema pronto).

Após o uso, para fazer o desligamento deveremos proceder da seguinte maneira:

Pulsar novamente o botão:

Deverá permanecer com o led1 ligado (sistema em funcionamento);
deverá permanecer com o motor ligado (para não danificar o rolo);

deverá desligar o rele1 (desligando a lampada);
deverá apagar led3;
deverá acender led4 (sistema em resfriamento);
deverá ligar rele2 (liga cooler de resfriamento);

Após um determinado tempo, deverá ocorrer:

desligar rele2;
desligar led4;
desligar motor;
e desligar led1.

Com isto o sistema estará pronto novamente para o uso.

Eu tentei faze-lo mais como disse barrei.

Em anexo o sketch que fiz:

Agradeceria a ajuda preciosa de vocês. Isto aqui não é TCC é apenas para aplicação de uma laminadora. Em breve irei postar as imagem.

Desde já obrigado a todos pela ajuda.

quase.ino (4.86 KB)

Olá!

Comece corigindo a posição do fechamento da chave do "if (estado == 1)".

  if (estado == 1)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(rele1, HIGH);
    digitalWrite(led2, HIGH);
    myStepper.step(passos);

    if ( (millis() - tempoa) >= intervaloa )
    {
      tempoa = millis();
      digitalWrite(led2, LOW);
      digitalWrite(led3, HIGH);
    }
  }

Isso não vai funcionar porque a variável "tempoa" é inicializada junto com o programa, então se demorar mais que 10 segundos para apertar o botão essa "if ( (millis() - tempoa) >= intervaloa )" condição já será verdadeira e o LED 2 irá ligar e desligar no primeiro loop.

Você precisa atualizar o valor da variável "tempoa" no momento que o botão é pressionado.

algo deste tipo:

  if (estado == 1)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(rele1, HIGH);
    digitalWrite(led2, HIGH);
    myStepper.step(passos);

    if (inicio == true)
    {
      inicio = false;
      tempoa = millis();
    }
  }
  if (((millis() - tempoa) >= intervaloa) && (estado == 1))
  {
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
  }

Essa condição não tem o menor sentido pois não há nada no programa que altere o valor de "var2".

  if ((var == HIGH) && (var2 == LOW))
  {
    estado = 1 - estado;
    delay(20);    // de-bouncing
  }

Abraço.