02-12-2016, 18:14
02-12-2016, 19:57
(30-11-2016, 00:48)Automatyk napisał(a): [ -> ]Funkcja delay jest odpowiedzialna za ten błąd ten wątek juz tu był gdzieś poruszony musisz użyć innej funkcji np millis
(02-12-2016, 18:14)JasQ napisał(a): [ -> ]Tak bo albo temp wyszła poza zakres czujnika albo ardu pogubił komunikację z nimi wtedy wyświetla -127
Tak . Tylko czy temperatura 15 stopni (do takiej spada temperatura gdy nie palę ) jest poza zakresem czujników DS18B20 ? Na pewno nie . I jeszcze jeden ciekawy efekt jaki zaobserwowałem . Wczoraj tak jak pisałem napaliłem i w napalonym układzie wszystko działało ok mimo że układ resetowałem z automatu przez wspomniany przekaznik . Poszedłem spać . Rano wstałem , grzejniki zimne a mój wyświetlacz oczywiście wskazuje to co zamieściłem na zdjęciu drugim w poprzednich odpowiedziach (czyli wskazywał nie to co powinien ) Ale teraz zrobiłem inaczej niż zawsze . Nie wyłączałem z prądu arduino aby go zresetować , tylko zostawiłem wszystko jak było i rozpaliłem w piecu . Poszedłem do domu i gdzieś po pół godzinie poszedłem zobaczyć wyświetlacz . A tu niespodzianka . Wyświetlacz wskazuje prawidłowe temperatury na piecu (czyli jak na zdjęciu pierwszym) Jest to wszystko bardzo dziwne i tajemnicze i wygląda na to że programowo tu już nic nie zrobię .I myślę że nie jest tu też winien za długi przewód na którym jest magistrala I2C .Ale co jest winne ?
03-12-2016, 19:17
Na magistrali I2C masz podpięty tylko jednego DS18B20? W jakim trybie go podpinasz? Jakiej wartości rezystor podciągający zastosowałeś? Być może właśnie w nim leży problem.
04-12-2016, 02:37
(03-12-2016, 19:17)piotr2393 napisał(a): [ -> ]Na magistrali I2C masz podpięty tylko jednego DS18B20? W jakim trybie go podpinasz? Jakiej wartości rezystor podciągający zastosowałeś? Być może właśnie w nim leży problem.
Na magistrali I2C są podpięte wyświetlacze a nie czujniki . Rezystor o ile dobrze pamiętam 4,7k . A całość jest spięta podobnie jak na zdjęciu poniżej , tylko są 4 DS18B20 .
04-12-2016, 14:18
Wydaje mi się, że długość przewodów, czyli odległość Slave'ów(termometrów) od Mastera(Arduino) może mieć wpływ na błędny odczyt z czujników. Jeśli kable nie przekraczają długości 20m to wystarczy mały rezystor podciągający 2k. Dodawanie kolejnych termometrów redukuje praktyczną możliwość poprawnej pracy.
Zajrzyj tutaj, może to przybliży Ci rozwiązanie problemu.
https://www.maximintegrated.com/en/app-n...mvp/id/148
Zajrzyj tutaj, może to przybliży Ci rozwiązanie problemu.
https://www.maximintegrated.com/en/app-n...mvp/id/148
05-12-2016, 16:50
(04-12-2016, 14:18)piotr2393 napisał(a): [ -> ]Wydaje mi się, że długość przewodów, czyli odległość Slave'ów(termometrów) od Mastera(Arduino) może mieć wpływ na błędny odczyt z czujników. Jeśli kable nie przekraczają długości 20m to wystarczy mały rezystor podciągający 2k. Dodawanie kolejnych termometrów redukuje praktyczną możliwość poprawnej pracy.
Zajrzyj tutaj, może to przybliży Ci rozwiązanie problemu.
https://www.maximintegrated.com/en/app-n...mvp/id/148
Nie wiem drodzy koledzy czy dokładnie czytacie to co piszę . Aktualnie problem rozbija się o zimny i ciepły piec . Bo jak teraz grzeję już dwa dni bez gaszenia pieca to wszystko chodzi prawidłowo a jak w piecu zgaśnie to zaczynają się dziać dziwne rzeczy na wyświetlaczach i to zarówno na tym co jest na przewodzie pół metrowym jak i na tym co jest na przewodzie 10 metrowym .
05-12-2016, 18:10
(05-12-2016, 16:50)maniolx napisał(a): [ -> ]Nie wiem drodzy koledzy czy dokładnie czytacie to co piszę . Aktualnie problem rozbija się o zimny i ciepły piec . Bo jak teraz grzeję już dwa dni bez gaszenia pieca to wszystko chodzi prawidłowo a jak w piecu zgaśnie to zaczynają się dziać dziwne rzeczy na wyświetlaczach i to zarówno na tym co jest na przewodzie pół metrowym jak i na tym co jest na przewodzie 10 metrowym .Bo zapewne pojemność się zmienia.
Magistrala i2c zastała zaprojektowana do określonych celów i gwarantuje poprawną prace na określone odległości. Możesz się doktoryzować na tym piecu i tej magistrali tylko po co? Zrób tak jak pisałem wcześniej i zapomnisz o problemie.
05-12-2016, 18:55
(05-12-2016, 18:10)namok napisał(a): [ -> ](05-12-2016, 16:50)maniolx napisał(a): [ -> ]Nie wiem drodzy koledzy czy dokładnie czytacie to co piszę . Aktualnie problem rozbija się o zimny i ciepły piec . Bo jak teraz grzeję już dwa dni bez gaszenia pieca to wszystko chodzi prawidłowo a jak w piecu zgaśnie to zaczynają się dziać dziwne rzeczy na wyświetlaczach i to zarówno na tym co jest na przewodzie pół metrowym jak i na tym co jest na przewodzie 10 metrowym .Bo zapewne pojemność się zmienia.
Magistrala i2c zastała zaprojektowana do określonych celów i gwarantuje poprawną prace na określone odległości. Możesz się doktoryzować na tym piecu i tej magistrali tylko po co? Zrób tak jak pisałem wcześniej i zapomnisz o problemie.
Ale pojemność czego się zmienia ? magistrali , czujników , czy czego ? I bardzo nie rozumiem dlaczego się zmienia . Miejsce w którym jest centalka , przewody do wyświetlacza , przewody do czujników ma cały czas taką samą zimną temperaturę bo piwnica nie jest ogrzewana a piec zaizolowany . Zresztą idąc tym tokiem rozumowania to jakbym chciał mierzyć tym układem temperaturę w lodówce bądz na dworze to nie dałoby rady bo pojemność jest za niska lub za wysoka ? A co z przypadkiem kiedy w piecu jest nienapalone robię restart napięciowy i wszystko chodzi dobrze - tu nie przeszkadza pojemność ? Jedno jest pewne . W przeróbkę całego układu bawić się nie będę bo musiałbym wszystko rozebrać dokładać jakieś układy i siedzieć znowu kilkadziesiąt godzin i pytać po forach jak to zrobić . Napisałem tu bo sądziłem że uda się to jakoś zrobić programowo . Jak nie to trudno . popróbuję jeszcze zrobić to resetem tak jak mi to napisał JasQ a jak nie da rady to popróbuję jeszcze z resetem napięcia .
09-01-2017, 22:17
Nie chcąc zakładać nowego tematu prosiłbym o pomoc w dodaniu pewnej komendy do skeczu . Chodzi mi o to aby po przekroczeniu zadanej temperatur załączał się na pięć minut buzzer . Konkretnie jakby ktoś nie czytał wcześniejszych postów , skecz jest taki :
A chciałbym aby po przekroczeniu zadanej temperatury przez pięc minut załączał się buzer z takim fragmentem skecza :
Bardzo proszę o pomoc bo nie udało mi się wsadzić poprawnie tego kawałka do skecza .
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7);
LiquidCrystal_I2C lcd2(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 };
DeviceAddress P2 = { 0x28, 0xFF, 0xF5, 0x31, 0xB1, 0x15, 0x1, 0xA1 };
DeviceAddress P3 = { 0x28, 0xFF, 0x42, 0x2F, 0xB0, 0x15, 0x3, 0x85 };
DeviceAddress P4 = { 0x28, 0xFF, 0xDE, 0x2F, 0xB1, 0x15, 0x1, 0x4 };
void setup()
{
Serial.begin(9600);
sensors.begin();
Wire.begin();
lcd.begin(16, 2);
lcd2.begin(20,4);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd2.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd2.setBacklight(HIGH);
pinMode(3 , OUTPUT);
}
void loop() {
if ( (millis()/1000) < 20 )digitalWrite(3,HIGH);else digitalWrite(3,LOW);
sensors.requestTemperatures();
int tempC1 = sensors.getTempC(P1);
int tempC2 = sensors.getTempC(P2);
int tempC3 = sensors.getTempC(P3);
int tempC4 = sensors.getTempC(P4);
lcd.setCursor (0, 0);
lcd.write("PIEC ");
lcd.print(tempC1, 1);
lcd.write(byte(223));
lcd.setCursor (9, 0);
lcd.write("WYJ ");
lcd.print(tempC2, 1);
lcd.write(byte(223));
lcd.setCursor (0, 1);
lcd.write("POWR ");
lcd.print(tempC3, 1);
lcd.write(byte(223));
lcd.setCursor (9, 1);
lcd.write("MIE ");
lcd.print(tempC4, 1);
lcd.write(byte(223));
sensors.requestTemperatures();{
float tempC1 = sensors.getTempC(P1);
float tempC2 = sensors.getTempC(P2);
float tempC3 = sensors.getTempC(P3);
float tempC4 = sensors.getTempC(P4);
lcd2.setCursor (0, 0);
lcd2.write("TEMP.PIEC ");
lcd2.print(tempC1, 1);
lcd2.write(byte(223));
lcd2.setCursor (0, 1);
lcd2.write("WYJSCIE PIEC ");
lcd2.print(tempC2, 1);
lcd2.write(byte(223));
lcd2.setCursor (0, 2);
lcd2.write("POWROT WODY ");
lcd2.print(tempC3, 1);
lcd2.write(byte(223));
lcd2.setCursor (0, 3);
lcd2.write("MIESZAJACY ");
lcd2.print(tempC4, 1);
lcd2.write(byte(223));
}
}
Kod:
void setup() {
pinMode(A5, OUTPUT);
}
void loop() {
digitalWrite(A5, LOW);
delay(1000);
digitalWrite(A5, HIGH);
delay(1000);
}
Bardzo proszę o pomoc bo nie udało mi się wsadzić poprawnie tego kawałka do skecza .