Ребят помогите разобраться
- Войдите на сайт для отправки комментариев
Пнд, 30/10/2017 - 16:26
Всем доброго времени суток ! С Ардуино занялся сравнительно недавно . Хочу собрать контактную сварку,на просторах нета нашёл скетч но не совсем то что нужно точней не под моё железо . Не хватает управления 5ти реле для переключения тока,одна кнопка управляет 5тью реле по очерёдно.Плата UNO скетчи прилагаю. Заранее всем огромное спасибо!
const int buttonPin = 11; // Кнопка спуска const int ledPin = 12; // Пин с сигнальным светодиодом const int triggerPin = 10; // MOSFET с реле const int buzzerPin = 9; // Пищалка const int analogPin = A3; // Переменный резистор 10К для выставления длины импульса // Объявляем переменные: int WeldingNow = LOW; int buttonState; int lastButtonState = LOW; unsigned long lastDebounceTime = 0; unsigned long debounceDelay = 50; // минимальное время в мс, которое надо выждать до срабатывания. Сделано для предотвращения ложных срабатываний при дребезге контактов спусковой кнопки int sensorValue = 0; // считываем значение, выставленное на потенциометре в эту переменную... int weldingTime = 0; // ...и на его основе выставляем задержку void setup() { pinMode(analogPin, INPUT); pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(triggerPin, OUTPUT); pinMode(buzzerPin, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(triggerPin, LOW); digitalWrite(buzzerPin, LOW); Serial.begin(9600); } void loop() { sensorValue = analogRead(analogPin); // считываем значение, выставленное на потенциометре weldingTime = map(sensorValue, 0, 1023, 15, 255); // приводим его к миллисекундам в диапазоне от 15 до 255 Serial.print("Analog pot reads = "); Serial.print(sensorValue); Serial.print("\t so we will weld for = "); Serial.print(weldingTime); Serial.println("ms. "); // Для предотврещения ложных срабатываний кнопки убеждаемся сначала, что она зажата минимум в течение 50мс, прежде чем начать сварку: int reading = digitalRead(buttonPin); if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { WeldingNow = !WeldingNow; } } } // Если команда получена, то начинаем: if (WeldingNow == HIGH) { Serial.println("== Welding starts now! =="); delay(1000); // Выдаём три коротких и один длинный писк в динамик: int cnt = 1; while (cnt <= 3) { playTone(1915, 150); // другие ноты на выбор: 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 delay(500); cnt++; } playTone(100, 50); delay(1); // И сразу после последнего писка приоткрываем MOSFET на нужное количество миллисекунд: digitalWrite(ledPin, HIGH); digitalWrite(triggerPin, HIGH); delay(weldingTime); digitalWrite(triggerPin, LOW); digitalWrite(ledPin, LOW); // И всё по-новой: WeldingNow = LOW; } else { digitalWrite(ledPin, LOW); digitalWrite(triggerPin, LOW); digitalWrite(buzzerPin, LOW); } lastButtonState = reading; } // В эту функцию вынесен код, обслуживающий пищалку: void playTone(int tone, int duration) { digitalWrite(ledPin, HIGH); for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(buzzerPin, HIGH); delayMicroseconds(tone); digitalWrite(buzzerPin, LOW); delayMicroseconds(tone); } digitalWrite(ledPin, LOW); }
int Relay1 = 2; // Подключаем реле 1 int Relay2 = 3; // Подключаем реле 2 int Relay3 = 4; // Подключаем реле 3 int Relay4 = 5; // Подключаем реле 4 int Relay5 = 6; // Подключаем реле 5 int ButPin = 7; // Подключаем кнопку int flag = 0; // флаг состояния int regim = 0; // Переключалка void setup() { pinMode(Relay1, OUTPUT); pinMode(Relay2, OUTPUT); pinMode(Relay3, OUTPUT); pinMode(Relay4, OUTPUT); pinMode(Relay5, OUTPUT); } void loop() { if(digitalRead(ButPin) == HIGH && flag == 0) { regim ++; flag = 1; if(regim > 5) // Если номер режима превышает требуемого { // то отсчет начинается с нуля regim = 0; } } if(digitalRead(ButPin) == LOW && flag == 1) { flag = 0; } // ======= Вполняем задачу при выборе режима ======= // РЕЖИМ 0: OFF if(regim == 0) { digitalWrite(Relay1, HIGH); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); } // РЕЖИМ 1: R if(regim == 1) { digitalWrite(Relay1, LOW); digitalWrite(Relay2, HIGH); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); } // РЕЖИМ 2: G if(regim == 2) { digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, HIGH); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); } // РЕЖИМ 3: B if(regim == 3) { digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, HIGH); digitalWrite(Relay5, LOW); } // РЕЖИМ 4: RG if(regim == 4) { digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, HIGH); } }
А схема где?
Конкретная
схема отсутствует ,есть наброски примерные.
По отдельности скетчи работают ! А вот обЪеденить не получается.
Всё ещё находится на стадии сборки, на панели пару микриков и один потенциометр первый микрик выбор тока переключением реле а второй пуск трансформатора ну и потенциометр выставляет время прожарки!
По отдельности скетчи работают ! А вот обЪеденить не получается.
Как же вы их объединяли - покажите что ли... а то я представить не могу.
.
Как раз в данной ситуации ничего ему не сделается.
Т.е. вы не допускаете, что человек может два лупа в скетч плюхнуть?
Т.е. вы не допускаете, что человек может два лупа в скетч плюхнуть?
Ответ бы в другую тему, сюда попал по чистой случаности (мышом не туда ткнул), потому я его и удалил.
Конкретная схема отсутствует ,есть наброски примерные.
Ну, так она и работает у Вас примерно-набросочно. И будет так работать, пока Вы к проекту серьёзно не подойдёте.
Пробуйте
Огромное спасибо vosara ! Всё отрабатывает ка часики!
Есть ещё такая не большая задачка, Serial.println кроме этого ничего больше не выводит "== Welding starts now! ==" а так как сварочка без дисплея хотелось бы время в микросеках видеть в мониторе сом порта если не затруднит и возможно ли это сделать? Заранее огромное спасибо!
Можно