Sistema Automático de Controle de Portão Ferroviário - Circuito e Código Fonte
Circuito controlador de portão ferroviário automático de alta velocidade usando Arduino e sensores ultrassônicos
Neste tutorial, aprenderemos como projetar um sistema de controle automático de portão ferroviário de alta velocidade simples e eficiente. Esta é uma abordagem relativamente simples para este projeto, mas você pode tomar isso como um bloco de construção básico e, em modificações posteriores, também podemos rastrear a velocidade do trem com o qual ele passa e muito mais. Mas antes de ir direto para o tutorial, precisamos ter uma ideia sobre o que é automação e o que exatamente se pode esperar dela.
Automação basicamente significa criar um método para reduzir ou eliminar os esforços/intervenções humanas. Neste tutorial vamos explicar como automatizar um portão ferroviário com Arduino usando servo motor junto com o software Proteus.
A complexidade da automação pode variar de um controle básico “ligar/desligar” a algoritmos multivariáveis altamente complexos. Os sistemas de controle para fins de automação podem ser em malha aberta ou em malha fechada, o que significa que podem funcionar com um único parâmetro de entrada ou em resposta à saída alimentada como entrada, como no caso de sistemas de malha fechada. A automação na indústria ferroviária é uma necessidade importante, pois estamos entrando na era avançada e, para reduzir o risco de acidentes devido a erros induzidos por humanos, é muito importante deixarmos essas tarefas serem tratadas por essas máquinas inteligentes.
- Post relacionado:Circuito do detector de velocidade do carro – Funcionamento e código-fonte
Como no caso de toda tecnologia, a automação também tem seus prós e contras:
Prós
- Aumento da produtividade
- Qualidade previsível (melhoria da qualidade)
- Robustez aumentada
- Grande consistência de saída
- Redução nas despesas com mão de obra humana
- Altamente preciso
- Reduz os esforços humanos em trabalhos monótonos
Contras
- Suscetível a ameaças de segurança
- O custo de desenvolvimento pode exceder a previsão
- Alto custo de configuração
- Causa do desemprego em muitos setores
Os prós mencionados superam em muito os contras e é por isso que o mundo inteiro está entrando na era da automação.
Neste tutorial estamos tentando automatizar um portão ferroviário para abrir e fechar sempre que o circuito detectar um trem ao longo da via e também iniciaremos uma campainha ou um alarme representando a velocidade do trem é superior a um determinado limite e, para conseguir isso, vamos usar os dois componentes eletrônicos amplamente utilizados, ou seja, Arduino e servo motor.
O sensor que vamos usar neste tutorial é o sensor ultrassônico mas não é obrigatório usar este sensor também podemos fazer uma versão diferente deste projeto usando o sensor IR módulo e depende de nossa escolha, o que queremos usar e o que está prontamente disponível para nós.
- Post relacionado:Sistema de automação residencial inteligente – Circuito e código-fonte
Componentes necessários para o controlador de portão ferroviário
- Arduino UNO
- Sinalizador
- Sensor ultrassônico (HC-SR04)
- Servomotor
Software necessário:
- Arduíno IDE
- Proteu
Diagrama de circuito do controlador de portão ferroviário
Descrição do componente
Arduino UNO
Arduino é basicamente uma placa de desenvolvimento que é de código aberto e utiliza principalmente o microcontrolador Microchip ATmega328P e é fabricada pela Arduino.cc. A placa vem com um conjunto de pinos de entrada/saída compostos de digitais e analógicos que podem ser conectados a diferentes placas de expansão e circuitos externos.
A placa vem com 14 pinos digitais junto com 6 pinos analógicos que são utilizados ou programáveis com a ajuda de um IDE (Ambiente de Desenvolvimento Integrado) que vem junto que é o Arduino IDE. O programado é gravado através de um cabo USB tipo B. Os métodos de energização da placa podem ser pelo cabo USB ou conectando uma fonte de 9 volts dc. A faixa de tensão aceitável varia de 7 a 20 volts. Pelo ponto de vista de design e funcionamento, não é muito diferente de seus outros membros da família, como o Arduino Nano e o Arduino Leonardo.
STK500 ainda é o protocolo original para comunicação do Uno. A principal diferença de seus antecessores é que ele não faz uso do chip de driver FTDI USB-to-serial. Pelo contrário, usa ATmega 16U2 (Atmega8U2 até a versão R2) que é programado como conversor USB-serial.
- Post relacionado:Fonte de alimentação variável usando Arduino UNO – Circuito e código
Sensor ultrassônico (HC-SR04)
O sensor ultrassônico é o sensor básico que usamos para determinar a distância de um objeto. De outra forma, podemos dizer que é usado para medir a distância que o objeto está localizado de um determinado ponto de referência. Possui basicamente 4 pinos;
- Pino de gatilho
- Alfinete de eco
- Pino GND
- Pino VCC (+5V)
Como funciona o ultrassom? O transmissor (trig) envia um sinal sonoro de alta frequência que é então refletido pelo objeto e então o sinal refletido é então recebido no receptor (eco). Portanto, a velocidade do som no ar é conhecida por nós, podemos calcular a distância. Este sensor é extremamente popular entre os criadores de Arduino que o usam em seus projetos diariamente e para acionar esse sensor precisamos de um pulso alto de 10 microssegundos ou mais.
Recursos do sensor ultrassônico:-
- Fonte de alimentação:+5V DC
- Corrente de repouso:<2mA
- Corrente de trabalho:15mA
- Ângulo efetivo:<15°
- Distância de alcance:2 cm – 400 cm/1″ – 13 pés
- Resolução:0,3 cm
- Ângulo de medição:30 graus
- Largura do pulso de entrada do acionador:10uS
- Dimensões:45 mm x 20 mm x 15 mm
Post Relacionado:Sistema Automático de Rega e Irrigação da Planta – Circuito, Código e Relatório do Projeto
Servomotor
Estes são um tipo especial de motores que são empregados para movimentos muito específicos em um determinado ângulo. É um atuador rotativo ou linear que permite um controle preciso em determinadas posições angulares ou lineares. O servomotor não é uma entidade única, mas uma combinação de um motor adequado junto com um sensor que fornece o feedback da posição atual do motor.
Para usar este servo motor, vários outros módulos avançados devem ser usados, pois não é semelhante em termos de facilidade de uso do motor CC. Esses motores são usados basicamente na robótica e nas indústrias de manufatura em larga escala.
Esses motores têm um pouco de semelhança com os motores de passo que representam o controle de malha aberta. Os motores de passo têm etapas embutidas nas quais giram, mas com a falta de um sistema de feedback, seu uso é limitado a uma aplicação específica para a qual foram projetados e fabricados.
Essa falta de feedback é o que diferencia um servo motor desses motores de passo e dá a eles uma vantagem, pois são dinâmicos e podem ser personalizados de acordo com a tarefa em mãos com um pouca alteração na programação. Um módulo controlador dedicado geralmente é fornecido com o servomotor pelo fabricante.
Mecanismo – É basicamente um servomecanismo de malha fechada que utiliza o sistema de feedback para atualizar o movimento e a posição final do rotor. A entrada para o controle do motor pode ser analógica ou digital.
- Post relacionado: Medição de distância usando Arduino e sensor ultrassônico
Um codificador de algum tipo é emparelhado com o motor para fornecer o feedback de posição e velocidade ao controle, o que gera um sinal de erro até que a saída desejada não seja alcançada. E para reduzir este sinal de erro, o motor pode se mover em qualquer direção para finalmente reduzir o sinal de erro a zero. Quando esta condição é alcançada, a saída desejada é alcançada. Os servomotores aprimorados e sofisticados possuem um codificador óptico rotativo no eixo de saída para medir sua velocidade.
Sinalizador
A campainha pode ser de natureza mecânica, eletrônica, eletromecânica e piezoelétrica. Geralmente utilizamos o eletrônico em fornos, game shows e eletrodomésticos etc. Esses buzzers possuem circuito interno. O som produzido é devido ao movimento de um disco. O disco é ferromagnético por natureza. É um dispositivo acionado por corrente que tem uma fonte de tensão como entrada para ele.
Trabalho do Controlador Automático de Portão Ferroviário
Neste circuito usamos sensores ultrassônicos e servomotores para replicar o funcionamento de uma travessia ferroviária. Ambos os sensores são acionados com a ajuda de pinos de gatilho conectados à placa Arduino e a distância é calculada. O funcionamento adicional do circuito depende completamente da distância medida.
Se a pista estiver livre, os servomotores não farão nada, mas se um trem chegar em ambos os lados da pista, a distância medida por um dos sensores variará da distância anterior. Desta forma, seremos informados sobre a chegada do trem e em pouco tempo, o Arduino colocará seus pinos digitais 7 e 8 em HIGH.
Esses pinos são conectados com os dois servomotores e então o servo cobrirá uma distância angular de 90
o
e, portanto, o portão será fechado para bloquear o caminho para os veículos. Quando o trem se afastar do outro sensor, o Arduino será notificado sobre a partida do trem e os servomotores voltarão a atingir sua posição anterior para abrir o portão.
Pensando na segurança das pessoas, adicionamos mais um recurso a este circuito e trata-se de alertá-los no caso de um trem de alta velocidade. Isto é conseguido calculando o tempo entre as transições de dois sensores em um ciclo. Se o tempo for inferior a um determinado valor, a campainha emitirá um som de zumbido para alertar as pessoas nas proximidades do cruzamento.
- Post relacionado:Sistema de irrigação inteligente - diagrama de circuito e código
Código-fonte e explicação do projeto
Neste esboço, definimos cinco variáveis do tipo inteiro e quatro do tipo longo. As variáveis tr1, tr2, eh1 e eh2 são usadas para enviar pulso e receber valor de tempo em microssegundos enquanto as variáveis val1, val2, dis1 e dis2 são usadas para armazenar valores de tempo em microssegundos e distância em cm. A taxa de transmissão é definida em 9600 bits/s e é responsável pela comunicação entre a placa e o monitor serial.
const int tr1 = 13, eh1 = 12, tr2 = 3, eh2 = 2;;
int bz = 11;
unsigned long val1, dis1, val2, dis2;
#include
Servo myservo1;
Servo myservo2;
int pos=-1;
As funções incluídas na configuração void() serão executadas apenas uma vez durante a execução e sua tarefa é definir a taxa de transmissão e o modo do pino como entrada ou saída.
void setup() {
// put your setup code here, to run once:
pinMode(tr1, OUTPUT);
pinMode(tr2, OUTPUT);
pinMode(bz, OUTPUT);
pinMode(eh1, INPUT);
pinMode(eh2, INPUT);
myservo1.attach(8);
myservo2.attach(7);
Serial.begin(9600);
}
De acordo com o funcionamento necessário, medimos continuamente a distância acionando o sensor ultrassônico e a distância calculada é definida como o parâmetro da declaração condicional. Se a condição for verdadeira, a variável “pos” incrementa seu valor para acionar os servomotores e quando a condição for considerada incorreta, a variável “pos” diminui seu valor para trazer os servomotores de volta à sua posição anterior.
Há mais uma declaração condicional que verifica se dois sensores estão detectando o objeto rapidamente, então ele definirá o pino 11 alto para alimentar a campainha para alertar as pessoas. Todos esses processos são englobados em void loop() e são repetidos até que o Arduino seja resetado ou o fornecimento seja interrompido.
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(tr1, LOW);
delayMicroseconds(2);
digitalWrite(tr1, HIGH);
delayMicroseconds(10);
digitalWrite(tr1, LOW);
val1 = pulseIn(eh1, HIGH);
dis1 = (val1 * 0.0343) / 2;
digitalWrite(tr2, LOW);
delayMicroseconds(2);
digitalWrite(tr2, HIGH);
delayMicroseconds(10);
digitalWrite(tr2, LOW);
val2 = pulseIn(eh2, HIGH);
dis2 = (val2 * 0.0343) / 2;
Serial.println("distance is ");
Serial.println(dis1);
Serial.println(dis2);
if(dis1 < 100 || dis2 < 100)
{
if(pos==-1){
for (pos = 0; pos <= 90; pos += 1) {
myservo1.write(pos);
myservo2.write(pos);
delay(15);}
}
delay(1000);
digitalWrite(tr1, LOW);
delayMicroseconds(2);
digitalWrite(tr1, HIGH);
delayMicroseconds(10);
digitalWrite(tr1, LOW);
val1 = pulseIn(eh1, HIGH);
dis1 = (val1 * 0.0343) / 2;
digitalWrite(tr2, LOW);
delayMicroseconds(2);
digitalWrite(tr2, HIGH);
delayMicroseconds(10);
digitalWrite(tr2, LOW);
val2 = pulseIn(eh2, HIGH);
dis2 = (val2 * 0.0343) / 2;
if(dis1 < 100 || dis2 < 100) {digitalWrite(bz, HIGH); Serial.println("distance2 is "); Serial.println(dis1); Serial.println(dis2);} } else if(dis1 >= 100 && dis2 >= 100)
{ if(pos==91){
for (pos = 90; pos >= 0; pos -= 1) {
myservo1.write(pos);
myservo2.write(pos);
delay(15);
}
}
digitalWrite(bz, LOW);
delay(200);
}
}
Interface do arquivo Hex com o Proteus para simulação: Na IDE do seu Arduino clique em File>Preferences e depois em “Show verbose output” verifique as opções de compilação e upload. E, ao compilar o código na janela abaixo selecione e copie o local do arquivo hexadecimal e no Proteus dê um duplo clique no Arduino e cole o local do arquivo na opção Arquivo de programa e clique em OK. Agora seu circuito estará pronto para simulação no Proteus.
Projetos relacionados:
- Campainha automática com detecção de objetos por Arduino
- Lâmpada noturna automática usando Arduino
- Programação PWM do Arduino e suas funções no Arduino
- Arduino Serial:Comunicação Serial por Arduino
- Lista de ideias de projetos para o último ano de eletrônica
- Idéias de projetos de engenharia eletrônica para estudantes de engenharia
- Idéias de miniprojetos eletrônicos simples e básicos para iniciantes
Tecnologia industrial
- Porta NOR Trava S-R
- Falhas prováveis em sistemas comprovados
- TTL NOR e portas OR
- Circuitos de controle do motor
- Circuito do sistema de abertura automática de porta detectado por movimento e funcionamento
- Sistema de Controle M-TECH CNC
- Controle Automático de Trem
- Sistema de alarme Arduino:SERENA
- Arduino Control Center
- Monitoramento em nuvem, um sistema de controle remoto