Olá pessoal, bom dia.
Estou trabalhando em um projeto de uma automação do ar comprimido em uma máquina de corte laser.
As máquinas de corte laser usam o ar comprimido empurrar a fumaça residual do processo para o exaustor.
A idéia é básica seria utilizar sensores óticos e um disco de encoder dos eixos x e y para monitorar a rotação e manter uma válvula solenoide ligada através de um relê para fechar ou abrir a linha de ar comprimido caso haja movimento ou a ausência dele.
Componentes utilizados:
1 Relê
1 Par de sensores óticos
E 1 Arduíno nano.
Tentativas:
Primeira tentativa: Defini as variáveis e defini tempos de atrasos para que o pino de saída se mantivesse e estado alto quando houvesse movimento. Sem sucesso.
int rele = 8; //Declara o pino 8 como rele
int encoder1 = 2; //Declara o pino2 como encoder 1
int encoder2 = 3; //Declara o pino3 como encoder 2
void setup()
{
Serial.begin(9600);
pinMode(rele, OUTPUT); //a variável rele é declarada como saída
pinMode(encoder1, INPUT); //a variável encoder1 é declarada como entrada
pinMode(encoder2, INPUT); //a variável encoder2 é declarada como entrada
}
void loop()
{
while (digitalRead(encoder1) == 1)
digitalWrite(rele, HIGH); //se encoder 1 é maior que 0, rele ligado
delay(1000); //espera 10s
while (digitalRead(encoder2) == 1)
digitalWrite(rele, HIGH); //se encoder 2 é maior que 0, rele ligado
delay(1000); //espera 10s
while (digitalRead(encoder1) == 0)
digitalWrite(rele, LOW); //se encoder 1 é maior que 0, rele ligado
delay(1000); //espera 10s
while (digitalRead(encoder2) == 0)
digitalWrite(rele, LOW); //se encoder 2 é maior que 0, rele ligado
delay(1000); //espera 10s
}
Segunda tentativa:
Tentando monitorar o RPM, utilizei um código que encontrei na net e tentei manter o estado do relê alto. Sem sucesso também.
int ledPin = 13; // IR LED connected to digital pin 13
int statusPin = 12; // LED connected to digital pin 12
volatile byte rpmcount;
volatile int status;
unsigned int rpm;
unsigned long timeold;
void rpm_fun()
{
//Each rotation, this interrupt function is run twice, so take that into consideration for
//calculating RPM
//Update count
rpmcount++;
//Toggle status LED
if (status == LOW) {
status = HIGH;
} else {
status = LOW;
}
digitalWrite(statusPin, status);
}
void setup()
{
Serial.begin(9600);
//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
//Triggers on FALLING (change from HIGH to LOW)
attachInterrupt(0, rpm_fun, FALLING);
//Turn on IR LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
//Use statusPin to flash along with interrupts
pinMode(statusPin, OUTPUT);
rpmcount = 0;
rpm = 0;
timeold = 0;
status = LOW;
}
void loop()
{
//Update RPM every second
delay(1000);
//Don't process interrupts during calculations
detachInterrupt(0);
//Note that this would be 60*1000/(millis() - timeold)rpmcount if the interrupt
//happened once per revolution instead of twice. Other multiples could be used
//for multi-bladed propellers or fans
rpm = 301000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
//Write it out to serial port
Serial.println(rpm,DEC);
//Restart the interrupt processing
attachInterrupt(0, rpm_fun, FALLING);
}
Caso alguém tenha alguma idéia e puder contribuir, ficaria muito grato.
Obrigado