INHOUDSOPGAWE:
Video: Slim treinstelsel: 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
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
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
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
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
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:
Slim brille: 4 stappe
Slim bril: Hallo almal vandag, ek gaan jou wys hoe om 'n slim bril tuis te maak! Een van die grootste dinge van 'n slimbril is hoe voordelig dit is om so iets in die hedendaagse tegnologie te hê en dat daar nie net een weergawe is nie
Slim lessenaar LED -lig - Slim beligting met Arduino - Neopixels -werkruimte: 10 stappe (met foto's)
Slim lessenaar LED -lig | Slim beligting met Arduino | Neopixels Workspace: Ons spandeer deesdae baie tyd tuis, studeer en werk virtueel, so waarom nie ons werkruimte groter maak met 'n pasgemaakte en slim beligtingstelsel Arduino en Ws2812b LED's nie. Hier wys ek u hoe u u Smart bou LED -lessenaar op die tafel wat
IoT -gebaseerde slim tuinmaak en slim landbou met behulp van ESP32: 7 stappe
IoT -gebaseerde slim tuinmaak en slim landbou Met behulp van ESP32: Wêreld verander soos die tyd en so landbou. Tans integreer mense elektronika op elke gebied en die landbou is geen uitsondering hierop nie. Hierdie samesmelting van elektronika in die landbou help boere en mense wat tuine bestuur
Beveilig u slim huis slim: 14 stappe
Beveilig u slim huis slim: ek neem deel aan die veilige wedstryd. As u van my instruksies hou, stem dan daarvoor! Ek sal u wys hoe u u huis en sy omgewing maklik en goedkoop kan beveilig. Dit bevat segmente waar u sal leer: 1. Stel j op
Koppelvlak Honeywell Vista alarm met slim hub (knipoog/slim): 7 stappe (met foto's)
Koppelvlak Honeywell Vista alarm met slim hub (knipoog/slim): Hallo daar! Ek wou 'n kort handleiding gee oor hoe ek my Honeywell Vista -alarmstelsel in my slim hub kan integreer. Ek gebruik Wink vir hierdie tutoriaal, maar dit behoort te werk met enige slim hub (Smartthings/Iris/ens.) Voordat ons begin, gaan