INHOUDSOPGAWE:

Slim treinstelsel: 4 stappe
Slim treinstelsel: 4 stappe

Video: Slim treinstelsel: 4 stappe

Video: Slim treinstelsel: 4 stappe
Video: PS4 Slim Doesn't Boot Fix 2024, November
Anonim
Slim treinstelsel
Slim treinstelsel

Ontwerp om veiligheid te verhoog, ongelukke te voorkom en positiewe en produktiewe reaksie te verhoog om te help as daar ongelukke voorkom.

Stap 1: Onderdele en materiaal

Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal
Onderdele en materiaal

Die foto's hierbo is in die volgorde van die onderstaande onderdele geplaas:

Onderdele lys

1) Een Framboos PI 3 - Model B

2) Een broodbord

3) Kabels (van bo na onder) - een krag, een ethernet, een adapter

4) Een servomotor

5) Een 3D -gedrukte spoorweghek

6) Twee LED's (verkieslik rooi en groen)

7) Een drukknop

8) Tien springdrade

9) Vier weerstande

10) Skootrekenaar of lessenaar met MATLAB

Stap 2: Konfigurasie

Konfigurasie
Konfigurasie
Konfigurasie
Konfigurasie
Konfigurasie
Konfigurasie
Konfigurasie
Konfigurasie

Hierbo is foto's van die konfigurasie vanuit verskeie hoeke:

Pennetjies (kleinletter gevolg deur 'n rynommer) word hieronder in volgorde gelys na die huidige vloei.

Drade:

j19 tot i47

j8 tot b50

b5 na Servo

c6 na Servo

b7 na servo

a13 tot j7

a17 tot LED

LED tot a37

e40 tot j20

j53 tot j18

j7 na LED

LED tot j6

Knoppie:

e54 tot h51

Weerstande:

d40 tot b37

c50 tot d54

i51 tot j47

Stap 3: Kode en logika

Kode en logika
Kode en logika

Die doel van ons treinstelsel is om die veiligheid te verhoog en die risiko van dodelike ongelukke by spoorwegoorgange te verminder. Om dit te bereik, het ons stelsel 'n treinwaarskuwingstelsel vir bestuurders, 'n fisiese versperring wat verlaag word om te voorkom dat motors die baan oorsteek, en 'n noodknoppie wat die kondukteur kan druk as die vroeë waarskuwingstelsel misluk.

GUI kondukteur bedryfstelsel:

Die GUI, hierbo getoon, is ontwerp vir die gebruik van die kondukteur terwyl hulle die trein ry deur spoorgebiede met spoorwegoorgange met motorverkeer.

In die regter boonste hoek is daar 'n lig wat die kondukteur in kennis stel as 'n aankomende spoorweghek gesluit word en die kondukteur toelaat om die hek oop of toe te maak indien nodig. Daaronder word die voer van kameras wat die trein verbygaan, getoon. In die linker onderste hoek word die ligging van die trein deurlopend op 'n grafiek geteken en onder die grafiek word die aantal rondtes wat die trein in 'n dag voltooi het, aangedui. Bo die posisiesgrafiek is daar 'n noodknoppie en 'n statusverklaring. Dit stel die kondukteur in staat om vir 'n noodgeval te teken as daar 'n motor op die baan is of die veiligheidshek nie behoorlik werk nie.

Kode:

classdef micro <matlab.apps. AppBase % Eienskappe wat ooreenstem met app -komponente

eiendomme (Toegang = publiek)

UIFigure matlab.ui. Figuur

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

Ondernormale omstandighedeLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Etiketteer matlab.ui.control. Label

einde

eiendomme (Toegang = privaat)

toonbank int16

einde

metodes (Toegang = publiek)

funksie timer terugroep (app, src, gebeurtenis)

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

app.counter = app.counter + 1;

%noem al die veranderlikes wat die program benodig - - - - - - - - - - - - - - -

globale rpi

globale s

wêreldwyd oop

globale sluiting

wêreldwye kamera

globale m

globale ems

globale t_telling

%------------------------- Treinarmafdeling --------------------- ---------

as oop == 0

skryfPosisie (s, 50)

app.gateLamp. Color = 'groen';

einde

as naby == 0

skryfPosisie (s, 120)

app.gateLamp. Color = 'rooi';

einde

%---------------------- Bewegingsopsporing via kamera -----------------------

terwyl dit waar is

img = momentopname (kamera);

beeld (afb);

app. UIAxes (geteken)

einde

%---------------------- Arm oop/toe ----------------------- --------------

as readDigitalPin (rpi, 20)> 1 %pen 17 (knoppie) lees en kyk of daar sein is

vir i = 40:.5: 150 %verhoog brug

skryfPosisie (s, i)

einde

vir i = 1:10 %lusse knipper rooi lig x aantal kere

writeDigitalPin (rpi, 13, 1)

pouse (.5)

writeDigitalPin (rpi, 13, 0)

pouse (.5)

einde

writePosition (s, 50)%sit hek neer

einde

%-------------------- Selfoonondersteuning/plot ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

data = nulle (200, 1); %begin data vir rolplot

figuur (app. UIAxes2)

p = plot (data)

as ([xbounda, ybounds])

pouse (1)

tiek

terwyl toc <30 %30 sekondes loop

[a, ~] = accellog (m);

as lengte (a)> 200

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

anders

data (1: lengte (a)) = a (:, 3);

einde

%teken die plot oor

p. YData = data;

getrek

einde

%------------------ Skielike pixelverandering ---------------------------- ------

x1 = afb; % lees die kamera van die pi af

red_mean = gemiddelde (gemiddelde (x1 (:,:, 1))); % lees die gemiddelde hoeveelheid rooi pixels

green_mean = gemiddelde (gemiddelde (x1 (:,:, 2))); % lees die gemiddelde hoeveelheid groen pixels

blue_mean = gemiddelde (gemiddelde (x1 (:,:, 3)))); % lees die gemiddelde hoeveelheid blou pixels

as red_mean> 150 && green_mean> 150 && blue_mean> 150

t_telling = t_telling + 1;

einde

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Knoppie EMS programmering ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %stel die ledpen, pen 16, as 'n uitset in

configurePin (rpi, 16, 'DigitalInput'); %stel die knoppiespen, pen 24, as 'n invoer in

buttonPressed = readDigitalPin (rpi, 16); % Lees die druk van die knoppie op pen 16

as buttonPressed == 1

terwyl buttonPressed == 1

writeDigitalPin (rpi, 12, 1)

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

end % Beëindig 'terwyl buttonPressed == 1' lus

einde

writeDigitalPin (rpi, 16, 0) %Stel die LED in as die knoppie nie meer ingedruk word nie setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % posrekening om van setpref af te stuur ('Internet', 'SMTP_Username', '[email protected]'); % sender gebruikersnaam setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Afsender se wagwoord

rekwisiete = 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]', 'Noodstatus!', 'Die kondukteur het die handmatige oorskakel -skakelaar geaktiveer en onmiddellike reaksie versoek!')

app. UndernormalconditionsLabel. Text = ems

einde

einde

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

metodes (Toegang = privaat)

% Kode wat uitgevoer word na die skepping van komponente

funksie opstartFcn (app)

%---------- Alle veranderlikes wat nodig is vir hierdie funksie --------------------

globale rpi %arduino

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

globale s %servo

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

wêreldwyd oop

oop = 1;

wêreldwyd gesluit

gesluit = 1;

wêreldwye kamera

cam = kamerabord (rpi);

globale m

m = mobiledev;

globale ems

ems = 'Daar is 'n noodgeval aangemeld wat EMS in kennis stel';

globale t_telling

t_telling = 0;

connector op %wagwoord is EFGroup6

% Timerfunksie vir lus --------------------------------

app.counter = 0;

t = timer (…

'TimerFcn', @app.timerCallback, …

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

'ExecutionMode', 'fixedSpacing', …

'TasksToExecute', inf);

begin (t);

einde

% Terugbelfunksie

funksie ManualOverrideSwitchValueChanged (app, gebeurtenis)

einde

% Knoppie gedruk funksie: OpenGateButton

funksie OpenGateButtonPushed (app, gebeurtenis)

globale sluiting

naby = 0;

einde

% Knoppie gedruk funksie: CloseGateButton

funksie CloseGateButtonPushed (app, gebeurtenis)

wêreldwyd oop

oop = 0;

einde

einde

% Inisialisering en konstruksie van app

metodes (Toegang = privaat)

% Skep UIFigure en komponente

funksie createComponents (app)

% Skep UIFigure

app. UIFigure = uifigure;

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

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

% Skep RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'regs'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Spoorweghekstatus';

% Skep gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

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

% Skep OpenGateButton

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

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

app. OpenGateButton. Text = 'Open Gate';

% Skep CloseGateButton

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

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

app. CloseGateButton. Text = 'Sluit hek';

% Skep UIAxes

app. UIAxes = uiaxes (app. UIFigure);

titel (app. UIAxes, 'Camera Feed')

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

% Skep EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'regs'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Noodknoppie status';

% Skep EmergencyButtonStatusLamp

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

% Skep UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Onder normale omstandighede';

% Skep UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

titel (app. UIAxes2, 'Treinposisie')

xlabel (app. UIAxes2, 'X -posisie')

ylabel (app. UIAxes2, 'Y -posisie')

app. UIAxes2. Box = 'aan';

app. UIAxes2. XGrid = 'aan';

app. UIAxes2. YGrid = 'aan';

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

% Skep EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'middel';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'vet';

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

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

% Skep IanAllishKellyBondIanDaffronLabel

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

% Skep LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Lusse voltooi:';

% Skep etiket

app. Label = uilabel (app. UIFigure);

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

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

einde

einde

metodes (Toegang = publiek)

Konstrueer app

funksie app = mikro

% Skep en konfigureer komponente

createComponents (app)

% Registreer die app by App Designer

registerApp (app, app. UIFigure)

Voer die opstartfunksie uit

runStartupFcn (app, @startupFcn)

as nargout == 0

duidelike app

einde

einde

% Kode wat uitgevoer word voordat app uitgevee word

verwyder (app)

Vee UIF -figuur uit wanneer die program uitgevee word

verwyder (app. UIFigure)

einde

einde

einde

Stap 4: Laaste stap

Laaste stap
Laaste stap

Sodra die kode geskryf is en die Raspberry Pi bedraad is, koppel die servomotor aan die 3-D-gedrukte spoorweghek soos op die foto hierbo aangeheg is.

Nou is die projek voltooi. Koppel die framboos PI aan die treinspoor en kyk na die nuwe stelsel wat veiliger spooroorgange vir motorbestuurders en kondukteurs skep. Speel met die stelsel deur in interaksie te tree met die GUI om 'n veilige kluis in werking te stel om ongelukke te voorkom.

Dit is die einde van die tutoriaal, geniet u nuwe Smart Train System!

Aanbeveel: