Índice:

Sistema de trem inteligente: 4 etapas
Sistema de trem inteligente: 4 etapas

Vídeo: Sistema de trem inteligente: 4 etapas

Vídeo: Sistema de trem inteligente: 4 etapas
Vídeo: China: nueva línea de tren eléctrico marca nueva etapa de trenes inteligentes ligeros 2024, Julho
Anonim
Sistema de trem inteligente
Sistema de trem inteligente

Projetado para aumentar a segurança, prevenir acidentes e aumentar a resposta positiva e produtiva para ajudar na ocorrência de acidentes.

Etapa 1: peças e materiais

Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais

As imagens acima são colocadas na ordem da Lista de Peças abaixo:

Lista de Peças

1) Uma framboesa PI 3 - Modelo B

2) Uma placa de ensaio

3) Cabos (de cima para baixo) - Uma alimentação, uma Ethernet, um adaptador

4) Um servo motor

5) Um portão de ferrovia impresso em 3D

6) Dois LEDs (de preferência vermelho e verde)

7) Um botão de pressão

8) Dez fios de ligação

9) Quatro resistores

10) Laptop ou Desktop com MATLAB

Etapa 2: Configuração

Configuração
Configuração
Configuração
Configuração
Configuração
Configuração
Configuração
Configuração

Acima estão as fotos da configuração de vários ângulos:

Os locais dos pinos (letra minúscula seguida por um número de linha) estão listados abaixo em ordem de acordo com o fluxo atual.

Fios:

j19 a i47

J8 a B50

b5 para servo

c6 para servo

b7 para servo

a13 a j7

a17 para LED

LED para a37

e40 a j20

j53 a j18

j7 para LED

LED para j6

Botão:

e54 a h51

Resistores:

d40 a b37

c50 a d54

i51 a j47

Etapa 3: Código e lógica

Código e lógica
Código e lógica

O objetivo de nosso sistema de trem é aumentar a segurança e diminuir o risco de acidentes potencialmente fatais em cruzamentos de ferrovias. Para isso, nosso sistema possui um sistema de alerta de trens para os motoristas, uma barreira física que é baixada para evitar que os carros cruzem a pista e um botão de emergência de backup para o condutor apertar se o sistema de alerta precoce falhar.

Sistema operacional do condutor GUI:

A GUI, mostrada acima, foi criada para o uso do condutor enquanto ele dirige o trem por áreas de trilhos que têm cruzamentos de ferrovias para tráfego de automóveis.

No canto superior direito, há uma luz que notifica o condutor se um próximo portão de cruzamento da ferrovia está fechado e permite que o condutor abra ou feche o portão, se necessário. Abaixo disso, é mostrado o feed das câmeras pelas quais o trem passa. No canto inferior esquerdo, a localização do trem é continuamente traçada em um gráfico e abaixo do gráfico, o número de voltas que o trem completou em um dia é indicado. Acima do gráfico de posição, há um botão de emergência e uma declaração de status. Isso permite que o condutor sinalize para uma emergência se houver um carro na pista ou se o portão de segurança não estiver funcionando corretamente.

Código:

classdef micro <matlab.apps. AppBase% Propriedades que correspondem aos componentes do aplicativo

propriedades (acesso = público)

UIFigure matlab.ui. Figure

RailwaygatestatusLampLabel matlab.ui.control. Label

gateLamp matlab.ui.control. Lamp

OpenGateButton matlab.ui.control. Button

CloseGateButton matlab.ui.control. Button

UIAxes matlab.ui.control. UIAxes

EmergencyButtonStatusLampLabel matlab.ui.control. Label

EmergencyButtonStatusLamp matlab.ui.control. Lamp

UndernormalconditionsLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Label matlab.ui.control. Label

fim

propriedades (acesso = privado)

contador int16

fim

métodos (acesso = público)

função timerCallback (app, src, evento)

app. Temp. Text = int2str (app.counter);

app.counter = app.counter + 1;

% chama todas as variáveis de que o programa precisa - - - - - - - - - - - - -

rpi global

global s

aberto global

fechamento global

câmera global

m global

ems globais

t_count global

% ------------------------- Seção do braço do trem --------------------- ---------

se aberto == 0

WritePosition (s, 50)

app.gateLamp. Color = 'green';

fim

se fechar == 0

WritePosition (s, 120)

app.gateLamp. Color = 'red';

fim

% ---------------------- Detecção de movimento via câmera -----------------------

enquanto verdadeiro

img = instantâneo (cam);

imagem (img);

app. UIAxes (drawnow)

fim

% ---------------------- Armar abrir / fechar ----------------------- --------------

se readDigitalPin (rpi, 20)> 1% lê o pino 17 (botão) e verifica o sinal

para i = 40: 0,5: 150% aumenta a ponte

WritePosition (s, i)

fim

para i = 1:10% loops piscando luz vermelha x quantidade de vezes

writeDigitalPin (rpi, 13, 1)

pausa (.5)

writeDigitalPin (rpi, 13, 0)

pausa (.5)

fim

writePosition (s, 50)% colocou a porta para baixo

fim

% -------------------- Suporte / plotagem por telefone celular ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

dados = zeros (200, 1); % inicializar dados para gráfico rotativo

figura (app. UIAxes2)

p = plot (dados)

eixo ([xbounda, ybounds])

pausa (1)

tique

enquanto toc <30% executado por 30 segundos

[a, ~] = aceleração (m);

se comprimento (a)> 200

dados = a (fim-199: fim, 3);

outro

dados (1: comprimento (a)) = a (:, 3);

fim

% redesenhar o gráfico

p. YData = dados;

desenhar agora

fim

% ------------------ Mudança repentina de pixel ---------------------------- ------

x1 = img; % lê a câmera do pi

média_ vermelha = média (média (x1 (:,:, 1))); % lê a quantidade média de pixels vermelhos

média_verde = média (média (x1 (:,:, 2))); % lê a quantidade média de pixels verdes

média_ azul = média (média (x1 (:,:, 3))); % lê a quantidade média de pixels azuis

if red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

fim

app. LoopsCompletedLabel. Text = num2str (t_count)

% ------------------ Programação do botão EMS ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); % define o pino led, pino 16, como uma saída

configurePin (rpi, 16, 'DigitalInput'); % define o pino do botão, pino 24, como uma entrada

buttonPressed = readDigitalPin (rpi, 16); % Lê o valor de pressão do botão no pino 16

if buttonPressed == 1

enquanto o botão pressionado == 1

writeDigitalPin (rpi, 12, 1)

buttonunPressed = writeDigitalPin (rpi, 12, 0); %

fim% Termina ‘enquanto o botão pressionado == 1’ loop

fim

writeDigitalPin (rpi, 16, 0)% Desliga o led quando o botão não é mais pressionado setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % conta de e-mail para enviar de setpref ('Internet', 'SMTP_Usuário', '[email protected]'); % senders username setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Senha do remetente

props = java.lang. System.getProperties;

props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('[email protected] ',' Status de emergência! ',' O condutor ativou o interruptor de cancelamento manual, solicitando resposta imediata! ')

app. UndernormalconditionsLabel. Text = ems

fim

fim

% app. Label_4. Text = num2str (curr_temp);

métodos (acesso = privado)

% Código que é executado após a criação do componente

função startupFcn (app)

% ---------- Todas as variáveis necessárias para esta função --------------------

rpi% arduino global

rpi = raspi ('169.254.0.2', 'pi', 'framboesa');

global s% servo

s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2,5e-3);

aberto global

aberto = 1;

global fechado

fechado = 1;

câmera global

came = cameraboard (rpi);

m global

m = mobiledev;

ems globais

ems = 'Foi reportada uma emergência, notificando EMS';

t_count global

t_count = 0;

o conector em% senha é EFGroup6

% Função Timer para Loop --------------------------------

app.counter = 0;

t = temporizador (…

'TimerFcn', @ app.timerCallback,…

'StartDelay', 1, … 'Period', 1, …

'ExecutionMode', 'fixedSpacing', …

'TasksToExecute', inf);

start (t);

fim

% Função de retorno de chamada

função ManualOverrideSwitchValueChanged (app, evento)

fim

% Função pressionada de botão: OpenGateButton

função OpenGateButtonPushed (app, evento)

fechamento global

fechar = 0;

fim

% Função pressionada de botão: CloseGateButton

função CloseGateButtonPushed (app, evento)

aberto global

aberto = 0;

fim

fim

% Inicialização e construção do aplicativo

métodos (acesso = privado)

% Criar UIFigure e componentes

função createComponents (app)

% Criar UIFigure

app. UIFigure = uifigure;

app. UIFigure. Position = [100 100 640 480];

app. UIFigure. Name = 'Figura da interface do usuário';

% Create RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'direito'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Status do portão da ferrovia';

% Criar gateLamp

app.gateLamp = uilamp (app. UIFigure);

app.gateLamp. Position = [589 422 20 20];

app.gateLamp. Color = [0,9412 0,9412 0,9412];

% Criar OpenGateButton

app. OpenGateButton = uibutton (app. UIFigure, 'push');

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Open Gate';

% Criar CloseGateButton

app. CloseGateButton = uibutton (app. UIFigure, 'push');

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Fechar portão';

% Criar UIAxes

app. UIAxes = uiaxes (app. UIFigure);

título (app. UIAxes, 'Feed da câmera')

app. UIAxes. Position = [341 43 300 185];

% Criar EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'direito'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Status do botão de emergência';

% Criar EmergencyButtonStatusLamp

app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];

% Criar UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

app. UndernormalconditionsLabel. Position = [108 285 248 22];

app. UndernormalconditionsLabel. Text = 'Em condições normais';

% Criar UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

título (app. UIAxes2, 'Posição do trem')

xlabel (app. UIAxes2, 'Posição X')

ylabel (app. UIAxes2, 'Posição Y')

app. UIAxes2. Box = 'ligado';

app. UIAxes2. XGrid = 'ligado';

app. UIAxes2. YGrid = 'ligado';

app. UIAxes2. Position = [18 43 300 185];

% Criar EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'centro';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'negrito';

app. EF230Group6Label. Position = [-4 401 379 64];

app. EF230Group6Label. Text = 'EF 230 Grupo 6';

% Criar IanAllishKellyBondIanDaffronLabel

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';

% Criar LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

app. LoopsCompletedLabel. Position = [18 10 103 22];

app. LoopsCompletedLabel. Text = 'Loops concluídos:';

% Criar etiqueta

app. Label = uilabel (app. UIFigure);

app. Label. Position = [120 10 178 22];

app. Label. Text = '####';

fim

fim

métodos (acesso = público)

% Construir aplicativo

função app = micro

% Criar e configurar componentes

createComponents (app)

% Registre o aplicativo com o App Designer

registerApp (app, app. UIFigure)

% Execute a função de inicialização

runStartupFcn (app, @startupFcn)

se nargout == 0

aplicativo claro

fim

fim

% Código que é executado antes da exclusão do aplicativo

excluir (aplicativo)

% Excluir UIFigure quando o aplicativo for excluído

excluir (app. UIFigure)

fim

fim

fim

Etapa 4: Etapa final

Passo final
Passo final

Uma vez que o código foi escrito e o Raspberry Pi foi conectado, conecte o servo motor ao portão da ferrovia impresso em 3-D como está anexado na imagem acima.

Agora, o projeto está concluído. Conecte o raspberry PI aos trilhos do trem e observe o novo sistema, criando travessias de ferrovia mais seguras para motoristas e condutores de automóveis. Brinque com o sistema interagindo com a GUI para acionar cofres contra falhas instalados para evitar acidentes.

Fim do tutorial, aproveite seu novo sistema Smart Train!

Recomendado: