Olá,
Estou desenvolvendo uma maquete de uma garagem automatizada que utiliza um servo motor para levantar e baixar o portão; um RFID passivo para abrir/fechar o portao pelo lado de fora e um sensor ultrassônico para abrir/fechar pelo lado de dentro da garagem. Ela funciona da seguinte forma:
- Um sensor RFID está posicionado na frente do portão embaixo da calçada. Quando o carro com a tag correta passar por cima, o servo é acionado e a garagem se abre.
- Um sensor ultrassônico está posicionado na parede final para que quando a distancia for menor que 5cm, o portao se feche.
- Quando o carro começar a dar ré e a distancia for maior que 5cm da parede, o portão se abrirá novamente.
- Ao passar novamente por cima do RFID, o portão irá se fechar.
Essa maquete tem o intuito de desenvolver uma garagem totalmente automatizada sem o uso de controles eletrônicos. Porém estou um pouco perdido em relação a programação que precisa ser feita para o sistema funcionar corretamente. O servomotor está funcionando com uma fonte externa de energia para nao sobrecarregar o Arduino. Ja realizei diversos testes com varias programações e nao obtive sucesso. A seguir está a minha ultima tentativa:
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <Ultrasonic.h>
Servo microservo9g;
//Define os pinos do Arduino ligados ao Trigger e Echo
#define PINO_TRG 7
#define PINO_ECHO 6
// Definindo pinagem RFID
#define SS_PIN 10
#define RST_PIN 9
//Inicializa o RFID nos pinos especificados
MFRC522 mfrc522(SS_PIN, RST_PIN);
//Inicializa o sensor ultrasonico nos pinos especificados
Ultrasonic ultrasonic(PINO_TRG, PINO_ECHO);
char st[20];
void setup()
{
// Define que o servo esta ligado a porta digital 3
microservo9g.attach(3);
// Move o servo para a posicao inicial (garagem fechada)
microservo9g.write(90);
// Inicia a serial
Serial.begin(9600);
// 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();
Serial.println("Lendo dados do sensor...");
Serial.println();
}
void loop()
{
// Aguarda a aproximacao da tag
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Seleciona a tag
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 carro foi reconhecido
if (conteudo.substring(1) == "D2 E4 37 D9")
{
// Abre a garagem
microservo9g.write(-90);
Serial.println("Portao Aberto !");
Serial.println();
}
//Le as informações do sensor, em cm
float cmMsec;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
Serial.print("Distancia em cm: ");
Serial.print(cmMsec);
delay (1000);
if (cmMsec < 5)
{
microservo9g.write(90);
Serial.println("Garagem Fechada !");
Serial.println();
}
if (cmMsec > 5)
{
microservo9g.write(-90);
Serial.println("Garagem Aberta !");
Serial.println();
}
if (cmMsec > 5 && conteudo.substring(1) == "D2 E4 37 D9")
{
microservo9g.write(90);
Serial.println("Garagem Fechada !");
Serial.println();
}
}
Quem tiver alguma sugestão para realizar esta programação, estou aceitando sugestões.
Desde já, obrigado.