Оглавление:
Видео: Система Smart Train: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Предназначен для повышения безопасности, предотвращения несчастных случаев и повышения положительного и продуктивного реагирования, чтобы помочь в случае возникновения несчастных случаев.
Шаг 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!
Рекомендуемые:
СИСТЕМА СЧЕТА И УПРАВЛЕНИЯ ЗАПАСОМ: 3 шага
СИСТЕМА УПРАВЛЕНИЯ СЧЕТАМИ И СЧЕТАМИ: С помощью этих инструкций я подскажу вам идею создания системы управления счетами и инвентаризацией. С использованием доступа MS. Это очень просто и не требует дополнительных знаний компьютера или программирования. Если у вас есть базовые знания Ms Доступ, столы. формы и отчеты t
Система автоматического полива растений: 4 шага
Sysem для автоматического полива растений: Вот как я сделал свою систему автоматического полива растений
Система оповещения о парковке автомобиля на базе Arduino - Шаг за шагом: 4 шага
Система оповещения о парковке автомобиля на базе Arduino | Пошагово: в этом проекте я спроектирую простую схему датчика парковки заднего хода Arduino с использованием ультразвукового датчика Arduino UNO и HC-SR04. Эта система оповещения о реверсе автомобиля на базе Arduino может использоваться для автономной навигации, определения дальности роботов и других диапазонов r
Система измерения температуры и влажности Arduino - Техник Джо: 3 шага
Система измерения температуры и влажности Arduino | Техник Джо: После создания двух бесполезных игр с Arduino и зря потраченного времени на то, чтобы поиграть в них, я захотел создать что-то полезное с Arduino. Мне пришла в голову идея системы измерения температуры и влажности воздуха для растений. Чтобы проект немного п
Система сортировки цветов: система на основе Arduino с двумя ремнями: 8 шагов
Система сортировки по цвету: система на основе Arduino с двумя ремнями: транспортировка и / или упаковка продуктов и предметов в промышленной сфере осуществляется с использованием линий, изготовленных с использованием конвейерных лент. Эти ремни помогают перемещать предмет из одной точки в другую с определенной скоростью. Некоторые задачи обработки или идентификации могут быть