Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
// 26/04/2017
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int p = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (p, 3000); //включаем на 3000 Гц
delay(150); //ждем 200 Мс
noTone(p ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
// 26/04/2017
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int p = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (p, 3000); //включаем на 3000 Гц
delay(150); //ждем 200 Мс
noTone(p ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
// 26/04/2017
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int p = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (p, 3000); //включаем на 3000 Гц
delay(150); //ждем 200 Мс
noTone(p ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
unsigned int T1 = 10000; // время задержки реле включения
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
// 26/04/2017
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int p = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (p, 3000); //включаем на 3000 Гц
delay(150); //ждем 200 Мс
noTone(p ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
unsigned int T1 = 10000; // время задержки реле включения
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
// 26/04/2017
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int p = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (p, 3000); //включаем на 3000 Гц
delay(150); //ждем 200 Мс
noTone(p ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
unsigned int T1 = 10000; // время задержки реле включения
поставь 300000;
Оставь пока с ногодрыгом
Так и делал но все равно больше одной минуты не получается.
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
// 26/04/2017
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int p = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (p, 3000); //включаем на 3000 Гц
delay(150); //ждем 200 Мс
noTone(p ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
unsigned int T1 = 10000; // время задержки реле включения
поставь 300000;
Оставь пока с ногодрыгом
Так и делал но все равно больше одной минуты не получается.
Какой-то ты Камал переменчивый, то тебе 20 секунд, то 5-7 минут, ты уж определись )))
так должно быть так:
unsigned long T1 = 300000; // время задержки реле включения
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
}
void bipers() {
tone (bipers, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(bipers ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
unsigned long T1 = 300000; // время задержки реле включения
Да вы просто волшебник,все Ок как надо срабатывает.
Еще одна просьба если можно пожалуйста,хотелось еще пару светодиодов поставить,один светодиод красный другой зеленый,красный если напряжения 250в,а зеленый 170в,получается опустилось до 170в включается зеленый светодиод и следом бузер издает звук,такое возможно если до как можно сделать правильно?
unsigned long T1 = 300000; // время задержки реле включения
Да вы просто волшебник,все Ок как надо срабатывает.
Еще одна просьба если можно пожалуйста,хотелось еще пару светодиодов поставить,один светодиод красный другой зеленый,красный если напряжения 250в,а зеленый 170в,получается опустилось до 170в включается зеленый светодиод и следом бузер издает звук,такое возможно если до как можно сделать правильно?
Весь код, чтобы зажечь оба светодиода в тексте скетча есть, там где разбор напряжения,
unsigned long T1 = 300000; // время задержки реле включения
Да вы просто волшебник,все Ок как надо срабатывает.
Еще одна просьба если можно пожалуйста,хотелось еще пару светодиодов поставить,один светодиод красный другой зеленый,красный если напряжения 250в,а зеленый 170в,получается опустилось до 170в включается зеленый светодиод и следом бузер издает звук,такое возможно если до как можно сделать правильно?
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 8;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
Но если так сделать то реле постоянно включено что при высоком что при низком что при нормальном напряжении,конечно хотелось бы по нормальному а не через ж..п.
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
Но если так сделать то реле постоянно включено что при высоком что при низком что при нормальном напряжении,конечно хотелось бы по нормальному а не через ж..п.
идеологически всё правильно, там аппаратная проблема я думаю нарисовалась, вы сюда не лезте, может народ подскажет, ну или выход на реле соединить с 6 пином и его прописать, 100% должно работать
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
Но если так сделать то реле постоянно включено что при высоком что при низком что при нормальном напряжении,конечно хотелось бы по нормальному а не через ж..п.
идеологически всё правильно, там аппаратная проблема я думаю нарисовалась, вы сюда не лезте, может народ подскажет, ну или выход на реле соединить с 6 пином и его прописать, 100% должно работать
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 6;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode)SysPin, INPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (digitalRead(SysPin)==ReleOFF &&Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 6;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode)SysPin, INPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (digitalRead(SysPin)==ReleOFF &&Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
Соединил 11 ногу с 12,залил этот код,вот только я не пойму что должно было изменится? вроде также,то есть понизил до 170в отключилось реле,поднял до 220в включилось реле,и также с повысил до 250в отключилось реле потом выставил 220в включилось реле.
Соединил 11 ногу с 12,залил этот код,вот только я не пойму что должно было изменится? вроде также,то есть понизил до 170в отключилось реле,поднял до 220в включилось реле,и также с повысил до 250в отключилось реле потом выставил 220в включилось реле.
а условие зажигания светодиода в поправленном мной скетче в 39 строке кто писать будет?
ну ловите, пищать будет при высоком напряжении высоким тоном
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 6;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(SysPin, INPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void bipers2() {
tone (b, 5000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
if (sensorValue <= 330){
digitalWrite(led, HIGH);
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(led, LOW);
}
if (sensorValue >= 470){
digitalWrite(ledX, HIGH);
bipers2(); // Если напряжение не в норме то сработал biper
digitalWrite(ledX, LOW);
}
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (digitalRead(SysPin)==ReleOFF &&Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 2;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned int T1 = 10000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(SysPin, INPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330) digitalWrite(ledX, HIGH);
if (sensorValue >= 470)
digitalWrite(ledX, HIGH);
digitalWrite(ledX, HIGH);
digitalWrite(led, HIGH);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
bipers(); // Если напряжение не в норме то сработал biper
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
if (digitalRead(SysPin) == ReleOFF && Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int sensorValue = 0; //с чего мерим напряжения в сети
int beeper = 8; //объявляем переменную с номером пина, на который подключен biper
int ledGreen = 7;
int ledRed = 8;
boolean Vin_OK = false; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
boolean Flag_T1 = false; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
byte ReleON = 0; // реле включено
byte ReleOFF = 1; // реле выключено
void setup()
{
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(ledGreen, OUTPUT); //зеленый
pinMode(ledRed, OUTPUT); //красный
}
void bipers()
{
tone (beeper, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(beeper); // отключаем
}
void loop()
{
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 && Vin_OK == true) //тут делаем сравнение если в сети 170в (335) то сбрасываем флаг
{
Vin_OK = false;
Flag_T1 = false;
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(ledGreen, HIGH);
}
if (sensorValue >= 470 && Vin_OK == true) //тут делаем сравнение если в сети 250в (483) то сбрасываем флаг
{
Vin_OK = false;
Flag_T1 = false;
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(ledRed, HIGH);
}
if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = true;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = true;
}
}
if (digitalRead(RelePin) == ReleOFF && Vin_OK == true && Flag_T1 == true && (millis() - previousMillis) >= T1)
{
digitalWrite(RelePin, ReleON); //включение реле после задержки
digitalWrite(ledGreen, LOW); //выключение светодиодов
digitalWrite(ledRed, LOW);
}
if (digitalRead(RelePin) == ReleON && Vin_OK == false)
{
digitalWrite(RelePin, ReleOFF);
}
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
ua6em спасибо вам огромное вы молодец вы все гениально четко сделали,и довели этот код до того что мне нужно было,все что надо все есть,задержки светодиоды бузер ,и самое главное все это работает как положено,я вам очень благодарен за оказанную мне вами помощь,сам бы реально месяц делал все это с вами за пару дней все решилось,по больше таких людей отзывчивых и добрых без всяких лишних слов,низки вам поклон.
Осталось самое малое, подобрать нужный контроллер что бы ардуинку не ставить,вытравить платку все это дело скомпоновать еще раз проверить подправить значения,это самое мало что осталось по сравнению с кодом.Возможно еще придется чуть подправить схему измерения.
(toxikaciya) (Araris) вам тоже спасибо что мимо не прошли.
Ваш код проверил,получается так,если например понизили напряжения бузер пик потом загорелся светодиод, потом поднимаю до 220в светодиод продолжает гореть,то есть не так как нужно,вот то что помог написать мне ua6em там работает иначе,понизил например до 170в сработал бузер пик пик пик и моргает светодиод,потом поднимаю до 220в бузер молчит и светодиод тоже не горит потом ждем 5 минут и включается реле.
Ребята хотел еще один вопрос задать,в какую Атмегу можно залить этот код,вот стакими размерами.Думал может Атмега48?
Скетч использует 4080 байт (12%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 215 байт (10%) динамической памяти, оставляя 1833 байт для локальных переменных. Максимум: 2048 байт.
Я бы использовал атмегу nano, или 168, дешевле не получится и травить ничего не надо )))
Выкладываю чуть поправленный код, не проверял, но должно работать так же!
В коде комментарии, зачем так делается )))
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 6;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
// byte ReleON = 0; // реле включено
// byte ReleOFF = 1; // реле выключено
/* следующая ниже конструкция по идее должна бы высвободить 2 байта памяти занятые под переменные
* и будет более правильной, так как использует команды препроцессора и по сути является макросом
* заменяя в нужных местах слова на цифровые значения
* при использовании реле с прямой логикой просто заменить 0 на 1, а 1 на ноль
*/
#define ReleON 0 // реле включено
#define ReleOFF 1 // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(SysPin, INPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void bipers2() {
tone (b, 5000); //включаем на 5000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
if (sensorValue <= 330){
digitalWrite(led, HIGH);
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(led, LOW);
}
if (sensorValue >= 470){
digitalWrite(ledX, HIGH);
bipers2(); // Если напряжение не в норме то сработал biper2
digitalWrite(ledX, LOW);
}
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
// командами digitalRead(SysPin)==ReleOFF и digitalRead(SysPin)==ReleON избавляемся от повторной установки (НОГОДРЫГ)
// состояния реле, если уже установлено, надо ли это делать можно посмотреть осциллографом
// или триггером ловушкой оценить состояние пина в установившемся состоянии реле
if (digitalRead(SysPin) == ReleOFF && Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (digitalRead(SysPin) == ReleON && Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
to ua6em: Вот оно как. А казалось бы должно работать.
я выше съёрничал, насчёт того, что выход не может быть входом )))
оно можно было бы но аппаратно должно быть два блока логики и семафоры от внутренней петли
Ребята хотел еще один вопрос задать,в какую Атмегу можно залить этот код,вот стакими размерами.Думал может Атмега48?
Скетч использует 4080 байт (12%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 215 байт (10%) динамической памяти, оставляя 1833 байт для локальных переменных. Максимум: 2048 байт.
Я бы использовал атмегу nano, или 168, дешевле не получится и травить ничего не надо )))
Выкладываю чуть поправленный код, не проверял, но должно работать так же!
В коде комментарии, зачем так делается )))
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
int sensorValue = 0; //с чего мерим напряжения в сети
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int ledX = 7;
int led = 6;
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
// byte ReleON = 0; // реле включено
// byte ReleOFF = 1; // реле выключено
/* следующая ниже конструкция по идее должна бы высвободить 2 байта памяти занятые под переменные
* и будет более правильной, так как использует команды препроцессора и по сути является макросом
* заменяя в нужных местах слова на цифровые значения
* при использовании реле с прямой логикой просто заменить 0 на 1, а 1 на ноль
*/
#define ReleON 0 // реле включено
#define ReleOFF 1 // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(SysPin, INPUT);
pinMode(ledX, OUTPUT); //LedX
pinMode(led, OUTPUT); //Led
}
void bipers() {
tone (b, 3000); //включаем на 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void bipers2() {
tone (b, 5000); //включаем на 5000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue <= 330 || sensorValue >= 470) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
if (sensorValue <= 330){
digitalWrite(led, HIGH);
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(led, LOW);
}
if (sensorValue >= 470){
digitalWrite(ledX, HIGH);
bipers2(); // Если напряжение не в норме то сработал biper2
digitalWrite(ledX, LOW);
}
}
else if (sensorValue >= 400 && sensorValue <= 413) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
// командами digitalRead(SysPin)==ReleOFF и digitalRead(SysPin)==ReleON избавляемся от повторной установки (НОГОДРЫГ)
// состояния реле, если уже установлено, надо ли это делать можно посмотреть осциллографом
// или триггером ловушкой оценить состояние пина в установившемся состоянии реле
if (digitalRead(SysPin) == ReleOFF && Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (digitalRead(SysPin) == ReleON && Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
Привет,этот код тоже проверил и работает отлично тоже,спасибо еще раз вам,начну полную сборку,а потом можно фото выложить что получилось,в место релейного модуля будет ULN поставлю нормальное реле сделаю не большую обвязку.
поправил скетч, добавил возможность применения цифрового фильтра первого порядка для данных сенсора:
int sensorPin = A0; // аналоговый вход
int RelePin = 12; // управление реле на 12 пине
int SysPin = 11; // это пин соединить с 12, цифровой вход, защита от ногодрыга
unsigned int sensorValue = 0; // переменная напряжения сенсора
static unsigned long G; // Переменная для накопления показаний датчика сенсора
int b = 8; //объявляем переменную с номером пина, на который подключен biper
int Pin_Vmin_led = 7;
int Pin_Vmax_led = 6;
int Pin_V_ok_led = 5;
int V_min = 330; // коэффициент для минимального напряжения
int V_max = 470; // коэффициент для максимального напряжения
int V_gist = 10; // гистерезис, без цифровой обработки значения входящего напряжения не может быть менее 7
// если будем использовать цифровой фильтр, то можно уменьшить, предположительно до значения 3
byte Vin_OK = 0; //эта переменная служит для проверки входного напряжение, входит ли оно в наши установки, если входит, то 1, нет 0
byte Flag_T1 = 0; //этот флаг информирует,что было зафиксировано правильное входное напряжение и запущен счетчик выдержки паузы на включение реле
unsigned long T1 = 300000; // время задержки реле включения
unsigned long previousMillis = 0;
/* следующая ниже конструкция по идее должна бы высвободить 2 байта памяти занятые под переменные
* и будет более правильной, так как использует команды препроцессора и по сути является макросом
* заменяя в нужных местах слова на цифровые значения
* при использовании реле с прямой логикой просто заменить 0 на 1, а 1 на ноль
*/
#define ReleON 0 // реле включено
#define ReleOFF 1 // реле выключено
void setup() {
Serial.begin(9600); // скорость порта
pinMode(RelePin, OUTPUT);
pinMode(SysPin, INPUT);
pinMode(Pin_Vmin_led, OUTPUT); // заниженное напряжение
pinMode(Pin_Vmax_led, OUTPUT); // завышенное напряжение
pinMode(Pin_V_ok_led, OUTPUT); // напряжение в норме
}
/* высокий тон высокачая частота мигания светодиода - напряжение завышено */
void bipers() {
tone (b, 3000); //включаем тон 3000 Гц
delay(200); //ждем 200 Мс
noTone(b ); // отключаем
}
/* высокий тон высокачая частота мигания светодиода - напряжение завышено */
void bipers2() {
tone (b, 7000); //включаем тон 7000 Гц
delay(73); //ждем 73 Мс
noTone(b ); // отключаем
}
void read_sensor(){
for (int j=1; j <= 8; j++) {
sensorValue = analogRead(sensorPin);
G+=sensorValue-(G>>8);
sensorValue=G>>8; // показания сенсора после цифрового фильтра
}
}
void loop() {
// sensorValue = analogRead(sensorPin); // раскомментировать, если не используем цифровой фильтр
read_sensor(); // закомментировать, если не используем цифровой фильтр
if (sensorValue <= V_min || sensorValue >= V_max) { //тут делаем сравнение двух значении если в сети 170в (335) или 250в (483) то сбрасываем флаг
Vin_OK = 0;
Flag_T1 = 0;
if (sensorValue <= V_min){
digitalWrite(Pin_Vmin_led, HIGH);
bipers(); // Если напряжение не в норме то сработал biper
digitalWrite(Pin_Vmin_led, LOW);
}
if (sensorValue >= V_max){
digitalWrite(Pin_Vmax_led, HIGH);
bipers2(); // Если напряжение не в норме то сработал biper
digitalWrite(Pin_Vmax_led, LOW);
}
}
else if (sensorValue > (V_min + V_gist) && sensorValue < (V_max - V_gist)) { // тут делаем период включения между 172в (412) и 220в (425),и между 250в и 225в
Vin_OK = 1;
if (Flag_T1 == 0) {
previousMillis = millis(); //реле задержки включения
Flag_T1 = 1;
}
}
// командами digitalRead(SysPin)==ReleOFF и digitalRead(SysPin)==ReleON избавляемся от повторной установки (НОГОДРЫГ)
// состояния реле, если уже установлено, надо ли это делать можно посмотреть осциллографом
// или триггером ловушкой оценить состояние пина в установившемся состоянии реле
if (digitalRead(SysPin) == ReleOFF && Vin_OK == 1 && Flag_T1 == 1 && (millis() - previousMillis) >= T1) digitalWrite(RelePin, ReleON);
else if (digitalRead(SysPin) == ReleON && Vin_OK == 0) digitalWrite(RelePin, ReleOFF); //else digitalWrite(RelePin, ReleOFF);
if(digitalRead(SysPin) == ReleON){digitalWrite(Pin_V_ok_led, HIGH);}
else {digitalWrite(Pin_V_ok_led, LOW);}
Serial.println(sensorValue); // выводим информацию в сериал порт
delay(100);
}
Окончательно запутался,как же мне теперь сделать что бы отключалось при низком например при 180в и что бы при высоком скажем 250в?а включатся будет при каком? как с этим гистерезисом теперь работать.
Например сейчас на латаре выставил 250в в мониторе порта у меня такие данные приходят это при 250в,да и странновато как то работает этот код,например скажем сейчас я выставил 250в потом запускаю монитор порта что бы посмотреть значения что приходит туда в момент когда запустил монитор порта на мгновения включается отключается реле и потом срабатывает светодиод тот что показывает низкое напряжения и работает бузер и через 10секунд отключается светодиод и сам бузер. Вот что в мониторе порта приходит при 250в.Это при тех условиях что я описал.
На данный момент мне надо сделать например при низком напряжении отключения 180в и включения 200в,а при высоком отключения 250в и включения 230в.
Получается мне надо между этими значениями.
int V_min = 333; // вот так получается отключается при 169в и включается при 198в
int V_max = 470; // вот тут получается отключается при 253в и включается при 234в
А сам гистерезис вот такой как и был.
int V_gist = 10;
Вопрос как мне сделать что бы было 180в-200в и 250-230в,как мне выловить нужные значения? при вот таких значениях.
14
28
42
56
69
81
93
105
117
128
139
149
159
169
178
187
196
205
213
222
229
237
244
252
258
265
272
278
284
290
296
301
307
312
317
322
326
331
336
340
344
348
352
356
360
363
367
370
373
377
380
383
385
388
391
394
396
399
401
403
406
408
410
412
414
416
418
420
421
423
425
426
428
429
431
432
434
435
436
437
439
440
441
442
443
444
445
446
447
448
449
450
451
452
452
453
454
454
455
456
457
457
458
458
459
459
460
460
461
461
462
462
463
463
464
464
464
465
465
466
466
466
467
467
467
467
468
468
468
469
469
469
469
470
470
470
470
471
471
471
471
472
472
473
473
474
474
474
474
474
474
474
474
474
474
474
475
475
475
475
475
475
475
475
475
475
475
475
475
475
475
475
475
475
475
475
474
474
474
474
474
474
474
474
474
Вот что то примерное такое хотелось сделать как по этим ссылкам.
цифровой фильтр позволяет увидеть в мониторе значение при нужном нам напряжении, выставляем напряжение и смотрим, пока в мониторе порта не пойдут стабильные показания
По разнице определим гистерезис
Далее выключить цифровой фильтр и включить прямое считывание с сенсора
А вообще это неправильный подход, правильный применён в изделиях SURGE ARREST - срезание полуволны до выставленного напряжения и рассеивание этой мощности на мощных резисторах, далее, при нагреве резисторов до определённой температуры срабатывание защиты отключающей электропитание
Хорошо,тогда мне надо сейчас считать значения при цыфровом ,потом отключаю цыфровой и включаю прямое считывание с сенсора ?и потом все эти данные сюда,при высоком то есть 250в 230в,и при низком 180в и 200в,я верно понял вас ?
А тут каким оброзом сделать мне нужные значения на включения?
else if (sensorValue > (V_min + V_gist) && sensorValue < (V_max - V_gist)) { // тут делаем
Тут выставил так.
int V_min = 356; // коэффициент для минимального напряжения
int V_max = 463; // коэффициент для максимального напряжения
int V_gist = 12; // гистерезис, без цифровой обработки значения входящего напряжения не может быть менее 7
Может быть так в 43 строке:
Либо сделать два if-а с проверкой состояния пина.
можно так, снимаем ногодрыг на включение если уже включено
Тогда получается реле постоянно включено хоть при низком хоть при высоком всегда состояния включено.
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
Может быть так в 43 строке:
Либо сделать два if-а с проверкой состояния пина.
можно так, снимаем ногодрыг на включение если уже включено
Тогда получается реле постоянно включено хоть при низком хоть при высоком всегда состояния включено.
Это называется за что боролись на то и напоролись, реле то реверсное ))), вот так пробуй
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Может быть так в 43 строке:
Либо сделать два if-а с проверкой состояния пина.
можно так, снимаем ногодрыг на включение если уже включено
Тогда получается реле постоянно включено хоть при низком хоть при высоком всегда состояния включено.
Это называется за что боролись на то и напоролись, реле то реверсное ))), вот так пробуй
Это понятно,но я менял уже и так и этак,и сейчас тоже самое все равно реле включено.
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
поставь 300000;
Оставь пока с ногодрыгом
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
поставь 300000;
Оставь пока с ногодрыгом
Так и делал но все равно больше одной минуты не получается.
Оставил пока вот так,но есть одна проблема,как сделать задержку включения реле на 5-7 минут,например стабилизировалось, напряжение 220-225в и через 5-7 минут включаем реле,как сделать правильно ?
поставь константу не 10 секунд, а 5-7 минут, в чём проблема?
Но за это время входное напряжение не должно улетать за пределы напряжения включения, иначе при каждом улёте счетчик сбрасывается
Во тут ставил по разному но не как не получается сделать 5-7 минут
поставь 300000;
Оставь пока с ногодрыгом
Так и делал но все равно больше одной минуты не получается.
Какой-то ты Камал переменчивый, то тебе 20 секунд, то 5-7 минут, ты уж определись )))
так должно быть так:
Вот на данный момент код выглядит вот так.
Измени строку 7, переменная int беззнаковая считает только до 65535
А книжки надо читать, начать хотя бы с переменных )))
Измени строку 7, переменная int беззнаковая считает только до 65535
А книжки надо читать, начать хотя бы с переменных )))
Получается так.
Измени строку 7, переменная int беззнаковая считает только до 65535
А книжки надо читать, начать хотя бы с переменных )))
Получается так.
а надо так
Измени строку 7, переменная int беззнаковая считает только до 65535
А книжки надо читать, начать хотя бы с переменных )))
Получается так.
а надо так
Да вы просто волшебник,все Ок как надо срабатывает.
Еще одна просьба если можно пожалуйста,хотелось еще пару светодиодов поставить,один светодиод красный другой зеленый,красный если напряжения 250в,а зеленый 170в,получается опустилось до 170в включается зеленый светодиод и следом бузер издает звук,такое возможно если до как можно сделать правильно?
Измени строку 7, переменная int беззнаковая считает только до 65535
А книжки надо читать, начать хотя бы с переменных )))
Получается так.
а надо так
Да вы просто волшебник,все Ок как надо срабатывает.
Еще одна просьба если можно пожалуйста,хотелось еще пару светодиодов поставить,один светодиод красный другой зеленый,красный если напряжения 250в,а зеленый 170в,получается опустилось до 170в включается зеленый светодиод и следом бузер издает звук,такое возможно если до как можно сделать правильно?
Весь код, чтобы зажечь оба светодиода в тексте скетча есть, там где разбор напряжения,
попробуйте сами, думаю получится
Я начинающий, почитывающий здесь эту страничку
Измени строку 7, переменная int беззнаковая считает только до 65535
А книжки надо читать, начать хотя бы с переменных )))
Получается так.
а надо так
Да вы просто волшебник,все Ок как надо срабатывает.
Еще одна просьба если можно пожалуйста,хотелось еще пару светодиодов поставить,один светодиод красный другой зеленый,красный если напряжения 250в,а зеленый 170в,получается опустилось до 170в включается зеленый светодиод и следом бузер издает звук,такое возможно если до как можно сделать правильно?
Я начинающий, почитывающий здесь эту страничку
Там читаю тоже,и пытался пристроить пару светодиодов ну не как не получается сделать это сделать правильно.
строка 27, с неё берёте куски, попробуйте, покажите как получается
Наверное точно не так.
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
конечно, вы бы сначала светодиоды воткнули в пины, а потом писали код, где косяк поняли?
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
Но если так сделать то реле постоянно включено что при высоком что при низком что при нормальном напряжении,конечно хотелось бы по нормальному а не через ж..п.
конечно, вы бы сначала светодиоды воткнули в пины, а потом писали код, где косяк поняли?
Светодиоды не ставил еще а просто пока написал что бы вы глянули верно или нет,а где мой косяк я не понял если честно.
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
Но если так сделать то реле постоянно включено что при высоком что при низком что при нормальном напряжении,конечно хотелось бы по нормальному а не через ж..п.
идеологически всё правильно, там аппаратная проблема я думаю нарисовалась, вы сюда не лезте, может народ подскажет, ну или выход на реле соединить с 6 пином и его прописать, 100% должно работать
Всё таки сомневаюсь в аппаратной правильности этой конструкции, ГУРУ, просветите, может аппаратно соединить с цифровым входом и считывать состояние будет правильней?
" в голове вертится припевочка...ж..па выход, а не вход"
Но если так сделать то реле постоянно включено что при высоком что при низком что при нормальном напряжении,конечно хотелось бы по нормальному а не через ж..п.
идеологически всё правильно, там аппаратная проблема я думаю нарисовалась, вы сюда не лезте, может народ подскажет, ну или выход на реле соединить с 6 пином и его прописать, 100% должно работать
Ок подождем народ .
Надо проверить, ногу 11 соединить с ногой 12
Надо проверить, ногу 11 соединить с ногой 12
Ок сейчас проверю.
Соединил 11 ногу с 12,залил этот код,вот только я не пойму что должно было изменится? вроде также,то есть понизил до 170в отключилось реле,поднял до 220в включилось реле,и также с повысил до 250в отключилось реле потом выставил 220в включилось реле.
Соединил 11 ногу с 12,залил этот код,вот только я не пойму что должно было изменится? вроде также,то есть понизил до 170в отключилось реле,поднял до 220в включилось реле,и также с повысил до 250в отключилось реле потом выставил 220в включилось реле.
Значит всё ШИКАРНО, ногодрыг одолели )))
Я же не зря написал что вы волшебник,а вот как быть со светодиодами?
Подключил два светодиода на 6 и 7 пин,но моргает один в место двух,то есть что при 250в моргает один что при 170в моргает тот же светодиод.
а условие зажигания светодиода в поправленном мной скетче в 39 строке кто писать будет?
ну ловите, пищать будет при высоком напряжении высоким тоном
Что не так,сразу горят два светодиода.
а что им не горить, если ты их не тушишь, мой код выше, проверь
Нифига себе вы настрочили :)
Внесу свою лепту
существует 99 способов, 100 профессор, 100, первый - лёжа, тогда 101 )))
Да кстати, это не рабочая конструкция, петля получается, считывать надо другим цифровым пином настроенным на вход
реализовали так
to ua6em: Вот оно как. А казалось бы должно работать.
Вот оно как. А казалось бы должно работать.
Ваш код проверил,получается так,если например понизили напряжения бузер пик потом загорелся светодиод, потом поднимаю до 220в светодиод продолжает гореть,то есть не так как нужно,вот то что помог написать мне ua6em там работает иначе,понизил например до 170в сработал бузер пик пик пик и моргает светодиод,потом поднимаю до 220в бузер молчит и светодиод тоже не горит потом ждем 5 минут и включается реле.
Ребята хотел еще один вопрос задать,в какую Атмегу можно залить этот код,вот стакими размерами.Думал может Атмега48?
Ребята хотел еще один вопрос задать,в какую Атмегу можно залить этот код,вот стакими размерами.Думал может Атмега48?
Я бы использовал атмегу nano, или 168, дешевле не получится и травить ничего не надо )))
Выкладываю чуть поправленный код, не проверял, но должно работать так же!
В коде комментарии, зачем так делается )))
to ua6em: Вот оно как. А казалось бы должно работать.
я выше съёрничал, насчёт того, что выход не может быть входом )))
оно можно было бы но аппаратно должно быть два блока логики и семафоры от внутренней петли
Ребята хотел еще один вопрос задать,в какую Атмегу можно залить этот код,вот стакими размерами.Думал может Атмега48?
Я бы использовал атмегу nano, или 168, дешевле не получится и травить ничего не надо )))
Выкладываю чуть поправленный код, не проверял, но должно работать так же!
В коде комментарии, зачем так делается )))
Привет,этот код тоже проверил и работает отлично тоже,спасибо еще раз вам,начну полную сборку,а потом можно фото выложить что получилось,в место релейного модуля будет ULN поставлю нормальное реле сделаю не большую обвязку.
поправил скетч, добавил возможность применения цифрового фильтра первого порядка для данных сенсора:
А сам гистерезис вот такой как и был.
Вопрос как мне сделать что бы было 180в-200в и 250-230в,как мне выловить нужные значения? при вот таких значениях.
цифровой фильтр позволяет увидеть в мониторе значение при нужном нам напряжении, выставляем напряжение и смотрим, пока в мониторе порта не пойдут стабильные показания
По разнице определим гистерезис
Далее выключить цифровой фильтр и включить прямое считывание с сенсора
А вообще это неправильный подход, правильный применён в изделиях SURGE ARREST - срезание полуволны до выставленного напряжения и рассеивание этой мощности на мощных резисторах, далее, при нагреве резисторов до определённой температуры срабатывание защиты отключающей электропитание
Хорошо,тогда мне надо сейчас считать значения при цыфровом ,потом отключаю цыфровой и включаю прямое считывание с сенсора ?и потом все эти данные сюда,при высоком то есть 250в 230в,и при низком 180в и 200в,я верно понял вас ?
Я вам на почту скинул все значения и показания,сюда не как не могу выложить архив.
Еще один вопрос,не понятно при каком тогда напряжении будет включатся реле?
Судя по картинкам цифровой фильтр здеь не применим и минимальный гистерезис должен быть 12 единиц
включение регулируется в этой строке
Получается то что выше код про него можно забыть?
То етсь тут ставим 12?
А тут каким оброзом сделать мне нужные значения на включения?
Тут выставил так.