• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 раз думаю этого достаточно должно быть, если вы знаете больше то объясните а не задавайте так сказать Юнцу в программировании вопросы о том что написано в коде и для чего.
""Вообще-то спрашивал я про это"" я собственно об этом и ответил.
 
Сверху Снизу