• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterownik zaworu czterodrożnego do CO
#1
Witam . Próbuję wykonać układzik który przez serwo będzie sterował pracą zaworu czterodrożnego w instalacji centralnego ogrzewania .Nie będę opisywał działania takiego zaworu i w jakim celu jest montowany bo zainteresowani wiedzą o co chodzi . Założenia . Na piecu zamontowany jest czujnik który na bieżąco monitoruje temp. na piecu . W programie mam zadeklarowaną temperaturę do jakiej ma dążyć piec (serwo zamontowane na zawór czterodrożny) . Układ mierzy temperaturę i jeżeli jest ona za niska od deklarowanej - przestawia serwo o np. 5stopni w prawo , czeka 30 sekund i jeżeli nadal jest za niska to znowu przesuwa o  stopni w prawo itd aż do osiągnięcia zadanej temperatury . Odwrotna sytuacja gdy temperatura jest za wysoka od temperatury zadanej . Wtedy - układ mierzy temperaturę i jeżeli jest ona za wysoka od deklarowanej - przestawia serwo o np. 5stopni w lewo , czeka 30 sekund i jeżeli nadal jest za niska to znowu przesuwa o  stopni w lewo itd aż do osiągnięcia zadanej temperatury . Moimi wypocinami zaszedłem do takiego kodu , lecz i on nie działa mi tak jak chcę . Proszę o pomoc .

Kod:
#include <Servo.h>
Servo serwomechanizm;  
int pozycja =0;
int zmiana =5;
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int histeryza = 1 ; // histeryza
int temp_norma = 29; // normalna temperatura
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress P1 = { 0x28, 0xFF, 0xDF, 0x6E, 0x81, 0x15, 0x1, 0x78};

void setup() {
sensors.begin();
 Wire.begin();
 lcd.begin(20, 4);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
 lcd.setBacklight(HIGH);
 serwomechanizm.attach(9);
}

void loop() {
sensors.requestTemperatures();{
 float tempC1 = sensors.getTempC(P1);
lcd.setCursor (0, 0);
 lcd.write("PIEC ");
 lcd.print(tempC1, 1);
}

{
  serwomechanizm.write(90);
}
{
   
   for(int pozycja=0; P1>= temp_norma ;zmiana++);
   {
     serwomechanizm.write(zmiana);
    delay(5000);}
  }
 
Odpowiedź
#2
(31-01-2017, 13:42)maniolx napisał(a): Układ mierzy temperaturę i jeżeli jest ona za niska od deklarowanej - przestawia serwo o np. 5stopni w prawo , czeka 30 sekund i jeżeli nadal jest za niska to znowu przesuwa o  stopni w prawo itd aż do osiągnięcia zadanej temperatury . Odwrotna sytuacja gdy temperatura jest za wysoka od temperatury zadanej . Wtedy - układ mierzy temperaturę i jeżeli jest ona za wysoka od deklarowanej - przestawia serwo o np. 5stopni w lewo , czeka 30 sekund i jeżeli nadal jest za niska to znowu przesuwa o  stopni w lewo itd aż do osiągnięcia zadanej temperatury .

Dobry opis algorytmu ale implementacja do bani. Co w programie robi pętla for?
Algoryt można rozpisać na pseudokod:
Kod:
odczyt temperatury
jeśli temperatura za mała to:
    serwo + 5 stopni

jeśli temperatura za duża to:
    serwo - 5 stopni    

czekamy określony czas
Brakuje tu oczywiście histerezy ale o tym potem.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
(31-01-2017, 14:49)namok napisał(a):
(31-01-2017, 13:42)maniolx napisał(a): Układ mierzy temperaturę i jeżeli jest ona za niska od deklarowanej - przestawia serwo o np. 5stopni w prawo , czeka 30 sekund i jeżeli nadal jest za niska to znowu przesuwa o  stopni w prawo itd aż do osiągnięcia zadanej temperatury . Odwrotna sytuacja gdy temperatura jest za wysoka od temperatury zadanej . Wtedy - układ mierzy temperaturę i jeżeli jest ona za wysoka od deklarowanej - przestawia serwo o np. 5stopni w lewo , czeka 30 sekund i jeżeli nadal jest za niska to znowu przesuwa o  stopni w lewo itd aż do osiągnięcia zadanej temperatury .

Dobry opis algorytmu ale implementacja do bani. Co w programie robi pętla for?
Algoryt można rozpisać na pseudokod:
Kod:
odczyt temperatury
jeśli temperatura za mała to:
    serwo + 5 stopni

jeśli temperatura za duża to:
    serwo - 5 stopni    

czekamy określony czas
Brakuje tu oczywiście histerezy ale o tym potem.

Że jest do bani to ja wiem . Gdyby nie było to bym nie pisał . Nie rozumiem co się tak każdy boi napisać tych dwóch linijek kodu aby pomóc .Ubędzie wam wiedzy jak to napiszecie ? Jest to według was podanie gotowca ? . Wolelibyście tu napisać elaborat na 10 stron A4 niż wstawić linijkę kodu . To o co tu pytam to nie gotowiec tylko niewielka część projektu który powoli rozwijam o kolejne funkcje czytając i próbując . To co ty mi tu wstawiłeś to ja wiem że to tak ma działać . Co z tego jak nie potrafię przełożyć tego na poprawnie działający kod . A wczoraj przez parę godzin próbowałem to zrobić z wykorzystaniem  "ifa" ale nie wyszło . Potem przeczytałem o pętli for cyt"Pierwszym parametrem podawanym w instrukcji for jest wartość początkowa zmiennej. Kolejny element to sprawdzenie warunku, czy pętla ma się wykonywać nadal. Pętla wykonywana jest tak długo, jak długo jest spełniony warunek. Ostatni element to zmiana wartości zmiennej. Najczęściej zwiększamy lub zmniejszamy jej wartość.  k.cyt" i pomyślałem że to może się sprawdzić w moim projekcie , lecz też nie wyszło . 
 
Odpowiedź
#4
Jak czytam takie posty to odechciewa mi się pomagać.
Napisałeś ponad 40 postów a mam wrażenie że nie wiesz jak działają podstawowe instrukcje.
Jeśli użyjesz pętli for do regulacji temperatury w sposób który podałeś to do czasu aż 'P1>= temp_norma' w programie nic się więcej nie wykona tylko ta pętla. Dodatkowo logika tej pętli też jest zła.

Proponuję zapoznać się z symulatorem: https://www.sites.google.com/site/unoardusim/services i sprawdzić jak ta pętla się zachowuje.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#5
(31-01-2017, 20:08)namok napisał(a): Jak czytam takie posty to odechciewa mi się pomagać.
Napisałeś ponad 40 postów a mam wrażenie że nie wiesz jak działają podstawowe instrukcje.
Jeśli użyjesz pętli for do regulacji temperatury w sposób który podałeś to do czasu aż 'P1>= temp_norma' w programie nic się więcej nie wykona tylko ta pętla. Dodatkowo logika tej pętli też jest zła.

Proponuję zapoznać się z symulatorem: https://www.sites.google.com/site/unoardusim/services i sprawdzić jak ta pętla się zachowuje.

No to jak ci się nie chce odpowiadać to nie odpowiadaj . Mi też nie chce się już tracić czasu na czekanie . Widzę że już mnie zlustrowałeś tak jak Wałęsy dzisiaj inni podsumowali . To już teraz tylko IPN . Do widzenia i przepraszam że tyle twojego cennego czasu zmarnowałem . Ja mam swoją stronkę w necie i jak ktoś mnie o coś pyta to nie mówię mu że jest już 5 lat wędkarzem a nie wie jak zawiązać haczyk . Ale jak to mówią co kraj(ludzie) to obyczaj . Do widzenia .
 
Odpowiedź
#6
Pozwolę sobie wtrącić swoje trzy grosze.
maniolx, nie rozumiem Twojego oburzenia. Ilość postów, jakie zamieściłeś, jest podana po prawej stronie, podobnie jak data dołączenia i reputacja. Nie trzeba się nawet starać znaleźć. Jakiekolwiek osobiste wycieczki wydają mi się tutaj nie na miejscu, tym bardziej że namok rzeczywiście podsunął Ci kilka użytecznych informacji, choćby rozpisał algorytm i poddał w wątpliwość użycie pętli for.
Co do tej ostatniej to rzeczywiście, użyłeś jej w bardzo dziwny sposób. Nie twierdzę, że błędny, bo ta pętla wykona się tak czy inaczej, ale, rzekłbym, niespotykany.
Pętla for na początku sprawdza warunek (środkowa część nawiasu). U Ciebie jest to P1>= temp_norma. Jeśli ten warunek jest spełniony, wykonuje zawartość nawiasu klamrowego (czyli coś tam zmienia z serwomechanizmem, a potem czeka 5s). Potem wykonuje trzecią część nawiasu (u Ciebie jest to zmiana++). Potem znów sprawdza warunek... i będzie go sprawdzać i wykonywać instrukcje tak długo, aż za którymś razem warunek przestanie być spełniony.
W Twoim przypadku ten warunek nie ma szans przestać być spełniony, bo nawet nie próbujesz zmienić wartości temp_norma (bo cały czas siedzisz w pętli for, gdzie nie ma próby zmiany tej wartości).
Jak mówiłem, można używać pętli for w podobny do Twojego sposób, niemniej wiąże się to z bardzo dobrą znajomością kodu i świadomością tego, co się robi.

Co do uwag jeszcze, tak od siebie: namok, jak to widać po jego reputacji, pomógł tu już wielu osobom. Wypadałoby więc, choćby z tej racji, okazać mu choć odrobinkę szacunku. Druga rzecz to taka, że, tak naprawdę, nie określiłeś, na czym ma polegać pomoc, jakiej oczekujesz. Namok podał Ci algorytm, z którym się osobiście zgadzam, bo sam napisałbym to tak samo. Po Twoich dalszych postach w tym temacie wygląda, że Twoje 'proszę o pomoc' oznacza 'napiszcie to za mnie'. Zwyczajowe 'proszę o pomoc' wygląda mniej więcej tak: 'Witam, wymyśliłem sobie, że zrobię układ taki to a taki. Doszedłem do momentu, kiedy (tu opis). Nie potrafię poradzić sobie z (konkretny opis problemu). Proszę o pomoc'.

Niestety, nie ja jeden obserwuję tutaj, na forum, zjawisko 'świeżaka'. Ktoś ma pomysł na jakieś urządzenie, sterowanie czegoś, cokolwiek. Nie zna się, ale kupuje Arduino (bo łatwo się toto programuje) i... usiłuje to coś zrobić. Nie ma pojęcia o programowaniu, nie ogarnia języka ani struktury programu, ale od razu wskakuje na głęboką wodę i usiłuje stworzyć urządzenie swoich marzeń.
Porównując to do wędkowania, o jakim wspomniałeś, wyobraź sobie, że ktoś pewnego razu budzi się z myślą: zainteresuję się wędkarstwem. Mnóstwo ludzi wędkuje, więc i ja będę potrafił. Jedzie więc do innego kraju, wynajmuje łódkę i wybiera się na połów marlinów. Jakie ma szanse powodzenia taki świeżak? No właśnie.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości