Ir ao conteúdo
  • Cadastre-se

Arduino cortina automatizada via controle IR - arduino


Posts recomendados

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 ..porém 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();
  
}

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

olhando por cima não seria melhor você colocar uma função switch(),  case e break para fazer essa alteração do if ? Ou talvez colocar um OU ai nesse if pois você só está verificando um estado de um único sensor para teu if e o código está parando nele sem verificar ao mesmo tempo o outro sensor como está? 

 

Acredito que seja o caso de ver as possibilidades e fazer um Mapa de Karnaughou sei lá o que ^^ 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...