Оглавление:

Система Smart Train: 4 шага
Система Smart Train: 4 шага

Видео: Система Smart Train: 4 шага

Видео: Система Smart Train: 4 шага
Видео: БОКОВУШЕЧКА У ТУАЛЕТА в плацкарте 2024, Ноябрь
Anonim
Система умных поездов
Система умных поездов

Предназначен для повышения безопасности, предотвращения несчастных случаев и повышения положительного и продуктивного реагирования, чтобы помочь в случае возникновения несчастных случаев.

Шаг 1: Детали и материалы

Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы

Приведенные выше изображения расположены в порядке, указанном в списке запчастей ниже:

Список деталей

1) Один Raspberry PI 3 - Модель B

2) Один макет

3) Кабели (сверху вниз) - одно питание, один Ethernet, один адаптер

4) Один серводвигатель

5) Одни ворота для железных дорог, напечатанные на 3D-принтере

6) Два светодиода (желательно красный и зеленый)

7) Одна кнопка

8) Десять перемычек

9) Четыре резистора

10) Ноутбук или настольный компьютер с MATLAB

Шаг 2: настройка

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

Выше представлены изображения настройки с разных ракурсов:

Расположение контактов (строчная буква, за которой следует номер строки) перечислены ниже в порядке, соответствующем текущему потоку.

Провода:

с j19 на i47

от j8 до b50

b5 в сервопривод

c6 в сервопривод

b7 на сервопривод

от a13 до j7

от a17 до светодиода

Светодиод к a37

от e40 до j20

с j53 до j18

j7 для светодиода

Светодиод к j6

Кнопка:

с e54 на h51

Резисторы:

от d40 до b37

c50 по d54

i51 для j47

Шаг 3. Код и логика

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

Цель нашей системы поездов - повысить безопасность и снизить риск смертельных аварий на железнодорожных переездах. Для этого в нашей системе есть система предупреждения о поездах для водителей, физический барьер, который снижается, чтобы машины не пересекали рельсы, и резервная аварийная кнопка, которую кондуктор нажимает в случае отказа системы раннего предупреждения.

Операционная система GUI Conductor:

Графический интерфейс пользователя, показанный выше, был создан для использования кондукторами, когда они ведут поезд через участки пути, через которые проходят железнодорожные переезды для автомобилей.

В правом верхнем углу есть световой индикатор, который уведомляет кондуктора, если ворота приближающегося железнодорожного переезда закрыты, и позволяет кондуктору при необходимости открывать или закрывать ворота. Ниже показано изображение с камер, которые проезжает поезд. В левом нижнем углу на графике непрерывно отображается местоположение поезда, а под графиком указывается количество кругов, которые поезд прошел за день. Над графиком положения находится кнопка экстренной помощи и сообщение о состоянии. Это позволяет кондуктору сигнализировать об аварийной ситуации, если на пути стоит машина или если калитка не работает должным образом.

Код:

classdef micro <matlab.apps. AppBase% Свойства, соответствующие компонентам приложения

свойства (Доступ = общедоступный)

UIFigure matlab.ui. Figure

Состояние железнодорожных воротLampLabel 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

конец

свойства (Доступ = частный)

счетчик int16

конец

методы (Доступ = общедоступный)

функция timerCallback (приложение, источник, событие)

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

app.counter = app.counter + 1;

% вызывает все переменные, необходимые программе - - - - - - - - - - - - - -

глобальный rpi

глобальный s

глобальный открытый

глобальное закрытие

глобальная камера

глобальный м

глобальный ems

глобальный t_count

% ------------------------- Секция руки поезда --------------------- ---------

если открыто == 0

writePosition (s, 50)

app.gateLamp. Color = 'зеленый';

конец

если близко == 0

writePosition (s, 120)

app.gateLamp. Color = 'красный';

конец

% ---------------------- Обнаружение движения через камеру -----------------------

пока правда

img = снимок (камера);

изображение (img);

app. UIAxes (нарисованоow)

конец

% ---------------------- Постановка открытия / закрытия ----------------------- --------------

если 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); % инициализации данных для скользящего графика

рисунок (приложение UIAxes2)

p = график (данные)

ось ([xbounda, ybounds])

пауза (1)

тик

в то время как toc <30% работает в течение 30 секунд

[а, ~] = ускорение (м);

если длина (а)> 200

data = a (конец-199: конец, 3);

еще

данные (1: длина (а)) = а (:, 3);

конец

% перерисовать график

p. YData = data;

нарисованный

конец

% ------------------ Внезапное изменение пикселей ---------------------------- ------

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)

% ------------------ Кнопочное программирование EMS ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); % устанавливает вывод светодиода, вывод 16, как выход

configurePin (rpi, 16, 'Цифровой ввод'); % устанавливает контакт кнопки, контакт 24, как вход

buttonPressed = readDigitalPin (rpi, 16); % Считывает значение нажатия кнопки на выводе 16

если buttonPressed == 1

пока кнопка нажата == 1

writeDigitalPin (rpi, 12, 1)

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

end% Завершает цикл while buttonPressed == 1

конец

writeDigitalPin (rpi, 16, 0)% Выключает светодиод, когда кнопка больше не нажимается setpref ('Интернет', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Интернет', 'E_mail', '[email protected]'); % mail аккаунт для отправки из setpref ('Интернет', 'SMTP_Username', '[email protected]'); % senders username setpref ('Интернет', 'SMTP_Password', 'efgroup6'); % Отправителя пароль

props = java.lang. System.getProperties;

props.setProperty ('mail.smtp.auth', 'истина'); 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', 'пи', 'малина');

глобальный s% сервопривод

s = серво (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);

глобальный открытый

open = 1;

глобальный закрытый

закрыто = 1;

глобальная камера

cam = cameraboard (rpi);

глобальный м

m = mobiledev;

глобальный ems

ems = 'Поступило сообщение об экстренной ситуации, уведомление EMS';

глобальный t_count

t_count = 0;

коннектор на% password - EFGroup6

% Функция таймера для цикла --------------------------------

app.counter = 0;

t = таймер (…

TimerFcn, @ app.timerCallback,…

«StartDelay», 1,… «Period», 1,…

ExecutionMode, fixedSpacing,…

'TasksToExecute', инф);

start (t);

конец

% Функция обратного вызова

функция ManualOverrideSwitchValueChanged (приложение, событие)

конец

% Функция нажатия кнопки: OpenGateButton

функция OpenGateButtonPushing (приложение, событие)

глобальное закрытие

закрыть = 0;

конец

% Функция нажатия кнопки: CloseGateButton

функция CloseGateButtonPushing (приложение, событие)

глобальный открытый

open = 0;

конец

конец

% Инициализация и построение приложения

методы (Доступ = частный)

% Создать UIFigure и компоненты

функция createComponents (приложение)

% Создать UIFigure

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'Рисунок пользовательского интерфейса';

% Create RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'право'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Статус железнодорожных ворот';

% Create 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, 'нажать');

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

app. OpenGateButton. Text = 'Открыть ворота';

% Create CloseGateButton

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

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

app. CloseGateButton. Text = 'Закрыть ворота';

% Create UIAxes

app. UIAxes = uiaxes (app. UIFigure);

title (app. UIAxes, 'Camera Feed')

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

% Create UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'В нормальных условиях';

% Create UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

title (app. UIAxes2, 'Позиция поезда')

xlabel (app. UIAxes2, 'Позиция X')

ylabel (app. UIAxes2, 'Y Position')

app. UIAxes2. Box = 'вкл';

app. UIAxes2. XGrid = 'вкл';

app. UIAxes2. YGrid = 'вкл';

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

% Create IanAllishKellyBondIanDaffronLabel

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

% Create LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Циклы завершены:';

% Create Label

app. Label = uilabel (app. UIFigure);

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

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

конец

конец

методы (Доступ = общедоступный)

% Создать приложение

функция приложение = микро

% Создание и настройка компонентов

createComponents (приложение)

% Зарегистрируйте приложение в App Designer

registerApp (приложение, приложение. UIFigure)

% Выполнить функцию запуска

runStartupFcn (приложение, @startupFcn)

если nargout == 0

очистить приложение

конец

конец

% Код, который выполняется перед удалением приложения

удалить (приложение)

% Удалить UIFigure при удалении приложения

удалить (app. UIFigure)

конец

конец

конец

Шаг 4: Заключительный шаг

Заключительный этап
Заключительный этап

После того, как код был написан и Raspberry Pi был подключен, прикрепите серводвигатель к воротам железной дороги с трехмерной печатью, как показано на рисунке выше.

Теперь проект завершен. Подключите Raspberry PI к железнодорожным путям и посмотрите, как новая система создает более безопасные железнодорожные переезды как для водителей автомобилей, так и для кондукторов. Поиграйте с системой, взаимодействуя с графическим интерфейсом пользователя, чтобы активировать аварийные сейфы, установленные для предотвращения несчастных случаев.

Это конец учебника, наслаждайтесь своей новой системой Smart Train!

Рекомендуемые: