31-01-2017, 13:42
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);}
}