Автоматизация открывания двери

Igoreck
Offline
Зарегистрирован: 01.03.2017

Здравствуйте дорогие форумчане.

 

Хочу поделиться с Вами идеей автоматизацией для открывания двери.

 

Выкладываю алгоритм. Дополнение, изменения логики, написания кода только приветствуется!

/*
Алгоритм.
Входы:                                         
SB1 – концевик NO                              
SB2 – концевик NO                              
Start – кнопка NO встроенная в энкодер         
CS – сигнал датчика тока с  G224В21А24v21
ENC – энкодер
OLED - дисплей I2C

Выходы:
PWM - ШИМ сигнал для G224В21А24v21
LED - сигнальная светодиодная лампа
DIR - сигнал высокого уровня для G224В21А24v21
________________________________________________________
1). ГЛАВНЫЙ ЦИКЛ.
Если при подаче питания, концевик "SB1" - нормально замкнут,
а "SB2" - нормально разомкнут, то переходим в РЕЖИМ ОТКРЫТИЯ.
Если концевик " SB1" - нормально разомкнут, а "SB2" - нормально замкнут, то
переходим в РЕЖИМ ЗАКРЫТИЯ.
Если по какой-то причине не один концевик не замкнут,
то на OLED дисплей выводим надпись "ОШИБКА! НАЖМИ КНОПКУ START".
Если нажали и отпустили кнопку "Start", то переходим в "АВАРИЙНЫЙ РЕЖИМ,
а при удержании кнопки "Start" более чем пяти секунд,
то переходим в "СЕРВИСНОЕ МЕНЮ".
2). СЕРВИСНОЕ МЕНЮ. 
"sb1"        – 1 или 0  (просмотр состояния).
"sb2"        – 1 или 0 (просмотр состояния).
"CS"         – 0…1023 (изменения значения уставки срабатывания датчика тока). 
"PWM_SPEED"  – 0…10000мс (изменения время работы PWM за один старт). 
"SPEED_PWM1" – 0…1000мс (изменения скорости заполнения ШИМ от 0% до 20%).
"SPEED_PWM2" – 0…10000мс (изменения скорости заполнения ШИМ от 20% до 100%).
"SPEED_PWM3" – 0…1000мс (изменения скорости заполнения ШИМ от 100% до 20%).
"DIR"        –  1 или 0 (инверсия сигнала высокого уровня).  
3). АВАРИЙНЫЙ РЕЖИМ.
Отображаем на OLED дисплее "АВАРИЙНЫЙ РЕЖИМ".
Опрашиваем кнопку  "Start", и как только её нажали и отпустили,
включаем  только "SPEED_PWM1" и мигаем светодиодом "LED" с частотой 1с.   
Как только сработал "SB1", то отключаем "SPEED_PWM1", и "LED",
а на OLED дисплей выводим надпись "ЗАКРЫТО".
Если не сработал "SB1", или был превышен ток уставки "CS",
или вышел лимит времени работы "PWM_SPEED", то отключаем "SPEED_PWM1",
мигаем "LED" с частотой 0,5с., и на OLED дисплей выводим надпись "ОШИБКА ПРИВОДА".
4). РЕЖИМ ОТКРЫТИЯ.
На OLED дисплей выводим надпись "ЗАКРЫТО"
Если нажали и отпустили кнопку "Start",
то на OLED дисплей выводим надпись "ВНИМАНИЕ ДВЕРИ ОТКРЫВАЮТСЯ",
включаем сигнал высокого уровня "DIR",
последовательно SPEED_PWM1, SPEED_PWM2, SPEED_PWM3 и мигаем "LED" с частотой 1с.   
Как только сработал "SB2", то отключаем "SPEED_PWM3", "LED", "DIR",
и на OLED дисплей выводим надпись "ОТКРЫТО".
Если не сработал "SB2", или было превышение тока уставки "CS",
то отключаем "SPEED_PWM3", "LED", и переходим в "АВАРИЙНЫЙ РЕЖИМ".
Если не сработал "SB2", и вышел лимит времени работы "PWM_SPEED",
то отключаем "SPEED_PWM3", мигаем "LED" с частотой 0,5с.,
и на OLED дисплей выводим надпись "ОШИБКА ПРИВОДА".
5). РЕЖИМ ЗАКРЫТИЯ. 
  На OLED дисплей выводим надпись "ОТКРЫТО".
Если нажали и отпустили кнопку "Start",
то на OLED дисплей выводим надпись "ВНИМАНИЕ ДВЕРИ ЗАКРЫВАЮТСЯ",
включаем последовательно SPEED_PWM1, SPEED_PWM2, SPEED_PWM3,
и мигаем "LED" с частотой 1с.
Как только сработал "SB1", то отключаем "SPEED_PWM3", "LED",
и на OLED дисплей выводим надпись "ЗАКРЫТО".
Если не сработал "SB1", или было превышение тока уставки "CS",
то отключаем "SPEED_PWM3",  "LED", и переходим в "АВАРИЙНЫЙ РЕЖИМ".
Если не сработал "SB1", и вышел лимит времени работы "PWM_SPEED",
то отключаем "SPEED_PWM3", мигаем "LED" с частотой 0,5с.,
и на OLED дисплей выводим надпись "ОШИБКА ПРИВОДА".

*/

 

Morroc
Offline
Зарегистрирован: 24.10.2016

Офигеть. Прям мощно задвинул! Все двери твои!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igoreck пишет:

Хочу поделиться 

Спасибо

Igoreck пишет:

написания кода только приветствуется!

Не вопрос! Вы пишите, а я поприветствую!

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Igoreck пишет:

Здравствуйте дорогие форумчане.

Хочу поделиться с Вами идеей автоматизацией для открывания двери.

Я бы тут такими идеями аккуратнее разбрасывался. Народ на форуме ушлый - украдут!

kalapanga
Offline
Зарегистрирован: 23.10.2016

Жуть какая-то... Igoreck, алгоритм не бывает сам по себе, есть алгоритм решения какой-либо задачи. Поэтому прежде чем "выкладывать алгоритм" неплохо было бы сформулировать задачу, которую он должен будет решить. Сейчас задачи нет - обсуждать нечего. Как сказать, правильный алгоритм или нет, если не знать - что он делать-то должен?

Но всё-таки немного по тексту. Это не алгоритм. Ошибка типичная - вместо алгоритма у Вас то и дело лезет попытка его программной реализации, да и с терминологией беда. Ну что за "сработал SB1", "включаем только SPEED_PWM1"? Как понять, что здесь происходит? В алгоритме должны быть состояния двери (открыта, закрыта, приоткрыта), действия, которые устройство может совершить (открыть дверь, закрыть дверь), действия, которые может совершить человек (постучать, нажать кнопку) и т.д. Никаких переменных, пинов, шимов и прочего быть не должно.