• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Контроллер для точечной сварки.

EXIT

New member
Всем доброго времени суток.
Я хочу сделать контроллер для точечной сварки, собственно задумка такая, Nodemcu v3 будет управлять оптосимистором MOC3061, по нажатию кнопки MOC открывается на заданное переменным резистором время.
Я программист так себе, пробовал писать самостоятельно, но что то не втыкаю совсем как работает сам код, сейчас сделал скетчь в ARDUBlock, все ровно не работает.
Пока не подключаю отптопару а поставил обычный светодиод на 3V через резистор на 250 Ом, собственно ничего не работает как надо, диод светится после нескольких нажатий на кнопку и не гаснет.
Код представил ниже, это тот что я собрал в ArduBlock.
Схему с распиновкой прикрепил, светодиод это условно оптопара.
Мощностью оптопары я не буду управлять, мне нужно что бы она открывалась максимально.
Пожалуйста подскажите мне где я ошибаюсь.


long Time = 0;
long SW = 0;
long TR = 0;

void time() {
Time = analogRead(A0);
Time = map(Time, 0, 1023, 0, 10);
}


void setup() {
pinMode(5, INPUT_PULLUP);

}

void loop() {
if (digitalRead(5) == 0) {
SW = 1;
TR = Time;
}
if (SW == 1) {
TR = TR - 1;
pinMode(13, OUTPUT);
digitalWrite(13, 1);
if (TR == 0) {
TR = 0;
SW = 0;
}
if (SW == 0) {
pinMode(13, OUTPUT);
digitalWrite(13, 0);
}
}

}
 

Вложения

CodeNameHawk

Moderator
Команда форума
Кнопка в схеме возле сварки, без внешней подтяжки, интересное приключение.
esp340
Одно нажатие кнопки должно дать Только один импульс.

Код:
long Time = 0;
#define SW 5
#define led 13
#define drebezg 300 //drebezg knopki 300 ms
bool knopka = false;
bool impuls = false;
void setup() 
{
pinMode(SW, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() 
{
Time = map(analogRead(A0), 0, 1023, 0, 1000);
if (digitalRead(SW) == 0)
{
  knopka = true;
}
//Esli knopka nazata, no impulsa eshche nebylo, dat impuls
if (knopka == true && impuls == false)
{
  digitalWrite(led, 1);
  delay(Time);
  digitalWrite(led, 0);
  impuls = true;  //impusl uze byl
  //Esli Time koroche drebezga
  if (knopka == true && Time < drebezg)
  {
    delay(drebezg -Time);
  }
}
//Esli otpustili knopku
if (digitalRead(SW) == 1)
{
  if (knopka == true)
  {
    //prozgdat drebezg otpuskanija knopki
    delay(drebezg);
  }
  knopka = false;
  impuls = false;
}
}
https://wokwi.com/projects/336239097757565524
 
Последнее редактирование:

esp340

Active member
Кнопка в схеме возле сварки, без внешней подтяжки, интересное приключение.
esp340
Одно нажатие кнопки должно дать Только один импульс.
А я ТС-у что должен схему со всеми подробностями разрисовать и полный код с антидребезгом и триггером предоставить? Может еще и без delay? Дальше пусть сам думает.
p/s если уж на то пошло- то зачем тут вообще esp?
 

EXIT

New member
Кнопка в схеме возле сварки, без внешней подтяжки, интересное приключение.
esp340
Одно нажатие кнопки должно дать Только один импульс.

Код:
long Time = 0;
#define SW 5
#define led 13
#define drebezg 300 //drebezg knopki 300 ms
bool knopka = false;
bool impuls = false;
void setup()
{
pinMode(SW, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop()
{
Time = map(analogRead(A0), 0, 1023, 0, 1000);
if (digitalRead(SW) == 0)
{
  knopka = true;
}
//Esli knopka nazata, no impulsa eshche nebylo, dat impuls
if (knopka == true && impuls == false)
{
  digitalWrite(led, 1);
  delay(Time);
  digitalWrite(led, 0);
  impuls = true;  //impusl uze byl
  //Esli Time koroche drebezga
  if (knopka == true && Time < drebezg)
  {
    delay(drebezg -Time);
  }
}
//Esli otpustili knopku
if (digitalRead(SW) == 1)
{
  if (knopka == true)
  {
    //prozgdat drebezg otpuskanija knopki
    delay(drebezg);
  }
  knopka = false;
  impuls = false;
}
}
https://wokwi.com/projects/336239097757565524



Спасибо за ответ, я не дождался и решил задачку и всё работает нормально.
Есть куча решений данной задачи, я выбрал наиболее мне понятное. )
int sensorPin = A0;
int ledPin = 13;
int sensorValue = 0;
int ledPin2 = 5;
boolean butt_flag = 0;
boolean butt;
unsigned long last_press;

void setup() {
pinMode(4, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
butt = !digitalRead(4);
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin2, HIGH);

if(butt == 1 &&butt_flag ==0 &&millis() - last_press > 200){
butt_flag = 1;
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, LOW);
delay(sensorValue);
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, HIGH);
last_press = millis();

}
if (butt == 0 &&butt_flag == 1) {
butt_flag = 0;

}

}
 

EXIT

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

EXIT

New member
А я ТС-у что должен схему со всеми подробностями разрисовать и полный код с антидребезгом и триггером предоставить? Может еще и без delay? Дальше пусть сам думает.
p/s если уж на то пошло- то зачем тут вообще esp?
Я хотел собрать аналоговую схему на NE555 но в моем городе не нашел необходимых комплектующих, собирал из того что было в наличии.
 

CodeNameHawk

Moderator
Команда форума
Спасибо за ответ, я не дождался и решил задачку и всё работает нормально.
Обычно пишут об этом не дожидаясь ответов.
Попробуйте кнопку задержать дольше импульса сварки и посмотреть что будет при отпускании.
Дребезг контактов кнопки никто не отменял.

ps. Эмулятор, по ссылке esp340 толково придуман, кнопка выдает дребезг.
 
Последнее редактирование:

EXIT

New member
Обычно пишут об этом не дожидаясь ответов.
Попробуйте кнопку задержать дольше импульса сварки и посмотреть что будет при отпускании.
Дребезг контактов кнопки никто не отменял.

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

В версии скетча от ESP340 после нажатия и удержания кнопки нет разрыва по задержке, это не подходит под мои нужды.
 

CodeNameHawk

Moderator
Команда форума
Это я тоже предусмотрел, и у меня кнопка не опрашивается с задержкой в 200 мс, это дает избежать повторного импульса от дребезга, выше в ответах я предоставил свой скетч для контроллера.
А при отпускании кнопки, когда прошло 200мс и сварочный импульс?
 

EXIT

New member
А при отпускании кнопки, когда прошло 200мс и сварочный импульс?
Да он есть если держать дольше, но я нажал и отпустил, и там задержка delay импульса заданный переменником + задержка Millis 200, так что дребезг не успевает проскакивать, конечно для пущей безопасности можно поставить задержку и в пол секунды.
 

CodeNameHawk

Moderator
Команда форума
Проблема не в этой задержке, а в отсутствии задержки после отпускании кнопки.
 

CodeNameHawk

Moderator
Команда форума
Да он есть если держать дольше, но я нажал и отпустил,
Это не всегда удобно, нп. педаль под ногу, клещи с автонажатием кнопки или вы будете потом каждый раз переписывать? Даже приварить пластину к акаму, в одной руке акум а второй прижали электроды и нажали кнопку, отпускают её уже после остывания.
 

EXIT

New member
Это не всегда удобно, нп. педаль под ногу, клещи с автонажатием кнопки или вы будете потом каждый раз переписывать? Даже приварить пластину к акаму, в одной руке акум а второй прижали электроды и нажали кнопку, отпускают её уже после остывания.
Спасибо, я понял что вы хотите сказать, действительно имеет смысл сделать задержку после отпускания кнопки, тогда дребезг будет просто пропускаться программно. В пишу это во второй цикл который опрашивает кнопку со значением 0.
У меня конструкция в разработке, кнопка однозначно будет на ручке, нажимать буду сам что бы избежать соскальзывания и многих других ситуаций при сварке.
 

EXIT

New member
конечно можно было заказать и подождать китайца с дисплеем и прочими финтифлюшками всего за 3000-5000 К или совсем дешёвый тысячи за 1500-2000, мне было интересно сделать это самостоятельно, средств к слову ушло не меньше чем вышел бы заказной.
 

EXIT

New member
Вообще-то спрашивал я про это
!digitalRead(4);
Зачем?!
Повторюсь, butt это переменная, ей приравнено значение считаное с пина 4.
Для чего переспрашивать об этом я не понимаю, я ответил 1 раз думаю этого достаточно должно быть, если вы знаете больше то объясните а не задавайте так сказать Юнцу в программировании вопросы о том что написано в коде и для чего.
""Вообще-то спрашивал я про это"" я собственно об этом и ответил.
 
Сверху Снизу