Taula de continguts:

Sistema de tren intel·ligent: 4 passos
Sistema de tren intel·ligent: 4 passos

Vídeo: Sistema de tren intel·ligent: 4 passos

Vídeo: Sistema de tren intel·ligent: 4 passos
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Desembre
Anonim
Sistema de tren intel·ligent
Sistema de tren intel·ligent

Dissenyat per augmentar la seguretat, prevenir accidents i augmentar la resposta positiva i productiva per ajudar si es produeixen accidents.

Pas 1: peces i materials

Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials
Peces i materials

Les imatges anteriors es col·loquen en l'ordre de la llista de parts següent:

Llista de peces

1) One Raspberry PI 3 - Model B.

2) Un tauler de pa

3) Cables (de dalt a baix): una alimentació, un Ethernet, un adaptador

4) Un servomotor

5) Una porta de ferrocarril impresa en 3D

6) Dos LED (preferiblement vermell i verd)

7) Un polsador

8) Deu cables de pont

9) Quatre resistències

10) Ordinador portàtil o escriptori amb MATLAB

Pas 2: Configuració

Configuració
Configuració
Configuració
Configuració
Configuració
Configuració
Configuració
Configuració

A la part superior es mostren imatges de la configuració des de diversos angles:

A continuació es mostren les ubicacions dels pins (lletra minúscula seguida d’un número de fila) seguint el flux actual.

Filferros:

j19 a i47

j8 a b50

b5 a Servo

c6 a Servo

b7 a servo

a13 a j7

a17 a LED

LED a a37

e40 a j20

j53 a j18

j7 a LED

LED a j6

Botó:

e54 a h51

Resistències:

d40 a b37

c50 a d54

i51 a j47

Pas 3: Codi i lògica

Codi i lògica
Codi i lògica

L’objectiu del nostre sistema de trens és augmentar la seguretat i reduir el risc d’accidents potencialment mortals als passos de ferrocarril. Per aconseguir-ho, el nostre sistema té un sistema d’alerta de trens per als conductors, una barrera física que es baixa per evitar que els cotxes creuin la via i un botó d’emergència de seguretat perquè el conductor pugui prémer si el sistema d’alerta primerenca falla.

Sistema operatiu del conductor GUI:

La interfície gràfica d’usuari, que es mostra més amunt, es va crear per a l’ús del conductor ja que condueix el tren a través de zones de vies que tenen passos de ferrocarril amb trànsit de cotxes.

A la cantonada superior dreta, hi ha un llum que avisa el conductor si una porta de pas de ferrocarril està tancada i permet al conductor obrir o tancar la porta si és necessari. A sota d'això, es mostra l'alimentació de les càmeres per les quals passa el tren. A l'extrem inferior esquerre, la ubicació del tren es dibuixa contínuament en un gràfic i, a sota del gràfic, s'indica el nombre de voltes que el tren havia completat en un dia. A sobre del gràfic de posició, hi ha un botó d'emergència i una declaració d'estat. Això permet al conductor indicar una emergència si hi ha un cotxe a la via o la porta de seguretat no funciona correctament.

Codi:

classdef micro <matlab.apps. AppBase% Propietats que corresponen als components de l'aplicació

propietats (Accés = públic)

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

SubnormalconditionsLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Etiqueta matlab.ui.control. Label

final

propietats (Accés = privat)

comptador int16

final

mètodes (Accés = públic)

funció temporitzador Callback (aplicació, src, esdeveniment)

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

app.counter = app.counter + 1;

% crida a totes les variables que necessita el programa - - - - - - - - - - - - - -

rpi global

global s

obert global

tancament global

càmera global

global m

ems global

t_count global

% ------------------------- Secció del braç del tren --------------------- ---------

si està obert == 0

writePosition (s, 50)

app.gateLamp. Color = 'verd';

final

si és a prop == 0

writePosition (s, 120)

app.gateLamp. Color = 'vermell';

final

% ---------------------- Detecció de moviment mitjançant càmera -----------------------

tot i que és cert

img = instantània (càmera);

imatge (img);

app. UIAxes (dibuixat)

final

% ---------------------- Braç obert / tancat ----------------------- --------------

si readDigitalPin (rpi, 20)> 1% llegeix el pin 17 (botó) i comprova si hi ha senyal

per a i = 40:.5: 150% augmenta el pont

writePosition (s, i)

final

per a i = 1:10% bucles parpellejant llum vermella x quantitat de vegades

writeDigitalPin (rpi, 13, 1)

pausa (.5)

writeDigitalPin (rpi, 13, 0)

pausa (.5)

final

writePosition (s, 50)% posa la porta a sota

final

% -------------------- Assistència / trama del telèfon mòbil ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

dades = zeros (200, 1); % d'intialitzar les dades per a la parcel·la rodant

figura (app. UIAxes2)

p = trama (dades)

eix ([xbounda, ybounds])

pausa (1)

tic

mentre que el toc <30% s’executa durant 30 segons

[a, ~] = accellog (m);

si longitud (a)> 200

dades = a (final-199: final, 3);

en cas contrari

dades (1: longitud (a)) = a (:, 3);

final

% redibuixa la trama

p. YData = dades;

dibuix

final

% ------------------ Canvi sobtat de píxel ---------------------------- ------

x1 = img; % llegeix la càmera fora del pi

vermell_mig = mitjana (mitjana (x1 (:,:, 1)))); % llegeix la quantitat mitjana de píxels vermells

green_mean = mitjana (mitjana (x1 (:,:, 2))); % llegeix la quantitat mitjana de píxels verds

blue_mean = mitjana (mitjana (x1 (:,:, 3)))); % llegeix la quantitat mitjana de píxels blaus

si vermell_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

final

app. LoopsCompletedLabel. Text = num2str (t_count)

% ------------------ Botó Programació EMS ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); % defineix el pin led, el pin 16, com a sortida

configurePin (rpi, 16, 'DigitalInput'); % estableix el pin del botó, pin 24, com a entrada

buttonPressed = readDigitalPin (rpi, 16); % Llegeix el valor de premut botó al pin 16

si es prem el botó == 1

mentre es prem el botó == 1

writeDigitalPin (rpi, 12, 1)

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

final% Acaba el bucle 'while buttonPressed == 1'

final

writeDigitalPin (rpi, 16, 0)% Estableix el led desactivat quan ja no es prem el botó setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % compte de correu per enviar des de setpref ('Internet', 'SMTP_Username', '[email protected]'); % senders username setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Contrasenya dels remitents

atrezzo = 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] ',' Estat d'emergència! ',' El conductor ha activat l'interruptor de substitució manual, sol·licitant una resposta immediata! ')

app. UndernormalconditionsLabel. Text = ems

final

final

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

mètodes (Accés = privat)

% Codi que s'executa després de la creació del component

funció startupFcn (aplicació)

% ---------- Totes les variables necessàries per a aquesta funció --------------------

global rpi% arduino

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

global s% servo

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

obert global

obert = 1;

global tancat

tancat = 1;

càmera global

cam = cameraboard (rpi);

global m

m = mobiledev;

ems global

ems = 'S'ha informat d'una emergència, notificant-ho a EMS';

t_count global

t_count = 0;

el connector de% password és EFGroup6

% Funció de temporitzador per a bucle --------------------------------

app.counter = 0;

t = temporitzador (…

"TimerFcn", @ app.timerCallback, …

"StartDelay", 1, … "Període", 1, …

"ExecutionMode", "fixedSpacing", …

'TasksToExecute', inf);

inici (t);

final

Funció de devolució de trucada

funció ManualOverrideSwitchValueChanged (aplicació, esdeveniment)

final

% Funció de botó: OpenGateButton

funció OpenGateButtonPush (aplicació, esdeveniment)

tancament global

tancar = 0;

final

Funció de botó%: CloseGateButton

funció CloseGateButtonPush (aplicació, esdeveniment)

obert global

obert = 0;

final

final

% Inicialització i construcció d'aplicacions

mètodes (Accés = privat)

% Creeu UIFigure i components

funció createComponents (aplicació)

% Crea UIFigure

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'Figura UI';

% Crea RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'dreta'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Estat de la porta de ferrocarril';

% Crea gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

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

% Crea OpenGateButton

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

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

app. OpenGateButton. Text = 'Porta oberta';

% Crea CloseGateButton

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

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

app. CloseGateButton. Text = 'Tanca la porta';

% Creeu UIAxes

app. UIAxes = uiaxes (app. UIFigure);

title (app. UIAxes, "Feed de càmera")

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

% Crea EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'dreta'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Estat del botó d'emergència';

% Crea EmergencyButtonStatusLamp

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

% Crea UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'En condicions normals';

% Creeu UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

title (app. UIAxes2, 'Posició del tren')

xlabel (app. UIAxes2, 'Posició X')

ylabel (app. UIAxes2, 'Posició Y')

app. UIAxes2. Box = 'activat';

app. UIAxes2. XGrid = 'activat';

app. UIAxes2. YGrid = 'activat';

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

% Crea EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'centre';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'negreta';

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

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

% Crea IanAllishKellyBondIanDaffronLabel

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

% Crea LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Bucles completats:';

% Crea una etiqueta

app. Label = uilabel (app. UIFigure);

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

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

final

final

mètodes (Accés = públic)

% Construeix l'aplicació

funció app = micro

% Creeu i configureu components

createComponents (aplicació)

% Registreu l'aplicació amb App Designer

registerApp (app, app. UIFigure)

% Executeu la funció d'inici

runStartupFcn (aplicació, @startupFcn)

si nargout == 0

aplicació clara

final

final

% Codi que s'executa abans de suprimir l'aplicació

suprimir (aplicació)

% Suprimeix UIFigureu quan se suprimeixi l'aplicació

esborrar (app. UIFigure)

final

final

final

Pas 4: pas final

Pas final
Pas final

Un cop escrit el codi i connectat el Raspberry Pi, connecteu el servomotor a la porta de la via del ferrocarril impresa en 3D tal com s’adjunta a la imatge superior.

Ara, el projecte ha finalitzat. Connecteu el raspberry PI a la via del tren i observeu el nou sistema creant passos de ferrocarril més segurs tant per als conductors com per als conductors. Juga amb el sistema interactuant amb la interfície gràfica d’usuari per activar caixes fortes establertes per evitar accidents.

Aquest és el final del tutorial, gaudiu del vostre nou sistema de trens intel·ligents.

Recomanat: