Ola, sou iniciante em arduino  estou montando um projeto de  uma cortina automatizada via controle remoto (IR) 
mas estou tendo problemas na parte do fim de curso... 

o esquema é o seguinte.. acionando o a tecla 1 do controle a cortina abre a tecla 2 fecha e a 3 é um " stop " em algum angulo que o usuario queira , o problema é que quando o motor chega no fim de curso ele para ..porem enquanto o fim de curso esta ativado ele nao deixa mais o motor girar no sentido contrario.. pois o sensor esta mandando  o motor ficar parado...

se alguem puder me ajudar fico grato !
 
estou usando essa programaçao :

#include <IRremote.h>  
#include <AccelStepper.h>
int sensor_final = 2;
int estadosf ; 
int velocidade_motor = 250; 
int aceleracao_motor = 150;
int sentido_horario = 0 ;
int sentido_antihorario = 0 ;
int RECV_PIN = 11;  
float armazenavalor;    
int pino_enable = 10;  
IRrecv irrecv(RECV_PIN);  
decode_results results;  
AccelStepper motor1(1,7,4);
  
void setup()  
{  
  pinMode(pino_enable, OUTPUT); 
  pinMode(sensor_final, INPUT_PULLUP); 
  Serial.begin(9600);  
  irrecv.enableIRIn(); // Inicializa o receptor IR
  motor1.setMaxSpeed(velocidade_motor);
  motor1.setSpeed(velocidade_motor);
  motor1.setAcceleration(aceleracao_motor);
  Serial.println("Digite 1, 2 ou 3 e 3...");
}  
   
void loop()  
{
    estadosf = digitalRead (sensor_final);
   if (estadosf == LOW )
   {
  
   Serial.print(" sensor ");
   digitalWrite (pino_enable, HIGH);
   }
   
  if (irrecv.decode(&results))  
  {  
    Serial.print("Valor lido : ");  
    Serial.println(results.value, HEX);  
    armazenavalor = (results.value);  
    
    if (armazenavalor == 0xFF6897) //Verifica se a tecla 1 foi acionada  
    {  
     Serial.println("Numero 1 recebido - Girando motor sentido horario.");
        digitalWrite(pino_enable, LOW);
        sentido_horario = 1;
        sentido_antihorario = 0;  

    
    }  
    if (armazenavalor == 0xFF9867) //Verifica se a tecla 2 foi acionada  
    {  
      Serial.println("Numero 2 recebido - Girando motor sentido anti-horario.");
        digitalWrite(pino_enable, LOW);
        sentido_horario = 0;
        sentido_antihorario = 1; 
      
    }  
    if (armazenavalor == 0xFF02FD) //Verifica se a tecla OK foi acionada
    {
      Serial.println("Numero 3 recebido - Parando motor...");
        sentido_horario = 0;
        sentido_antihorario = 0;
        motor1.moveTo(0);
        digitalWrite(pino_enable, HIGH);
        
       
    }
  irrecv.resume(); //Le o próximo valor
  
}
  
 
// Move o motor no sentido horario
 
  
  if (sentido_horario == 1)
  {
    motor1.moveTo(10000);
  }
  // Move o motor no sentido anti-horario
 if (sentido_antihorario == 1)
  {
    motor1.moveTo(-10000);
  }
  // Comando para acionar o motor no sentido especificado
  motor1.run();
  
}

Exibições: 141

Responder esta

Respostas a este tópico

Olá.

  A forma mais segura seria o fim de curso desligar o motor de forma que ele não possa mais ir naquela direção, ainda que a placa comande isso, mas para a outra possa ir normalmente.

  Como o motor é DC vc pode fazer isso com diodos.

  Colocando um diodo em cada fim de curso quando ele estiver aberto um sentido fica bloqueado mas o outro ainda é permitido (via diodo).

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço