Indholdsfortegnelse:

Smart Train System: 4 trin
Smart Train System: 4 trin

Video: Smart Train System: 4 trin

Video: Smart Train System: 4 trin
Video: Factorio Designs and Tutorials - Smart Train System 2024, November
Anonim
Smart togsystem
Smart togsystem

Designet til at øge sikkerheden, forhindre ulykker og øge den positive og produktive reaktion for at hjælpe, hvis der sker uheld.

Trin 1: Dele og materialer

Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer
Dele og materialer

Billederne ovenfor er placeret i rækkefølgen på delelisten herunder:

Liste over dele

1) One Raspberry PI 3 - Model B

2) Et brødbræt

3) Kabler (fra top til bund) - En strøm, et Ethernet, en adapter

4) En servomotor

5) En 3D -printet jernbaneport

6) To lysdioder (helst rød og grøn)

7) En trykknap

8) Ti springtråde

9) Fire modstande

10) Bærbar eller stationær computer med MATLAB

Trin 2: Konfiguration

Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration

Ovenstående er billeder af konfigurationen fra flere vinkler:

Pinplaceringer (små bogstaver efterfulgt af et rækkenummer) er angivet nedenfor i rækkefølge efter det aktuelle flow.

Ledninger:

j19 til i47

j8 til b50

b5 til Servo

c6 til Servo

b7 til servo

a13 til j7

a17 til LED

LED til a37

e40 til j20

j53 til j18

j7 til LED

LED til j6

Knap:

e54 til h51

Modstande:

d40 til b37

c50 til d54

i51 til j47

Trin 3: Kode og logik

Kode og logik
Kode og logik

Vores togsystems mål er at øge sikkerheden og reducere risikoen for potentielt dødelige ulykker ved jernbaneoverskæringer. For at opnå dette har vores system et togadvarselssystem til chauffører, en fysisk barriere, der sænkes for at forhindre biler i at krydse banen, og en backup -nødknap, som konduktøren kan trykke på, hvis systemet til tidlig varsling fejler.

GUI Conductor Operativsystem:

GUI, vist ovenfor, blev oprettet til brug for konduktøren, da de kører toget gennem sporområder, der har biltrafik jernbanekrydsninger.

I øverste højre hjørne er der et lys, der giver konduktøren besked, hvis en kommende jernbaneovergangsport er lukket og giver konduktøren mulighed for at åbne eller lukke porten, hvis det er nødvendigt. Herunder vises foderet fra kameraer, toget passerer. I nederste venstre hjørne afbildes togets placering løbende på en graf og under grafen angives antallet af omgange, toget havde gennemført på en dag. Over positionsgrafen er der en nødknap og statuserklæring. Dette giver konduktøren mulighed for at signalere om en nødsituation, hvis der er en bil på banen, eller sikkerhedsporten ikke fungerer korrekt.

Kode:

classdef micro <matlab.apps. AppBase % Egenskaber, der svarer til appkomponenter

ejendomme (Adgang = offentlig)

UIFigure matlab.ui. Figur

RailwaygatestatusLampLabel matlab.ui.control. Label

gateLampe matlab.ui.kontrol. Lampe

OpenGateButton matlab.ui.control. Button

CloseGateButton matlab.ui.control. Button

UIAxes matlab.ui.control. UIAxes

EmergencyButtonStatusLampLabel matlab.ui.control. Label

EmergencyButtonStatusLampe matlab.ui.control. Lampe

Undernormale betingelserLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Mærke matlab.ui.control. Label

ende

ejendomme (Adgang = privat)

tæller int16

ende

metoder (Adgang = offentlig)

funktionstimerCallback (app, src, begivenhed)

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

app.counter = app.counter + 1;

%kalder alle de variabler, programmet har brug for - - - - - - - - - - - - - - -

globalt rpi

globale s

global åben

global lukning

globalt kamera

globalt m

globale ems

globalt t_count

%------------------------- Train Arm Section --------------------- ---------

hvis den er åben == 0

writePosition (r, 50)

app.gateLamp. Color = 'grøn';

ende

hvis tæt == 0

writePosition (s, 120)

app.gateLamp. Color = 'rød';

ende

%---------------------- Bevægelsesregistrering via kamera -----------------------

mens det er sandt

img = øjebliksbillede (cam);

billede (img);

app. UIAxes (tegnet)

ende

%---------------------- Arm åben/luk ----------------------- --------------

hvis readDigitalPin (rpi, 20)> 1 %læser pin 17 (knap) og kontrollerer for signal

for i = 40:.5: 150 %rejser bro

writePosition (s, i)

ende

for i = 1:10 %sløjfer, der blinker rødt lys x gange

writeDigitalPin (rpi, 13, 1)

pause (.5)

writeDigitalPin (rpi, 13, 0)

pause (.5)

ende

writePosition (s, 50)%satte porten ned

ende

%-------------------- Mobiltelefonsupport/plot ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

data = nuller (200, 1); %initialiserer data for rullende plot

figur (ca. UIAxes2)

p = plot (data)

akse ([xbounda, ybounds])

pause (1)

tic

mens toc <30 %kører i 30 sekunder

[a, ~] = accellog (m);

hvis længde (a)> 200

data = a (slut-199: slut, 3);

andet

data (1: længde (a)) = a (:, 3);

ende

%tegne plot igen

p. YData = data;

tegnet

ende

%------------------ Pludselig pixelændring ---------------------------- ------

x1 = img; % læser kameraet af pi

red_mean = gennemsnit (middelværdi (x1 (:,:, 1))); % læser den gennemsnitlige mængde røde pixels

grøn_værdi = middelværdi (middelværdi (x1 (:,:, 2))); % læser den gennemsnitlige mængde af grønne pixels

blue_mean = gennemsnit (middelværdi (x1 (:,:, 3))); % læser den gennemsnitlige mængde af blå pixels

hvis red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

ende

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Knap EMS programmering ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %indstiller LED -stiften, pin 16, som en output

configurePin (rpi, 16, 'DigitalInput'); %indstiller knapstiften, pin 24, som input

buttonPressed = readDigitalPin (rpi, 16); % Læser knappen trykværdi på pin 16

hvis buttonPressed == 1

mens buttonPressed == 1

writeDigitalPin (rpi, 12, 1)

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

end % Slutter 'mens buttonPressed == 1' loop

ende

writeDigitalPin (rpi, 16, 0) %Indstiller LED til off, når der ikke længere trykkes på knappen setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mailkonto, der skal sendes fra setpref ('Internet', 'SMTP_Username', '[email protected]'); % afsendere brugernavn setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Afsenderadgangskode

rekvisitter = 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]', 'Nødstatus!', 'Dirigenten har aktiveret den manuelle overstyringsafbryder og beder om øjeblikkeligt svar!')

app. UndernormalconditionsLabel. Text = ems

ende

ende

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

metoder (Adgang = privat)

% Kode, der udføres efter komponentoprettelse

funktion startupFcn (app)

%---------- Alle variabler, der er nødvendige for denne funktion --------------------

global rpi %arduino

rpi = raspi ('169.254.0.2', 'pi', 'hindbær');

global s %servo

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

global åben

åben = 1;

globalt lukket

lukket = 1;

globalt kamera

cam = cameraboard (rpi);

globalt m

m = mobiledev;

globale ems

ems = 'Der er blevet rapporteret om en nødsituation, der meddeler EMS';

globalt t_count

t_count = 0;

stik på %adgangskode er EFGroup6

% Timerfunktion til sløjfe --------------------------------

app.counter = 0;

t = timer (…

'TimerFcn', @app.timerCallback, …

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

'ExecutionMode', 'fixedSpacing', …

'TasksToExecute', inf);

start (t);

ende

% Tilbagekaldsfunktion

funktion ManualOverrideSwitchValueChanged (app, begivenhed)

ende

% Knap skubbet funktion: OpenGateButton

funktion OpenGateButtonPushed (app, begivenhed)

global lukning

luk = 0;

ende

% Knap skubbet funktion: CloseGateButton

funktion CloseGateButtonPushed (app, begivenhed)

global åben

åben = 0;

ende

ende

% Appinitialisering og konstruktion

metoder (Adgang = privat)

% Opret UIFigure og komponenter

funktion createComponents (app)

% Opret UIFigure

app. UIFigure = uifigure;

app. UIFigure. Position = [100100640 480];

app. UIFigure. Name = 'UI -figur';

% Opret RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Jernbanestatus';

% Opret gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

app.gateLamp. Color = [0.9412 0.9412 0.9412];

% Opret OpenGateButton

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

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

app. OpenGateButton. Text = 'Åbn port';

% Opret CloseGateButton

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

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

app. CloseGateButton. Text = 'Luk port';

% Opret UIAxes

app. UIAxes = uiaxes (app. UIFigure);

titel (app. UIAxes, 'Kamerafeed')

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

% Opret EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'right'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Nødstatus';

% Opret EmergencyButtonStatusLamp

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

% Opret UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Under normale forhold';

% Opret UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

titel (app. UIAxes2, 'Togposition')

xlabel (app. UIAxes2, 'X Position')

ylabel (app. UIAxes2, 'Y Position')

app. UIAxes2. Box = 'on';

app. UIAxes2. XGrid = 'tændt';

app. UIAxes2. YGrid = 'on';

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

% Opret EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'center';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'fed';

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

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

% Opret IanAllishKellyBondIanDaffronLabel

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

% Opret LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Sløjfer fuldført:';

% Opret etiket

app. Label = uilabel (app. UIFigure);

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

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

ende

ende

metoder (Adgang = offentlig)

% Konstruer app

funktion app = mikro

% Opret og konfigurer komponenter

createComponents (app)

% Registrer appen med App Designer

registerApp (app, app. UIFigure)

% Udfør startfunktionen

runStartupFcn (app, @startupFcn)

hvis nargout == 0

klar app

ende

ende

% Kode, der udføres før app -sletning

slet (app)

% Slet UIFigure, når appen slettes

slet (app. UIFigure)

ende

ende

ende

Trin 4: Sidste trin

Sidste trin
Sidste trin

Når koden er skrevet, og Raspberry Pi er blevet tilsluttet, skal servomotoren fastgøres til den 3-D trykte jernbanesporport, som den er vedhæftet på billedet ovenfor.

Nu er projektet færdigt. Tilslut hindbær PI til togsporet, og observer det nye system, der skaber sikrere jernbaneoverskæringer for både bilister og konduktører. Spil med systemet ved at interagere med GUI'en for at udløse fejlkasser, der er indført for at forhindre ulykker.

Det er slutningen på øvelsen, nyd dit nye Smart Train System!

Anbefalede: