Авторизация
Зарегистрироваться

Подключаем электропечь к андроиду с помощью Wemos D1 mini


Давненько я не ковырял эту суперштуку под названием Wemos D1 mini, а тут оказия.
В общем есть электропечь Indesit:

Печь отличная, но в последнее время у нее стали баловаться регуляторы мощности. На двух конфорках работать стали нестабильно и непредсказуемо, невозможно выставить нужную температуру, то выкипает, то совсем гаснет.
Регуляторы мощности там стоят вот такие:

Я пробовал конечно их разбирать, чистил контакты, регулировал, но видимо металл уже изменил своих свойства и толку от этого практически не было.
И тут возникла мысль: «У меня есть Wemos D1 mini, в шаговой доступности есть твердотельные реле, почему нет?»
Итак беру пару вот таких твердотельных реле SSR-10DA:

Они популярные, есть на каждом углу. Есть несколько моделей, в маркировке нас интересуют цифра 10 (ток в амперах) и буквы DA (наша нагрузка будет работать на переменном напряжении, а управлять ею мы будем постоянным напряжением).
Напряжения Wemos D1 mini 3.3V вполне хватает, чтобы закрывать и открывать реле.

Итак, подключаем реле в разрыв питающего конфорку провода (между конфоркой и родным регулятором мощности конфорки). Сделал так на всякий случай, для дополнительной защиты. Т.е. чтобы наш Wemos D1 mini управлял конфоркой, нам нужно вручную ее включить (поставить на макс огонь). На управляющие контакты кидаем провода от пинов Wemos D1 mini (не забываем про полярность), осталось только запилить скетч.

Пока подпаивал пины, вспомнил, что у меня валяются без дела несколько датчиков, остались от старых проектов. И снова «почему нет?».
Подключил к Wemos D1 mini датчик атмосферного давления BMP180 (на борту он кстати имеет и датчик температуры), и датчик температуры и влажности DHT-21. Вот такие:


Подключение описывать не буду, в интернете море информации. Они очень популярные.

Пилим скетч:
Дополнительная информация
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <Adafruit_BMP085.h>
#include "DHT.h"


#define D0 16  //TDS
#define D1 5   //SCL
#define D2 4   //SDA
#define D3 0   
#define D4 2   //LED помпа
#define D5 14  // Земля
#define D6 12  // 2 реле
#define D7 13  // 1 реле
#define D8 15  
#define TX 1
#define RX 3

const char* ssid = "Home";
const char* password = "11111111";

String response = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
String response_klimat = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000";
String delimiter = "|";
String delimiter_2 = "@";
String argument = "000000000000000000000000000000000000000";
String argument_name = "000000000000000000000000000000000000000";
String a = "0000000000000000000000";
ESP8266WebServer server(80);

float PERIOD = 10.0; 
const float MINIMAL_PERIOD = 0.5; 
int power_rate_1 = 0;
int power_rate_2 = 0;
float duration_on_1 = 0;
float duration_on_2 = 0;
float duration_off_1 = 0;
float duration_off_2 = 0;

unsigned long time_on_1;
unsigned long time_on_last_time_1 = 0;
unsigned long time_off_last_time_1 = 0;
unsigned long time_on_2;
unsigned long time_on_last_time_2 = 0;
unsigned long time_off_last_time_2 = 0;
unsigned long timer_1;
unsigned long timer_2;
unsigned long timer_start_1;
unsigned long timer_start_2;
boolean timer_enable_1 = false;
boolean timer_enable_2 = false;
boolean power_on_1 = false;
boolean power_on_2 = false;
boolean enable_1 = false;
boolean enable_2 = false;

//***********HISTORY************************************
const int SIZE_HISTORY = 100; 
long HISTORY_PERIOD = 600000; 
unsigned long array_millis[SIZE_HISTORY];
float history_temp[SIZE_HISTORY];
float history_temp_dht[SIZE_HISTORY];
float history_baro[SIZE_HISTORY];
float history_hum[SIZE_HISTORY];
unsigned long history_last_time=0;
int history_counter = 0;       

//******DHT-21*******************************************
#define DHTPIN 2
#define DHTTYPE DHT21
DHT dht(DHTPIN, DHTTYPE);
  float t;                                            //Мгновенная температура
  float h;                                            //Мгновенная влажность
  float average_t;                                    //Средняя температура
  float average_h;                                    //Средняя влажность
  float t_array [10] ;                                //Массив для температуры
  float h_array [10] ;                                //Массив для влажности
  int array_counter = 0;                              //Счетчик переполнения массива
  boolean dht_first_flag = 1;
  unsigned long dht_last_time =0;

//***********BMP085***************************************
Adafruit_BMP085 bmp;
float baro_temperature;
float baro_pressure;
float average_bar_pressure;                                    //Среднее давление
float average_bar_temperature;                                 //Средняя температура
float bar_temperature_array [10] ;                             //Массив для температуры
float bar_pressure_array [10] ;                                //Массив для давления
int bar_array_counter = 0;                                      //Счетчик переполнения массива
boolean bar_first_flag = 1;
unsigned long  bmp_last_time;

//--------------------EEPROM----------------------------
#define EE_period 0
#define EE_freq_1 10
#define EE_freq_2 2


//****************************************************************************************


void handleRoot() {
  Create_info_response();
  server.send(200, "text/html", response_klimat);
}

void handleNotFound(){
  String message = "404. Not Found\n\n";
  server.send(404, "text/plain", message);
}

void handleSet() {
  argument = server.arg(0);
  a = server.arg(0);
  if(server.argName(0) == "info") {
    Create_info_response();
     Serial.println(response_klimat);
    server.send ( 200, "text/plain", response_klimat  );
  }
  if(server.argName(0) == "power_1") {
    int old = power_rate_1;
    power_rate_1 = a.toInt();
    if(old == 0 && power_rate_1 > 0)time_on_1 = millis();
    if(power_rate_1 > 0) enable_1 = true;
    else {
      enable_1 = false;
      power_on_1 = false;
      timer_enable_1 = false;
      digitalWrite(D7, LOW);
    }
    Create_info_response();
    server.send ( 200, "text/plain", response_klimat );
  }
  if(server.argName(0) == "power_2") {
    int old = power_rate_2;
    power_rate_2 = a.toInt();
    if(old == 0 && power_rate_2 > 0)time_on_2 = millis();
    if(power_rate_2 > 0) {
      enable_2 = true;
    }
    else {
      enable_2 = false;
      power_on_2 = false;
      timer_enable_2 = false;
      digitalWrite(D6, LOW);
    }
    Create_info_response();
    server.send ( 200, "text/plain", response_klimat );
  }
  if(server.argName(0) == "timer_1") {
    int value = a.toInt();
    if(value > 0) {
      timer_1 = value * 60000L;
      timer_enable_1 = true;
      timer_start_1 = millis();
    }else{
      timer_enable_1 = false;
    }
    Create_info_response();
    server.send ( 200, "text/plain", response_klimat );
  }
  if(server.argName(0) == "timer_2") {
    int value = a.toInt();
    if(value > 0) {
      timer_2 = value * 60000L;
      timer_enable_2 = true;
      timer_start_2 = millis();
    }else{
      timer_enable_2 = false;
    }
    Create_info_response();
    server.send ( 200, "text/plain", response_klimat );
  }
  if(server.argName(0) == "klimat") {
    response_klimat = "";
    response_klimat += average_bar_pressure;
    response_klimat += delimiter;
    response_klimat += average_bar_temperature;
    response_klimat += delimiter;
    response_klimat += average_h;
    response_klimat += delimiter;
    response_klimat += average_t;
    server.send ( 200, "text/plain", response_klimat);
  }
  if(server.argName(0) == "history") {
    Create_history_response();
    server.send ( 200, "text/plain", response);
  }
   if(server.argName(0) == "freq") {
    int value = a.toInt();
    HISTORY_PERIOD = value * 1000L;
   
     EEPROM.begin(10);
     int first_byte = value/256;
      int second_byte = value%256;
 EEPROM.write(EE_freq_1, first_byte);
  EEPROM.commit();
     EEPROM.write(EE_freq_2, second_byte);
    EEPROM.commit();
     EEPROM.end();
    
     response_klimat = value;
    server.send ( 200, "text/plain", response_klimat);
  }
  if(server.argName(0) == "period") {
    int value = a.toInt();
    PERIOD = (float)value;
     EEPROM.write(EE_period, (byte)value);
      EEPROM.commit();
    response_klimat = value;
    server.send ( 200, "text/plain", response_klimat);
  }
  /*
     response_klimat = "Get response: ";
     response_klimat += server.argName(0);
     response_klimat += "  Value: ";
     response_klimat += a.toInt();
     response_klimat +=  " time:";
     response_klimat += millis();
     Serial.println(response_klimat);
     */
}
//****************************************************************************************
//****************************************************************************************


void setup(void){
 
  pinMode(D6, OUTPUT);
  pinMode(D7, OUTPUT);
  pinMode(D5, OUTPUT);
  digitalWrite(D5, LOW);
  digitalWrite(D6, LOW);
  digitalWrite(D7, LOW);
  Serial.begin(115200);
  Wire.begin();
  dht.begin();  
  bmp.begin();
  
  EEPROM.begin(10);
  PERIOD = (float)EEPROM.read(EE_period);
  

  
  int first_byte = EEPROM.read(EE_freq_1);
  int second_byte = EEPROM.read(EE_freq_2);
  HISTORY_PERIOD = (first_byte*256+second_byte) * 1000L;
  EEPROM.end();
  
  WiFi.begin(ssid, password);
  
  Serial.println("");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

 
  server.on("/", handleRoot);
  server.on("/set", handleSet);
  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");

 
 

}

//**********************LOOP**************************************************************
//****************************************************************************************


void loop(void){
   server.handleClient();
   Calc_duration();
   Pechka();
   Baro(1000);
   DHT_21(2000);
   History(HISTORY_PERIOD);
   Timer();
   
}

//****************************************************************************************
//****************************************************************************************

void History(long freq){
    if((millis()-history_last_time)>freq){
      
        history_temp_dht[history_counter] = average_t;
        history_temp[history_counter] = average_bar_temperature;
        history_baro[history_counter] = average_bar_pressure;
        history_hum[history_counter] = average_h;
        array_millis[history_counter] = millis();
        history_counter ++;
        if(history_counter >= SIZE_HISTORY) history_counter = 0;
        
        history_last_time = millis();
    }
}

void Create_history_response(){
  response = "";
  for(int i = 0; i < SIZE_HISTORY; i++){
    response_klimat = "";
    response_klimat +=    history_baro[i];
    response_klimat +=    delimiter;
    response_klimat +=    history_temp[i];
    response_klimat +=    delimiter;
    response_klimat +=    history_hum[i];
    response_klimat +=    delimiter;
    response_klimat +=    history_temp_dht[i];
    response_klimat +=    delimiter;
    long m = millis() - array_millis[i];
    response_klimat +=    m;
    response_klimat +=    delimiter_2;
    response += response_klimat;
    }
  
}

void Create_info_response(){
      response_klimat = "";
     response_klimat += power_rate_1;
     response_klimat += delimiter;
     response_klimat += power_on_1;
     response_klimat += delimiter;
     if(power_rate_1 > 0) response_klimat += millis() - time_on_1;
     else  response_klimat += 0;
     response_klimat += delimiter;
     if(timer_enable_1) response_klimat += timer_start_1 + timer_1 - millis();
     else response_klimat += 0;
     response_klimat += delimiter;
    
     response_klimat += power_rate_2;
     response_klimat += delimiter;
      response_klimat += power_on_2;
     response_klimat += delimiter;
     if(power_rate_2 > 0) response_klimat += millis() - time_on_2;
     else  response_klimat += 0;
     response_klimat += delimiter;
     if(timer_enable_2) response_klimat += timer_start_2 + timer_2 - millis();
     else response_klimat += 0;
      response_klimat += delimiter;
      response_klimat += HISTORY_PERIOD;
       response_klimat += delimiter;
      response_klimat += PERIOD;
}

 //---------Барометр-----------------------------------------------------
void Baro(int freq){
  if((millis()-bmp_last_time)>freq){
     baro_pressure = bmp.readPressure()/133.322;
     baro_temperature = bmp.readTemperature();
     
     if(bar_first_flag){
      for (int m = 0; m < 10; m++){
        bar_temperature_array[m] = baro_temperature;
        bar_pressure_array[m] = baro_pressure;
        bar_first_flag = 0;
        }
      }
      bar_temperature_array[bar_array_counter] = baro_temperature;
      bar_pressure_array[bar_array_counter] = baro_pressure;
      bar_array_counter++;
      if(bar_array_counter>9){bar_array_counter=0;}
      float m1 = 0;
      float m2 = 0;
      for (int m = 0; m < 10; m++){
        m1 = m1 + bar_temperature_array[m]; 
        m2 = m2 + bar_pressure_array[m];}
      average_bar_pressure = m2/10.00;                                    
      average_bar_temperature = m1/10.00;                                 
      
      bmp_last_time = millis();
  }
}

//---------------DHT--------------------------------------------
void DHT_21(int freq){
   if ((millis()-dht_last_time)>freq){                                 
    t = dht.readTemperature();
    h = dht.readHumidity();
   
    
    if(dht_first_flag){
      for (int m = 0; m < 10; m++){
        t_array[m] = t;
        h_array[m] = h;}
        dht_first_flag = 0;
      }
   
  t_array[array_counter] = t;
  h_array[array_counter] = h;
  array_counter++;
  if(array_counter>9)array_counter=0;
  float summa_t = 0;
  float summa_h = 0;
  for (int m = 0; m < 10; m++){
    summa_t += t_array[m];
    summa_h += h_array[m];
    }
  average_t = summa_t/10.00;
  average_h = summa_h/10.00;
  dht_last_time = millis();}
  }

//---------Pechka-------------------------------------------------------
void Pechka(){
  if(enable_1){
      if(power_on_1){
          if(millis() - time_on_last_time_1 > duration_on_1 * 1000.0){
              power_on_1 = false;
              time_off_last_time_1 = millis();
              digitalWrite(D7, LOW);
              //Serial.println("1 off");
          }
      }
      if(!power_on_1){
         if(millis() - time_off_last_time_1 > duration_off_1* 1000.0){
              power_on_1 = true;
              time_on_last_time_1 = millis();
              digitalWrite(D7, HIGH);
               //Serial.println("1 on");
         }
      }
  }else{
       digitalWrite(D7,0);
  }

   if(enable_2){
      if(power_on_2){
          if(millis() - time_on_last_time_2 > duration_on_2 * 1000.0){
              power_on_2 = false;
              time_off_last_time_2 = millis();
              digitalWrite(D6, LOW);
               //Serial.println("2 off");
          }
      }
      if(!power_on_2){
         if(millis() - time_off_last_time_2 > duration_off_2* 1000.0){
              power_on_2 = true;
              time_on_last_time_2 = millis();
              digitalWrite(D6, HIGH);
               //Serial.println("1 onn");
         }
      }
  }else{
       digitalWrite(D6,0);
  }

}

void Calc_duration(){
  if(power_rate_1 == 100){
    duration_on_1 = 600;
    duration_off_1 = 0;
  }
  if(power_rate_1 == 0){
    duration_on_1 = 0;
    duration_off_1 = 100000;
  }
  if(power_rate_1 < 100 && power_rate_1 > 0){
     duration_on_1 = power_rate_1/100.0 * PERIOD;
     duration_off_1 = PERIOD - duration_on_1;
  }
 if(power_rate_2 == 100){
    duration_on_2 = 600;
    duration_off_2 = 0;
  }
  if(power_rate_2 == 0){
    duration_on_2 = 0;
    duration_off_2 = 100000;
  }
  if(power_rate_2 < 100 && power_rate_2 > 0){
     duration_on_2 = power_rate_2/100.0 * PERIOD;
     duration_off_2 = PERIOD - duration_on_2;
  }
}

void Timer(){
  if(timer_enable_1){
    if(millis() - timer_start_1 > timer_1){
       timer_enable_1 = false;
        digitalWrite(D7, LOW);
        power_rate_1 = 0;
        enable_1 = false;
     }
  }  
   if(timer_enable_2){
    if(millis() - timer_start_2 > timer_2){
       timer_enable_2 = false;
        digitalWrite(D6, LOW);
        power_rate_2 = 0;
        enable_2 = false;
    }
  }  
}

Пара слов о скетче.
1. Наш скетч периодически опрашивает датчики. Показания каждого датчика заносятся в массив на 10 значений, после чего вычисляется среднее арифметическое (для большей точности можно вычислять медиану). Соотвественно эти данные о текущих показаниям могут быть в любой момент получены от него.
2. Показания датчиков один раз в час (период можно регулировать) заносятся в массив из 100 значений. И в любой момент этот массив по запросу может быть выдан. Это история показаний датчиков. 100 значений по часу, чуть более 4 суток получается.
3. Алгоритм работы собственно конфорок. Вычисляется время включения и выключения с учетом установленной мощности, установленного цикла. К примеру, длительноть рабочего цикла у нас установлена 10 секунд, а мощность 10%. Следовательно конфорка включится на 1 секунду, затем выключится на 9 секунд и далее по кругу.
4. Запоминаются время включения (для последующего отображения времени готовки) и также устанавливается таймер с обратным отсчетом, о нем позже.
5. Все эти данные могут быть получены с помощью GET-запроса. Ну например, наберем в адресной строке браузера домашнего компьютера следующий адрес:
192.168.0.100/set?info, в ответ получим строку в CSV-формате следующего вида
0|0|0|0|0|0|0|0|3600000|5.00
Числа, разделенные вертикальной чертой, каждое из которых отображает данные о текущем режиме (мощность первой конфорки, время ее работы, таймер, то же для второй, период истории, установленный цикл).
192.168.0.100 — это локальный адрес нашего Wemos D1 mini, он назначается роутером и узнать его можно при подключении Wemos D1 mini к компьютеру в мониторе порта.
192.168.0.100/set?klimat, нам вернет 751.26|21.69|49.16|23.68 — показания датчиков.
192.168.0.100/set?history нам вернет строку длиной почти в 4 тыс. символов примерно в таком виде:
746.28|23.69|54.19|26.14|133351518@746.21|25.09|52.78|25.34|132751517@…
Это показания датчиков с отметкой времени каждого (в ms назад от текущего момента).
Управление будет происходить запросами в виде
192.168.0.100/set?power_1=50 — этот запрос установит мощность первой конфорки на 50%.
Остальные запросы можно посмотреть в скетче.
Вопросы по скетчу можете задавать в комментариях или в личке, отвечу. Зачем там строка длиной в 4500 нулей? Это старая длинная история поиска путей стабильности работы Wemos. К слову, успешная. Wemos немножко неправильно работает с памятью при наращивании строк, и вот эти нули решают эту проблему.

Итак, уже все работает, можем получать информацию и отдавать команды. Осталось только выбрать UI-среду, которая будет делать это чуть более элегантно, чем строчки в браузере. Ну тут у кого к чему душа лежит. Можно сделать локальную веб-страничку с Ajax-запросами. Можно накодить простенькую windows-прогу в WPF. Но разумеется удобнее всего будет смартфон. Я выбрал конечно последнее, тем более, что немножко поверхностно могу кодить на Jave для Android. Кто не может, можете воспользоваться потрясной штукой MIT App Inventor 2. Эта среда позволяет писать проги для Андроида прям на коленке, без знания языка, просто на алгоритмах. В своем прошлом обзоре я пользовался именно ею и подробно о ней рассказывал. Причем результат визуально будет мало отличаться от «взрослой» проги, написанной в Android Studio.
Итак, написанная за пару вечеров программка выглядит так:

На главном экране вверху находятся кнопки выбора конфорки. Поскольку реле подключены к дальней левой и правой ближней, кнопки расположены именно в таком порядке. Кроме этого они служат индикатором текущего режима (меняют цвет от зеленого к красному в зависимости от установленной мощности, белые — если выключены). Для каждой конфорки все параметры (мощность, время, таймер) отдельные.
Ниже время, прошедшее с момента включения конфорки. Удобно сразу видеть, сколько готовится блюдо, без запоминания когда включил и т.д.
Еще ниже таймер. Выполняет 4 функции:
— во-первых, устанавливается ползунком,
— во-вторых, ведет обратный отсчет, показывая сколько осталось,
— в-третьих, выключает конфорку по истечении времени,
— в-четвертых, оповещает хозяина звуковым сигналом и вибрацией по окончании отсчета.
Ниже ползунок для установки мощности в процентах. Еще ниже кнопки для быстрой установки стандартных значений. К примеру, после пары недель использования мы поняли, что суп приятно кипит на 7% мощности, а мясо имеет идеальную золотистую корочку при 53% жарки, можем назначить на кнопки эти предустановленные значения в настройках:

Там же можно регулировать остальные параметры (рабочий цикл, частоту сохранения истории, IP адрес).
В принципе по печке это и все.
В верхнем эпп-баре есть еще пара кнопок (кроме кнопки настройки), средняя ведет нас к этому экрану (текущие показания датчиков):

Температуры две (цифровых), т.к. у нас два датчика, которые ее отображают.
А левая кнопка ведет нас в историю показаний:

Вот график с давлением действительно полезная штука. Тенденция его изменения очень хорошо кореллируется с самочувстсвием.

Пара слов об опыте использования. Супер, что сказать, даже лучше, чем мне казалось вначале. Во-первых, возможность выставить очень точно силу огня, которая будет поддерживаться идеально. Обычные регуляторы так не могут. У них меньше градаций, плюс каждый имеет свой разброс. Угадать не просто. Для блюд, которые хорошо выкипают, это важно.
Во-вторых, время и таймеры. Честно, лично я ленюсь каждый раз засекать время готовки, приходится делать на глаз, пробуя. Плюс частенько поставил, зачитался интересным обзором на Mysku и забыл. А таймер всегда напомнит и выключит огонь. Плюс иногда бывает нужно готовить блюдо несколько часов. Можно поставить и отлучиться в магазин, не переживая, что задержишься.
Дискомфорта от доставания телефона для включения конфорки нет, быстро привыкаешь. Не так это часто делается.

Ну конечно мне тоже пришла в голову мысль попробовать использовать пищевой температурный датчик. Опускаем его в кастрюльку с пельменями и следим за температурой воды, как только температура приближается к 95-99 градусам, ставим мощность на слабый огонь, пельмени никуда не убегают. Профит. Может как-нибудь попробую. Вроде бы попадались такие датчики в продаже.
Спрашивайте, что не понятно, с радостью отвечу. Спасибо за внимание.
Вот так на меня смотрела кошка, пока я все это делал:
Планирую купить +70 Добавить в избранное +138 +221
свернуть развернуть
Комментарии (117)
RSS
+
avatar
  • mib
  • 03 ноября 2020, 07:52
-8
+
avatar
+17
Дык родной регулятор мощности то же самое делает. И ничего, за много лет все 4 конфорки исправны.
+
avatar
  • Hector
  • 03 ноября 2020, 07:55
+22
перегорание всех электронагревательных приборов происходит в момент пуска, пока температура мала, сопротивление меньше, ток бахает большой

Нихромовая проволока камфорок про это не знает.
+
avatar
  • kvl
  • 03 ноября 2020, 09:32
-7
+
avatar
  • MrFree
  • 03 ноября 2020, 09:37
+4
Еще ни разу не видел просто перегоревшую конфорку или тэн. а вот изогнувшуюся спираль, которая коснулась корпуса и сгорела в месте прикосновения или даже прожгла дыру видел не раз.
+
avatar
  • kvl
  • 03 ноября 2020, 11:19
-4
Никто не видел витамины, а они есть.
+
avatar
  • MrFree
  • 03 ноября 2020, 11:33
+6
у меня за 13 лет, что я занимаюсь техникой, нагревательные приборы выходили из строя по следующим причинам (выше чаще):
* перегрев -> изгиб ТЭНа/спирали -> касание корпуса нитью -> перегорание нити с/без прогоранием корпуса.
* отгорание провода от контакта нагревателя вследствие некачественной опрессовки/клеммы.
* выгорание описанного пунктом выше контакта из-за ослабления пружинного клемника.
* брак нагревателя в точке соединения контакта и нихромовой нити -> обрыв
* простой обрыв нити спирали. утверждать что спираль оборвалась из-за частых включений нельзя, это были не самые старые ТЭНы, да и их количество было ниже погрешности статистики.

И при чем здесь витамины?
+
avatar
  • kvl
  • 03 ноября 2020, 12:09
-11
+
avatar
  • MrFree
  • 03 ноября 2020, 12:35
+6
вы это, с витаминками поосторожнее, это по ходу не витаминки.

в прочем писать ответ я больше не буду, вы мои ответы не читаете в принципе.
+
avatar
  • denisss
  • 03 ноября 2020, 11:38
0
У меня на съемной хате прямо сейчас прекрасный экземпляр электропечки советского производства, где почти каждый месяц перегорает очередная секция чугунных конфорок-блинов.
+
avatar
  • MrFree
  • 03 ноября 2020, 12:36
+1
а вы их перед установкой сушите?
+
avatar
0
а что, если не сушить — то через месяц другой перегорит?
+
avatar
  • MrFree
  • 03 ноября 2020, 12:53
0
нет, в смысле не обязательно, далеко не обязательно. но лучше всё же просушить, тк в зависимости от конструкции может по влаге внутри конфорки идти нештатная утечка на корпус.
правка:
не тому написал
+
avatar
0
В советских квартирах с электроплитами отдельная проводка из трех проводов (собственно фаза, ноль, земля) со своим автоматом прямо от щитка. Корпус плиты посажен на «землю». Я как бы в не одной такой квартире жил с этой советской проводкой с постройки дома и лично это видел и знаю. А в электро стояке PEN шина (совмещенный ноль и земля).
+
avatar
  • MrFree
  • 04 ноября 2020, 12:05
0
позвольте уточнить цель данной справочной информации?
+
avatar
  • denisss
  • 03 ноября 2020, 12:49
0
Чего? Они там стоят похоже с начала времен, т.е. с момента производства. Кого сушить-то?
+
avatar
  • MrFree
  • 03 ноября 2020, 12:55
-1
ээээ, очередная секция это как? я сначала подумал, что речь о замене конфорки, но похоже вы просто меняете спираль в конфорке что ли? там может через трещину затекает?
+
avatar
  • denisss
  • 03 ноября 2020, 14:40
0
В каждом блине 3 нагревательных элемента разного сопротивления, за счет их коммутации в разных комбинациях регулируется мощность нагрева. И вот эти секции и сгорают внутри блина, первая обычно самая мощная. В итоге, например, блин на 1.5 кВт становится блином на 500-700 Вт максимум.
+
avatar
  • fedottt
  • 03 ноября 2020, 13:21
0
весла. сушите весла)
+
avatar
  • ArtyRH
  • 03 ноября 2020, 08:01
+1
Конфорка инертная, первые пару пусков — а потом она уже прогретая и ничего с ней не будет.
+
avatar
  • Hector
  • 03 ноября 2020, 08:11
+10
Сопротивление нихрома практически не зависит от температуры — если кто не знает :)
А вот сопротивление вольфрамовой спирали лампы накаливания при нагреве увеличивается на порядок.
Школьная физика.
Можно сделать и лампочки накаливания с нихромовыми спиралями. Они не будут перегорать в момент включения, но свет будет включаться ооочень медленно — примерно, как раскаляется спираль в инфракрасном обогревателе UFO.
Поэтому в лампочках вольфрам (у него: 1. Нужный температурный коэффициент сопротивления — свет загорится быстро. 2. Большая стойкость к высокой температуре — спираль прослужит дольше).
+
avatar
  • dmi-try
  • 03 ноября 2020, 10:05
+2
13 с половиной раз. Я мерял.
+
avatar
  • Hector
  • 03 ноября 2020, 12:40
0
Поменял сопротивление холодной спирали 75 ватной лампы накаливания — 51.5 Ом. 12.5 раз
Вообщем, на порядок.
+
avatar
  • sim31r
  • 08 ноября 2020, 23:57
+1
Я на осциллографе замерял переходной процесс, практически полный разогрев спирали за одну полуволну.
+
avatar
  • stasv
  • 03 ноября 2020, 11:32
+1
нихром плаввится при 1000 с небольшим градусов, если его вставить в лампочку, он будет светить в ИК и частично — красно-оранжевым
+
avatar
0
Вики даёт немного другую информацию.
Нихром Х20Н80 — Cr 20 %, Ni 80 %. Удельное сопротивление 1,13 Ом·мм²/м при 20 °C, 1,167 Ом·мм²/м при 1100 °C; максимальная рабочая температура 1200 °C, температура плавления 1400 °C.
+
avatar
0
Поэтому в лампочках вольфрам
В лампочках вольфрам, прежде всего, из-за его температуры плавления. Нихром не сможет выдержать и половины этой температуры.
+
avatar
0
Это только супернагревательные приборы «сгорают». У которых рабочая температура несколько тысяч градусов.
+
avatar
  • Maksus
  • 03 ноября 2020, 08:02
+4
Вы путаете лампу накаливания, температура спирали которой составляет несколько тысяч градусов, а сопротивление в рабочем режиме в несколько раз больше, чем у холодной, и электроплитку, которая греется до пары сотен градусов и сопротивление которой при этом практически не меняется.
+
avatar
+3
Сопротивление нихрома, к сожалению, мало зависит от температуры, в отличие от вольфрама в электролампочке. Поэтому не будем говорить о ВСЕХ электронагревательных приборах. Нихромовые нагреватели из списка вычеркните. Они если перегорают, то когда им вздумается, а не в момент включения.
+
avatar
0
И каково сопротивление холодного и горячего ТЭНа?
+
avatar
  • Hector
  • 03 ноября 2020, 07:54
+9
Кот опечален, что пельмени никуда не убегают…
+
avatar
  • rashn
  • 03 ноября 2020, 08:02
+8
Ушел на работу с телефоном, жена не может включить плиту )))))

Отличная реализация, для кросс платформенности и управления извне можно использовать Blynk. Тогда по запросу из дома, вы хоть с пляжа в Турции сможете включить конфорку.
+
avatar
+2
Прогу можно установить на несколько телефонов, и каждый сможет управлять.
+
avatar
  • rashn
  • 03 ноября 2020, 23:03
0
или «выключить плиту»
+
avatar
+2
-ты чего пельмени не доварила?
-это не я!!!
-тьфубл@, плиту взломали.
))))))

это я в шутку, конечно.
+
avatar
+32
Теперь голодная смерть настигнет домочадцев когда умрет роутер.
+
avatar
+1
у меня резервный стоит как минимум, внутренняя сеть выживет.
+
avatar
  • g578
  • 03 ноября 2020, 08:15
+10
Как там говорят. Если муж рукастый то новых вещей не жди )
Давно в доме плита и духовка на емкостных кнопках
+
avatar
  • Dimon_
  • 03 ноября 2020, 08:20
+27
Автор, поставьте в устройство тумблеры, которые по высоковольтной стороне блокируют ваши фотеки.
Иначе любой сбой с Wi-Fi оставит вашу семью голодными.

И, да, вы счастливо прошли мимо хитро расположенных граблей: на Али есть фотеки, которые от 3,3 вольт только зажигают свой светодиод, а уверенно включаться начинают лишь от 9 вольт. Это для тех, кто решит повторить самоделку и будет искать причину холодных конфорок при внешне работающей конструкции и весело мигающих индикаторах на фотеке.

PS: Чёт подумалось… Чем дальше цивилизация, тем сложнее становятся элементарные задачи.

Ведь исходный пример: наши деды, чтобы сделать термостат, ставили биметаллический переключатель и ващще не парились. И ведь, по большому счёту, работает же до сих пор, кое-где по полвека аптайм.
Наши отцы, чтобы сделать термостат, паяли кучку транзисторов и резисторов к терморезистору, и получали работоспособность на десятки и десятки лет.
А теперь, прочитал этот фундаментальный обзор и вот на философию потянуло… Вайфайные модули с датчиками атмосферного давления скрещивать. С мобильников/из браузеров обращаться, чтобы плиту включить… ЁмаЁ ©.

Нет, статья познавательная, безусловно. Честный заслуженный плюс поставил.
Но что же будет ещё через пяток лет — даже подумать боязно. Как в «Ералаше», чтобы время на часах посмотреть, два чемодана с собой носить постоянно? :)
+
avatar
0
Да, думал об этом. Голодными в любом случае не оставят. Остальные две конфорки работают на родных регуляторах.
+
avatar
  • Zhenjko
  • 03 ноября 2020, 14:51
+3
Через пяток лет будет так: открыл духовку/микроволновку, вставил полуфабрикат, закрыл, тут же открываешь-а там готовая еда.
Как в девятом элементе.
+
avatar
  • wvolk
  • 03 ноября 2020, 15:17
+7
-Как в девятом элементе.-
Неужели вышло продолжение?
+
avatar
  • Zhenjko
  • 03 ноября 2020, 15:28
+1
о_О, ошибся 8)
+
avatar
  • wvolk
  • 03 ноября 2020, 16:15
+1
Не страшно. Даже поднял настроение.
+
avatar
  • weds
  • 03 ноября 2020, 17:03
+2
походу я тоже пропустил 6,7,8 элементы
+
avatar
  • MrFree
  • 04 ноября 2020, 11:44
+3
шестой с Лесли Нильсоном рекомендую к однократному просмотру.
+
avatar
+3
Но почему-же к однократному? Фильм очень актуален до сих пор
+
avatar
+2
Всего-то встроить старый мобильник в плиту, и делов то :)
А линк сделать прямой от esp к мобилке, тогда можно и роутер тушить :)
+
avatar
  • ABATAPA
  • 03 ноября 2020, 08:25
+17
10A, да ещё и Fotek, на конфорку несколько киловатт? Вас ждёт много удивительных открытий, особенно когда его пробьёт…
Не увидел ни одной реальной фотографии реализации. Управление только с телефона? То ещё решение…
Сразу напрашиваются энкодер, дисплей вместо родного…
И прогоняйте текст через spell checker, хоть «конкакты» и «длинной» уберёт...
+
avatar
0
А у вас на плите стоят комфорки больше двух киловатт?
+
avatar
  • ABATAPA
  • 03 ноября 2020, 09:32
+7
Во-первых, этим китайским поделкам и на 5А нельзя доверять. Во-вторых, а что Вас удивляет?
Самые обычные конфорки




+
avatar
+2
Ага, знакомо, электродный котёл управляется фотеками. 5-кратный запас по мощности, стоят на радиаторах с обдувом и термопасте. Итого раз в года 2 умирает одно из 3х, притом умирает совсем по-разному: хорошо, когда с разрывом выходной цепи, но бывало, что наоборот или ухитряется пропускать ток в 1 ампер (в рабочем режиме около 10А).
+
avatar
  • stupic
  • 03 ноября 2020, 16:50
+2
Замените самодельными, на дискретных элементах
+
avatar
  • EngelS
  • 03 ноября 2020, 23:44
+1
А я не понял с какой целью тут транзистор? какова его функция? Он же пытается шунтировать цепочку фотодиод-R5.
Пока писал пост — сам додумался это «параллельный» стабилизатор тока для разного управляющего входного напряжения…
+
avatar
  • vlandus
  • 03 ноября 2020, 09:06
+1
Из заголовка про электропечь я понял, что речь пойдёт о духовке.
+
avatar
  • SterX
  • 03 ноября 2020, 09:08
+1
датчик-щуп еще нужен и можно сделать так
Никакой сувид будет не нужен :)
+
avatar
  • Um-ka
  • 03 ноября 2020, 09:09
+2
Дисплей и энкодер ну просто просятся в проект. А вообще, автор по сути изобрел индукционку, только без индукции.
Надо развивать идею дальше. MAX6675 с выносным термометром прикрутить, пуш-уведомления на мобилку добавить, рецепты (термопрофили) запилить…
+
avatar
  • MrFree
  • 03 ноября 2020, 09:18
+2
Надеюсь вы не забыли на отдельные пины поставить электромагнитные контакторы, которые при выключении конфорки отключают питание с линии с видимым разрывом? и собаку тоже не забыли?
Конечно же неплохо еще поставить термодатчик на конфорку и контроль превышения температуры.
+
avatar
0
Твердотельные реле установлены в цепи после механических (т.е. я вручную включаю тубмлер на печи, а затем регулирую телефоном).
И термодатчики в конфорку встроены по умолчанию, в этом плане порядок.
+
avatar
  • Avacha
  • 03 ноября 2020, 09:31
+2
У меня в плите есть таймеры, которые отключают конфорку при продолжительном использовании в зависимости от установленной мощности. Если включить на всю, то отключится через три часа, на частичных режимах подольше. Может, и Вам стОит такое внедрить?
+
avatar
0
термореле на контроль самое оно.
+
avatar
  • Reverse
  • 03 ноября 2020, 09:20
+1
Все бы ничего, но оставлять такую технику под постоянным питанием несколько опасно. Стандартные выключатели обеспечивают механическое отключение от электропитания, а твердотельные реле — нет. Пробой, от грозы или помех, так называемых, твердотельных реле весьма распространен, у них внутри обычный симистор серии ВТВ или ему подобный. Если начнется «самоход» конфорки, то его, в вашей конструкции, ни чем не остановить.
Думаю, вкупе с твердотельным реле, имеет смысл установить малогабаритный контактор, чтоб он механически отключал питание конфорок.

Если поставить датчики температуры конфорок, то можно организовать ПИД регулятор, будет весьма удобная штука. Конфорка будет разогреваться на максимальной мощности, а потом сама регулировать мощность в зависимости от «теплоотвода».
+
avatar
  • Hegy
  • 03 ноября 2020, 11:47
+1
Не то?

Итак, подключаем реле в разрыв питающего конфорку провода (между конфоркой и родным регулятором мощности конфорки). Сделал так на всякий случай, для дополнительной защиты. Т.е. чтобы наш Wemos D1 mini управлял конфоркой, нам нужно вручную ее включить (поставить на макс огонь).
+
avatar
  • Reverse
  • 03 ноября 2020, 12:53
0
а, ну вроде то, этот момент ускользнул… заодно, хорошо бы и питание контроллеру рубить таким образом, по «высокой стороне»
+
avatar
  • Avacha
  • 03 ноября 2020, 09:21
+2
А почему рабочий цикл такой медленный? У меня на индукционке на малой мощности такой цикл включается, очень неудобно — то бурлит, то не кипит вообще. Я бы сделал 1 секунду или даже меньше.
+
avatar
0
Почему медленный, 10 секунд вполне нормально (хотя сейчас я на 5 секунд поставил). Конфорка обладает некоторой инерционностью, за 9 секунд остыть не успевает. Родные регуляторы мощности примерно с такой периодичностью и работают.
+
avatar
  • SEM
  • 03 ноября 2020, 11:03
+1
В сети 50 герц, в 1 секунде можно сделать регулировку нагрева с шагом 2%.
+
avatar
  • MrFree
  • 03 ноября 2020, 11:07
0
что бы такое сделать нужно за полупериодами следить, тиристоры закрываются при переходе через ноль.
да и с конфоркой вместо шим удобнее bang-bang алгоритм.
+
avatar
  • SEM
  • 03 ноября 2020, 12:35
+1
нужно за полупериодами следить,
А если не следить — точность будет те же 2%, что для кастрюли вполне достаточно.
+
avatar
  • Dvornik
  • 03 ноября 2020, 17:38
+2
Могу ошибаться, но в твердотельных реле стоит оптопара с zero cross.
+
avatar
  • Avacha
  • 03 ноября 2020, 14:04
0
На мой взгляд за глаза и 2% хватит. У меня 10% и то счастлив)))
+
avatar
0
где физически находится плата в этой конструкции?
+
avatar
0
Снаружи, рядом с печкой.
+
avatar
0
ясно
+
avatar
+8
+
avatar
  • starson
  • 03 ноября 2020, 10:46
+4
Интересно в смысле эксперимента. но управлять плитой со смартфона не очень удобно IMHO.
На кухне часто руки бывают не очень чистыми, а нужно срочно отключить/включить/изменить режим комфорки. Как минимум нужно помыть и вытереть руки.
Опять же, смартфон на кухне, если не лежит в кармане подвергается дополнительным рискам: всегда что-то может упасть на него или разлиться.
Как вариант, вскипять воду к моменту как проснусь или сварть яйца интересно.
+
avatar
  • ksiman
  • 03 ноября 2020, 11:10
+5
но управлять плитой со смартфона не очень удобно IMHO.
Можно в систему умного дома встроить и Алисой управлять.
Алиса, испеки мне пирожки :)
+
avatar
+12
«О'кей, ksiman, конфорки включены. Дальше сам.» :)))
+
avatar
  • Demz
  • 03 ноября 2020, 11:52
+2
угу, в этом и минус всей этой «умности» домов/чайников и тд — водичку в каструлку сами не нальют и пельмешки не закинут. Можно конечно роборук какой поставить, пускай готовит… да и функционал у него пошире, собенно недокументированый ;)
+
avatar
  • g578
  • 03 ноября 2020, 11:57
+1
Можно забадяжить автомат по приготовлению пищи. Плиту совместить с холодильником, ящиком для овощей, подвести воду.)
+
avatar
+5
Жениться проще
+
avatar
  • starson
  • 03 ноября 2020, 12:08
+2
жена жене рознь )
Не всегда это лучше )
+
avatar
+2
Я не сказал что лучше… я сказал проще :)))
+
avatar
  • Demz
  • 03 ноября 2020, 15:08
+1
поддерживаю, я когдато так и сделал, жениться то достаточно один раз, а хавку надо каждый день готовить)
+
avatar
0
завести зажим для денег достаточно один раз..)))
+
avatar
  • starson
  • 03 ноября 2020, 12:09
0
Уже делали ),

+
avatar
+1
И туалет сразу встроить, чтобы полный цикл был )
+
avatar
+2
Одной Алисой не обойтись:

+
avatar
0
Про троллейбус тут уже пошутили?
+
avatar
  • tysem
  • 03 ноября 2020, 14:14
0
Можно задать режим готовки со сменой температур в процессе.
+
avatar
0
Да там возможности неограничены))
1. Отсрочка старта.
2. Поддерживание любой температуры (для брожения например), добавить датчик просто и по его показаниям вкл/выкл конфорку.
3. Детектор закипания (с пищевым датчиком). Прога отслеживает температуру в кастрюле и при достижении температуры кипения автоматически переводит конфорку на слабый огонь.
4. Понаписывать параметры готовки для разных блюд. (Например, жмем «Пельмени», плита включается на 7 минут, «Макароны» — на 10, «Горох» — на 40).
+
avatar
  • sim31r
  • 09 ноября 2020, 00:00
0
Проще мультиварку купить.
+
avatar
  • maxxir
  • 03 ноября 2020, 20:16
+2
Все это хорошо. Но где ссылка на исходники скетча
для MIT App Inventor?
+
avatar
0
Прога писалась на Java.
Про MIT App Inventor я упомянул, чтоб дать понять, что можно её же написать и без знания Java.
Просто о MIT App Inventor мало кто знает, а штука просто гениальная. Управление любыми устройствами с помощью нее можно перевести в телефон даже не будучи программистом.
+
avatar
  • mike888
  • 03 ноября 2020, 21:33
+1
DHT-22 датчик довольно паршивый, как по точности, так и по надёжности, проще взять BME-280 в котором всё уже есть и он поточнее
+
avatar
  • dts
  • 04 ноября 2020, 00:33
+2
люди не чувствуют изменения атмосферного давления, слишком медленно и незначительно. Это чистая психосоматика.
+
avatar
  • sim31r
  • 09 ноября 2020, 00:01
0
Другое дело магнитные бури! ))
+
avatar
  • VG1544
  • 04 ноября 2020, 11:55
0
Привет, а где вся эта электронная начинка хранится в плите? Можете добавить фото в обзор или прикрепить сюда, хотел бы сделать для себя что-то похожее, это я так понимаю можно приспособить для любой электро плиты с конфорками в виде блина и электродуховки.
+
avatar
0
Фото не делал, т.к. не планировал писать обзор изначально.
Да и фотографировать там нечего, два в реле в плите, управляющая платка в глухой коробке за печью (скрыта от глаз).
+
avatar
0
классная идея! жаль, у меня газ.
пока в мыслях к колонке прикрутить подобный регулятор, но придётся реализовывать его совместно с редуктором и электроприводом…
хотел сделать к кофеварке, чтобы утром нас ждал кофе, но, как верно заметили, жениться проще))))) (а потом жена запрещает курочить кофеварку, ей нравится самой нажимать на кнопку)
+
avatar
  • MrFree
  • 04 ноября 2020, 14:28
0
Если ошибка с электроплитой может закончится выбитыми пробками, то эксперименты с газом выбитыми стенами.
+
avatar
0
пожалуй, вы не знаете, как работает газовая колонка-автомат, там есть обычный газ-контроль.
да и чем может грозить вращение регулятора?
+
avatar
  • MrFree
  • 05 ноября 2020, 12:26
0
вы правы, я действительно далёк от газового оборудования.
а вращение регулятора может грозить его поломкой.
Как выработкой ресурса вращения (протрется сильфон итп), так и тупо сворачиванием ему башки.
+
avatar
0
башку, положим, у пластикового микромотра не хватит усилия свернуть.
а вот если часто туда-сюда елозить, то да, можно протереть…

зря, электронные версии-то работают же как-то.
надо подумать.
благодарю за направление :)
+
avatar
+1
Кнопку в кофеварке можно пустить на управляющий Вемос. Жена будет давать команду Вемосу, а Вемос уже давать команду коферварке. Жена и не заподозрит ничего)))
+
avatar
0
там и кнопка непростая, особенно питание-включается физически, отключается после промывки само… )
+
avatar
  • EAV_04
  • 05 ноября 2020, 15:01
0
Можно прошивку переделать чтобы на прямую по вайфаю на модуль команды отправлять? Вот тут ТЫК
автор период вкл. -выкл. 53 сек. делал как на заводском БУ. 10 сек наверное маловато будет.
+
avatar
0
Не понял вопрос. Я ж и так напрямую по вайфаю команды отправляю. Или что Вы имеете ввиду под модулем?

53 секунды это многовато. Будет то кипеть то не кипеть. А 10 сек как раз, плавно получается. Почему маловато?
+
avatar
  • EAV_04
  • 08 ноября 2020, 17:13
0
192.168.0.100 — это локальный адрес нашего Wemos D1 mini, он назначается роутером и узнать его можно при подключении Wemos D1 mini к компьютеру в мониторе порта.
Прочитав это понял что управление идет через роутер. И другие читатели задавали этот вопрос
fant_asia03 ноября 2020, 08:04
+31
Теперь голодная смерть настигнет домочадцев когда умрет роутер.
, но Вы не ответили. Под модулем я имел ввиду Wemos D1 mini. Для твердотельного реле период 10 сек. может и нормальный интервал, но для контактов электромагнитного или биметаллического регулятора маловато. Контакты быстро подгорят и выйдут из строя.
+
avatar
0
А, понял, без участия роутера.
Конечно можно, поставить модуль в режим сервера и напрямую подключаться к нему.
+
avatar
  • baksser
  • 04 ноября 2020, 23:00
+1
Тут пахнет хорошей автоматикой для ретификационной колонны для перегонки спирта 96,6. Чуток доработать и пошла жаркая струя)))
+
avatar
0
Для колонн уже понастроено автоматик, мама не горюй… Но идеальной, КМК, нет…
+
avatar
0
String argument = «000000000000000000000000000000000000000»;
Не делайте так. Вы тратите вдвое больше памяти в пустую и добавляете бесполезное копирование в конструктор.
Правильно делать вот так:

#define ARG_SIZE 20
String argument((char *)0);

void setup(){
argument.reserve(ARG_SIZE);
}
+
avatar
0
Да пробовал я резервировать, все равно через полсуток-сутки stackoverflow случался. Я так и не понял причину, но только такой вариант с нулями позволил работать нон-стоп без ребутов.
+
avatar
0
падает из-за фрагментации кучи, с таким количеством копирований это не удивительно.
Вообще такие большие блоки даных нужно строить динамически и отдавать мелкими кусками, а не собирать в единую String строку. Но если это шаманство у вас работает и все устраивает, то ОК, путь живет :)
+
avatar
  • vvg965
  • 13 ноября 2020, 07:32
0
Все интересно, но я не понял, куда автор установил датчик температуры. Датчик DHT-21, который в статье на картинке, рассчитан на макс температуру 80 град С. На конфорку и в духовку его не поставишь.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.