Мазмуну:

Smart Train системасы: 4 кадам
Smart Train системасы: 4 кадам

Video: Smart Train системасы: 4 кадам

Video: Smart Train системасы: 4 кадам
Video: महीने की रीडिंग कैसे निकाले IHow to Read Reading Digital Meter #smart #electricity #electricitybill 2024, Июль
Anonim
Smart Train System
Smart Train System

Коопсуздукту жогорулатуу, кырсыктардын алдын алуу жана кырсыктар болгон учурда жардам берүү үчүн оң жана жемиштүү жоопту жогорулатуу үчүн иштелип чыккан.

1 -кадам: Бөлүктөр жана материалдар

Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар

Жогорудагы сүрөттөр төмөнкү бөлүктөр тизмегинин тартибинде жайгаштырылган:

Бөлүктөр тизмеси

1) Бир Raspberry PI 3 - модель В.

2) Бир нан

3) Кабелдер (өйдөдөн төмөн карай) - Бир кубат, бир Ethernet, бир адаптер

4) Бир Серво Мотору

5) Бир 3D басылган темир жол дарбазасы

6) эки LED (артыкчылыктуу кызыл жана жашыл)

7) Бир баскыч

8) Он Jumper Wires

9) Төрт резистор

10) MATLAB менен ноутбук же рабочий

2 -кадам: Конфигурация

Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация

Жогоруда конфигурациянын көптөгөн бурчтан тартылган сүрөттөрү бар:

Киргизүү жерлери (кичине тамга, андан кийин катар номери) учурдагы агымга ылайык ирети менен төмөндө келтирилген.

Зымдар:

j19дан i47ге чейин

j8 - b50

b5 Servoго

c6 үчүн Servo

b7 сервого

a13 - j7

a17 үчүн LED

LED 37ге чейин

e40тан j20га чейин

j53 - j18

j7 үчүн LED

LED үчүн j6

Баскыч:

e54тен h51ге чейин

Резисторлор:

d40тан b37ге чейин

c50 д54 чейин

i51ден j47ге чейин

3 -кадам: Код жана логика

Код жана логика
Код жана логика

Биздин поезд системабыздын максаты - коопсуздукту жогорулатуу жана темир жол кесилиштеринде өлүмгө алып келүүчү кырсыктардын коркунучун азайтуу. Буга жетишүү үчүн, биздин системада айдоочулар үчүн поезд эскертүү системасы, машиналардын жолдон өтүшүнө жол бербөө үчүн түшүрүлгөн физикалык тоскоолдук жана эгер эрте эскертүү системасы иштен чыкса, кондуктордун басуу үчүн резервдик авариялык баскычы бар.

GUI өткөргүч иштетүү системасы:

Жогоруда көрсөтүлгөн GUI, алар поездди автоунаа темир жол кесилиштерине ээ болгон жерлер аркылуу айдап бара жатканда, өткөргүчтү колдонуу үчүн түзүлгөн.

Оң жактын жогорку бурчунда, эгер келе жаткан темир жол өткөөл дарбазасы жабык болсо, өткөргүчкө кабарлайт жана керек болсо кондукторго дарбазаны ачууга же жабууга уруксат берген жарык бар. Төмөндө поезд өтүүчү камералардын жеми көрсөтүлөт. Төмөнкү сол бурчта, поезддин жайгашкан жери графикте жана графиктин астында тынымсыз сызылып турат, поезддин бир күндө бүтүргөн айланууларынын саны көрсөтүлөт. Позициянын графигинин үстүндө өзгөчө кырдаал баскычы жана абал жөнүндө билдирүү бар. Бул кондукторго жолдо машина бар болсо же коопсуздук дарбазасы туура эмес иштесе, авариялык абал үчүн сигнал берүүгө мүмкүндүк берет.

Код:

classdef micro <matlab.apps. AppBase % Колдонмо компоненттерине туура келген касиеттери

касиеттери (Кирүү = жалпыга ачык)

UIFigure matlab.ui. Фигура

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

Matlab.ui.control. Label этикеткасы

аяктоо

касиеттери (Кирүү = купуя)

counter int16

аяктоо

ыкмалар (Кирүү = коомдук)

функция timerCallback (колдонмо, SRC, окуя)

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

app.counter = app.counter + 1;

%программага керек болгон бардык өзгөрмөлөрдү чакырат - - - - - - - - - - - - -

дүйнөлүк rpi

глобалдык с

дүйнөлүк ачык

дүйнөлүк жакын

дүйнөлүк камера

глобалдык м

глобалдык эмс

глобалдык t_count

%------------------------- Поезддин курал бөлүмү --------------------- ---------

ачык болсо == 0

writePosition (s, 50)

app.gateLamp. Color = 'жашыл';

аяктоо

жакын болсо == 0

writePosition (s, 120)

app.gateLamp. Color = 'кызыл';

аяктоо

%---------------------- Камера аркылуу кыймыл аныктоо -----------------------

чын болсо

img = сүрөт (камера);

сүрөт (img);

app. UIAxes (тартылган)

аяктоо

%---------------------- Кол ачык/жабык ----------------------- --------------

if readDigitalPin (rpi, 20)> 1 %17 -пинди (баскычты) окуйт жана сигналды текшерет

i = 40:.5: 150 %көпүрөнү көтөрөт

writePosition (s, i)

аяктоо

i = 1:10 %циклдери үчүн кызыл жарык x жолу ирмелет

writeDigitalPin (rpi, 13, 1)

тындыруу (.5)

writeDigitalPin (rpi, 13, 0)

тындыруу (.5)

аяктоо

writePosition (s, 50)%дарбазаны коет

аяктоо

%-------------------- Мобилдик телефонду колдоо/Сюжет ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

маалыматтар = нөлдөр (200, 1); %участокту жылдыруу үчүн маалыматтарды интеллектуалдаштыруу

фигура (app. UIAxes2)

p = сюжет (маалыматтар)

огу ([xbounda, ybounds])

пауза (1)

тик

toc <30 %30 секунд иштейт

[a, ~] = accellog (m);

эгер узундугу (а)> 200

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

башка

маалыматтар (1: узундук (а)) = а (:, 3);

аяктоо

%сюжет кайра

p. YData = маалыматтар;

тартуу

аяктоо

%------------------ Пикселдин күтүүсүз өзгөрүшү ---------------------------- ------

x1 = img; % камераны пи чыгып окуйт

red_mean = орточо (орточо (x1 (:,,: 1)))); % кызыл пикселдердин орточо суммасын окуйт

green_mean = орточо (орточо (x1 (:,,: 2)))); % жашыл пикселдердин орточо суммасын окуйт

blue_mean = орточо (орточо (x1 (:,,: 3)))); % көк пикселдердин орточо суммасын окуйт

эгер red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

аяктоо

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Button EMS программалоо ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %алып баруучу пин, 16 -пинди өндүрүш катары коёт

configurePin (rpi, 16, 'DigitalInput'); %баскычтын пинин, пин 24тү киргизүү катары коёт

buttonPressed = readDigitalPin (rpi, 16); % 16 пиндеги баскычтын басуу маанисин окуйт

эгер баскыч басылса == 1

басылганда == 1

writeDigitalPin (rpi, 12, 1)

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

end % "buttonPressed == 1" укуругу менен бүтөт

аяктоо

writeDigitalPin (rpi, 16, 0) %баскыч басылбай калганда алып келүүнү өчүрөт setpref ('Интернет', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Интернет', 'E_mail', '[email protected]'); setpref жөнөтүү үчүн % почта эсеби ('Интернет', 'SMTP_Username', '[email protected]'); % жөнөтүүчүлөрдүн колдонуучу аты setpref ('Интернет', 'SMTP_Password', 'efgroup6'); % Жөнөтүүчүлөрдүн сырсөзү

реквизиттер = 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] ',' Өзгөчө кырдаал! ',' Дирижер дароо жооп берүүнү талап кылып, кол менен алмаштыруу которгучун иштетти! ')

app. UndernormalconditionsLabel. Text = ems

аяктоо

аяктоо

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

ыкмалар (Мүмкүнчүлүк = жеке)

% Компонент түзүлгөндөн кийин аткарылуучу код

startupFcn функциясы (колдонмо)

%---------- Бул функция үчүн зарыл болгон бардык өзгөрмөлөр --------------------

глобалдык rpi %arduino

rpi = raspi ('169.254.0.2', 'pi', 'малина');

глобалдык s %servo

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

дүйнөлүк ачык

open = 1;

дүйнөлүк жабык

жабык = 1;

дүйнөлүк камера

камера = камералык такта (rpi);

глобалдык м

m = mobiledev;

глобалдык эмс

ems = 'Өзгөчө кырдаал жөнүндө кабарланды, EMSге кабарлоо';

глобалдык t_count

t_count = 0;

%сырсөздөгү туташтыргыч EFGroup6

Loop үчүн % Timer Function --------------------------------

app.counter = 0;

t = таймер (…

'TimerFcn', @app.timerCallback,…

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

'ExecutionMode', 'fixedSpacing',…

'TasksToExecute', inf);

баштоо (t);

аяктоо

% Кайра чалуу функциясы

ManualOverrideSwitchValueChanged функциясы (колдонмо, окуя)

аяктоо

% Button басылган функция: OpenGateButton

OpenGateButtonPushed функциясы (колдонмо, окуя)

дүйнөлүк жакын

close = 0;

аяктоо

% Button басылган функция: CloseGateButton

CloseGateButtonPushed функциясы (колдонмо, окуя)

дүйнөлүк ачык

open = 0;

аяктоо

аяктоо

% Колдонмонун башталышы жана курулушу

ыкмалар (Кирүү = купуя)

% UIFigure жана компоненттерди түзүү

createComponents функциясы (колдонмо)

% UIFigure түзүү

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'UI Figure';

RailwaygatestatusLampLabel түзүү

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'оң'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Темир жол дарбазасынын абалы';

GateLamp түзүү

app.gateLamp = uilamp (app. UIFigure);

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

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

% OpenGateButton түзүү

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

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

app. OpenGateButton. Text = 'Эшикти ачуу';

% CloseGateButton түзүү

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

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

app. CloseGateButton. Text = 'Дарбазаны жабуу';

% UIAxes түзүү

app. UIAxes = uiaxes (app. UIFigure);

аталышы (app. UIAxes, 'Камера түрмөгү')

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

EmergencyButtonStatusLampLabel түзүү

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'оңго'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Өзгөчө кырдаал баскычынын абалы';

EmergencyButtonStatusLamp түзүү

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

% UndernormalconditionsLabel түзүү

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Кадимки шарттарда';

% UIAxes2 түзүңүз

app. UIAxes2 = uiaxes (app. UIFigure);

аталышы (app. UIAxes2, "Поезддин позициясы")

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];

% EF230Group6Label түзүү

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'борбор';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'жоон';

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

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

IanAllishKellyBondIanDaffronLabel түзүү

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ян Аллиш, Келли Бонд, Ян Даффрон';

LoopsCompletedLabel түзүү

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Циклдар аяктады:';

% Белги түзүү

app. Label = uilabel (app. UIFigure);

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

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

аяктоо

аяктоо

ыкмалар (Кирүү = коомдук)

% Колдонмо куруу

колдонмо = микро

% Компоненттерди түзүү жана конфигурациялоо

createComponents (колдонмо)

% Колдонмону App Designer менен каттаңыз

registerApp (app, app. UIFigure)

% Баштоо функциясын аткарыңыз

runStartupFcn (колдонмо, @startupFcn)

эгер nargout == 0

ачык колдонмо

аяктоо

аяктоо

% Колдонмо жок кылынардан мурун аткарылган код

жок кылуу (колдонмо)

Колдонмо жок кылынганда % UIFigure жок кылынат

жок кылуу (app. UIFigure)

аяктоо

аяктоо

аяктоо

4 -кадам: Акыркы кадам

Акыркы кадам
Акыркы кадам

Код жазылып, Raspberry Pi зым тартылгандан кийин, servo моторун 3-D басылган темир жолдун дарбазасына өйдөдөгү сүрөттө тиркелет.

Азыр, долбоор аяктады. Малина PIди поезд жолуна туташтырыңыз жана вагондун айдоочулары үчүн дагы, кондукторлор үчүн дагы коопсуз темир жол өткөөлдөрүн түзүүчү жаңы системаны байкаңыз. Кырсыктарды болтурбоо үчүн коюлган сейфтерди иштетүү үчүн GUI менен өз ара аракеттенүү менен система менен ойноңуз.

Үйрөткүч ушуну менен аяктады, жаңы Smart Train Systemден ырахат алыңыз!

Сунушталууда: