Olá Pessoal,
Estou aqui de volta da programação do arduino e não estou a conseguir programar isto correcto.
Tenho aqui um Arduino Uno + sensor de corrente ACS712 + modulo 2 reles e um motor 12V DC + fonte 12V para alimentação do motor.
E o objectivo deste projecto é ao pressionar o botão continuamente este liga um modulo rele e o motor rodar num sentido até chegar ao batente e trava o motor DC. O motor para de rodar e por sua vez a corrente do motor vai subir e quando for maior que 0.5A desliga o motor. Depois assim que tiro o dedo do botão ele arranca e faz a mesma coisa mas no sentido oposto.
Esta parte já funciona bem.
Agora tenho uma nova condição, queria acrescentar no código e não consigo.
É o seguinte:
O motor arranca e se a corrente não chegar aos 0.5A o motor para passados 3 segundos.
Já tentei imensas vezes e não consigo meter isto a funcionar tudo em conjunto.
Vou deixar aqui o código que tenho até ao momento (este condigo funciona, apenas falta o tempo dos 3s até o motor para para cada sentido de rotação).
Podem me dar uma ajuda?
int pinoReleCh1 = 2; //Rele 1
int pinoReleCh2 = 3; // Rele 2
int pushbutton = 4; // Botão iniciar – ABRIR A PORTA DA CARRINHA
int button;
void setup()
{
Serial.begin(9600);
pinMode(pinoReleCh1, OUTPUT); //Saida rele 1
pinMode(pinoReleCh2, OUTPUT); //Saida rele 2
digitalWrite(pinoReleCh1, HIGH); //Rele 1 inicia desligado
digitalWrite(pinoReleCh2, HIGH); //Rele 2 inicia desligado
pinMode(pushbutton, INPUT_PULLUP);
}
///////////////////////////////////////////////////////
////////////////////L O O P ///////////////////////////
void loop()
{
checkbutton();
if (button == LOW) // Quando o Pushbutton é = 0, vai para o LOOP1()
{
loop1();
}
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
void checkbutton()
{
button = digitalRead(pushbutton);
//Serial.println(“Valor do botão:”);
//Serial.println(button);
delay(1);
}
// LOOP1() – Abrir escadas e vai para quando a corrente for maior que 0.5A ou depois de 3 segundos de funcionamento:
void loop1()
{
digitalWrite(pinoReleCh1, LOW); //Liga o rele 1
sensor(); //Faz a leitura do sensor de corrente
}
// LOOP2() – Fechar escadas e vai para quando a corrente for maior que 0.5A ou depois de 3 segundos de funcionamento:
void loop2()
{
digitalWrite(pinoReleCh2, LOW); //Liga o rele 2
sensor2(); //Faz a leitura do sensor de corrente
}
void sensor()
{
unsigned int x=0;
float AcsValue=0.0,Samples=0.0,AvgAcs=0.0,AcsValueF=0.0;
for (int x = 0; x < 150; x++)
{
AcsValue = analogRead(A0); //Read current sensor values
Samples = Samples + AcsValue; //Add samples together
delay (3); // let ADC settle before next sample 3ms
}
AvgAcs=Samples/150.0;
AcsValueF = (2.5 – (AvgAcs * (5.0 / 1024.0)) )/0.100;
Serial.println(AcsValueF); //Print the read current on Serial monitor
delay(1);
//while (digitalRead(pushbutton) == HIGH) {}
while (AcsValueF > 0.50) // Quando a corrente for maior que 0.5A desliga o rele e passa para o Loop2() para mudar o sentido de rotação do motor
{
digitalWrite(pinoReleCh1, HIGH);
Serial.println(“Plataforma toda aberta”);
delay(1);
button = digitalRead(pushbutton);
//Serial.println(button); // Faz a leitura do botão, se for = 0
if (button == HIGH) // Pushbutton é = 0
{
loop2();
}
}
}
void sensor2()
{
unsigned int x=0;
float AcsValue=0.0,Samples=0.0,AvgAcs=0.0,AcsValueF=0.0;
for (int x = 0; x < 150; x++)
{
AcsValue = analogRead(A0); //Read current sensor values
Samples = Samples + AcsValue; //Add samples together
delay(3); // let ADC settle before next sample 3ms
}
AvgAcs=Samples/150.0;
AcsValueF = (2.5 – (AvgAcs * (5.0 / 1024.0)) )/0.100;
Serial.println(AcsValueF); //Print the read current on Serial monitor
delay(1);
//while (digitalRead(pushbutton) == HIGH) {}
while (AcsValueF > 0.50) // Quando a corrente for maior que 0.5A desliga o rele e passa para o Loop1() para mudar o sentido de rotação do motor
{
digitalWrite(pinoReleCh2, HIGH);
Serial.println(“Plataforma toda fechada”);
delay(1);
button = digitalRead(pushbutton);
if (button == HIGH) // Pushbutton é = 0
{
loop1();
}
}
}
Obrigado.