Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
-
- Posty: 1160
- Rejestracja: poniedziałek, 7 sty 2019, 18:55
- Status Alkoholowy: Konstruktor
- Lokalizacja: Łódź
- Podziękował: 20 razy
- Otrzymał podziękowanie: 100 razy
- Kontakt:
Tak się w sumie zastanawiam, w internetach piszą że trzeba stosować rezystor. Ja nie miałem akurat pod ręką więc podłączyłem bez. I wszystko hula, gdzie haczyk? Łączę tylko za pomocą 3 przewodów, nie korzystam z opcji 'pasożytniczej'
Destylatory ze stali nierdzewnej.
www.ak-spaw.pl
facebook.com/akspawpl
Zapraszam
www.ak-spaw.pl
facebook.com/akspawpl
Zapraszam
-
- Posty: 397
- Rejestracja: wtorek, 13 lut 2018, 14:50
- Krótko o sobie: Jestem fajnym człowiekiem:)
- Ulubiony Alkohol: Piwo/ Cydr/ Bimberek
- Status Alkoholowy: Konstruktor
- Podziękował: 6 razy
- Otrzymał podziękowanie: 27 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Ja przez długi czas podłączałem pod 3.3V przy podłączeniu "nie pasożytniczym" i hulało. Teraz mam dorzucony rezystor 4k7 ale nie widzę różnicy.
Wysłane z mojego EML-L29 przy użyciu Tapatalka
Wysłane z mojego EML-L29 przy użyciu Tapatalka
TERMOMETRY WIFI
https://www.facebook.com/TermometryWIFI/
https://www.facebook.com/TermometryWIFI/
-
Autor tematu - Posty: 951
- Rejestracja: środa, 30 mar 2016, 18:43
- Podziękował: 9 razy
- Otrzymał podziękowanie: 134 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Czy któryś z kolegów którzy kupili mój sterownik stwierdził taki problem u siebie?
Wysłane z mojego SM-G950F przy użyciu Tapatalka
Wysłane z mojego SM-G950F przy użyciu Tapatalka
Ostatnio zmieniony niedziela, 21 cze 2020, 21:17 przez robert4you, łącznie zmieniany 1 raz.
************************************************************************
-
- Posty: 95
- Rejestracja: poniedziałek, 16 lip 2012, 09:38
- Ulubiony Alkohol: własny
- Status Alkoholowy: Drinker
- Podziękował: 99 razy
- Otrzymał podziękowanie: 5 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Witam
Mam pytania , wgrywam kod do esp32 , niby wszystko idzie , ale nie wiem czy się łączy z blynkiem ( lokalny serwer )
zmieniłem w kodzie :
char auth[] = "lC5BDxtnOO8sVM25xxxxxxxxxxxx";
char ssid[] = "SUxxx";
char pass[] = "olenxxx";
oraz na
Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,186), 8442);
czy coś jeszcze trzeba zmienić? i jak sprawdzić czy się łączy z serwerem ?
EDIT
Wszystko już ok, przyczyną był zły port
Mam pytania , wgrywam kod do esp32 , niby wszystko idzie , ale nie wiem czy się łączy z blynkiem ( lokalny serwer )
zmieniłem w kodzie :
char auth[] = "lC5BDxtnOO8sVM25xxxxxxxxxxxx";
char ssid[] = "SUxxx";
char pass[] = "olenxxx";
oraz na
Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,186), 8442);
czy coś jeszcze trzeba zmienić? i jak sprawdzić czy się łączy z serwerem ?
EDIT
Wszystko już ok, przyczyną był zły port
Ostatnio zmieniony wtorek, 25 sie 2020, 09:43 przez manowar, łącznie zmieniany 2 razy.
-
- Posty: 19
- Rejestracja: wtorek, 10 gru 2019, 23:36
- Podziękował: 4 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Cześć. Jestem laikiem w tym temacie, mój ojciec bardziej ogarnia takie kwestie, więc z jego pomocą chciałbym stworzyć takie cudo.
Mam 2 pytania - ponieważ chciałbym żeby komunikacja między telefonem a sterownikiem odbywała się przez internet, a nie w obrębie danej sieci (głównie ze względu na chęć włączenia kolumny przed powrotem z pracy, żeby już się nagrzewała).
1. Ze względu na umiejscowienie kolumny w piwnicy mam problem z sygnałem w tamtym miejscu. Czy lepiej montować klamoty z dala od kolumny w miejscu gdzie sygnał jest "w miarę", czy postawić router bliżej kolumny i dokupić do niego antenę?
2. Czy do komunikacji sterownika przez internet potrzebuje dodatkowego hardware, czy wystarczy do tego jakiś soft?
Dziękuję z góry za wszystkie odpowiedzi.
Mam 2 pytania - ponieważ chciałbym żeby komunikacja między telefonem a sterownikiem odbywała się przez internet, a nie w obrębie danej sieci (głównie ze względu na chęć włączenia kolumny przed powrotem z pracy, żeby już się nagrzewała).
1. Ze względu na umiejscowienie kolumny w piwnicy mam problem z sygnałem w tamtym miejscu. Czy lepiej montować klamoty z dala od kolumny w miejscu gdzie sygnał jest "w miarę", czy postawić router bliżej kolumny i dokupić do niego antenę?
2. Czy do komunikacji sterownika przez internet potrzebuje dodatkowego hardware, czy wystarczy do tego jakiś soft?
Dziękuję z góry za wszystkie odpowiedzi.
-
- Posty: 213
- Rejestracja: sobota, 23 sie 2014, 14:47
- Podziękował: 32 razy
- Otrzymał podziękowanie: 23 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Postaw serwer blynka na VPSie (wishosting ma za 12 zł na rok) i będzie działać przez internet, ja tak mam.
https://www.elektroda.pl/rtvforum/topic3602108.html
W kwestii sygnału - możesz zrobić repeater z ESP8266 który będzie pomiędzy routerem a kolumną.
https://www.elektroda.pl/rtvforum/topic3602108.html
W kwestii sygnału - możesz zrobić repeater z ESP8266 który będzie pomiędzy routerem a kolumną.
Ostatnio zmieniony środa, 9 wrz 2020, 13:23 przez moszeusz, łącznie zmieniany 2 razy.
-
Autor tematu - Posty: 951
- Rejestracja: środa, 30 mar 2016, 18:43
- Podziękował: 9 razy
- Otrzymał podziękowanie: 134 razy
-
- Posty: 397
- Rejestracja: wtorek, 13 lut 2018, 14:50
- Krótko o sobie: Jestem fajnym człowiekiem:)
- Ulubiony Alkohol: Piwo/ Cydr/ Bimberek
- Status Alkoholowy: Konstruktor
- Podziękował: 6 razy
- Otrzymał podziękowanie: 27 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Ja zrozumiałem to w ten sposób, że kolega pytał czy aby korzystać z blynka i sterować kolumna musi być tej samej sieci co sterownik.
Jeżeli o to chodziło, to odpowiadam że nie musisz
Wysłane z mojego EML-L29 przy użyciu Tapatalka
Jeżeli o to chodziło, to odpowiadam że nie musisz
Wysłane z mojego EML-L29 przy użyciu Tapatalka
TERMOMETRY WIFI
https://www.facebook.com/TermometryWIFI/
https://www.facebook.com/TermometryWIFI/
-
- Posty: 19
- Rejestracja: wtorek, 10 gru 2019, 23:36
- Podziękował: 4 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Dzięki wszystkim za odpowiedzi !
Panowie, jeszcze jedno pytanie. Nie rozumiem trochę, jak działa w tym systemie kwestia odbioru. Jeśli EZ do odbioru otwierany jest czasowo, to jak się ustawia przepływ? Teraz przy odbiorze ciągłym na zaworku precyzyjnym ustawiam odpowiedni odbiór.
A jak to wygląda przy tym systemie? Zawór otwiera się na maksa do czasu minimalnej zmiany temperatury, system go zamyka i po stabilizacji znów otwiera na maksa i tak do końca procesu?
Czy może ja musze ustawić przepływ na minutę na elektrozaworze w aplikacji?
Czy odwrotnie - elektrozawór na maksa, a ustawiam przepływ na zaworze kulowym?
A co z EZ do zimnej wody? On chyba nie otwiera się czasowo, tylko jego prace steruje się %otwarciem, prawda?
Tak dokładnie o to chodziłogeorge1255 pisze:Ja zrozumiałem to w ten sposób, że kolega pytał czy aby korzystać z blynka i sterować kolumna musi być tej samej sieci co sterownik.
Dzięki wszystkim za odpowiedzi !
Panowie, jeszcze jedno pytanie. Nie rozumiem trochę, jak działa w tym systemie kwestia odbioru. Jeśli EZ do odbioru otwierany jest czasowo, to jak się ustawia przepływ? Teraz przy odbiorze ciągłym na zaworku precyzyjnym ustawiam odpowiedni odbiór.
A jak to wygląda przy tym systemie? Zawór otwiera się na maksa do czasu minimalnej zmiany temperatury, system go zamyka i po stabilizacji znów otwiera na maksa i tak do końca procesu?
Czy może ja musze ustawić przepływ na minutę na elektrozaworze w aplikacji?
Czy odwrotnie - elektrozawór na maksa, a ustawiam przepływ na zaworze kulowym?
A co z EZ do zimnej wody? On chyba nie otwiera się czasowo, tylko jego prace steruje się %otwarciem, prawda?
Ostatnio zmieniony czwartek, 10 wrz 2020, 11:04 przez radius, łącznie zmieniany 1 raz.
-
- Posty: 723
- Rejestracja: wtorek, 5 wrz 2017, 08:23
- Podziękował: 15 razy
- Otrzymał podziękowanie: 107 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
To już zależy od inwencji i zasobności portfela twórcy systemu. Elektrozawory proporcjonalne są zwykle drogie i trudniejsze w sterowaniu ale oczywiście można je stosować.. Dlatego przy odbiorze stosuje się na przykład:
- igłę (windę) z silnikiem krokowym
- zawór regulacyjny z ręcznie ustawianym maksymalnym odbiorem i za nim elektrozawór, który otwiera się okresowo
...
Dla regulacji chłodzenia zwykle zawór ręczny ustawiający minimalny przepływ z jego obejściem przez elektrozawór również sterowany okresowo. Dla odcięcia zcałkowitego następny EZ za nimi.
- igłę (windę) z silnikiem krokowym
- zawór regulacyjny z ręcznie ustawianym maksymalnym odbiorem i za nim elektrozawór, który otwiera się okresowo
...
Dla regulacji chłodzenia zwykle zawór ręczny ustawiający minimalny przepływ z jego obejściem przez elektrozawór również sterowany okresowo. Dla odcięcia zcałkowitego następny EZ za nimi.
-
- Posty: 19
- Rejestracja: wtorek, 10 gru 2019, 23:36
- Podziękował: 4 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Moje pytanie dotyczy konkretnie systemu który stworzył autor tematu. Chce na jego kodzie zrobić sterowanie dla siebie, dlatego pytam o konkretny przypadek. Jako laik nie rozumiem jak działa proces z czasowym działaniem EZ.
@robert4you - Pisales gdzieś o tym że system skraca mocno cały proces. Stąd moje pytanie - czy w tym systemie zawór kulowy i EZ ustawiamy na full i sterownik zamyka EZ gdy kolumna się destabilizuje, po stabilizacji otwiera znów i tak w kółko, czy któryś z zaworów ustawiam na wyliczone RR 1:4 i sterownik tylko zmienia delikatnie parametry odbioru mniej więcej wtedy gdy robi to operator.
Wybaczcie, pytanie może głupie ale kompletnie się na tym nie znam i o systemach z EZ nigdy nie czytałem.
czytam pisze:To już zależy od inwencji i zasobności portfela twórcy systemu. Elektrozawory proporcjonalne są zwykle drogie i trudniejsze w sterowaniu ale oczywiście można je stosować.. Dlatego przy odbiorze stosuje się na przykład:
- igłę (windę) z silnikiem krokowym
- zawór regulacyjny z ręcznie ustawianym maksymalnym odbiorem i za nim elektrozawór, który otwiera się okresowo
...
Moje pytanie dotyczy konkretnie systemu który stworzył autor tematu. Chce na jego kodzie zrobić sterowanie dla siebie, dlatego pytam o konkretny przypadek. Jako laik nie rozumiem jak działa proces z czasowym działaniem EZ.
@robert4you - Pisales gdzieś o tym że system skraca mocno cały proces. Stąd moje pytanie - czy w tym systemie zawór kulowy i EZ ustawiamy na full i sterownik zamyka EZ gdy kolumna się destabilizuje, po stabilizacji otwiera znów i tak w kółko, czy któryś z zaworów ustawiam na wyliczone RR 1:4 i sterownik tylko zmienia delikatnie parametry odbioru mniej więcej wtedy gdy robi to operator.
Wybaczcie, pytanie może głupie ale kompletnie się na tym nie znam i o systemach z EZ nigdy nie czytałem.
-
- 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
Elektrozawór jest na wyjściu olm, tuż za nim jest zaworek precyzyjny ustawiony już na daną wydajność, przyjmijmy 34-36ml/min przy grzaniu ok 3kW. Jeżeli kolumna się zdestabilizuje tzn ze odbieraliśmy urobek zbyt szybko i musi nastąpić korekta. Wtenczas ez się zamyka i sterownik czeka na powrót temperatury sprzed stabilizacji. Jeżeli temperatura opadnie do pożądanej to elektrozawór będzie sobie cykał o 5 % względem pierwszej korekty, później 10%. Cykl ten można porównać do pracy grupowego regulatora mocy np 100% mocy - grzałka cały czas załączona, 50% mocy - grzałka grzeje 5 sekund i 5 sekund nie grzeje, 30% mocy - grzałka grzeje 3 sekundy i 7 sekund odpoczywa...
Pozdrawiam Gacek.
-
- Posty: 19
- Rejestracja: wtorek, 10 gru 2019, 23:36
- Podziękował: 4 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
I już wszystko wiem dziękuję Ci bardzo za odpowiedź!
Ostatnio zmieniony sobota, 12 wrz 2020, 11:35 przez Qba, łącznie zmieniany 1 raz.
-
- Posty: 95
- Rejestracja: poniedziałek, 16 lip 2012, 09:38
- Ulubiony Alkohol: własny
- Status Alkoholowy: Drinker
- Podziękował: 99 razy
- Otrzymał podziękowanie: 5 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Działa super, dołożyłem czujnik poziomu cieczy i jestem mega zadowolony, dzięki robert4you za udostępnienie
Ostatnio zmieniony sobota, 26 wrz 2020, 09:31 przez manowar, łącznie zmieniany 4 razy.
-
Autor tematu - Posty: 951
- Rejestracja: środa, 30 mar 2016, 18:43
- Podziękował: 9 razy
- Otrzymał podziękowanie: 134 razy
-
- Posty: 95
- Rejestracja: poniedziałek, 16 lip 2012, 09:38
- Ulubiony Alkohol: własny
- Status Alkoholowy: Drinker
- Podziękował: 99 razy
- Otrzymał podziękowanie: 5 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Zastosowałem XKC-Y25-PNP
https://pl.aliexpress.com/item/32993270 ... 5c0fTlk5Pu
https://pl.aliexpress.com/item/32993270 ... 5c0fTlk5Pu
-
- Posty: 52
- Rejestracja: poniedziałek, 5 sie 2013, 10:43
- Podziękował: 37 razy
- Otrzymał podziękowanie: 8 razy
-
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: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Próbuję przenieść kawałek kodu na esp8266. W sumie to moje pierwsze podejście do samodzielnego pisania kodu na ESP i mam mały problem.
Chciałbym tylko ustawiać moc grzałki, więc biorę kod Task1code, jest on wywoływany przez xTaskCreatePinnedToCore, którego na esp8266 nie ma. Wrzucam go do loop'a - wywalając niepotrzebne rzeczy i co jakieś 3-4 sekundy na konsoli widzę "Soft WDT reset" - czy ten problem nie występuje na esp32? Na ten moment zrobiłem obejście i kończę pętlę for po sekundzie - ale nie wiem czy nie bedzie problemów później jak będę odczytywał temperaturę z czujników itd.
Druga sprawa to włączanie grzałki. W programie moc jest realizowana poprzez wyłączanie/włączanie w przeciągu 1 sekundy - czy to nie wpływa negatywnie na sam ssr/grzałkę? Posiadam regulator Boleckiego i widzę, że ten czas jest tam dwukrotnie większy, tj 2 sekundy na cykl.
Chciałbym tylko ustawiać moc grzałki, więc biorę kod Task1code, jest on wywoływany przez xTaskCreatePinnedToCore, którego na esp8266 nie ma. Wrzucam go do loop'a - wywalając niepotrzebne rzeczy i co jakieś 3-4 sekundy na konsoli widzę "Soft WDT reset" - czy ten problem nie występuje na esp32? Na ten moment zrobiłem obejście i kończę pętlę for po sekundzie - ale nie wiem czy nie bedzie problemów później jak będę odczytywał temperaturę z czujników itd.
Druga sprawa to włączanie grzałki. W programie moc jest realizowana poprzez wyłączanie/włączanie w przeciągu 1 sekundy - czy to nie wpływa negatywnie na sam ssr/grzałkę? Posiadam regulator Boleckiego i widzę, że ten czas jest tam dwukrotnie większy, tj 2 sekundy na cykl.
Kod: Zaznacz cały
#define RelayPin D8
int PercentagePower = 50;
int HeaterTimeFrameInSeconds = 2;
unsigned long loopStartTime=0;
unsigned long timePassed=0;
void setup() {
}
void loop() {
pinMode(RelayPin, OUTPUT);
digitalWrite(RelayPin, LOW);
loopStartTime = millis();
for (;;)
{
timePassed = millis() - loopStartTime;
if (timePassed > (HeaterTimeFrameInSeconds * 1000))
{
break;
}
if ((PercentagePower * 10 * HeaterTimeFrameInSeconds) < timePassed)
{
digitalWrite(RelayPin, LOW);
}
else
{
digitalWrite(RelayPin, HIGH);
}
}
}
Ostatnio zmieniony poniedziałek, 26 paź 2020, 15:19 przez stefunk, łącznie zmieniany 3 razy.
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
stefunk - to jest aktywne czekanie, tak się nie robi. Przecież przed wejściem do tego fora wiesz ile czasu masz być w stanie wysokim a ile w niskim. Chyba tam jest jakiś delay na tym sprzęcie? Z jaką częstotliwością chcesz sterować tym wyjściem?
Kod: Zaznacz cały
#define CYCLE_LENGTH_IN_MS 100
#define POWER_RESOLUTION 100
// UWAGA power musi być [0..POWER_RESOLUTION]
for (;;) { // jak szybko chcesz przełączać? 10Hz, czyli jeden obrót 100ms (100msx10 = 1s)
if (power>0) { // faza wysoka
digitalWrite(pin, HIGH);
delay(power * CYCLE_LENGTH_IN_MS / POWER_RESOLUTION); // najpierw mnożenie później dzielenie - zastanów się dlaczego
}
if (power<100) { // faza niska
digitalWrite(pin, LOW);
delay((POWER_RESOLUTION - power) * CYCLE_LENGTH_IN_MS / POWER_RESOLUTION);
}
}
Ostatnio zmieniony poniedziałek, 26 paź 2020, 18:21 przez jacek.kokot, łącznie zmieniany 1 raz.
-
- Posty: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Wziąłem to z przykładu z tego tematu. Twoje podejście wygląda dużo lepiej, udało mi się złożyć wszystko w całość.
Kod: Zaznacz cały
#include <Scheduler.h>
#define RELAY_PIN D8
#define POWER_RESOLUTION 100
#define POWER_PERCENTAGE 50
#define HEATER_TIME_FRAME_IN_SECONDS 2
class HeaterTask : public Task {
public:
HeaterTask(int relayPin, int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
_relayPin = relayPin;
UpdateHeaterParameters(powerResolution, percentagePower, heaterTimeFrameInSeconds);
}
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
}
void loop() {
if (_percentagePower > 0 ) {
turnAndWait(_highTimeInMiliseconds, HIGH);
}
if (_percentagePower < 100) {
turnAndWait(_lowTimeInMiliseconds, LOW);
}
}
void UpdateHeaterParameters(int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
_powerResolution = powerResolution;
_percentagePower = percentagePower;
_heaterTimeFrameInSeconds = heaterTimeFrameInSeconds;
_highTimeInMiliseconds = _percentagePower * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
_lowTimeInMiliseconds = (_powerResolution - _percentagePower) * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
}
private:
int _relayPin, _powerResolution, _percentagePower, _heaterTimeFrameInSeconds, _highTimeInMiliseconds, _lowTimeInMiliseconds;
void turnAndWait(int timeInMiliseconds, int state) {
digitalWrite(RELAY_PIN, state);
delay(timeInMiliseconds);
}
} heater_task(RELAY_PIN, POWER_RESOLUTION, POWER_PERCENTAGE, HEATER_TIME_FRAME_IN_SECONDS);
void setup() {
//Serial.begin(115200);
//Serial.println("Setup");
Scheduler.start(&heater_task);
Scheduler.begin();
}
void loop() {}
Ostatnio zmieniony poniedziałek, 26 paź 2020, 20:18 przez stefunk, łącznie zmieniany 3 razy.
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Nie widziałem tego przykładu nie będę się wypowiadał na jego temat. To jest tak, że każdy orze jak może. Tylko niektórzy powinni poprzestać na oraniu pola
Skoro już się czepiłem, to parę dodatkowych spraw.
1. Rozdziel deklaracje od definicji.
2. Zmienne PercentagePower i HeaterTimeFrameInSeconds są w tym kodzie prywatne dla klasy HeaterTask. Być może tu nie ma całości kodu i gdzieś tam coś je modyfikuje, ale w takim przypadku tak czy siak przydałaby się jakieś przypisanie ich własności do czegoś i dodanie synchronizacji.
3. RELAY_PIN jest naturalnym kandydatem na parametr konstruktora HeaterTask.
4. Inicjalizacja highTimeInMiliseconds i lowTimeInMiliseconds - tego się tak nie robi. To powinno być w konstruktorze.
5. Zamiast wyliczać na pałę highTimeInMiliseconds i lowTimeInMiliseconds lepiej w ogóle nie mieć takich zmiennych i wyliczać je na bieżąco w środku loop. Wtedy można modyfikować PercentagePower i niczym się nie martwić. Generalnie ogólna zasada jest taka, że im mniej przechowujesz stanu tym lepiej.
6. Jak być chciał być purystą, to zwróć uwagę, że highTimeInMiliseconds + lowTimeInMiliseconds wcale nie musi być 1000 * HeaterTimeFrameInSeconds. Jakbyś chciał to zapewnić trzeba by inicjalizować lowTimeInMiliseconds = 1000 * HeaterTimeFrameInSeconds - highTimeInMiliseconds.
7. Deklaracja heater_task jest bardzo błędogenna. Tego nie widać. Tak się nie robi.
Skoro już się czepiłem, to parę dodatkowych spraw.
1. Rozdziel deklaracje od definicji.
2. Zmienne PercentagePower i HeaterTimeFrameInSeconds są w tym kodzie prywatne dla klasy HeaterTask. Być może tu nie ma całości kodu i gdzieś tam coś je modyfikuje, ale w takim przypadku tak czy siak przydałaby się jakieś przypisanie ich własności do czegoś i dodanie synchronizacji.
3. RELAY_PIN jest naturalnym kandydatem na parametr konstruktora HeaterTask.
4. Inicjalizacja highTimeInMiliseconds i lowTimeInMiliseconds - tego się tak nie robi. To powinno być w konstruktorze.
5. Zamiast wyliczać na pałę highTimeInMiliseconds i lowTimeInMiliseconds lepiej w ogóle nie mieć takich zmiennych i wyliczać je na bieżąco w środku loop. Wtedy można modyfikować PercentagePower i niczym się nie martwić. Generalnie ogólna zasada jest taka, że im mniej przechowujesz stanu tym lepiej.
6. Jak być chciał być purystą, to zwróć uwagę, że highTimeInMiliseconds + lowTimeInMiliseconds wcale nie musi być 1000 * HeaterTimeFrameInSeconds. Jakbyś chciał to zapewnić trzeba by inicjalizować lowTimeInMiliseconds = 1000 * HeaterTimeFrameInSeconds - highTimeInMiliseconds.
7. Deklaracja heater_task jest bardzo błędogenna. Tego nie widać. Tak się nie robi.
-
- 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
Napisz o co Ci chodzi, przecież tutaj nikt w mordę nie przyłoży... Nie pykło Ci coś dzisiaj? Chooojowy dzień był? Kurde... Nie rozumiem takich ludzi i zachowania...jacek.kokot pisze:Nie widziałem tego przykładu nie będę się wypowiadał na jego temat. To jest tak, że każdy orze jak może. Tylko niektórzy powinni poprzestać na oraniu pola
Pozdrawiam Gacek.
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Ja nie chcę tu nic sugerować, ale chyba nieco nadinterpretowałeś moją wypowiedź. Chooojowy dzień był?
Ja Cię przepraszam bardzo, ale tak jak napisałem, nie widziałem tego kodu, nie mam pojęcia jaki to jest kod, ani tym bardziej czyj. Napisałem tylko, że czasami jest lepiej jak niektórzy nie zajmują się pewnymi rzeczami, ale to była uwaga ogólna, w oderwaniu od kodu (którego niewidziałem)..Gacek pisze:Napisz o co Ci chodzi, przecież tutaj nikt w mordę nie przyłoży... Nie pykło Ci coś dzisiaj? Chooojowy dzień był? Kurde... Nie rozumiem takich ludzi i zachowania...
Ja nie chcę tu nic sugerować, ale chyba nieco nadinterpretowałeś moją wypowiedź. Chooojowy dzień był?
Ostatnio zmieniony poniedziałek, 26 paź 2020, 21:17 przez jacek.kokot, łącznie zmieniany 1 raz.
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Panowie... Ja nie widziałem tego kodu. Nie dyskutuję tu o żadnym konkretnym kodzie. Napisałem uwagę ogólną, że czasami ktoś opublikuje G**wno i następnie niczego nieświadomi ludzie się na tym wzorują i wychodzi jeszcze większe G******wno. To jest taki truizm, który ma zastosowanie w wielu miejscach i nie jest specyficzny z kodowania. Nie nazywam na G żadnego konkretnego kodu, ponieważ go nie widziałem. Proszę nie odbierać tego ad persona.stefunk pisze:Gacek, po prostu pracując z zawodzie, jak się widzi totalną prowizorkę, to szkoda słów
Ostatnio zmieniony poniedziałek, 26 paź 2020, 21:21 przez jacek.kokot, łącznie zmieniany 1 raz.
-
- Posty: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Po co właściwie w tym wypadku rozdzielać deklaracje od definicji?
https://pastebin.com/SRzt9k1H
Kolejna porcja kodu ... nie wiem czy to wina esp'a czy coś źle zrobiłem, ale pokazuje mi złą temperature ... w okolicach 66 stopni, po ogrzaniu czujnika temperatura rośnie...
https://pastebin.com/SRzt9k1H
Kolejna porcja kodu ... nie wiem czy to wina esp'a czy coś źle zrobiłem, ale pokazuje mi złą temperature ... w okolicach 66 stopni, po ogrzaniu czujnika temperatura rośnie...
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
stefunk - dlaczego nie działa, nie ma pojęcia, ale tak właściwie Ty korzystasz tam z klasy DallasTemperature, która z tego co rozumiem, jest z zewnątrz. Widzę co najmniej trzy opcje. Klasa działa źle (jeśli to jest zaufana klasa, używana przez wielu, bardzo mało prawdopodobne), używasz tej klasy źle (obstawiałbym tą opcję, może begin trzeba wołać w loop a może pomiędzy requestTemperatures a get trzeba dać delay - nie wiem) lub masz coś źle podłączone. Nie znam tej klasy. Nie powiem Ci konkretnie.
Drobne (naprawdę pierdoły) sugestie do kodu:
0. W rozdzieleniu deklaracji od definicji chodzi o to, że w kodzie trzeba trzeba tworzyć struktury wyższego rzędu, wydzielać elementy, ukrywać szczegóły implementacyjne. Tu masz tego kodu tyle co kto napłakał, więc pewnie, póki co, to będzie przerost formy nad treścią, ale warto mieć taki paradygmat z tyłu głowy, bo wraz z rozwojem projektu podział stanie się nieunikniony.
1. Sądzę, że '_' powinieneś używać do parametrów, aby inne zmienne nie miały '_'. Np.
2. Ja nie znam tej klasy, ale z tego co rozumiem sensors->getTempCByIndex(0); zwraca wynik dla pierwszego termometru z brzegu. Sądzę, że taki kod może w przyszłości ewaluować do getTempCByIndex(i); a wg mojej wiedzy magistrala 1-Wire nie daje żadnej gwarancji, że czujniki zawsze czytają się w tej samej kolejności. Reasumując uważam, że lepiej czytać DS po serialu. Jest tam taka opcja w ogóle?
3. W Twoim kodzie nie alokujesz dynamicznie żadnej klasy, a wskaźniki w C++ stają się coraz bardziej passe, więc zamiast pisać static SensorTask sensor_task(SENSOR_PIN, &sensors, &lcdService); i dalej SensorTask(int sensorPin, DallasTemperature *sensors, LcdService *lcdService) możesz napisać static SensorTask sensor_task(SENSOR_PIN, sensors, lcdService); i dalej SensorTask(int sensorPin, DallasTemperature& sensors, LcdService& lcdService).
Ale generalnie naprawdę ładny kod. Dałbym za niego studentowi 5.
Drobne (naprawdę pierdoły) sugestie do kodu:
0. W rozdzieleniu deklaracji od definicji chodzi o to, że w kodzie trzeba trzeba tworzyć struktury wyższego rzędu, wydzielać elementy, ukrywać szczegóły implementacyjne. Tu masz tego kodu tyle co kto napłakał, więc pewnie, póki co, to będzie przerost formy nad treścią, ale warto mieć taki paradygmat z tyłu głowy, bo wraz z rozwojem projektu podział stanie się nieunikniony.
1. Sądzę, że '_' powinieneś używać do parametrów, aby inne zmienne nie miały '_'. Np.
Kod: Zaznacz cały
HeaterTask(int _relayPin, int _powerResolution, int _percentagePower, int _heaterTimeFrameInSeconds) {
relayPin = _relayPin;
3. W Twoim kodzie nie alokujesz dynamicznie żadnej klasy, a wskaźniki w C++ stają się coraz bardziej passe, więc zamiast pisać static SensorTask sensor_task(SENSOR_PIN, &sensors, &lcdService); i dalej SensorTask(int sensorPin, DallasTemperature *sensors, LcdService *lcdService) możesz napisać static SensorTask sensor_task(SENSOR_PIN, sensors, lcdService); i dalej SensorTask(int sensorPin, DallasTemperature& sensors, LcdService& lcdService).
Ale generalnie naprawdę ładny kod. Dałbym za niego studentowi 5.
Ostatnio zmieniony wtorek, 27 paź 2020, 08:40 przez jacek.kokot, łącznie zmieniany 2 razy.
-
- Posty: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
1. Wolę jak prywatne parametry mają _ w nazwie
2. To jest dopiero nauka biblioteki, będę się starał robić tak, żeby przyporządkować automatycznie jeden termometr w to samo miejsce
3. Programuje w C# i wskaźniki widzę pierwszy raz, nie licząc okresu studiów wiele lat temu
Gdybym nie programował od 13 lat to bym się z tej 5 bardzo ucieszył
Przyznam, że trochę mnie temat wciągnął i postanowiłem zrobić bibliotekę z asnychronicznym pobieraniem danych i powiadomieniami (o ile się da) na stronie, serwowanej przez ESP'a, z możliwością ustawienia mocy grzałki i wskazaniami temperatury.
Wszystko robię na licencji MIT, więc można będzie korzystać też komercyjnie - mam nadzieję, że zachęcę też forumowych producentów do wrzucania kodu, albo przynajmniej pomocy w rozwoju.
https://github.com/stefunkk/openstill
2. To jest dopiero nauka biblioteki, będę się starał robić tak, żeby przyporządkować automatycznie jeden termometr w to samo miejsce
3. Programuje w C# i wskaźniki widzę pierwszy raz, nie licząc okresu studiów wiele lat temu
Gdybym nie programował od 13 lat to bym się z tej 5 bardzo ucieszył
Przyznam, że trochę mnie temat wciągnął i postanowiłem zrobić bibliotekę z asnychronicznym pobieraniem danych i powiadomieniami (o ile się da) na stronie, serwowanej przez ESP'a, z możliwością ustawienia mocy grzałki i wskazaniami temperatury.
Wszystko robię na licencji MIT, więc można będzie korzystać też komercyjnie - mam nadzieję, że zachęcę też forumowych producentów do wrzucania kodu, albo przynajmniej pomocy w rozwoju.
https://github.com/stefunkk/openstill
-
- Posty: 397
- Rejestracja: wtorek, 13 lut 2018, 14:50
- Krótko o sobie: Jestem fajnym człowiekiem:)
- Ulubiony Alkohol: Piwo/ Cydr/ Bimberek
- Status Alkoholowy: Konstruktor
- Podziękował: 6 razy
- Otrzymał podziękowanie: 27 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
"Tutaj możemy się posłużyć programem demo Plik → Przykłady → OneWire → DS18x20, trzeba jednak pamiętać, aby na samym początku zmienić informacje o podłączeniu czujników"
a później w kodzie umieszczasz
Nie wiem, moze Ci to rozjaśni
Źródlo: https://forbot.pl/blog/kurs-arduino-ii- ... 20-id18414
W arduino IDEstefunk pisze: 2. To jest dopiero nauka biblioteki, będę się starał robić tak, żeby przyporządkować automatycznie jeden termometr w to samo miejsce
"Tutaj możemy się posłużyć programem demo Plik → Przykłady → OneWire → DS18x20, trzeba jednak pamiętać, aby na samym początku zmienić informacje o podłączeniu czujników"
a później w kodzie umieszczasz
Kod: Zaznacz cały
DeviceAddress termometrZewnetrzny = { 0x10, 0x7A, 0x31, 0x99, 0x1, 0x8, 0x0, 0x4A };
Źródlo: https://forbot.pl/blog/kurs-arduino-ii- ... 20-id18414
TERMOMETRY WIFI
https://www.facebook.com/TermometryWIFI/
https://www.facebook.com/TermometryWIFI/
-
- Posty: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Raczej nie będę podawał ich adresów, wolałbym przy podmianie czujnika nie kompilować ponownie kodu. Może po prostu sortowanie po adresach, żeby zawsze były w tej samej kolejności
edit.
Odpaliłem przykład oneWire i niestety tam też jest zły odczyt.
ROM = 28 FF 48 9E 83 17 4 E
Chip = DS18B20
Data = 1 19 4 4B 46 7F FF C 10 1 CRC=1
Temperature = 65.56 Celsius, 150.01 Fahrenheit
No more addresses.
edit2
Downgrade biblioteki oneWire do 2.3.0 pomógł
edit.
Odpaliłem przykład oneWire i niestety tam też jest zły odczyt.
ROM = 28 FF 48 9E 83 17 4 E
Chip = DS18B20
Data = 1 19 4 4B 46 7F FF C 10 1 CRC=1
Temperature = 65.56 Celsius, 150.01 Fahrenheit
No more addresses.
edit2
Downgrade biblioteki oneWire do 2.3.0 pomógł
Ostatnio zmieniony wtorek, 27 paź 2020, 12:47 przez stefunk, łącznie zmieniany 2 razy.
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Swoją drogą - jak testujesz czy odczyt w ogóle się udał?
Do testowania - jakkolwiek. Natomiast jak już coś będziesz chciał uruchomić - tylko po serialu. Inaczej nigdy nie będziesz miał pewności co czytasz. Zwróć uwagę, że przy kilku czyjnikach na tej samej magistrali możesz mieć tak, że przy kolejnym odczycie np. 2 z 5 czujników się nie przeczytają (nie bo nie i tyle). Wtedy to już w ogóle będzie miał loterię.stefunk pisze:Raczej nie będę podawał ich adresów, wolałbym przy podmianie czujnika nie kompilować ponownie kodu. Może po prostu sortowanie po adresach, żeby zawsze były w tej samej kolejności
Swoją drogą - jak testujesz czy odczyt w ogóle się udał?
-
- Posty: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
No i utknąłem, chciałem za namową zrobić po adresach, ale chyba coś mam nie tak z wskaźnikami, bo mi adresy idą jakieś dziwne, chodzi mi o 1000552E204070 i 000000001 mimo zadeklarowania ich prawidłowo:
const std::map<const char*, const DeviceAddress&> SensorList
{
{"10Polka", { 0x28, 0xFF, 0xB4, 0xCE, 0x70, 0x17, 0x03, 0xBB }},
{"Glowica", { 0x28, 0xFF, 0x4C, 0xDE, 0x83, 0x17, 0x04, 0xF1 }},
{"Zbiornik", { 0x28, 0xFF, 0xE7, 0x7A, 0x83, 0x17, 0x04, 0x15 }},
{"Woda", { 0x28, 0xFF, 0xB7, 0x78, 0x90, 0x17, 0x05, 0x77 }}
};
żeby było jeszcze bardziej dziwnie, dwa ostatnie działają prawidłowo, kod tu: https://github.com/stefunkk/openstill
Devices count:
4
10Polka
-127.00
1000552E204070
Glowica
-127.00
000000001
Zbiornik
21.87
28FFE77A83174150
Woda
21.69
28FFB778901757728
const std::map<const char*, const DeviceAddress&> SensorList
{
{"10Polka", { 0x28, 0xFF, 0xB4, 0xCE, 0x70, 0x17, 0x03, 0xBB }},
{"Glowica", { 0x28, 0xFF, 0x4C, 0xDE, 0x83, 0x17, 0x04, 0xF1 }},
{"Zbiornik", { 0x28, 0xFF, 0xE7, 0x7A, 0x83, 0x17, 0x04, 0x15 }},
{"Woda", { 0x28, 0xFF, 0xB7, 0x78, 0x90, 0x17, 0x05, 0x77 }}
};
żeby było jeszcze bardziej dziwnie, dwa ostatnie działają prawidłowo, kod tu: https://github.com/stefunkk/openstill
Devices count:
4
10Polka
-127.00
1000552E204070
Glowica
-127.00
000000001
Zbiornik
21.87
28FFE77A83174150
Woda
21.69
28FFB778901757728
-
- Posty: 105
- Rejestracja: poniedziałek, 17 sie 2020, 11:28
- Podziękował: 1 raz
- Otrzymał podziękowanie: 11 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
DeviceAddress jest typu unit8_t[8]. Czyli teoretycznie od inicjalizacji nikt nie powinien tego modyfikować. Czy mógłbyś zrobić test polegający na wywaleniu czytania w ogóle i zostaw tylko wypisywanie w tym loop element.first i element.second. To że wyniki są z kosmosu - bywa, ale dlaczego wypisując element.second pisze śmieci - dziwne.
Ja bym zrobił zamiast map<char*, Address> => vector< pair<string, Address> >.
Zamień sobie LcdServiceClass* na LcdServiceClass& (i inne analogicznie). Wtedy nigdzie nie bedziesz miał ani * ani ->.
Ja bym zrobił zamiast map<char*, Address> => vector< pair<string, Address> >.
Zamień sobie LcdServiceClass* na LcdServiceClass& (i inne analogicznie). Wtedy nigdzie nie bedziesz miał ani * ani ->.
-
- Posty: 183
- Rejestracja: sobota, 30 lis 2019, 12:53
- Podziękował: 26 razy
- Otrzymał podziękowanie: 7 razy
Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja
Udało mi się to zrobić, po zmianie const chara na stringa, adresy zaczeły być prawidłowe, dlaczego ... nie wiem.
Co do zmiany * na & rozumiem, że chodzi Ci o definicje w nagłówku właściwości klasy?
private:
int _sensorPin;
DallasTemperature& _sensors;
LcdServiceClass& _lcdService; ...
tylko wtedy przy konstruktorze rzuca błędem
SensorTaskClass::SensorTaskClass(int sensorPin, DallasTemperature& sensors, LcdServiceClass& lcdService)
{
_sensors = sensors;
_lcdService = lcdService;
SensorTask.cpp: In constructor SensorTaskClass::SensorTaskClass(int, DallasTemperature&, LcdServiceClass&)
SensorTask.cpp: 3:1: error: uninitialized reference member 'SensorTaskClass::_sensors' [-fpermissive]
SensorTaskClass*: SensorTaskClass(int sensorPin, DallasTemperature& sensors, LcdServiceClass& lcdService)
SensorTask.cpp: 3:1: error: uninitialized reference member 'SensorTaskClass::_lcdService' [-fpermissive]
Error compiling project sources
Debug build failed for project 'OpenStill'
Co do zmiany * na & rozumiem, że chodzi Ci o definicje w nagłówku właściwości klasy?
private:
int _sensorPin;
DallasTemperature& _sensors;
LcdServiceClass& _lcdService; ...
tylko wtedy przy konstruktorze rzuca błędem
SensorTaskClass::SensorTaskClass(int sensorPin, DallasTemperature& sensors, LcdServiceClass& lcdService)
{
_sensors = sensors;
_lcdService = lcdService;
SensorTask.cpp: In constructor SensorTaskClass::SensorTaskClass(int, DallasTemperature&, LcdServiceClass&)
SensorTask.cpp: 3:1: error: uninitialized reference member 'SensorTaskClass::_sensors' [-fpermissive]
SensorTaskClass*: SensorTaskClass(int sensorPin, DallasTemperature& sensors, LcdServiceClass& lcdService)
SensorTask.cpp: 3:1: error: uninitialized reference member 'SensorTaskClass::_lcdService' [-fpermissive]
Error compiling project sources
Debug build failed for project 'OpenStill'
Ostatnio zmieniony wtorek, 27 paź 2020, 22:47 przez stefunk, łącznie zmieniany 1 raz.