Innehållsförteckning:

Smart Train System: 4 steg
Smart Train System: 4 steg

Video: Smart Train System: 4 steg

Video: Smart Train System: 4 steg
Video: selfie booth video 😍🤟 #trending #viralshorts #youtubeshorts #masti #pyar 2024, December
Anonim
Smart tågsystem
Smart tågsystem

Designad för att öka säkerheten, förebygga olyckor och öka den positiva och produktiva responsen för att hjälpa om olyckor inträffar.

Steg 1: Delar och material

Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material

Bilderna ovan är placerade i följande ordnings lista:

Reservdelar

1) Ett hallon PI 3 - modell B

2) Ett brödbräda

3) Kablar (uppifrån och ner) - En ström, ett Ethernet, en adapter

4) En servomotor

5) En 3D -utskriven järnvägsport

6) Två lysdioder (helst rött och grönt)

7) En tryckknapp

8) Tio hopptrådar

9) Fyra motstånd

10) Bärbar eller stationär dator med MATLAB

Steg 2: Konfiguration

Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration
Konfiguration

Ovan är bilder på konfigurationen från flera vinklar:

Stiftplatser (gemener följt av ett radnummer) listas nedan i ordning efter det aktuella flödet.

Trådar:

j19 till i47

j8 till b50

b5 till Servo

c6 till Servo

b7 till servo

a13 till j7

a17 till LED

LED till a37

e40 till j20

j53 till j18

j7 till LED

LED till j6

Knapp:

e54 till h51

Motstånd:

d40 till b37

c50 till d54

i51 till j47

Steg 3: Kod och logik

Kod och logik
Kod och logik

Vårt tågsystems mål är att öka säkerheten och minska risken för potentiellt dödliga olyckor vid järnvägsövergångar. För att uppnå detta har vårt system ett tågvarningssystem för förare, en fysisk barriär som sänks för att hindra bilar från att korsa spåret och en reservknapp för nödledaren att trycka på om tidig varningssystem misslyckas.

GUI Conductor Operating System:

GUI, som visas ovan, skapades för användning av konduktören när de kör tåget genom spårområden som har biltrafikjärnvägsövergångar.

I det övre högra hörnet finns det ett ljus som meddelar konduktören om en kommande järnvägsövergångsport är stängd och låter konduktören öppna eller stänga grinden vid behov. Därunder visas flödet från kameror som tåget passerar. I nedre vänstra hörnet är tågets läge kontinuerligt ritat på en graf och under grafen anges antalet varv som tåget hade genomfört på en dag. Ovanför positionsdiagrammet finns en nödknapp och statusuttalande. Detta gör att konduktören kan signalera om en nödsituation om det finns en bil på banan eller om säkerhetsgrinden inte fungerar som den ska.

Koda:

classdef micro <matlab.apps. AppBase % Egenskaper som motsvarar appkomponenter

fastigheter (Access = public)

UIFigure matlab.ui. Figur

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

Undernormala villkorLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Etikett matlab.ui.control. Label

slutet

fastigheter (Access = privat)

räknare int16

slutet

metoder (Access = public)

funktionstimerCallback (app, src, händelse)

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

app.counter = app.counter + 1;

%kallar alla variabler programmet behöver - - - - - - - - - - - - - -

globalt rpi

globala s

global öppen

global stängning

global kamera

globala m

globala ems

global t_count

%------------------------- Tågarmsektion --------------------- ---------

om öppen == 0

writePosition (s, 50)

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

slutet

om nära == 0

writePosition (s, 120)

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

slutet

%---------------------- Rörelsedetektering via kamera -----------------------

medan det är sant

img = ögonblicksbild (kamera);

bild (img);

app. UIAxes (ritat)

slutet

%---------------------- Arm öppna/stäng ----------------------- --------------

om readDigitalPin (rpi, 20)> 1 %läser stift 17 (knapp) och söker efter signal

för i = 40:.5: 150 %höjer bron

writePosition (s, i)

slutet

för i = 1:10 %slingor som blinkar rött ljus x antal gånger

writeDigitalPin (rpi, 13, 1)

paus (.5)

writeDigitalPin (rpi, 13, 0)

paus (.5)

slutet

writePosition (s, 50)%lägger ner porten

slutet

%-------------------- Mobiltelefonsupport/tomt ------------------------ -

m. AccelerationSensorEnabled = 1

m.loggning = 1

data = nollor (200, 1); %initiera data för rullande tomt

figur (app. UIAxes2)

p = plot (data)

axel ([xbounda, ybounds])

paus (1)

tic

medan toc <30 %körs i 30 sekunder

[a, ~] = accellog (m);

om längd (a)> 200

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

annan

data (1: längd (a)) = a (:, 3);

slutet

%rita om tomten

p. YData = data;

drawow

slutet

%------------------ Plötslig pixeländring ---------------------------- ------

x1 = img; % läser av kameran från pi

red_mean = medelvärde (medelvärde (x1 (:,:, 1))); % läser den genomsnittliga mängden röda pixlar

green_mean = medelvärde (medelvärde (x1 (:,:, 2))); % läser den genomsnittliga mängden gröna pixlar

blue_mean = medelvärde (medelvärde (x1 (:,:, 3))); % läser den genomsnittliga mängden blå pixlar

om red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

slutet

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Knapp EMS-programmering ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %anger ledstiftet, stift 16, som en utgång

configurePin (rpi, 16, 'DigitalInput'); %anger knappstiftet, stift 24, som en ingång

buttonPressed = readDigitalPin (rpi, 16); % Läser knapptryckningsvärdet på stift 16

if buttonPressed == 1

medan buttonPressed == 1

writeDigitalPin (rpi, 12, 1)

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

end % Avslutar loop medan ‘ButtonPressed == 1’

slutet

writeDigitalPin (rpi, 16, 0) %Ställer in LED till av när knappen inte längre trycks in setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % e -postkonto att skicka från setpref ('Internet', 'SMTP_Username', '[email protected]'); % avsändarnamn användarnamn setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Avsändares lösenord

rekvisita = 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!', 'Ledaren har aktiverat den manuella överstyrningsomkopplaren och begär omedelbart svar!')

app. UndernormalconditionsLabel. Text = ems

slutet

slutet

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

metoder (åtkomst = privat)

% Kod som körs efter komponentskapande

funktion startupFcn (app)

%---------- Alla variabler som behövs för denna funktion --------------------

global rpi %arduino

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

global s %servo

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

global öppen

öppen = 1;

globalt stängt

stängd = 1;

global kamera

cam = kamerabord (rpi);

globala m

m = mobiledev;

globala ems

ems = 'En nödsituation har anmälts till EMS';

global t_count

t_count = 0;

anslutning på %lösenord är EFGroup6

% Timerfunktion för slinga --------------------------------

app.counter = 0;

t = timer (…

'TimerFcn', @app.timerCallback, …

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

'ExecutionMode', 'fixedSpacing', …

'TasksToExecute', inf);

start (t);

slutet

% Återuppringningsfunktion

funktion ManualOverrideSwitchValueChanged (app, händelse)

slutet

% Button push -funktion: OpenGateButton

funktion OpenGateButtonPushed (app, händelse)

global stängning

stäng = 0;

slutet

% Button pushed function: CloseGateButton

funktion CloseGateButtonPushed (app, händelse)

global öppen

öppen = 0;

slutet

slutet

% Appinitialisering och konstruktion

metoder (åtkomst = privat)

% Skapa UIFigure och komponenter

function createComponents (app)

% Skapa UIFigure

app. UIFigure = uifigure;

app. UIFigure. Position = [100100640 480];

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

% Skapa RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Järnvägsportstatus';

% Skapa gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

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

% Skapa OpenGateButton

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

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

app. OpenGateButton. Text = 'Öppen grind';

% Skapa CloseGateButton

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

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

app. CloseGateButton. Text = 'Stäng port';

% Skapa UIAxes

app. UIAxes = uiaxes (app. UIFigure);

titel (app. UIAxes, 'Kameraflöde')

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

% Skapa EmergencyButtonStatusLampLabel

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

% Skapa EmergencyButtonStatusLamp

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

% Skapa UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Under normala förhållanden';

% Skapa UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

titel (app. UIAxes2, 'tågposition')

xlabel (app. UIAxes2, 'X Position')

ylabel (app. UIAxes2, 'Y Position')

app. UIAxes2. Box = 'on';

app. UIAxes2. XGrid = 'on';

app. UIAxes2. YGrid = 'on';

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

% Skapa EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'center';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'fet';

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

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

% Skapa IanAllishKellyBondIanDaffronLabel

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

% Skapa LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Slingor slutförda:';

% Skapa etikett

app. Label = uilabel (app. UIFigure);

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

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

slutet

slutet

metoder (Access = public)

% Konstruera app

funktion app = mikro

% Skapa och konfigurera komponenter

createComponents (app)

% Registrera appen med App Designer

registerApp (app, app. UIFigure)

% Utför startfunktionen

runStartupFcn (app, @startupFcn)

om nargout == 0

tydlig app

slutet

slutet

% Kod som körs innan app tas bort

ta bort (app)

Ta bort UIFigure när appen raderas

radera (app. UIFigure)

slutet

slutet

slutet

Steg 4: Sista steget

Sista steget
Sista steget

När koden har skrivits och Raspberry Pi har anslutits kopplar du servomotorn till den 3-D-tryckta järnvägsspårporten som den är bifogad på bilden ovan.

Nu är projektet klart. Anslut hallon PI till tågspåret och observera det nya systemet som skapar säkrare järnvägsövergångar för både bilförare och konduktörer. Lek med systemet genom att interagera med GUI för att utlösa misslyckade kassaskåp som är inställda för att förhindra olyckor.

Det är slutet på handledningen, njut av ditt nya smarta tågsystem!

Rekommenderad: