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

Нужна помощь ESP+BLYNK+два ультразвука. Последние сильно тормозят.

quatterback

New member
Доброго времени, уважаемые.
Имеется D1 mini , Blynk, и cемь сенсоров: фоторезистор с цифровым выходом, 3 ИК, 1 геркон, 2 ультразвука HC-SR04.
C последними проблема по скорости срабатывания.

Если скетч содержит в себе управление только одним ультразвуком- никаких претензий по скорости-
одни раз махнул рукой возле него -движение зафиксировалось.

Другое дело когда прописаны шесть сенсоров да еще и Blynk.
Помогите ,пожалуйста, оптимизировать скетч (если это возможно) для более шустрой реакции эхолотов.

Скетч ниже:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>



long unsigned int lowIn;
long unsigned int lowIn2;
unsigned long counttimeprihoj;
unsigned long counttimekuh;

long unsigned int pause = 6000;
long unsigned int pause2 = 10000;

boolean lockLow = true;
boolean lockLow2 = true;

boolean takeLowTime;
boolean takeLowTime2;

int doorprihoj = 14;
int pirprihoj = 12;
int echoprihoj = 16;
int trigprihoj = 4;
int releprihoj = 3;
int pir1kuh = 2;
int pir2kuh = 0;
int echokuh = 13;
int trigkuh = 15;
int lightkuh = 5;
int relekuh = 1;



int timer1;
int timer2;

int autoprihoj =0;
int autokuh=0;
int stateprihoj=0;
int statekuh=0;


char auth[] = "одлододло";

char ssid[] = "лрлорлорлорлор";
char pass[] = "олдлодлодол";


bool isFirstConnect = true;

BLYNK_CONNECTED() {
if (isFirstConnect) {

Blynk.syncAll();



isFirstConnect = false;
}}





void setup()
{

Serial.begin(9600);
pinMode (pirprihoj,INPUT);
pinMode (echoprihoj,INPUT);
pinMode (trigprihoj,OUTPUT);
pinMode (releprihoj,OUTPUT);
pinMode (doorprihoj,INPUT);
pinMode (pir2kuh,INPUT);
pinMode (echokuh,INPUT);
pinMode (trigkuh, OUTPUT);
pinMode (lightkuh,INPUT);
pinMode (relekuh,OUTPUT);

digitalWrite (releprihoj, HIGH);
digitalWrite (relekuh, HIGH);
Blynk.begin(auth, ssid, pass);
}


BLYNK_WRITE(V0)
{if(param.asInt()==0)
{ digitalWrite(releprihoj, LOW);}

else { digitalWrite(releprihoj, HIGH);}}

BLYNK_WRITE(V1)
{if(param.asInt()==0)
{ autoprihoj=0;
}
else {autoprihoj=1;}}


BLYNK_WRITE(V2)
{if(param.asInt()==0)
{ autokuh=0;
}
else {autokuh=1;}}

BLYNK_WRITE(V3)
{if(param.asInt()==0)
{ digitalWrite(relekuh, LOW);}

else {digitalWrite(relekuh, HIGH);}}

void loop()
{

Blynk.run();



int duration1, cm1; //ультразвук 1.

digitalWrite(trigprihoj, LOW);
delayMicroseconds(2);
digitalWrite(trigprihoj, HIGH);
delayMicroseconds(10);
digitalWrite(trigprihoj, LOW);
duration1 = pulseIn(echoprihoj, HIGH);
cm1 = duration1 / 58;

int duration2, cm2; //ультразвук 2.

digitalWrite(trigkuh, LOW);
delayMicroseconds(2);
digitalWrite(trigkuh, HIGH);
delayMicroseconds(10);
digitalWrite(trigkuh, LOW);
duration2 = pulseIn(echokuh, HIGH);
cm2 = duration2 / 58;

int door=digitalRead(doorprihoj);

if (autoprihoj==0)
{





if(digitalRead(pirprihoj) == HIGH||door==0||cm1<80)
{

if(lockLow)
{
lockLow = false;
delay(50);
digitalWrite(3, LOW);

}
takeLowTime = true;
}


if(digitalRead(pirprihoj) == LOW&&door==1&&cm1>=80)
{

if(takeLowTime)
{
lowIn = millis();
takeLowTime = false;
}

if(!lockLow && millis() - lowIn > pause)
{

lockLow = true;
delay(50);
digitalWrite (3, HIGH);

}

}
if (door==0)
{Blynk.virtualWrite (V4, 255);}
if (door==1)
{Blynk.virtualWrite (V4, 0);}
if (digitalRead(pirprihoj) == HIGH||cm1<80)
{Blynk.virtualWrite (V7, 255);}
if (digitalRead(pirprihoj) == LOW||cm1>=80)
{Blynk.virtualWrite (V7,0);}
if (digitalRead (3)==LOW)
{ Blynk.virtualWrite (V0, LOW);}
if(digitalRead(3)== HIGH)
{Blynk.virtualWrite (V0, HIGH);}
}

if (autokuh==0)
{

{ //
if((digitalRead(pir1kuh)==HIGH&&digitalRead(lightkuh)==1)||(digitalRead(pir2kuh)==HIGH&&digitalRead(lightkuh)==1)||(cm2<40&&digitalRead(lightkuh)==1))
{
/
if(lockLow2)
{
lockLow2 = false;
delay(50);
digitalWrite(1, LOW);

}
takeLowTime2 = true;
}

/
if(digitalRead(pir1kuh) == LOW&&digitalRead(pir2kuh)==LOW&&cm2>=40)
{

if(takeLowTime2)
{
lowIn2 = millis();
takeLowTime2 = false;
}

if(!lockLow2 && millis() - lowIn2 > pause2)
{

lockLow2 = true;
delay(50);
digitalWrite (1, HIGH);

}}

if (digitalRead(pir1kuh)==HIGH||digitalRead(pir2kuh)==HIGH||cm2<40)
{Blynk.virtualWrite (V10, 255);}
if (digitalRead(pir1kuh)==LOW&&digitalRead(pir2kuh)==LOW&&cm2>=40)
{Blynk.virtualWrite (V10, 0);}
}



if (digitalRead (1)==LOW)
{ Blynk.virtualWrite (V3, LOW);}
if(digitalRead(1)== HIGH)
{Blynk.virtualWrite (V3, HIGH);}
}
}
 
Последнее редактирование:

quatterback

New member
уже добавил библиотеку Симпл Таймера, может если через нее ультразвуки в Void занести, тогда будет пободрее считывать... ...но пока еще не понял как это сделать правильно, ведь у меня к значениям см1 и см2 привязана логическая цепочка БЛИНКА и реле из void loop.
 

quatterback

New member
Вы уж держите нас в курсе, пожалуйста...
В общем, решил отойти от ультразвука в сторону PIR. Работает быстрее. Правда пришлось ставить несколько PIR-ов в разные точки в ниши, чтобы не было ненужных срабатываний. Проблема решена. Тема закрыта. Спасибо.
 

pvvx

Активный участник сообщества
Срабатывания сенсоров вешаются на прерывания по изменению на входах I/O.
 
Сверху Снизу