Sadržaj:

Pametni sistem vlakova: 4 koraka
Pametni sistem vlakova: 4 koraka

Video: Pametni sistem vlakova: 4 koraka

Video: Pametni sistem vlakova: 4 koraka
Video: 🔵 Blackview Tab 16 - ПОДРОБНЫЙ ОБЗОР ПЛАНШЕТА 2024, Juli
Anonim
Pametni sistem vlakova
Pametni sistem vlakova

Dizajnirano za povećanje sigurnosti, sprječavanje nesreća i povećanje pozitivnog i produktivnog odgovora za pomoć u slučaju nezgode.

Korak 1: Dijelovi i materijali

Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali

Gornje slike su poredane prema dolje navedenoj listi dijelova:

Lista delova

1) Jedna malina PI 3 - model B

2) One Breadboard

3) Kablovi (od vrha do dna) - jedno napajanje, jedan Ethernet, jedan adapter

4) Jedan servo motor

5) Jedna 3D štampana željeznička vrata

6) Dvije LED diode (po mogućnosti crvena i zelena)

7) Jedno dugme

8) Deset kratkospojnih žica

9) Četiri otpornika

10) Laptop ili Desktop sa MATLAB -om

Korak 2: Konfiguracija

Konfiguracija
Konfiguracija
Konfiguracija
Konfiguracija
Konfiguracija
Konfiguracija
Konfiguracija
Konfiguracija

Gore su slike konfiguracije iz više kutova:

Lokacije pinova (mala slova iza kojih slijedi broj retka) navedene su dolje redoslijedom prema trenutnom toku.

Žice:

j19 do i47

j8 do b50

b5 na Servo

c6 na Servo

b7 na servo

a13 do j7

a17 na LED

LED na a37

e40 do j20

j53 do j18

j7 na LED

LED na j6

Dugme:

e54 do h51

Otpornici:

d40 do b37

c50 do d54

i51 do j47

Korak 3: Kod i logika

Kod i logika
Kod i logika

Cilj našeg željezničkog sistema je povećati sigurnost i smanjiti rizik od potencijalno smrtonosnih nesreća na željezničkim prijelazima. Da bi se to postiglo, naš sistem ima sistem upozorenja vozača za vozače, fizičku barijeru koja se spušta kako bi spriječila automobile da pređu prugu i rezervno dugme za hitne slučajeve koje kondukter može pritisnuti u slučaju kvara sistema ranog upozoravanja.

Operativni sistem vodiča GUI:

GUI, prikazan gore, stvoren je za upotrebu konduktera dok voze vlak kroz područja pruge koja imaju željezničke prijelaze za automobilski promet.

U gornjem desnom kutu nalazi se svjetlo koje obavještava konduktera ako su zatvorena vrata koja prelaze prugu zatvorena i omogućava kondukteru da otvori ili zatvori vrata ako je potrebno. Ispod toga prikazan je feed sa kamera koje vlak prolazi. U donjem lijevom kutu lokacija vlaka kontinuirano se iscrtava na grafikonu, a ispod grafikona navodi se broj krugova koje je vlak prešao za jedan dan. Iznad grafikona položaja nalazi se dugme za hitne slučajeve i izjava o statusu. Ovo omogućava kondukteru da signalizira hitan slučaj ako se na stazi nalazi automobil ili sigurnosna kapija ne radi ispravno.

Šifra:

classdef micro <matlab.apps. AppBase % Svojstva koja odgovaraju komponentama aplikacije

svojstva (Pristup = javno)

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

UndernormalconditionsLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Label matlab.ui.control. Label

kraj

svojstva (Pristup = privatno)

counter int16

kraj

metode (Pristup = javni)

funkcija timerCallback (aplikacija, src, događaj)

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

app.counter = app.counter + 1;

%poziva sve varijable koje su potrebne programu - - - - - - - - - - - - - -

globalni rpi

global s

globalno otvoreno

globalno zatvaranje

globalna kamera

globalno m

globalni ems

globalni t_count

%------------------------- Odsjek za vozove --------------------- ---------

ako je otvoreno == 0

writePosition (s, 50)

app.gateLamp. Color = 'zelena';

kraj

ako je blizu == 0

writePosition (s, 120)

app.gateLamp. Color = 'crveno';

kraj

%---------------------- Detekcija pokreta putem kamere -----------------------

dok je istina

img = snimak (kamera);

slika (img);

app. UIAxes (drawnow)

kraj

%---------------------- Ruka otvoren/zatvoren ----------------------- --------------

ako je readDigitalPin (rpi, 20)> 1 %očitava pin 17 (dugme) i provjerava signal

za i = 40:.5: 150 %podiže most

writePosition (s, i)

kraj

za i = 1:10 %petlje treperi crveno svjetlo x koliko puta

writeDigitalPin (rpi, 13, 1)

pauza (.5)

writeDigitalPin (rpi, 13, 0)

pauza (.5)

kraj

writePosition (s, 50)%spusti vrata

kraj

%-------------------- Podrška/zaplet mobilnih telefona ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

podaci = nule (200, 1); %incijalizirati podatke za pokretnu plohu

figura (app. UIAxes2)

p = nacrt (podaci)

os ([xbounda, ybounds])

pauza (1)

tic

dok toc <30 %radi 30 sekundi

[a, ~] = accllog (m);

ako je dužina (a)> 200

podaci = a (kraj-199: kraj, 3);

else

podaci (1: dužina (a)) = a (:, 3);

kraj

%iscrtavanje grafikona

p. YData = podaci;

drawnow

kraj

%------------------ Nagla promjena piksela ---------------------------- ------

x1 = img; % čita kameru sa pi

red_mean = mean (mean (x1 (:,:, 1))); % čita srednju količinu crvenih piksela

green_mean = mean (mean (x1 (:,:, 2))); % čita srednju količinu zelenih piksela

blue_mean = mean (mean (x1 (:,:, 3))); % čita prosječnu količinu plavih piksela

ako crveno_smjer> 150 && zeleno_sredstvo> 150 && plavo_sredje> 150

t_count = t_count + 1;

kraj

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ EMS programiranje dugmeta ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %postavlja LED pin, pin 16, kao izlaz

configurePin (rpi, 16, 'DigitalInput'); %postavlja pin dugmeta, pin 24, kao ulaz

buttonPressed = readDigitalPin (rpi, 16); % Čita vrijednost pritiska tipke na pinu 16

ako je dugme pritisnuto == 1

dok je dugme pritisnuto == 1

writeDigitalPin (rpi, 12, 1)

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

end % Završava petlju 'while buttonPressed == 1'

kraj

writeDigitalPin (rpi, 16, 0) %Postavlja LED za isključivanje kada dugme više nije pritisnuto setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mail naloga za slanje sa setpref ('Internet', 'SMTP_Username', '[email protected]'); % korisničko ime pošiljatelja setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Lozinka pošiljaoca

rekviziti = 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]', 'Hitni status!', 'Kondukter je aktivirao prekidač za ručno poništavanje, zahtijevajući hitan odgovor!')

app. UndernormalconditionsLabel. Text = ems

kraj

kraj

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

metode (Pristup = privatno)

% Kod koji se izvršava nakon kreiranja komponente

funkcija startupFcn (aplikacija)

%---------- Sve varijable potrebne za ovu funkciju --------------------

globalni rpi %arduino

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

globalni s %servo

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

globalno otvoreno

otvoreno = 1;

globalno zatvoreno

zatvoreno = 1;

globalna kamera

cam = kamera (rpi);

globalno m

m = mobiledev;

globalni ems

ems = 'Prijavljen je hitan slučaj, obaviješten je EMS';

globalni t_count

t_count = 0;

konektor na %lozinki je EFGroup6

% Timer funkcija za petlju --------------------------------

app.counter = 0;

t = mjerač vremena (…

'TimerFcn', @app.timerCallback,…

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

'ExecutionMode', 'fixedSpacing',…

'TasksToExecute', inf);

start (t);

kraj

% Funkcija povratnog poziva

funkcija ManualOverrideSwitchValueChanged (aplikacija, događaj)

kraj

% Funkcija pritiska dugmeta: OpenGateButton

funkcija OpenGateButtonPushed (aplikacija, događaj)

globalno zatvaranje

close = 0;

kraj

% Funkcija pritiska dugmeta: CloseGateButton

funkcija CloseGateButtonPushed (aplikacija, događaj)

globalno otvoreno

otvoren = 0;

kraj

kraj

% Inicijalizacija i konstrukcija aplikacije

metode (Pristup = privatno)

% Kreirajte UIFigure i komponente

funkcija createComponents (aplikacija)

% Kreirajte UIFigure

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'Slika korisničkog sučelja';

% Kreirajte RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'desno'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Status kapije';

% Kreirajte gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

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

% Kreirajte OpenGateButton

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

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

app. OpenGateButton. Text = 'Otvori vrata';

% Kreirajte CloseGateButton

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

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

app. CloseGateButton. Text = 'Zatvori vrata';

% Kreirajte UIAxe

app. UIAxes = uiaxes (app. UIFigure);

naslov (app. UIAxes, 'Feed kamere')

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

% Kreirajte EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'desno'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Status dugmeta za hitne slučajeve';

% Kreirajte EmergencyButtonStatusLamp

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

% Kreirajte oznaku UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'U normalnim uslovima';

% Kreirajte UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

naslov (app. UIAxes2, 'Položaj vlaka')

xlabel (app. UIAxes2, 'X položaj')

ylabel (app. UIAxes2, 'Y položaj')

app. UIAxes2. Box = 'uključeno';

app. UIAxes2. XGrid = 'uključeno';

app. UIAxes2. YGrid = 'uključeno';

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

% Kreirajte EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'centar';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'podebljano';

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

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

% Kreirajte IanAllishKellyBondIanDaffronLabel

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

% Kreirajte LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Petlje završene:';

% Kreiraj oznaku

app. Label = uilabel (app. UIFigure);

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

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

kraj

kraj

metode (Pristup = javni)

% Konstruiraj aplikaciju

funkcija app = mikro

% Kreirajte i konfigurirajte komponente

createComponents (aplikacija)

% Registrirajte aplikaciju kod App Designer -a

registerApp (app, app. UIFigure)

% Izvršite funkciju pokretanja

runStartupFcn (aplikacija, @startupFcn)

ako je nargout == 0

jasna aplikacija

kraj

kraj

% Kod koji se izvršava prije brisanja aplikacije

brisanje (aplikacija)

% Izbriši UIFigure kada se aplikacija izbriše

brisanje (app. UIFigure)

kraj

kraj

kraj

Korak 4: Završni korak

Završni korak
Završni korak

Nakon što je kod napisan i Raspberry Pi ožičen, priključite servo motor na 3-D štampana vrata željezničke pruge kako je pričvršćeno na gornjoj slici.

Sada je projekat završen. Priključite PI maline na željezničku prugu i promatrajte novi sistem koji stvara sigurnije željezničke prijelaze za vozače automobila i konduktere. Igrajte se sa sistemom tako što ćete u interakciji sa grafičkim interfejsom pokrenuti sigurnosne sefove postavljene radi sprječavanja nesreća.

Ovo je kraj vodiča, uživajte u svom novom sistemu pametnih vlakova!

Preporučuje se: