Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 221
1

Плавный старт мотора за 10 секунд до 40% нагрузки

13.06.2020, 12:30. Просмотров 186. Ответов 1
Метки нет (Все метки)

Доброго времени суток всем. Подскажите, пожалуйста, как сделать диапазон регулировки шим от 40% до 80% и плавный запуск до 40% нагрузки за 10 секунд. Сейчас при запуске обороты мгновенно запускаются до 40% и держаться 10 секунд вместо плавного запуска.
https://www.tinkercad.com/thin... 0uqTFE4MWM
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
const int LED_RED = 2;
const int LED_GREEN = 4;
const int BTN_STOP = 6;
const int BTN_START = 3;
const int BTN_CRASH = 1;//потеря обратной связи
 
const int PUMP = 9;
const int PUMP_CONTROL = A1;
 
bool lastBTNStop = LOW;
bool curBTNStop = LOW;
bool lastBTNStart = LOW;
bool curBTNStart = LOW;
bool lastBTNCrash = LOW;
bool curBTNCrash = LOW;
 
int workMode = 0;
int speed = 0;
long ms = 0;
long ms_old = 0;
long ms_blink = 0;
 
bool debounseStartBTN (bool last){
    bool cur = digitalRead(BTN_START);
  
    if (lastBTNStart!=curBTNStart){
        delay(5);
        cur = digitalRead(BTN_START);
    
    }
    return cur;
}
 
bool debounseStopBTN (bool last){
    bool cur = digitalRead(BTN_STOP);
    if (lastBTNStop!=curBTNStop){
        delay(5);
        cur = digitalRead(BTN_STOP);
    }
    return cur;
}
 
bool debounseCrashBTN (bool last){
    bool cur = digitalRead(BTN_CRASH);
    if (lastBTNStop!=curBTNStop){
        delay(5);
        cur = digitalRead(BTN_CRASH);
    }
    return cur;
}
 
 
 
void setup()
{
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
 
  pinMode(BTN_STOP, INPUT);
  pinMode(BTN_START, INPUT);
 
  
  pinMode(PUMP, OUTPUT);
  pinMode(PUMP_CONTROL, INPUT);
  
  Serial.begin(9600); 
}
 
void AllOff(){
  digitalWrite(LED_GREEN, LOW);
  digitalWrite(LED_RED, LOW);
  analogWrite(PUMP, 0);
}
 
 
void loop()
{
 
  //Обработка времени
  ms = millis();
  //Обработка нажатий кнопок
  curBTNStop = debounseStopBTN (lastBTNStop);
  curBTNStart = debounseStartBTN (lastBTNStart);
  curBTNCrash = debounseCrashBTN (lastBTNCrash);
 
  
  //основной код
  //Отслеживание нажатий кнопок
  //включение
  if(curBTNStart == HIGH && lastBTNStart == HIGH && workMode == 0){
    workMode = 1;
 
    ms_old = ms;
  }
 
  //отключение
  if(curBTNStop == LOW && lastBTNStop == HIGH && (workMode == 1 || workMode == 2)){
    AllOff();
 
    digitalWrite(LED_RED, HIGH);
    
    workMode = 0;
 
  }
  
  
  //Потеря обратной связи
  if(curBTNCrash == LOW && lastBTNCrash == HIGH ){
    ms_old = ms;
    workMode = 2;
  
  }
  
  //Режимы
 
  if (workMode == 1){
    if(ms<ms_old+10000){//плавный страрт за 10 секунд
      if(ms>ms_blink+150){
          digitalWrite(LED_GREEN, LOW);
          ms_blink = ms;
      } 
 
    if (ms>ms_blink+50){
          digitalWrite(LED_GREEN, HIGH);
      }
      speed = map(1023, 0, 1023*0.4, 0, 255);//40%
    } else {
      if(ms>ms_blink+350){
          digitalWrite(LED_GREEN, LOW);
          ms_blink = ms;
      } 
 
      if (ms>ms_blink+100){
          digitalWrite(LED_GREEN, HIGH);
      }
      
      speed = map(analogRead(PUMP_CONTROL), 1023*0.8, 1023, 0, 255);//80%
    }      
  
    analogWrite(PUMP, speed);
  } else {
    speed = 0;
  }
  
    if (workMode == 2){ //Потеря обратной связи
    if(ms<ms_old){
     
 
    if (ms>ms_blink+50){
          digitalWrite(LED_RED, HIGH);
      }
      speed = map(1023, 1023, 1023, 1023, 255);
    } else {
      if(ms>ms_blink+350){
          digitalWrite(LED_RED, LOW);
          ms_blink = ms;
      } 
 
      if (ms>ms_blink+100){
          digitalWrite(LED_RED, HIGH);
      }
      
      speed = map(analogRead(PUMP_CONTROL), 1023, 1023, 1023, 255);
    }
            
    analogWrite(PUMP, speed);
  } else {
    speed = 0;
  }
  
  
  //Обработка состояний кнопок
  lastBTNStop = curBTNStop;
  lastBTNStart = curBTNStart;
  lastBTNCrash = curBTNCrash;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2020, 12:30
Ответы с готовыми решениями:

Ремонт CMA AKAI AWM1000WS, Резкий старт мотора, не факт.
Принесли модуль от этого чуда. Откреститься не удалось, заставили лечить, дескать, очень нужный...

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

Периодические подвисания 5-15 секунд - горит индикатор нагрузки hdd
Приветствую, может кто подскажет что-нибудь дельного. Периодически подвисает компьютер на 5-15...

Сма Hoover MK7164D/1-84 не правильная робота мотора или симистора мотора, Е09
СМА HOOVER mk7164d. Модуль invensys 1/475540/bb, проц atmega644. Выдает ошибку Е09. По словам...

1
84 / 23 / 5
Регистрация: 17.03.2016
Сообщений: 182
15.06.2020, 13:30 2
Я думаю нужно воспользоваться циклом http://arduino.ru/Reference/For
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2020, 13:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Срок службы месторождений нефти Саудовской Аравии старт с 1950-х годов и газа России старт с 1960-х годов
Срок службы месторождений нефти Саудовской Аравии старт промышленной добычи с 1950-х годов и...

Создайте кнопки для выбора двух цветов и кнопку Старт. После нажатия кнопки Старт надпись должна мигать выбранными цвет
Создайте кнопки для выбора двух цветов и кнопку Старт. После нажатия кнопки Старт надпись должна...

Ток нагрузки и сопротивление нагрузки
Необходимо рассчитать ток нагрузки Iн и сопротивление нагрузки Rн в этой цепи

Функция перевода секунд в соответствующее количество часов, минут, секунд
Написать программу, в которой пользователь задаѐт количество секунд. Это значение передаѐтся...

Сначала суток прошло N секунд (N целое). Найти количество секунд ...
Сначала суток прошло N секунд (N целое). Найти количество секунд, прошедших сначала последнего...

Всплывающее окно через 30 секунд после загрузки страницы и затем каждые 30 секунд
Задача Нужно реализовать всплывающее окно через 30 секунд после загрузки страницы, показать его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.