Ir ao conteúdo
  • Cadastre-se
Helio Takeo Aisawa

Outro Portão automático RFId + Motor de Passo + sensor infravermelho

Recommended Posts

olá, estou fazendo uma programação de um portão automático com abertura por RFId + motor de passo e o sensor infravermelho que bloqueará o motor quando o veículo estiver passando pelo portão...

consegui fazer uma parte do programa o RFId + Motor de Passo, mas nçao consigo encaixar o sensror IR... alguém poderia me ajudar/?

segue o código até o momento...

 

#include <SPI.h>
#include <MFRC522.h>
#include <AccelStepper.h>
#define HALFSTEP 8
#define sensor 7          //Define sensor infra-vermelho como 7

// Definições do pino do motor
#define motorPin1  2     // IN1 on the ULN2003 driver 1
#define motorPin2  3     // IN2 on the ULN2003 driver 1
#define motorPin3  4     // IN3 on the ULN2003 driver 1
#define motorPin4  5     // IN4 on the ULN2003 driver 1

//Inicialize com a sequência de pinos IN1-IN3-IN2-IN4 para usar o AccelStepper com 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

#define SS_PIN 10
#define RST_PIN 9
// Definicoes pino modulo RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); 

// Leds indicadores acesso liberado ou negado
int led_liberado = 6;
int led_negado = 1;

int pino_sensor = 7;
int estado_sensor = 0;

void setup() {
  pinMode(led_liberado, OUTPUT);
  pinMode(led_negado, OUTPUT);
  stepper1.setMaxSpeed(1000.0);
  stepper1.setAcceleration(100.0);
  stepper1.setSpeed(100);
  stepper1.moveTo(2048);           // definição do número de passos _ 1 volta= 2048 passos

  // Inicia a serial
  Serial.begin(9600);
  pinMode(sensor, INPUT); //Configura o pino 7 como entrada
  
  // Inicia  SPI bus
  SPI.begin();
  // Inicia MFRC522
  mfrc522.PCD_Init(); 
  // Mensagens iniciais no serial monitor
  Serial.println("Aproxime o seu cartao do leitor...");
  Serial.println();
  }//--(end setup )---

void loop() {
  
// Aguarda a aproximacao do cartao
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Seleciona um dos cartoes
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  // Mostra UID na serial
  Serial.print("UID da tag :");
  String conteudo= "";
  byte letra;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte, HEX);
     conteudo.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : " "));
     conteudo.concat(String(mfrc522.uid.uidByte, HEX));
  }
  Serial.println();
  Serial.print("Mensagem : ");
  conteudo.toUpperCase();
  
  // Testa se o cartao1 foi lido
  if (conteudo.substring(1) == "9B 66 84 59"){
  //Muda a direção quando o stepper atinge a posição de destino
  stepper1.runToNewPosition(-2048);           // rotação sentido anti-horário

   Serial.println("Cartao1 - Acesso liberado !");
   Serial.println();
   delay(1000);
   {
    stepper1.runToNewPosition(2048);          // rotação sentido horário
    delay(2000);
    } 
 
   }
   

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

porquê-como-quando-onde está o sensor no seu programa? Não vejo no loop. Se não souberes nem isso, acho que precisas um pouco + de ajuda.

Uma alternativa seria por interrupção. Algum arduineiro pode te orientar como proceder. Ajudaria ele também se publicasses o esquema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Isadora, obrigado pelo pronto atendimento...não a pus porque não sei programa-lá...

você teria como me indicar um orientador para que eu possa desenvolver esse projeto?

obrigado pela sua atenção.

 

eu tenho esta seguinte citação no void loop...

void loop() {

estado_sensor = digitalRead(pino_sensor);
if (estado_sensor == 0)

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 horas atrás, Helio Takeo Aisawa disse:

não a pus porque não sei programa-lá...

suspeitei desde o princípio...

 

Baseando só nisso...

Em 22/01/2018 às 11:03, Helio Takeo Aisawa disse:

sensor infravermelho que bloqueará o motor quando o veículo estiver passando pelo portão...

e nisso...

16 horas atrás, Helio Takeo Aisawa disse:

estado_sensor = digitalRead(pino_sensor);
if (estado_sensor == 0)

..., penso que deves colocar o funcionamento do sistema baseado na condição do sensor. Algo como

if (estado_sensor == 0)
{
faz_o_que_tem_que_fazer();
}
else
{
para_motor();//ou
motor_home();//ou
standby();//ou 
algo_do_gênero();
}

Se achar que ctrl-c ctrl-v vai funcionar, receba um tradicional cascudo virtual e sério, precisa de + ajudas do que acha que precisas

Registre-se: não programo arduínos. Alguém do ramo pode te ajudar melhor

abç

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, eu fiz da seguinte forma, coloquei um relé para desligar o motor...

realmente desta forma o sensor funciona ao detectar o objeto, em seguida o relé desliga o motor e quando o sensor não capta mais o objeto, o relé não volta a funcionar...

está correto a linha de raciocinio?

segue a linha de programação, obrigado pela atenção:

 

  // Testa se o cartao1 foi lido
  if (conteudo.substring(1) == "9B 66 84 59"){
  //Muda a direção quando o stepper atinge a posição de destino
  stepper1.runToNewPosition(-2048);           // rotação sentido anti-horário

   Serial.println("Cartao1 - Acesso liberado !");
   Serial.println();
   delay(100);
   {
   estado_sensor = digitalRead(pino_sensor);
   if (estado_sensor == 0)
   {//Desligar Motor
   digitalWrite(pin1, LOW);
   // Envia mensagem para o Serial Monitor
   Serial.println("Movimento detectado!");
   delay(1000);}
   else   {
   // Ligar Motor
   digitalWrite(pin1, HIGH);
   }  
   stepper1.runToNewPosition(2048);          // rotação sentido horário
   delay(2000);
    } 
    }
   else {  
    Serial.println(" Accesso negado...!");
    delay(1000);
  } 
   stepper1.run();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo motor de passo pra parar basta você parar de dar pulsos de passo pra ele. Nem precisa relé. Estou vendo stepper1.run. Por acaso existe algum stepper1.stop?

Mas o relé pode ter seu lugar sim. P.ex. na alimentação do driver do stepmotor

 

Tente fazer um fluxograma que contemple todas as condições do seu sistema. Ou até mesmo algo mais simples como um pseudo código algo como

inicia()

loop

verifica_cartão()

verfica_se_tem_carro_atraves_do_sensor()

volta_ao loop

Descrevi bem simples mesmo pois o sistema de estar na sua cabeça ok?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×