Ребят помогите разобраться
- Войдите на сайт для отправки комментариев
Пнд, 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);
}
}
А схема где?
Конкретная
схема отсутствует ,есть наброски примерные.
По отдельности скетчи работают ! А вот обЪеденить не получается.
Всё ещё находится на стадии сборки, на панели пару микриков и один потенциометр первый микрик выбор тока переключением реле а второй пуск трансформатора ну и потенциометр выставляет время прожарки!
По отдельности скетчи работают ! А вот обЪеденить не получается.
Как же вы их объединяли - покажите что ли... а то я представить не могу.
.
Как раз в данной ситуации ничего ему не сделается.
Т.е. вы не допускаете, что человек может два лупа в скетч плюхнуть?
Т.е. вы не допускаете, что человек может два лупа в скетч плюхнуть?
Ответ бы в другую тему, сюда попал по чистой случаности (мышом не туда ткнул), потому я его и удалил.
Конкретная схема отсутствует ,есть наброски примерные.
Ну, так она и работает у Вас примерно-набросочно. И будет так работать, пока Вы к проекту серьёзно не подойдёте.
Пробуйте
#define buttonPin 11 // Кнопка спуска #define ledPin 12 // Пин с сигнальным светодиодом #define triggerPin 10 // MOSFET с реле #define buzzerPin 9 // Пищалка #define analogPin A3 // Переменный резистор 10К для выставления длины импульса #define Relay1 2 // Подключаем реле 1 #define Relay2 3 // Подключаем реле 2 #define Relay3 4 // Подключаем реле 3 #define Relay4 5 // Подключаем реле 4 #define Relay5 6 // Подключаем реле 5 #define ButPin 7 // Подключаем кнопку int flag = 0; // флаг состояния int regim = 0; // Переключалка // Объявляем переменные: bool WeldingNow = LOW;//kn_start bool buttonState; bool lastButtonState = LOW;//fl_start bool f_knStart; uint32_t lastDebounceTime; //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); pinMode(Relay1, OUTPUT); pinMode(Relay2, OUTPUT); pinMode(Relay3, OUTPUT); pinMode(Relay4, OUTPUT); pinMode(Relay5, 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 if(digitalRead(ButPin) == HIGH && flag == 0) { ++regim ; flag = 1; if(regim > 4) // Если номер режима превышает требуемого { // то отсчет начинается с нуля regim = 0; } nagruzka(); } if(digitalRead(ButPin) == LOW && flag == 1) { flag = 0; //Выводим в сериал присмене режима (чтобы не мелькало) 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 (digitalRead(buttonPin)!= lastButtonState) { lastDebounceTime = millis(); lastButtonState = !lastButtonState; } if(WeldingNow != digitalRead(buttonPin) && millis() - lastDebounceTime > 20){ WeldingNow = digitalRead(buttonPin); } // Если команда получена, то начинаем: if (WeldingNow == HIGH && !f_knStart) { f_knStart = 1; 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); // И всё по-новой: } else if(!WeldingNow && f_knStart) { digitalWrite(ledPin, LOW); digitalWrite(triggerPin, LOW); digitalWrite(buzzerPin, LOW); f_knStart = 0; } } void nagruzka(){ Serial.print("regim = "); Serial.println(regim); switch (regim) { case 0: digitalWrite(Relay1, HIGH); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); break; case 1: digitalWrite(Relay1, LOW); digitalWrite(Relay2, HIGH); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); break; case 2: digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, HIGH); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); break; case 3: digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, HIGH); digitalWrite(Relay5, LOW); break; case 4: digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, HIGH); break; } } // В эту функцию вынесен код, обслуживающий пищалку: 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); }Огромное спасибо vosara ! Всё отрабатывает ка часики!
Есть ещё такая не большая задачка, Serial.println кроме этого ничего больше не выводит "== Welding starts now! ==" а так как сварочка без дисплея хотелось бы время в микросеках видеть в мониторе сом порта если не затруднит и возможно ли это сделать? Заранее огромное спасибо!
Можно
#define buttonPin 11 // Кнопка спуска #define ledPin 12 // Пин с сигнальным светодиодом #define triggerPin 10 // MOSFET с реле #define buzzerPin 9 // Пищалка #define analogPin A3 // Переменный резистор 10К для выставления длины импульса #define Relay1 2 // Подключаем реле 1 #define Relay2 3 // Подключаем реле 2 #define Relay3 4 // Подключаем реле 3 #define Relay4 5 // Подключаем реле 4 #define Relay5 6 // Подключаем реле 5 #define ButPin 7 // Подключаем кнопку int flag = 0; // флаг состояния int regim = 0; // Переключалка // Объявляем переменные: bool WeldingNow = LOW;//kn_start bool buttonState; bool lastButtonState = LOW;//fl_start bool f_knStart; uint32_t lastDebounceTime; //unsigned long debounceDelay = 50; // минимальное время в мс, которое надо выждать до срабатывания. Сделано для предотвращения ложных срабатываний при дребезге контактов спусковой кнопки int sensorValue = 0; // считываем значение, выставленное на потенциометре в эту переменную... int weldingTime = 0; // ...и на его основе выставляем задержку int temp_weldingTime; void setup(){ pinMode(analogPin, INPUT); pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(triggerPin, OUTPUT); pinMode(buzzerPin, OUTPUT); pinMode(Relay1, OUTPUT); pinMode(Relay2, OUTPUT); pinMode(Relay3, OUTPUT); pinMode(Relay4, OUTPUT); pinMode(Relay5, 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 if(weldingTime != temp_weldingTime){ //Выводим в сериал присмене режима (чтобы не мелькало) Serial.print("Analog pot reads = "); Serial.print(sensorValue); Serial.print("\t so we will weld for = "); Serial.print(weldingTime); Serial.println("ms. "); temp_weldingTime = weldingTime; } if(digitalRead(ButPin) == HIGH && flag == 0) { ++regim ; flag = 1; if(regim > 4) // Если номер режима превышает требуемого { // то отсчет начинается с нуля regim = 0; } nagruzka(); } if(digitalRead(ButPin) == LOW && flag == 1) { flag = 0; } // Для предотврещения ложных срабатываний кнопки убеждаемся сначала, что она зажата минимум в течение 50мс, прежде чем начать сварку: //int reading = digitalRead(buttonPin); if (digitalRead(buttonPin)!= lastButtonState) { lastDebounceTime = millis(); lastButtonState = !lastButtonState; } if(WeldingNow != digitalRead(buttonPin) && millis() - lastDebounceTime > 20){ WeldingNow = digitalRead(buttonPin); } // Если команда получена, то начинаем: if (WeldingNow == HIGH && !f_knStart) { f_knStart = 1; 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); // И всё по-новой: } else if(!WeldingNow && f_knStart) { digitalWrite(ledPin, LOW); digitalWrite(triggerPin, LOW); digitalWrite(buzzerPin, LOW); f_knStart = 0; } } void nagruzka(){ Serial.print("regim = "); Serial.println(regim); switch (regim) { case 0: digitalWrite(Relay1, HIGH); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); break; case 1: digitalWrite(Relay1, LOW); digitalWrite(Relay2, HIGH); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); break; case 2: digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, HIGH); digitalWrite(Relay4, LOW); digitalWrite(Relay5, LOW); break; case 3: digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, HIGH); digitalWrite(Relay5, LOW); break; case 4: digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); digitalWrite(Relay3, LOW); digitalWrite(Relay4, LOW); digitalWrite(Relay5, HIGH); break; } } // В эту функцию вынесен код, обслуживающий пищалку: 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); }