Talaan ng mga Nilalaman:

Smart Train System: 4 na Hakbang
Smart Train System: 4 na Hakbang

Video: Smart Train System: 4 na Hakbang

Video: Smart Train System: 4 na Hakbang
Video: Камера ANBIUX ДВУГЛАЗКА УДИВИЛА после ОБНОВЛЕНИЯ!!! 2024, Nobyembre
Anonim
Sistema ng Smart Train
Sistema ng Smart Train

Dinisenyo upang madagdagan ang kaligtasan, maiwasan ang mga aksidente, at madagdagan ang positibo at produktibong tugon upang matulungan kung mangyari ang mga aksidente.

Hakbang 1: Mga Bahagi at Materyales

Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan

Ang mga larawan sa itaas ay inilalagay sa pagkakasunud-sunod ng Listahan ng Mga Bahagi sa ibaba:

Listahan ng Mga Bahagi

1) Isang Raspberry PI 3 - Model B

2) Isang Breadboard

3) Mga Cable (mula sa Taas hanggang Ibaba) - Isang Lakas, Isang Ethernet, Isang Adapter

4) Isang Servo Motor

5) Isang 3D Naka-print na Gate ng Riles

6) Dalawang LEDs (Mas gusto na Pula at Green)

7) Isang Push Button

8) Sampung Jumper Wires

9) Apat na Resistors

10) Laptop o Desktop na may MATLAB

Hakbang 2: Pag-configure

Pag-configure
Pag-configure
Pag-configure
Pag-configure
Pag-configure
Pag-configure
Pag-configure
Pag-configure

Sa itaas ay ang mga larawan ng pag-configure mula sa maraming mga anggulo:

Ang mga lokasyon ng pin (mas mababang letra ng letra na sinusundan ng isang numero ng hilera) ay nakalista sa ibaba upang masundan ang kasalukuyang daloy.

Mga wire:

j19 hanggang i47

j8 hanggang b50

b5 kay Servo

c6 kay Servo

b7 sa servo

a13 hanggang j7

a17 sa LED

LED sa a37

e40 hanggang j20

j53 hanggang j18

j7 sa LED

LED sa j6

Button:

e54 hanggang h51

Mga lumalaban:

d40 hanggang b37

c50 hanggang d54

i51 hanggang j47

Hakbang 3: Code at Logic

Code at Logic
Code at Logic

Layunin ng aming system ng tren na dagdagan ang kaligtasan at babaan ang peligro ng mga potensyal na nakamamatay na aksidente sa mga tawiran sa riles. Upang makamit ito, ang aming system ay may sistema ng babala ng tren para sa mga driver, isang pisikal na hadlang na ibinabaan upang maiwasan ang pagtawid ng mga kotse sa track, at isang backup na pindutang pang-emergency para ma-press ng conductor kung nabigo ang maagang sistema ng babala.

Sistema ng Pagpapatakbo ng GUI Conductor:

Ang GUI, na ipinakita sa itaas, ay nilikha para sa paggamit ng konduktor habang nagmamaneho sila ng tren sa mga lugar ng track na mayroong mga tawiran sa trapiko ng sasakyan.

Sa kanang sulok sa itaas, mayroong isang ilaw na aabisuhan ang konduktor kung ang isang darating na riles na tumatawid sa riles ay sarado at pinapayagan ang konduktor na buksan o isara ang gate kung kinakailangan. Sa ibaba nito, ipinakita ang feed mula sa mga camera na ipinapasa ng tren. Sa kaliwang sulok sa ibaba, ang lokasyon ng tren ay patuloy na naka-plot sa isang graph at sa ibaba ng grap, ang bilang ng mga lap na nakumpleto ng tren sa isang araw ay nakasaad. Sa itaas ng graph ng posisyon, Mayroong isang emergency button at pahayag sa katayuan. Pinapayagan nitong magsenyas ang conductor para sa isang emergency kung mayroong isang kotse sa track o ang safety gate ay hindi gumagana nang maayos.

Code:

classdef micro <matlab.apps. AppBase% Mga Katangian na tumutugma sa mga bahagi ng app

mga pag-aari (Access = publiko)

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

Emergency ButtonStatusLampLabel matlab.ui.control. Label

Emergency ButtonStatusLamp matlab.ui.control. Lamp

UndernormalconditionsLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

Mga LoopsCompletedLabel matlab.ui.control. Label

Label matlab.ui.control. Label

magtapos

mga pag-aari (Access = pribado)

counter int16

magtapos

mga pamamaraan (Access = publiko)

pagpapaandar timerCallback (app, src, kaganapan)

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

app.counter = app.counter + 1;

% tawagan ang lahat ng mga variable na kailangan ng programa - - - - - - - - - - - - -

pandaigdigan rpi

pandaigdigang s

pandaigdigang bukas

pandaigdigang pagsara

pandaigdigang cam

pandaigdigang m

global ems

pandaigdigang t_count

% ----------------- Train Arm Seksyon -------------------- ---------

kung bukas == 0

isulat angPosisyon (s, 50)

app.gateLamp. Color = 'berde';

magtapos

kung malapit == 0

isulat angPosisyon (s, 120)

app.gateLamp. Color = 'pula';

magtapos

% -----------------Motion Detection sa pamamagitan ng Camera --------------------

habang totoo

img = snapshot (cam);

imahe (img);

app. UIAxes (drawnow)

magtapos

% ----------------- Buksan / isara ang braso ----------------- ------------

kung readDigitalPin (rpi, 20)> 1% na bumabasa ng pin 17 (button) at suriin para sa signal

para sa i = 40:.5: 150% nakataas ang tulay

isulat angPosisyon (s, i)

magtapos

para sa i = 1:10% na mga loop na kumikislap ng pulang ilaw x dami ng beses

isulatDigitalPin (rpi, 13, 1)

i-pause (.5)

isulatDigitalPin (rpi, 13, 0)

i-pause (.5)

magtapos

isulat angPosisyon (s, 50)% ng gate

magtapos

% -------------------- Suporta / Plot ng Mobile Phone ----------------- -

m. AccelerationSensorEnified = 1

m.logging = 1

data = zero (200, 1); % intialize ang data para sa rolling plot

figure (app. UIAxes2)

p = balangkas (data)

axis ([xbounda, ybounds])

i-pause (1)

tic

habang toc <30% tumakbo sa loob ng 30 segundo

[a, ~] = accellog (m);

kung haba (a)> 200

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

iba pa

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

magtapos

% redraw plot

p. YData = data;

drawnow

magtapos

% ------------------ Biglang Pagbabago ng Pixel ---------------------------- ------

x1 = img; % basahin ang camera off ng pi

red_mean = ibig sabihin (ibig sabihin (x1 (:,:, 1))); Binabasa ni% ang average na halaga ng mga pulang pixel

green_mean = ibig sabihin (ibig sabihin (x1 (:,:, 2))); Binabasa ni% ang average na halaga ng mga berdeng pixel

blue_mean = ibig sabihin (ibig sabihin (x1 (:,:, 3))); Binabasa ni% ang average na halaga ng mga asul na pixel

kung red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

magtapos

app. LoopsCompletedLabel. Txt = num2str (t_count)

% ------------------ Programming Button EMS ------------- ---

configurePin (rpi, 12, 'DigitalOutput'); Itinatakda ni% ang pin na pin, pin 16, bilang isang output

configurePin (rpi, 16, 'DigitalInput'); Itinatakda ni% ang pindutan ng pindutan, pin 24, bilang isang input

buttonPressed = readDigitalPin (rpi, 16); % Basahin ang pindutan ng pindutin ang halaga sa pin 16

kung ang pindutan ay pinindot == 1

habang pinindot ang pindutan == 1

isulatDigitalPin (rpi, 12, 1)

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

magtatapos% Nagtatapos ng 'habang buttonPressed == 1' loop

magtapos

writeDigitalPin (rpi, 16, 0)% Itinatakda ang humantong sa off kapag ang pindutan ay hindi na pinindot setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mail account na ipadala mula sa setpref ('Internet', 'SMTP_Username', '[email protected]'); % mga nagpadala username setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Password ng Mga Nagpadala

props = java.lang. System.getProperties;

props.setProperty ('mail.smtp.auth', 'totoo'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('[email protected] ',' Emergency Status! ',' Pinapagana ng conductor ang manual override switch, humihiling ng agarang tugon! ')

app. UndernormalconditionsLabel. Txt = ems

magtapos

magtapos

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

mga pamamaraan (Access = pribado)

% Code na nagpapatupad pagkatapos ng paggawa ng sangkap

pag-andar startupFcn (app)

% ---------- Lahat ng kailangan ng variable para sa pagpapaandar na ito --------------------

pandaigdigan rpi% arduino

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

pandaigdigang% servo

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

pandaigdigang bukas

buksan = 1;

global sarado

sarado = 1;

pandaigdigang cam

cam = cameraboard (rpi);

pandaigdigang m

m = mobiledev;

global ems

ems = 'Isang emerhensiya ang naiulat, na inaabisuhan ang EMS';

pandaigdigang t_count

t_count = 0;

ang konektor sa% password ay EFGroup6

% Timer Function para sa Loop

app.counter = 0;

t = timer (…

'TimerFcn', @ app.timerCallback,…

'StartDelay', 1,… 'Panahon', 1,…

'ExecutionMode', 'fixedSpacing',…

'TasksToExecut', inf);

simulan (t);

magtapos

% Pag-andar ng Callback

pagpapaandar ng ManualOverrideSwitchValueChanged (app, kaganapan)

magtapos

% Button hunhon function: OpenGateButton

pagpapaandar OpenGate ButtonPush (app, kaganapan)

pandaigdigang pagsara

malapit = 0;

magtapos

% Button hunhon function: CloseGateButton

pagpapaandar CloseGateButtonPush (app, kaganapan)

pandaigdigang bukas

buksan = 0;

magtapos

magtapos

% Initisasyon at konstruksyon ng app

mga pamamaraan (Access = pribado)

% Lumikha ng UIFigure at mga bahagi

function createComponents (app)

% Lumikha ng UIFigure

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'UI Larawan';

% Lumikha ng RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'kanan'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Txt = 'Katayuan ng Railway gate';

% Lumikha ng gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

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

% Lumikha OpenGate Button

app. OpenGate Button = uibutton (app. UIFigure, 'push');

app. OpenGate Button ButtonPushFcn = createCallbackFcn (app, @OpenGate ButtonPush, totoo); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Txt = 'Buksan ang Gate';

% Lumikha CloseGate Button

app. CloseGate Button = uibutton (app. UIFigure, 'push');

app. CloseGate Button ButtonPushFcn = createCallbackFcn (app, @CloseGate ButtonPush, totoo); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Isara ang Gate';

% Lumikha ng UIAxes

app. UIAxes = uiaxes (app. UIFigure);

pamagat (app. UIAxes, 'Camera Feed')

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

% Lumikha ng Emergency ButtonStatusLampLabel

app. Emergency ButtonStatusLampLabel = uilabel (app. UIFigure); app. Emergency ButtonStatusLampLabel. HorizontalAlignment = 'kanan'; app. Emergency ButtonStatusLampLabel. Position = [97 323 142 22]; app. Emergency ButtonStatusLampLabel. Txt = 'Katayuan ng Button ng Emergency';

% Lumikha Emergency ButtonStatusLamp

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

% Lumikha ng UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Txt = 'Sa ilalim ng normal na mga kondisyon';

% Lumikha ng UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

pamagat (app. UIAxes2, 'Posisyon ng Tren')

xlabel (app. UIAxes2, 'Posisyon X')

ylabel (app. UIAxes2, 'Y Posisyon')

app. UIAxes2. Box = 'on';

app. UIAxes2. XGrid = 'on';

app. UIAxes2. YGrid = 'on';

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

% Lumikha ng EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'center';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'naka-bold';

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

app. EF230Group6Label. Txt = 'EF 230 Pangkat 6';

% Lumikha IanAllishKellyBondIanDaffronLabel

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

% Lumikha ng Mga loop na KumpletongLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsComplacedLabel. Txt = 'Mga Loops Nakumpleto:';

% Lumikha ng Label

app. Label = uilabel (app. UIFigure);

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

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

magtapos

magtapos

mga pamamaraan (Access = publiko)

% Bumuo ng app

function na app = micro

% Lumikha at mag-configure ng mga bahagi

createComponents (app)

% Rehistro ang app sa App Designer

registerApp (app, app. UIFigure)

% Ipatupad ang pagpapaandar ng startup

runStartupFcn (app, @startupFcn)

kung nargout == 0

malinaw na app

magtapos

magtapos

% Code na nagpapatupad bago ang pagtanggal ng app

tanggalin (app)

% Tanggalin ang UIFigure kapag ang app ay tinanggal

tanggalin (app. UIFigure)

magtapos

magtapos

magtapos

Hakbang 4: Pangwakas na Hakbang

Pangwakas na Hakbang
Pangwakas na Hakbang

Kapag nakasulat na ang code at naka-wire na ang Raspberry Pi, ikabit ang servo motor sa 3-D na naka-print na gate ng riles ng tren habang naka-attach ito sa larawan sa itaas.

Ngayon, kumpleto na ang proyekto. Ikonekta ang raspberry PI sa track ng tren at obserbahan ang bagong system na lumilikha ng mas ligtas na mga tawiran ng riles para sa parehong mga driver ng kotse at conductor. Maglaro sa system sa pamamagitan ng pakikipag-ugnay sa GUI upang ma-trigger ang mga nabigong mga safes na itinakda upang maiwasan ang mga aksidente.

Iyon ang pagtatapos ng tutorial, tangkilikin ang iyong bagong Smart Train System!

Inirerekumendang: