Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
-
- Posty: 2383
- Rejestracja: niedziela, 18 paź 2015, 14:00
- Krótko o sobie: Marzyciel
- Ulubiony Alkohol: Własny.
- Lokalizacja: Gorzów Wlkp.
- Podziękował: 268 razy
- Otrzymał podziękowanie: 338 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Kolego w takim razie spróbuj zasilić układ z power banku. Ja mam u siebie taki najtańszy z sieciówki 4800mAh i cały proces bez problemu wytrzymuje.
Pozwoli Ci to sprawdzić czy problemem są zakłócenia w sieci energetycznej czy jednak szukać gdzie indziej.
Pozwoli Ci to sprawdzić czy problemem są zakłócenia w sieci energetycznej czy jednak szukać gdzie indziej.
Pozdrawiam Gacek.
-
- Posty: 168
- Rejestracja: poniedziałek, 10 lut 2020, 21:47
- Podziękował: 3 razy
- Otrzymał podziękowanie: 15 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Chciał bym wrócić uwagę ze biblioteka OneWire dziala na zasadzie ze najniższy nr czujnika jest pierwszy w kolejce, używając funkcji sensors.getTempCByIndex wymuszamy ich kolejność co w efekcie jakiegokolwiek błędu czujnika skraca kolejne o 1 i zmienia ich kolejność na wykresie, stad wykrywalność trefnego DS jest ciężka.
ja u siebie wykorzystuje bibliotekę OneWire lecz odczytałem kody DSów i sztywno wprowadziłem je do kodu, w tym momencie gdy jakiś DS wygeneruje błąd nie mam zmiany kolejki indexowania DSów i na 100% wiem który generuje błędy.
ja u siebie wykorzystuje bibliotekę OneWire lecz odczytałem kody DSów i sztywno wprowadziłem je do kodu, w tym momencie gdy jakiś DS wygeneruje błąd nie mam zmiany kolejki indexowania DSów i na 100% wiem który generuje błędy.
Kod: Zaznacz cały
DeviceAddress OLMM = { nr DS18B20 }
temp_OLM = sensors.getTempC(OLMM)
Ostatnio zmieniony niedziela, 8 sie 2021, 17:29 przez MastaMari, łącznie zmieniany 1 raz.
-
- Posty: 194
- Rejestracja: sobota, 21 cze 2014, 00:39
- Krótko o sobie: Jak się do czegoś dorwę to muszę to dokładnie poznać. Np. Ameryka
- Ulubiony Alkohol: Talisker
- Status Alkoholowy: Popijacz Okazyjny
- Podziękował: 82 razy
- Otrzymał podziękowanie: 14 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Czy możesz podać numery wersji libów OneWire i Dallas ?
Może jakieś zależności czasowe tu grają, DeviceAddress UFO = {xyz.....} za wolno czyta ?
U mnie nie poszło. MAC adresy się czytają ale rozdzielczość niska , jedna cyfra po kropce i błąd "AWARIA" .MastaMari pisze:
ja u siebie wykorzystuje bibliotekę OneWire lecz odczytałem kody DSów i sztywno wprowadziłem je do kodu, w tym momencie gdy jakiś DS wygeneruje błąd nie mam zmiany kolejki indexowania DSów i na 100% wiem który generuje błędy.
Kod: Zaznacz cały
DeviceAddress OLMM = { nr DS18B20 } temp_OLM = sensors.getTempC(OLMM)
Czy możesz podać numery wersji libów OneWire i Dallas ?
Może jakieś zależności czasowe tu grają, DeviceAddress UFO = {xyz.....} za wolno czyta ?
Ostatnio zmieniony piątek, 27 sie 2021, 11:37 przez k.kolumb, łącznie zmieniany 2 razy.
Piszę starannie po Polsku. O ile daję radę.
-
Autor tematu - Posty: 951
- Rejestracja: środa, 30 mar 2016, 18:43
- Podziękował: 9 razy
- Otrzymał podziękowanie: 134 razy
-
- Posty: 194
- Rejestracja: sobota, 21 cze 2014, 00:39
- Krótko o sobie: Jak się do czegoś dorwę to muszę to dokładnie poznać. Np. Ameryka
- Ulubiony Alkohol: Talisker
- Status Alkoholowy: Popijacz Okazyjny
- Podziękował: 82 razy
- Otrzymał podziękowanie: 14 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
I tak 6 razy. Adresy dobre, aplikcja wyświetla co trzeba][
I tak 6 razy.
To daje taki efekt. Reszta kodu w zasadzie bz. Poza obsługą LCD która od początku nie robi problemu.
Kod: Zaznacz cały
DeviceAddress WODAM = { 0x28, 0x88, 0x37, 0x5B, 0x0D, 0x00, 0x00, 0xDC };
Kod: Zaznacz cały
temp_woda = sensors.getTempC(WODAM);
To daje taki efekt. Reszta kodu w zasadzie bz. Poza obsługą LCD która od początku nie robi problemu.
Piszę starannie po Polsku. O ile daję radę.
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Wklej większy kawałek kodu...
rozumiem że masz to w funkcji
to powyżej jest bardzo ważne... bo tam idzie do czujnika komenda zlecająca pomiar temperatury
rozumiem że masz to w funkcji
Kod: Zaznacz cały
void loop() {
DeviceAddress nazwa1 = {....};
DeviceAddress nazwa2 = {....};
..
..
..
sensors.requestTemperatures();
float temp1 = sensors.getTempC(nazwa1);
float temp2 = sensors.getTempC(nazwa2);
}
Kod: Zaznacz cały
sensors.requestTemperatures();
Ostatnio zmieniony piątek, 27 sie 2021, 21:18 przez rastro, łącznie zmieniany 1 raz.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 194
- Rejestracja: sobota, 21 cze 2014, 00:39
- Krótko o sobie: Jak się do czegoś dorwę to muszę to dokładnie poznać. Np. Ameryka
- Ulubiony Alkohol: Talisker
- Status Alkoholowy: Popijacz Okazyjny
- Podziękował: 82 razy
- Otrzymał podziękowanie: 14 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
A potem bez zmian - kod z pierwszej strony wątku.
Kod: Zaznacz cały
void blinkLedWidget() //co 1 sek
{
sensors.requestTemperatures();
/*
temp_woda = sensors.getTempCByIndex(0);
temp_OLM = sensors.getTempCByIndex(1);
temp_bufor = sensors.getTempCByIndex(2);
temp_10p = sensors.getTempCByIndex(3);
temp_zbiornik = sensors.getTempCByIndex(4);
temp_UFO = sensors.getTempCByIndex(5);
*/
DeviceAddress WODAM = { 0x28, 0x88, 0x37, 0x5B, 0x0D, 0x00, 0x00, 0xDC };
DeviceAddress BUFORM = { 0x28, 0x32, 0x6D, 0x04, 0x26, 0x20, 0x01, 0xB4 };
DeviceAddress OLMM = { 0x28, 0x8C, 0x59, 0x79, 0xA2, 0x00, 0x03, 0x8F };
DeviceAddress POLKAM = { 0x28, 0x56, 0x9C, 0xFD, 0x25, 0x20, 0x01, 0xC6 };
DeviceAddress ZBIORNIKM = { 0x28, 0xE1, 0xD6, 0xE4, 0x25, 0x20, 0x01, 0xBB };
DeviceAddress UFOM = { 0x28, 0x25, 0xE9, 0x5B, 0x0D, 0x00, 0x00, 0x36 };
temp_woda = sensors.getTempC(WODAM);
temp_bufor = sensors.getTempC(BUFORM);
temp_OLM = sensors.getTempC(OLMM);
temp_10p = sensors.getTempC(POLKAM);
temp_zbiornik = sensors.getTempC(ZBIORNIKM);
temp_UFO = sensors.getTempC(UFOM);
lcd.setCursor(0, 0); lcd.print("GLO: "); lcd.print(temp_UFO);
lcd.setCursor(12, 0); lcd.print(WiFi.RSSI()); lcd.print(" dBm");
lcd.setCursor(0, 1); lcd.print("10p: "); lcd.print(temp_10p);
lcd.setCursor(0, 2); lcd.print("zbi: "); lcd.print(temp_zbiornik);
lcd.setCursor(11, 2); lcd.print("buf:"); lcd.print(temp_bufor);
lcd.setCursor(0, 3); lcd.print("WOD: "); lcd.print(temp_woda);
lcd.setCursor(11, 3); lcd.print("ssr:"); lcd.print(temp_OLM);
Piszę starannie po Polsku. O ile daję radę.
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Dziwne, jak rozumiem pojawia się błąd związany z odczytem temperatury:
tylko to ew. trafia na LCD
Kod: Zaznacz cały
if (awaria == 1 && x == 0) {
led3.on();
Blynk.notify("AWARIA! Błąd pomiaru temperatury!!!");
x = 1;
}
Ostatnio zmieniony sobota, 28 sie 2021, 09:57 przez rastro, łącznie zmieniany 1 raz.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 194
- Rejestracja: sobota, 21 cze 2014, 00:39
- Krótko o sobie: Jak się do czegoś dorwę to muszę to dokładnie poznać. Np. Ameryka
- Ulubiony Alkohol: Talisker
- Status Alkoholowy: Popijacz Okazyjny
- Podziękował: 82 razy
- Otrzymał podziękowanie: 14 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Nie, lcd wyświetla ok, system się zatrzymywał - LED AWARIA
Teraz temperatury dobrze się czytają, jest po przecinku (w zasadzie kropce) tyle cyfr ile trzeba.
A dlaczego przed temp_10p nie ma float ? Bo nie można było ustawić alarmu - temperatury dnia, było tylko 0.000
Niestety, metoda poniżej nie działa, chyba się poddam, od razu awaria.
I z Blynk.notify ogólnie jest cóś, nie widziałem ani razu tego typu komunikatu, nawet z kodem oryginalnym. Serwer lokalny.
Ale idzie z tym żyć, ważne że następuje wyłączenie .
@rastro - dzięki wielkie, pomogłeś !
Kod: Zaznacz cały
sensors.requestTemperatures(); //bezpośrednio przed odczytem
float temp_woda = sensors.getTempC(WODAM);
float temp_bufor = sensors.getTempC(BUFORM);
float temp_OLM = sensors.getTempC(OLMM);
temp_10p = sensors.getTempC(POLKAM); //???????????????????????????????????????
float temp_zbiornik = sensors.getTempC(ZBIORNIKM);
float temp_UFO = sensors.getTempC(UFOM);
A dlaczego przed temp_10p nie ma float ? Bo nie można było ustawić alarmu - temperatury dnia, było tylko 0.000
Niestety, metoda poniżej nie działa, chyba się poddam, od razu awaria.
Kod: Zaznacz cały
if
((temp_woda<=0)||(temp_woda>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru WODA!!!");
x=1;
}
Ale idzie z tym żyć, ważne że następuje wyłączenie .
@rastro - dzięki wielkie, pomogłeś !
Ostatnio zmieniony sobota, 28 sie 2021, 15:09 przez k.kolumb, łącznie zmieniany 1 raz.
Piszę starannie po Polsku. O ile daję radę.
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Te zmienne są zadeklarowane wcześniej:
myk polega na tzw. zasięgach...
jak dasz to:
z float to w funkcji:
definiujesz zmienną lokalną, która przykrywa tą zdefiniowaną wcześniej globalnie... i dlatego temp_10p w funkcji będzie miała wciąż wartość zero. w przypadku pozostałych temperatur nie ma to znaczenia ponieważ te temperatury nie wychodzą poza zakres funkcji void blinkLedWidget().
Takie tam technikalia - gdyby ktoś był zainteresowany.
Kod: Zaznacz cały
float temp_woda = sensors.getTempC(WODAM);
float temp_bufor = sensors.getTempC(BUFORM);
float temp_OLM = sensors.getTempC(OLMM);
temp_10p = sensors.getTempC(POLKAM); //???????????????????????????????????????
float temp_zbiornik = sensors.getTempC(ZBIORNIKM);
float temp_UFO = sensors.getTempC(UFOM);
Kod: Zaznacz cały
BlynkTimer timer;
float temp_zbiornik = 0;
float temp_bufor = 0;
float temp_10p = 0;
float temp_OLM = 0;
float temp_UFO = 0;
float temp_woda = 0;
float temp_dnia = 80;
jak dasz to:
Kod: Zaznacz cały
temp_10p = sensors.getTempC(POLKAM); //???????????????????????????????????????
Kod: Zaznacz cały
void blinkLedWidget()
Kod: Zaznacz cały
void loop()
Takie tam technikalia - gdyby ktoś był zainteresowany.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony niedziela, 29 sie 2021, 11:56 przez rastro, łącznie zmieniany 2 razy.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 168
- Rejestracja: poniedziałek, 10 lut 2020, 21:47
- Podziękował: 3 razy
- Otrzymał podziękowanie: 15 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
U siebie definicje adresów DS18B20 mam na samej górze jeszcze przed wywołałem jakiejkolwiek funkcji.
następnie funkcja odczytująca kolejność DS18.
W zbiorczej funkcji wywołuje funkcje (sensor) i tam już mam przypisane odwołania.
u mnie działa wszystko poprawnie, odczyt dsów jest z taka sama częstotliwością.
Kod: Zaznacz cały
DeviceAddress OLMM = {0x28, 0x69, 0x28, 0xB6, 0x33, 0x20, 0x1, 0xB0};
Kod: Zaznacz cały
void sensor()
{
sensors.requestTemperatures();
temp_OLM = sensors.getTempC(OLMM);
}
Kod: Zaznacz cały
if
((temp_OLM <= 0) || (temp_OLM >= 110))
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru OLM!!!");
}
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Ja ostatnią odpowiedź kolegi @k.kolumb zrozumiałem tak że zamiast temp10p = get...() zrobił tak float temp10p = getTemp...() co całkowicie zmienia dostępność tej informacji w innym miejscu programu. Efekt był taki że warunki sprawdzające w innym miejscu zgłaszały awarię ponieważ temp10p poza funkcją czytającą temperatury miała wartość 0.000. Same deklaracje DeviceAddress nie mają tutaj znaczenia - swoją drogą zamiast wpisywania ich na sztywno skorzystał bym z biblioteki EEPROM.h żeby zapisać adresy i do tego jakaś tablica mapująca - ale to trzeba by było pomyśleć jak to razem złożyć.
Ostatnio zmieniony niedziela, 29 sie 2021, 20:55 przez rastro, łącznie zmieniany 1 raz.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 194
- Rejestracja: sobota, 21 cze 2014, 00:39
- Krótko o sobie: Jak się do czegoś dorwę to muszę to dokładnie poznać. Np. Ameryka
- Ulubiony Alkohol: Talisker
- Status Alkoholowy: Popijacz Okazyjny
- Podziękował: 82 razy
- Otrzymał podziękowanie: 14 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Wydaje się że się stosuję do Twoich wskazówek, a ciągle jest coś nie tak. Załączam cały kod może znajdziesz chwilę żeby zerknąć nań w interesującym nas zakresie. Pozdrawiam .
Niestety, mnie trzeba wytłumaczyć tak jak chłop tłumaczy krowie na miedzy.MastaMari pisze:U siebie definicje adresów DS18B20 mam na samej górze jeszcze przed wywołałem jakiejkolwiek funkcji.
Wydaje się że się stosuję do Twoich wskazówek, a ciągle jest coś nie tak. Załączam cały kod może znajdziesz chwilę żeby zerknąć nań w interesującym nas zakresie. Pozdrawiam .
Kod: Zaznacz cały
/*
ZAPISY DO BLYNK
V1 led1 OK
V2 zapamiętaj temperaturę dnia
V3 temperatura dnia
V4 grzałka 2
V5 grzałka 3
V11 led2 EZ (ARC)
V12 led3 AWARIA
V13 led4 KONIEC
V15 RSSI
V20 SSR_time
V25 EZ_time
V30 praca
V50 zbiornik
V51 bufor
V52 10p
V53 OLM
V54 UFO
V55 woda
*/
//V25.08 data ostatniej modyfikacji
TaskHandle_t Task1;
//#define BLYNK_PRINT Serial
#include <DallasTemperature.h>
#include <OneWire.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <WiFiClient.h>
#include <WiFi.h>
#include <LiquidCrystal_I2C.h>
#define EZPin 12 // EZ
#define RelayPin 14 // grzałka 1
#define RelayPin2 4 // grzałka 2
#define RelayPin3 25 // grzałka 3
#define ONE_WIRE_BUS 5 // temperatura
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 20, 4);
int SSR_time=0;
int EZ_time=0;
int EZ_time2=0;
unsigned long windowStartTime=0;
unsigned long windowStartTime1=0;
char auth[] = "PSgjxPMBqpeMVZ4Umwtureutueriu";
char ssid[] = "eueueue";
char pass[] = "bvbvbvbvb";
WidgetLED led1(V1);//ok
WidgetLED led2(V11);// EZ
WidgetLED led3(V12);//awaria
WidgetLED led4(V13);//koniec
BlynkTimer timer;
float temp_zbiornik = 0;
float temp_bufor = 0;
float temp_10p = 0;
float temp_OLM = 0;
float temp_UFO = 0;
float temp_woda = 0;
float temp_dnia = 80;
int grzalka_2=0;
int grzalka_3=0;
int koniec=0;
int awaria=0;
int praca=0;
int x=0;
int skok=0; // skok na 10p
int EZ=0; // stan EZ
int EZstop;
int a=0;
int b=0;
int c=0;
//**************************************************
BLYNK_WRITE(V20)
{
SSR_time = param.asInt();
}
//***************************************************
BLYNK_WRITE(V25)
{
EZ_time = param.asInt();
}
//**************************************************
BLYNK_WRITE(V30)
{
praca = param.asInt();
}
//*******************************************************
BLYNK_WRITE(V2)
{
c = param.asInt();
if (c==1){Blynk.setProperty(2,"color","#66ff33");Blynk.setProperty(2,"offLabel",temp_10p);temp_dnia=(temp_10p+0.125);}
}
//*******************************************************
BLYNK_WRITE(V4)
{
grzalka_2 = param.asInt();
}
//*******************************************************
BLYNK_WRITE(V5)
{
grzalka_3 = param.asInt();
}
//*******************************************************
void blinkLedWidget() //co 1 sek
{
/*
temp_woda = sensors.getTempCByIndex(0);
temp_OLM = sensors.getTempCByIndex(1);
temp_bufor = sensors.getTempCByIndex(2);
temp_10p = sensors.getTempCByIndex(3);
temp_zbiornik = sensors.getTempCByIndex(4);
temp_UFO = sensors.getTempCByIndex(5);
*/
DeviceAddress WODAM = { 0x28, 0x88, 0x37, 0x5B, 0x0D, 0x00, 0x00, 0xDC };
DeviceAddress BUFORM = { 0x28, 0x32, 0x6D, 0x04, 0x26, 0x20, 0x01, 0xB4 };
DeviceAddress OLMM = { 0x28, 0x8C, 0x59, 0x79, 0xA2, 0x00, 0x03, 0x8F };
//DeviceAddress OLMM = { 0x28, 0x16, 0x0D, 0x54, 0x0D, 0x00, 0x00, 0xDD };//zapasowy czujnik na radiatorze
DeviceAddress POLKAM = { 0x28, 0x56, 0x9C, 0xFD, 0x25, 0x20, 0x01, 0xC6 };
DeviceAddress ZBIORNIKM = { 0x28, 0xE1, 0xD6, 0xE4, 0x25, 0x20, 0x01, 0xBB };
DeviceAddress UFOM = { 0x28, 0x25, 0xE9, 0x5B, 0x0D, 0x00, 0x00, 0x36 };
sensors.requestTemperatures();
temp_woda = sensors.getTempC(WODAM);
temp_bufor = sensors.getTempC(BUFORM);
temp_OLM = sensors.getTempC(OLMM);
temp_10p = sensors.getTempC(POLKAM);
temp_zbiornik = sensors.getTempC(ZBIORNIKM);
temp_UFO = sensors.getTempC(UFOM);
lcd.setCursor(0, 0); lcd.print("GLO: "); lcd.print(temp_UFO);
lcd.setCursor(12, 0); lcd.print(WiFi.RSSI()); lcd.print(" dBm");
lcd.setCursor(0, 1); lcd.print("10p: "); lcd.print(temp_10p);
lcd.setCursor(0, 2); lcd.print("zbi: "); lcd.print(temp_zbiornik);
lcd.setCursor(11, 2); lcd.print("buf:"); lcd.print(temp_bufor);
lcd.setCursor(0, 3); lcd.print("WOD: "); lcd.print(temp_woda);
lcd.setCursor(11, 3); lcd.print("ssr:"); lcd.print(temp_OLM);
Blynk.virtualWrite(50,temp_zbiornik);
Blynk.virtualWrite(51,temp_bufor);
Blynk.virtualWrite(52,temp_10p);
Blynk.virtualWrite(53,temp_OLM);
Blynk.virtualWrite(54,temp_UFO);
Blynk.virtualWrite(55,temp_woda);
Blynk.virtualWrite(15,(WiFi.RSSI()));// RSSI value KG
Blynk.virtualWrite(26,SSR_time);
Blynk.virtualWrite(11,EZ);
Blynk.virtualWrite(30,praca);
if(praca==0){Blynk.setProperty(30,"color","#D3435C");}
if(praca==1){Blynk.setProperty(30,"color","#66ff33");}
//*******************Słabe chłodzenie****************************
if(temp_UFO>=60)
{
praca=0;
led3.on();
if(a<3)
{
Blynk.notify("AWARIA!UFO za gorące!!!STOP!");
a++;
}
}
if(temp_woda>=60)
{
praca=0;
led3.on();
if(b<3)
{
Blynk.notify("AWARIA!Woda za gorąca!!! STOP!");
b++;
}
}
if(temp_UFO<58&&temp_woda<60&&awaria==0){led3.off();}
if(temp_UFO<58){a=0;}
if(temp_woda<58){b=0;}
//******************Błąd temperatury**************************************
/*
if
(
(temp_zbiornik<=0)||(temp_zbiornik>=110)
||(temp_bufor<=0)||(temp_bufor>=110)
||(temp_10p<=0)||(temp_10p>=110)
||(temp_OLM<=0)||(temp_OLM>=110)
||(temp_UFO<=0)||(temp_UFO>=110)
||(temp_woda<=0)||(temp_woda>=110)
)
{
awaria=1;
praca=0;
}
if(awaria==1&&x==0)
{
led3.on();
Blynk.notify("AWARIA! Błąd pomiaru temperatury!!!");
x=1;
}
*/
if
((temp_woda<=0)||(temp_woda>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru WODA!!!");
x=1;
}
if
((temp_bufor<=0)||(temp_bufor>=110))
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru BUFOR!!!");
x=1;
}
if
((temp_OLM<=0)||(temp_OLM>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru SSR!!!");
x=1;
}
if
((temp_10p<=0)||(temp_10p>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru 10 POLKA!!!");
x=1;
}
if
((temp_zbiornik<=0)||(temp_zbiornik>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru ZBIORNIK!!!");
x=1; }
if
((temp_UFO<=0)||(temp_UFO>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru UFO!!!");
x=1;
}
if(awaria==1&&x==0)
{
led3.on();
//Blynk.notify("AWARIA! Błąd pomiaru temperatury!!!");
x=1;
}
//****KONIEC PROCESU**************************************************************
if((temp_zbiornik>=98)&&(temp_bufor>=96)&&(praca==1)&&(koniec==0))
{
koniec=1;
praca=0;
digitalWrite(RelayPin, LOW);Blynk.virtualWrite(10,0);led4.on();
Blynk.notify("KONIEC! Temperatura bufora osiągnięta!!!");
}
if (led1.getValue())
{
led1.off();
//Serial.println("LED on V1: off");
}
else
{
led1.on();
//Serial.println("LED on V1: on");
}
}
void setup()
{
// initialize LCD
Wire.begin(16, 17);
lcd.init();
lcd.clear();
lcd.backlight();
xTaskCreatePinnedToCore(Task1code,"Task1",10000,NULL,0,&Task1,0);
Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 1, 230), 8080);
pinMode(RelayPin, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(EZPin, OUTPUT);
digitalWrite(RelayPin, LOW);
digitalWrite(RelayPin2, LOW);
digitalWrite(RelayPin3, LOW);
digitalWrite(EZPin, LOW);
sensors.setResolution(12);
sensors.begin();
//sensors.setWaitForConversion(false);
timer.setInterval(1000L, blinkLedWidget);
windowStartTime = millis();
windowStartTime1 = millis();
led1.off();
led2.off();
led3.off();
led4.off();
Blynk.virtualWrite(30,0);
Blynk.setProperty(30,"color","#D3435C");
Blynk.virtualWrite(20,0);
Blynk.virtualWrite(25,0);
Blynk.virtualWrite(4,0);
Blynk.virtualWrite(5,0);
Blynk.setProperty(2,"offLabel","USTAW ALARM");
}
void loop()
{
Blynk.run();
timer.run();
//**************skok na 10 półce*******************
if(temp_10p>temp_dnia&&EZ_time>0&&EZstop==0){digitalWrite(EZPin, LOW); EZstop=1; Blynk.notify("10p skok temperatury! Odbiór STOP!");}
if(temp_10p<=(temp_dnia-0.1)&&EZstop==1){EZstop=0; EZ_time -=5;Blynk.notify("KOREKTA 5% ODBIÓR START!");Blynk.virtualWrite(25,EZ_time);}
//*************sterowanie grzałek dodatkowych
if(grzalka_2==1&&praca==1&&koniec==0&&awaria==0){digitalWrite(RelayPin2,HIGH);}
else {digitalWrite(RelayPin2,LOW);}
if(grzalka_3==1&&praca==1&&koniec==0&&awaria==0){digitalWrite(RelayPin3,HIGH);}
else {digitalWrite(RelayPin3,LOW);}
}
void Task1code( void * pvParameters )
{
// polecenia wykonywane jak w funkcji setup()
pinMode(RelayPin, OUTPUT);
pinMode(EZPin, OUTPUT);
digitalWrite(RelayPin, LOW);
digitalWrite(EZPin, LOW);
windowStartTime = millis();
windowStartTime1 = millis();
for(;;)
{
// polecenia wykonywane jak w funkcji loop()
//*****PWM*********************************
if ((millis() - windowStartTime) >1000)
{
windowStartTime += 1000;
}
if ((SSR_time*10) < (millis() - windowStartTime))
{
digitalWrite(RelayPin, LOW);
}
else
{
if (koniec==0 && awaria==0 && praca==1)
{
digitalWrite(RelayPin, HIGH);
}
}
//***************EZ**********************************
if ((millis() - windowStartTime1) >5000)
{
windowStartTime1 += 5000;
}
if ((EZ_time*50) < (millis() - windowStartTime1))
{
digitalWrite(EZPin, LOW);EZ=0;
}
else
{
if (koniec==0 && awaria==0 && praca==1 && EZstop==0)
{
digitalWrite(EZPin, HIGH);EZ=255;
}
}
}
}
Piszę starannie po Polsku. O ile daję radę.
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
To akurat nie ma większego znaczenia, tam pewnie i tak te adresy są gdzieś w stałym miejscu pamięci, a przepisują się tylko wskaźniki.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Post pod poste.... ale @k.kolumb - chyba rozwiązałęm twój problem
if warunki w nawiasach klamerka (broń boże nie średnik) bo teraz kod, który jest w klamerkach wykonuje się zawsze niezależnie co w tych if'ach jest
powinno być tak:
Kod: Zaznacz cały
if ((temp_OLM<=0)||(temp_OLM>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru SSR!!!");
x=1;
}
if ((temp_10p<=0)||(temp_10p>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru 10 POLKA!!!");
x=1;
}
if ((temp_zbiornik<=0)||(temp_zbiornik>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru ZBIORNIK!!!");
x=1; }
if ((temp_UFO<=0)||(temp_UFO>=110));
{
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru UFO!!!");
x=1;
}
powinno być tak:
Kod: Zaznacz cały
if ((temp_OLM<=0)||(temp_OLM>=110)) {
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru SSR!!!");
x=1;
}
if ((temp_10p<=0)||(temp_10p>=110)) {
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru 10 POLKA!!!");
x=1;
}
if ((temp_zbiornik<=0)||(temp_zbiornik>=110)) {
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru ZBIORNIK!!!");
x=1; }
if ((temp_UFO<=0)||(temp_UFO>=110)) {
awaria = 1;
praca = 0;
Blynk.notify("AWARIA! Błąd pomiaru UFO!!!");
x=1;
}
Ostatnio zmieniony poniedziałek, 30 sie 2021, 13:26 przez rastro, łącznie zmieniany 1 raz.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
No tak - to takie upierdliwe błędy - w sumie działa tylko, że nie za dobrze... Powodzenia w szukaniu tego typu błędów bez dobrych narzędzi, w szczególności kiedy jesteś uczącym się amatorem . Cieszę się że mogłem pomóc.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
@rastro a możesz polecić jakieś dobre narzędzia?? Tylko hobbystycznie działam z ESP8266 i ESP32 więc nie wejdę w drogę . Używam na tą chwilę Arduino IDE, próbowałem Platformio ale dużo konfiguracji na początek, a że musiałem skończyć projekt pod inż to nie było czasu na naukę.
Wysłane z mojego JNY-LX1 przy użyciu Tapatalka
Wysłane z mojego JNY-LX1 przy użyciu Tapatalka
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Cóż Arduino i inne drobne to ja też hobbystycznie... więc nie ma ryzyka wejścia w drogę...
Generalnie - Arduino IDE mi nigdy nie pasowało - dawno temu używałem jakiegoś eclipsa ze skonfigurowanym toolchainem dla AVR i ARM'a - ale to raczej pod konkretny uC no i eclipse to kawałek ciężkiego softu, który ma swoje wady. Teraz trochę zwracam się w kierunku platformio - wcale niema tam tak dużo konfiguracji, głównie to trzeba pododawać biblioteki w platformio.ini.
Jako IDE używam CLiona - niezły, ale płatny i ma swoje wady - gdybym nie kupował tego w pakiecie z innymi narzędziami, nie zapłacił bym za to tylko żeby pobawić się hobbystycznie. Wszyscy polecają VS Code - są pluginy od platformio, jest dość lekki. Ma też wsparcie dla debugera - tyle że potrzebna jest jakaś sonda JTAG.
Generalnie - Arduino IDE mi nigdy nie pasowało - dawno temu używałem jakiegoś eclipsa ze skonfigurowanym toolchainem dla AVR i ARM'a - ale to raczej pod konkretny uC no i eclipse to kawałek ciężkiego softu, który ma swoje wady. Teraz trochę zwracam się w kierunku platformio - wcale niema tam tak dużo konfiguracji, głównie to trzeba pododawać biblioteki w platformio.ini.
Jako IDE używam CLiona - niezły, ale płatny i ma swoje wady - gdybym nie kupował tego w pakiecie z innymi narzędziami, nie zapłacił bym za to tylko żeby pobawić się hobbystycznie. Wszyscy polecają VS Code - są pluginy od platformio, jest dość lekki. Ma też wsparcie dla debugera - tyle że potrzebna jest jakaś sonda JTAG.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 175
- Rejestracja: niedziela, 30 gru 2018, 10:57
- Podziękował: 2 razy
- Otrzymał podziękowanie: 10 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Siemka panowie, dziś odpaliłem nowego Blynk IoT, ostatnio robiłem projekt pięknie ładnie było wszystko za free, dziś odpalam a tam 33pln/msc albo 275/rok macie jakąś alternatywę gdzie się przerucić z projektem i moim sterownikiem ?
Ogólnie połowa widżetów jest zablokowana i płatna głównie to sterowanie grzałką jest zablokowane. Ciekawe czy starego blynka od nowego roku wyłączą czy będzie można z niego dalej korzystać ?
Ogólnie połowa widżetów jest zablokowana i płatna głównie to sterowanie grzałką jest zablokowane. Ciekawe czy starego blynka od nowego roku wyłączą czy będzie można z niego dalej korzystać ?
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Dokładnie o tym zapomniałam dodać, ja używam cloudMqtt, ale teraz już nie mają darmowych planów. Teraz znalazłem, że HiveMq jest do 100 urządzeń za free.
https://www.hivemq.com/downloads/ Opcja nr 1, załóż konto lub zaloguj z innymi usługodawcami.
https://www.hivemq.com/downloads/ Opcja nr 1, załóż konto lub zaloguj z innymi usługodawcami.
-
- Posty: 66
- Rejestracja: środa, 26 sie 2020, 14:22
- Krótko o sobie: Jestem fajnym człowiekiem:)
- Ulubiony Alkohol: Glengoyne
- Lokalizacja: Scotland / Poland
- Podziękował: 5 razy
- Otrzymał podziękowanie: 6 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
No nie tak do końca. Blynk server nie jest już oficjalnie dostępny. Aplikacja nie jest już wspierana i zostanie za jakiś czas również usunięta, możliwe, że za jakiś czas może po prostu przestać działać na nowszych systemach. Zapowiedzieli, że rejestracja nowych użytkowników w starej aplikacji zostanie zablokowana o ile już nie jest.MastaMari pisze:Bądź wykupić jakiś najtańszy VPN, postawić swój serwer blynk i korzystać do woli z starej wersji.
-
- Posty: 213
- Rejestracja: sobota, 23 sie 2014, 14:47
- Podziękował: 33 razy
- Otrzymał podziękowanie: 23 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Mnie nowy blynk działa ok. Co prawda (w wersji darmowej) nie ma niektórych widgetów, ale da się je zastąpić innymi.
Ostatnio zmieniony sobota, 16 paź 2021, 23:49 przez moszeusz, łącznie zmieniany 1 raz.
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Witam, jestem bardzo nowy w temacie. Ukłony dla pana robert4you za udostępnienie tego projektu. Do meritum szukam zaworu ez i znalazłem coś ciekawego na znanym portalu myślicie ze zda rezultat??
https://allegro.pl/oferta/elektrozawor- ... 7036451944
https://allegro.pl/oferta/elektrozawor- ... 7036451944
-
- Posty: 3
- Rejestracja: sobota, 26 kwie 2014, 21:41
- Status Alkoholowy: Konstruktor
- Podziękował: 1 raz
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Witam, może ktoś był by w stanie mi wyjaśnić. Blynk identyfikuje się z esp8266 za pomocą tokena, a jak to wygląda w przypadku virtuino? Tam w kodzie znajdziemy tylko adres IP, a co jak np. dwa urządzenia chcą pracować w tej samej sieci, czy wtedy rozróżnia je virtuino.key?
-
Autor tematu - Posty: 951
- Rejestracja: środa, 30 mar 2016, 18:43
- Podziękował: 9 razy
- Otrzymał podziękowanie: 134 razy
-
Autor tematu - Posty: 951
- Rejestracja: środa, 30 mar 2016, 18:43
- Podziękował: 9 razy
- Otrzymał podziękowanie: 134 razy
-
- Posty: 175
- Rejestracja: niedziela, 30 gru 2018, 10:57
- Podziękował: 2 razy
- Otrzymał podziękowanie: 10 razy
-
- Posty: 2603
- Rejestracja: wtorek, 15 sty 2013, 15:29
- Podziękował: 83 razy
- Otrzymał podziękowanie: 301 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Takie nie oszukane z oficjalnej dystrybucji to np. tutaj: https://www.mouser.pl/ProductDetail/Max ... 4lfg%3D%3D
Albo bierzesz tutaj z lewej produkcji albo z odpadów (ne wiem co oni tam mają): https://pl.aliexpress.com/item/1005002992339397.html z tych 10sz ze trzy będą niezłe i powtarzalne
Pod tym pierwszym linkiem za 200 netto dostaniesz z darmową wysyłką Fedex'em zwykle ze trzy dni od zamówienia, od skośnych trzeba poczekać
Albo bierzesz tutaj z lewej produkcji albo z odpadów (ne wiem co oni tam mają): https://pl.aliexpress.com/item/1005002992339397.html z tych 10sz ze trzy będą niezłe i powtarzalne
Pod tym pierwszym linkiem za 200 netto dostaniesz z darmową wysyłką Fedex'em zwykle ze trzy dni od zamówienia, od skośnych trzeba poczekać
Ostatnio zmieniony sobota, 26 lut 2022, 18:25 przez rastro, łącznie zmieniany 1 raz.
″Iloraz inteligencji tłumu jest równy IQ najgłupszego jego przedstawiciela podzielonemu przez liczbę uczestników.„
- Terry Pratchett
- Terry Pratchett
-
- Posty: 175
- Rejestracja: niedziela, 30 gru 2018, 10:57
- Podziękował: 2 razy
- Otrzymał podziękowanie: 10 razy