Keresés

Részletes keresés

Gogol69 Creative Commons License 2016.12.31 0 0 2653

Szia!

,,Tehát a vezetékben van az árnyékoló fólia, annak mindkét végét le kell kötni GND-re, vagy csak az egyiket?"

Csak az egyiket, különben zavarokat okozhat!

B.Ú.É.K.

Előzmény: Sploc (2652)
Sploc Creative Commons License 2016.12.31 0 0 2652

Szia!

Ha itt arra gondolsz, hogy külön van-e megtáplálva, vagy az adatvonalról hajtom-e, akkor igen, 3 vezetékesen használom.

Mivel itthon működött gond nélkül, mivel csak az volt az arduinon, egyéb eszközök nem, így csak arra tudok gondolni, hogy zavar okozza a galibát.

Tudom együgyű kérdés, de az árnyékolást, hogyan kell bekötni? Tehát a vezetékben van az árnyékoló fólia, annak mindkét végét le kell kötni GND-re, vagy csak az egyiket?

 

Egyéb probléma. Serial vonalon nincs buffer? Jelenleg a 4 hőmérő olvasása, illetve a program további futása, ~ 2 másodpercet vesznek igénybe ciklusonként. Nincs benne delay. Nekem ez megfelelő, mivel nem óramű pontossággal kell kapcsolnom sem relét, sem egyéb dolgot. Van egy Nextion Hmi a redszerben, amin van egy relé bekapcsoló gombja is az érintőfelületen. Többször meg kell nyomni, illetve a program futás egy adott pillanatában kell megérinteni, hogy be-vagy ki kapcsoljon. Miért nem tárolja el a változó értékét, vagy van rá mód, hogy többször beolvassam az állapotát egy azon loop-ban?

 

Köszönöm!

 

B.U.É.K!!

 

Előzmény: titusz99 (2650)
Gogol69 Creative Commons License 2016.12.30 0 0 2651

Sziasztok!

Nálam a 4db DS18B20 beolvasása most már szépen megy. // 3 vezetékes bekötéssel (+) & Kimeneten 4,7k.

Tettem bele néhány kimeneti kapcsolást is.

Az LCD-n ezek állapotát szerettem volna megjeleníteni. 

Ha csak 2 állapot lenne az menne.

Hárommal ez valahogy nem megy.

Hol hibázhattam?

 

Program:

// Max6675-tel

//I2C-vel illesztett 20x4 LCD-vel és ARDUINO NANO-val
//4DB DS18B20 HŐM. SZENZOR ÉRTÉKÉT ARDUNO NANO-VAL KIJELEZNI 20X4 LCD-VEL
/////////////////////////////////////////
//LCD-I2C IILESZTŐ PANEL - AVR BEKÖTÉSE:
//GND-FEKETE-0V Arduino Nano-hoz
//VCC-FEHER-5V Arduino Nano-hoz
//SDA-LILA- A4 INPUT Arduino Nano-hoz
//SCL-SZURKE- A5 INPUT Arduino Nano-hoz
///////////////////////////////////////
//A négy darab DS18B20 mindkét adatlába összekötve majd lehúzva 4,7kOhm-al a pozitiv taphoz
//adatlábak - D3 pin Arduino Nano-hoz
// sensor resolution 9(0,5 fok pontosság)
// sensor resolution 10(0,25 fok pontosság)
// sensor resolution 11(0,125 fok pontosság)
// sensor resolution 12(0,0625 fok pontosság)

 

#include <max6675.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 3 //AVR Nano 3. bemenetére kötve D3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress s1 = { 0x28, 0x8A, 0xF7, 0xE1, 0x06, 0x00, 0x00, 0xDB }; //1.szernzor címe másik progival kiolvasva //DS18B20 1-es
DeviceAddress s2 = { 0x28, 0xE1, 0x82, 0x2F, 0x07, 0x00, 0x00, 0xD8 }; //2.szernzor címe másik progival kiolvasva //DS18B20 2-es
DeviceAddress s3 = { 0x28, 0x9B, 0x38, 0x30, 0x07, 0x00, 0x00, 0xDF }; //3.szernzor címe másik progival kiolvasva //DS18B20 3-as
DeviceAddress s4 = { 0x28, 0xCF, 0xCE, 0x2F, 0x07, 0x00, 0x00, 0xB5 }; //4.szernzor címe másik progival kiolvasva //DS18B20 4-es
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display

//Itt határozom meg a Max6675 - Arduino csatoló be & kimeneteit
int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
// constants won't change. They're used here to
// set pin numbers:

 


// Bemenet elnevezése
int Start_gomb = 12; // (Start merker)

// Kimenet elnevezése
int Start_merker = 13; // (Start merker)
int Kazan_sziv = 9; // (Kazán szivattyu)
int fustPin = 10; // (Füst meleg) Pin13-re relé kotve
int kerekites = 0;
int kerekitesF = 0;

int Tuzeg_State = kerekitesF > 26;
//Változók
int Nyomogomb_State = 0; // variable for reading the pushbutton status
int Fusthovaltozobe_State = 0; // variable for reading the pushbutton status
int FusthokiState = 0; // variable for reading the pushbutton status
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.begin(20, 4);
sensors.begin();
sensors.setResolution(s1, 9);
// initialize the pushbutton pin as an input:
pinMode(Start_gomb, INPUT);
pinMode(fustPin, OUTPUT);

}
void loop(){


sensors.requestTemperatures();
delay(500); //fontos ha 11 vagy 12 a resolution
lcd.setCursor(0,0); //0. sor 0. karakter a kezdő cím
lcd.print("Puffer horetegek");
// LCD második sor_1_**********************
lcd.setCursor(0,1); //0. sor 0. karakter a kezdő cím
lcd.print("1");
lcd.print("/");
lcd.setCursor(2,1); //0. sor 3. karakter a kezdő cím
kerekites = sensors.getTempCByIndex(0)/1;
lcd.print(kerekites); //Itt irja be a 1-es szenzor adatát

lcd.print("C ");
lcd.print(char(223));


// LCD második sor_2_**********************
lcd.setCursor(10,1); //1. sor 10. karakter a kezdő cím
lcd.print("2");
lcd.print("/");
lcd.setCursor(12,1); //1. sor 13. karakter a kezdő cím
kerekites = sensors.getTempCByIndex(1)/1; //Ez elvileg huleség. Itt azonban a tizedes vesszo utani ertek eltunik
lcd.print(kerekites); // Itt irja be a 2-es szenzor adatát
lcd.print("C ");
lcd.print(char(223));

// LCD harmadik sor_1_**********************
lcd.setCursor(0,2); //2. sor 0. karakter a kezdő cím
lcd.print("3");
lcd.print("/");
lcd.setCursor(2,2); //2. sor 3. karakter a kezdő cím
kerekites = sensors.getTempCByIndex(2)/1; //Ez elvileg huleség. Itt azonban a tizedes vesszo utani ertek eltunik
lcd.print(kerekites); // Itt irja be a 3-as szenzor adatát
lcd.print("C ");
lcd.print(char(223));

// LCD harmadik sor_2_**********************
lcd.setCursor(10,2); //2. sor 10. karakter a kezdő cím
lcd.print("4");
lcd.print("/");
lcd.setCursor(12,2); //2. sor 13. karakter a kezdő cím
kerekites = sensors.getTempCByIndex(3)/1;//Ez elvileg huleség. Itt azonban a tizedes vesszo utani ertek eltunik
lcd.print(kerekites); // Itt irja be a 4-es szenzor adatát
lcd.print("C ");
lcd.print(char(223));



// LCD negyedik sor /1 **********************
lcd.setCursor(0,3); //3. sor 10. karakter a kezdő cím
lcd.print("Fust1");
lcd.setCursor(6,3);
kerekitesF = thermocouple.readCelsius()/1;//Ez elvileg huleség. Itt azonban a tizedes vesszo utani ertek eltunik

lcd.print(kerekitesF); // Itt irja be a 4-es szenzor adatát
lcd.print("C ");

 

// Start gomb megnyomását tárolom!
// Ventillátor indul

Nyomogomb_State=digitalRead(Start_gomb);

if ( Start_merker, LOW && FusthokiState, HIGH )
{digitalWrite(fustPin, LOW);
//lcd.setCursor(10,3); //3. sor 10. karakter a kezdő cím
//lcd.print("Keszenlet"); }

// Itt elmentem, hogy start parancs van.
if (Nyomogomb_State == HIGH) {
// turn LED on:
digitalWrite(Start_merker, HIGH);
digitalWrite(fustPin, HIGH);
}

//Kijelzem hogy start parancs van!

if (Start_merker, HIGH) {
lcd.setCursor(10,3); //3. sor 10. karakter a kezdő cím
lcd.print("Begyujtas");
}

/* Ha már meleg a füst = ég a tűz, akkor törlöm a start parancsot
* valamint 2 változóban is tárolom az állapotát.
*/
if (kerekitesF > 26) { //Ha ,,kerekitesF nagyobb mint X ( 26 C) akkor kapcsolja a következőket.
digitalWrite (Fusthovaltozobe_State, HIGH);
digitalWrite (FusthokiState, LOW);
digitalWrite(Start_merker, LOW);
}

/* Ha már nem meleg a füst = kialudt a tűz, akkor a két változóban is tárolom az állapotát.
*/
if (kerekitesF < 24) {
digitalWrite (Fusthovaltozobe_State, LOW);
digitalWrite (FusthokiState, HIGH);}

/* Elvileg itt szeretném a készenléti állapotot kijeleztetni.
*/
if ( Start_merker, LOW && FusthokiState, LOW) {
digitalWrite(fustPin, LOW);
lcd.setCursor(10,3); //3. sor 10. karakter a kezdő cím
lcd.print("Keszenlet"); }
}
else if (Fusthovaltozobe_State, HIGH){
lcd.setCursor(10,3); //3. sor 10. karakter a kezdő cím
lcd.print("Futes ");


}
}
/* Az LCD- kijelzett állpotok még nem okék.
* Lehetséges kijelzett értékek. 1. Készenlét
* 2. Begyujtás
* 3. Fűtés
* Ebből csak 2 állapotot tudok megjeleníteni.
*/

titusz99 Creative Commons License 2016.12.30 0 0 2650

2 vagy 3 vezetékkel kötötted?

Előzmény: Sploc (2649)
Sploc Creative Commons License 2016.12.30 0 0 2649

Sziasztok!

Én is szenvedek a DS18b20-al, számszerint 4darabot használok hőmérésre. Ami érdekes, hogy onewire-ként címezve akartam használni. Próbapadon minden simán ment, azonban mikor beépítettem a végleges helyére, egyik sem működött, sőt a címüket sem tudtam lekérdezni. Mind -127C-t mutatott.

Próba-próba, mérés-mérés, aztán arra jutottam, hogy a tápokat párhuzamosítottam mindegyiket egy-egy külön felhúzóellenállással láttam el. Így most működik a 4-ből 3, de van hogy a 4. is "elindul," és jót mér (nem -127-et). Illetve van, hogy még egy másik is "félrekacsingat" :-) 

Vicces, hogy pont azért cseréltem a K-hőelemeket le, mert pontatlanok voltak...

A kettő ami eddig jól mért, az stabil. Nem értem... cserélgettem a bemeneteket, programmal játszottam, de nem jó. 4-eres árnyékolt biztonságtechnikai kábelt használok a bekötésre, 4-5 méter hosszban. Vezetékek mindenhol forrasztva.

Az árnyékolást lekötöttem testre, nem segített, így visszavettem.

A korábbiakban már ismertetett rendszerbe tettem, ATX táp, Nema Stepper motor, illetve több hálózati vezeték, és 400V-os kábel is megy ugyanabban a kábelcsatornában.

 

Van valakinek egy jó ötlete, hogy merre keressem a bajt?

 

Prof Creative Commons License 2016.12.28 0 0 2648

Szia!

log: napló. Változókat, a függvények futásának kezdetét/végét írod egy fájlba, amit x ciklusonként (vagy időre stb.) elkezdesz elölről (a legrégebbi adatot törlöd, illetve felülírod). A naplót utólag meg tudod nézni (txt, sd kártyán például). Hátránya, hogy maga a naplózás is beleszól a program futásába (SD kártya esetén nem is kicsit).

watchdog: olyan szoftver és/vagy külső áramkör, amely a kontroller (vagy a fő áramkör) megakadásait iktatja ki oly módon, hogy ha a fő áramkörtől (mikrokontrollertől) nem kap jelet a beállított időintervallumon (mikroszekundumtól percekig tartó időszakon belül), akkor automatikusan végrehajt egy borzasztó egyszerű feladatot (ez rendszerint az, hogy aktív földre húzza a mikrokontroller RESET lábát).
[A logban ez úgy jelenik meg, hogy a sketch/program void.Setup() szakasza ír bele). Bár ez önmagában még nem jelenti azt, hogy a Watchdog küldte a resetet, csak annyi, hogy újraindult, de ez már komplexebb kérdés.]

Az, hogy "USB-ről megy"... Semmit nem jelent. Az, hogy az USB csatlakozó másik oldalán milyen minőségű táp van, illetve a mikrokontrollernek még mennyi mindent kell hajtania, mi terhelheti, honnan milyen zavarokat szedhet össze, ami akár az érzékelők, akár a mikrokontroller működését érdemben befolyásolja. A forrasztás, ha jó, akkor jó. :-D
PLC kicsit más világ, ott egy szinttel szoftverben és hardverben is feljebb vagy.

Előzmény: Gogol69 (2647)
Gogol69 Creative Commons License 2016.12.28 0 0 2647

Szia!

Köszönöm a most a 4db DS18B20 és 1db Max6675 beolvasása jó. (nano-n)

A további fejlesztés leáll.

Megvárom az Uno.

Amit írtál még nem értem, csak sejtem. :-(

 (,,Az ad-hoc fagyásokat folyamatos logolással és watchdoggal lehet elcsípni. ")

 

,,szoftveres eredetű-e a probléma."

Itt még van tanulni valóm bőven!

 

,,hardveresnél a táp" Usb-ről megy.

,,kontakt." Erre gondoltam már forrasztva vannak az érzékelők.

PLC-ben ezerszer könnyebb minden!

Előzmény: Prof (2646)
Prof Creative Commons License 2016.12.28 0 0 2646

Hali,

No még egyszer.

Az ad-hoc fagyásokat folyamatos logolással és watchdoggal lehet elcsípni. A watchdog reset előtti időszak adatainak összevetésével jó esetben ki lehet bogozni, hogy szoftveres vagy hardveres eredetű-e a probléma. Szoftveresnél tipikus a túlcsordulás (időzítés, változók), hardveresnél a táp, kontakt.

Üdv.

Prof

Előzmény: Gogol69 (2645)
Gogol69 Creative Commons License 2016.12.27 0 0 2645

Megvolt a teszt!

Megkerestem (oneWireSearch) segítségével 5 db sima DS18B20-t.

Felírtam a címét. 

A kábelesre is rákerestem (4 vízálló kialakítású felforrasztva.)

Visszatettem a tegnapi programot 3 pin helyett 8. pinnel.

Megy!

Átforrasztom a 3.-ra.

Ismét megy.

Nem tudom mi lehetett a baj.

5let van?

Előzmény: Gogol69 (2644)
Gogol69 Creative Commons License 2016.12.26 0 0 2644

Szia Prof!

Ebben az állapotban is működött!

2 db nano-val is!

A DS18B20-t felforrasztottam vezetékre.

Így is működött 1 éjszakát próbaként tápon hagytam.

Napközben több alkalommal fejlesztettem a dolgokat.

Időnként bizonytalankodott -127,00C-t mutatott ( A könyvtár szerint szerint, ha nem találja ezt írja ki.)

Most stabilan lefagyott!

A Max6675-t még megy.

 

Előzmény: Gogol69 (2628)
Prof Creative Commons License 2016.12.26 0 0 2643

Nekem ilyen esetekben (önállóan működik, két szoftvert egyesítve nem) az szokott lenni, hogy a változókat kavarom (globális) és/vagy két függvény is beletúr ugyanabba. A kódodat nem látom, így nem tudok róla nyilatkozni, hogy mi lehet a gond.

Aztán: táp. A táp fontos, a logikai vonalak zajvédelme úgyszintén. Részletesen a linken. De előbb szoftveresen nézelődnék (Serial debug).

Előzmény: Gogol69 (2642)
Gogol69 Creative Commons License 2016.12.26 0 0 2642

Köszönöm!

Sajnos most per pillanat más problémáim is vannak.

Már eljutottam odáig, hogy venti. start parancsot tárolja (merker) ezt egy x hőfoknál törli.

Egy másik kimenet akkor van ha ez van vagy melegebb x hőfoknál.

Mind ez már akár használható is lenne, igen ám de a DS18B20 kiolvasása közben megszűnt.

Holnap kipróbálom másik hőérzékelőkkel & nano-val.

 Talán a klónjaim ilyen vackok, vagy miért ilyen instabil a működés? 

Előzmény: Törölt nick (2641)
Törölt nick Creative Commons License 2016.12.26 0 0 2641
Előzmény: Törölt nick (2640)
Törölt nick Creative Commons License 2016.12.26 0 0 2640

int CS = 10; // CS pin on MAX6675 helyett:

 

int CS1 = 10; // CS1 pin on MAX6675

int CS2 = 14; // CS2 pin on MAX6675 pl.

CS= chipselect, a megadott digitális lábon kiválasztja.

Előzmény: Gogol69 (2639)
Gogol69 Creative Commons License 2016.12.26 0 0 2639

Hogyan lehet 2 db Max6675-t használni?

Előzmény: Gogol69 (2638)
Gogol69 Creative Commons License 2016.12.26 0 0 2638

A kijelzett értéknél, hogy sporoljak a karakterekkel ezt változtattam.

 

Ez volt.: ,,  

lcd.print(getTempCByIndex(1);

 

kerekites = sensors.getTempCByIndex(1)/1; // Ez elvileg huleség. Itt azonban a tizedes vesszo utani ertek eltunik
lcd.print(kerekites); //Itt irja be a 1-es szenzor adatát

 

Előtte 

Előzmény: Gogol69 (2628)
Gogol69 Creative Commons License 2016.12.26 0 0 2637

Köszönöm!

Előzmény: Törölt nick (2636)
Törölt nick Creative Commons License 2016.12.24 0 0 2636

Itt is, tőlem és a többiektől bátran.

RJ11 csatlakozókat + 4 eres telefon, vagy árnyékolt kábeleket használok a 3 és 4 vezetékes vonalakhoz, eddig max 12-15 m hosszban.

Előzmény: Gogol69 (2633)
Gogol69 Creative Commons License 2016.12.24 0 0 2635

Hogy ez hogy jött össze nem tudom!

MSzisztok!= Sziasztok!

Előzmény: Gogol69 (2634)
Gogol69 Creative Commons License 2016.12.24 0 0 2634

MSzisztok!

 4db DS18B20-tól szeretnék adatot lekérdezni, a vezeték hossza 4-5 m körüli lesz.

Milyen vezetéket célszerű használni?

Gogol69 Creative Commons License 2016.12.23 0 0 2633

Oké most már értem!

Teszek majd a helyére UNO-t vagy valami mást.

Nem hiszem hogy holnap ki kellene még cserélnem.

Még alig ismerem a tudását, rengeteget kell még tanulnom hozzá!

Ha elakadok kérdezhetlek?

Előzmény: Törölt nick (2632)
Törölt nick Creative Commons License 2016.12.23 0 0 2632

Ahogy nő a kód mérete, egyszer kevés lesz a NANO memória, ezt bővíti valamennyire ha UNO- ként működik.

Előzmény: Gogol69 (2631)
Gogol69 Creative Commons License 2016.12.23 0 0 2631

A teszt nálam is meg volt nano-n!

Teszi a dolgát.

 

Ezt nem értem mit változtattál?

Előzmény: Törölt nick (2629)
Törölt nick Creative Commons License 2016.12.23 0 0 2630

Most jó.

Előzmény: Törölt nick (2629)
Törölt nick Creative Commons License 2016.12.23 0 0 2629

Működik.

Amint látod, egy UNO-ra teszteltem a kódot.

Ez eredetileg NANO lap volt, csak a korábban már leírt módon a bootloder újratöltése után mint UNO használható, némi memória nyereséggel.

Előzmény: Gogol69 (2628)
Gogol69 Creative Commons License 2016.12.23 0 0 2628

Most itt tartok!

 

//I2C-vel illesztett 20x4 LCD-vel és ARDUINO NANO-val
//4DB DS18B20 HŐM. SZENZOR ÉRTÉKÉT ARDUNO NANO-VAL KIJELEZNI 40X4 LCD-VEL
/////////////////////////////////////////
//LCD-I2C IILESZTŐ PANEL - AVR BEKÖTÉSE:
//GND-FEKETE-0V Arduino Nano-hoz
//VCC-FEHER-5V Arduino Nano-hoz
//SDA-LILA- A4 INPUT Arduino Nano-hoz
//SCL-SZURKE- A5 INPUT Arduino Nano-hoz
///////////////////////////////////////
//A négy darab DS18B20 mindkét adatlába összekötve majd lehúzva 4,7kOhm-al a pozitiv taphoz
//adatlábak - D3 pin Arduino Nano-hoz
// sensor resolution 9(0,5 fok pontosság)
// sensor resolution 10(0,25 fok pontosság)
// sensor resolution 11(0,125 fok pontosság)
// sensor resolution 12(0,0625 fok pontosság)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 3 //AVR Nano 3. bemenetére kötve D3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress s1 = { 0x28, 0x8A, 0xF7, 0xE1, 0x06, 0x00, 0x00, 0xDB }; //1.szernzor címe másik progival kiolvasva //DS18B20 1-es
DeviceAddress s2 = { 0x28, 0xE1, 0x82, 0x2F, 0x07, 0x00, 0x00, 0xD8 }; //2.szernzor címe másik progival kiolvasva //DS18B20 2-es
DeviceAddress s3 = { 0x28, 0x9B, 0x38, 0x30, 0x07, 0x00, 0x00, 0xDF }; //3.szernzor címe másik progival kiolvasva //DS18B20 3-as
DeviceAddress s4 = { 0x28, 0xCF, 0xCE, 0x2F, 0x07, 0x00, 0x00, 0xB5 }; //4.szernzor címe másik progival kiolvasva //DS18B20 4-es

LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display


void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.begin(20, 4);
sensors.begin();
sensors.setResolution(s1, 9);
}

void loop()
{
// LCD első sor**********************
sensors.requestTemperatures();
delay(500); //fontos ha 11 vagy 12 a resolution
lcd.setCursor(0,0); //0. sor 0. karakter a kezdő cím
lcd.print("Puffer horetegek");
// LCD második sor_1_**********************
lcd.setCursor(0,1); //0. sor 0. karakter a kezdő cím
lcd.print("1");
lcd.print("/");
lcd.setCursor(3,1); //0. sor 3. karakter a kezdő cím
lcd.print(sensors.getTempCByIndex(0)); //Itt irja be a 1-es szenzor adatát
lcd.print("C");
lcd.print(char(223));
// LCD második sor_2_**********************
lcd.setCursor(10,1); //1. sor 10. karakter a kezdő cím
lcd.print("2");
lcd.print("/");
lcd.setCursor(13,1); //1. sor 13. karakter a kezdő cím
lcd.print(sensors.getTempCByIndex(1)); //Itt irja be a 2-es szenzor adatát
lcd.print("C");
lcd.print(char(223));
// LCD harmadik sor_1_**********************
lcd.setCursor(0,2); //2. sor 0. karakter a kezdő cím
lcd.print("3");
lcd.print("/");
lcd.setCursor(3,2); //2. sor 3. karakter a kezdő cím
lcd.print(sensors.getTempCByIndex(2)); //Itt irja be a 3-as szenzor adatát
lcd.print("C");
lcd.print(char(223));
// LCD harmadik sor_2_**********************
lcd.setCursor(10,2); //2. sor 10. karakter a kezdő cím
lcd.print("2");
lcd.print("/");
lcd.setCursor(13,2); //2. sor 13. karakter a kezdő cím
lcd.print(sensors.getTempCByIndex(3)); // Itt irja be a 1-es szenzor adatát
lcd.print("C");
lcd.print(char(223));
// LCD negyedik sor**********************
lcd.setCursor(0,3); //3. sor 10. karakter a kezdő cím
lcd.print("F");
lcd.print("u");
lcd.print("s");
lcd.print("t");
lcd.print("h");
lcd.print(char(239));//ö betű kiirasa
//Max6675 még nem megy! :-(

}

Előzmény: Törölt nick (2625)
spiler0078 Creative Commons License 2016.12.23 0 0 2627

Szia!

Hát valami nem kerek vele az tuti.... Lehet, hogy a nyákon van valami bibi a com portok kivezetésével... Passz, de a lényeg, hogy már müxik az új alappanelemmel.

 

üdv

Spiler

Előzmény: Sploc (2624)
Gogol69 Creative Commons License 2016.12.22 0 0 2626

Szia!

Köszönöm ezt félre teszem amit küldtél.

 Nagyon tetszik amit küldtél!

 Sajnos egyenlőre csak sejtéseim vannak róla hogy mi miért van rajta. :-)

Bár gondolom minden amit szeretnék készíteni már benne van. Sőt olyan is amire nem is gondoltam még.

Most perpillanat megelégednék azzal is ha a 40*4 Lcd & 4db DS18B20-m dolgozna.

Akkor a pufimat végre rendesen le tudnám szigetelni. 

Sajnos a mérő csonkokhoz nem nagyon férek hozzá utána.

Előzmény: Törölt nick (2625)
Törölt nick Creative Commons License 2016.12.22 0 0 2625

Tanulmányozásra:

 

/*Arduino Uno, ATmega328
YourDuino.com Example: Multiple DS18B20 Temperature Sensors
Displayed on 4x20 character LCD display

DS18B20 Pinout (Left to Right, pins down, flat side toward you)
- fekete = Ground
- sárga = Signal (Pin 2): (with 3.3K to 4.7K resistor to +5 or 3.3 )
- zöld = +5 or +3.3 V */

#include <SPI.h>
#include <SD.h>
#include <avr/wdt.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS1624.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MAX6675.h>
DS1624 temperature1(0x48);
DS1624 temperature2(0x4E);
DS1624 temperature3(0x4D);
DS1624 temperature4(0x4F);
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
/*-----( Declare Constants and Pin Numbers )-----*/
// Data wire is plugged into port 2 on the Arduino (can be changed)
#define ONE_WIRE_BUS 2 // NOTE: No ";" on #define
#define SZV1START 3 // relay1
#define SZV2START 4 // relay2
#define PUFFER 5 // relay3
#define LAKAS1 6 // relay4
#define BYPASS 7 // relay5
#define LAKAS2 8 // relay6
/*-----( Declare objects )-----*/
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass address of our oneWire instance to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Start the LCD display library
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
int LED1 = 13; // Status LED Pin
int CS = 10; // CS pin on MAX6675
int SO = 11; // SO pin of MAX6675
int SCLK = 9; // SCLK pin of MAX6675
int units = 1; // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F)
float fusthofok = 0.0; // Temperature output variable
float lakaskW = 0.0;
float kazankW = 0.0;
// Initialize the MAX6675 Library for our chip
MAX6675 temp(CS,SO,SCLK,units);


// Setup Serial output and LED Pin
// MAX6675 Library already sets pin modes for MAX6675 chip!
/*-----( Declare Variables )-----*/
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#Read%20individual

// WP 1
DeviceAddress pufferfent = { 0x28, 0xAC, 0xFA, 0x26, 0x06, 0x00, 0x00, 0x8C }; // "T1"
DeviceAddress puffer1_3 = { 0x28, 0x61, 0xBB, 0x26, 0x06, 0x00, 0x00, 0x7D }; // "T2"
DeviceAddress puffer2_3 = { 0x28, 0x99, 0x10, 0x26, 0x06, 0x00, 0x00, 0xED }; // "T3"
DeviceAddress pufferlent = { 0x28, 0x15, 0x1F, 0x28, 0x06, 0x00, 0x00, 0x00 }; // "T4"
float temppufferfent = 0.0;
float temppuffer1_3 = 0.0;
float temppuffer2_3 = 0.0;
float temppufferlent = 0.0;

void setup() /****** SETUP: RUNS ONCE ******/
{

wdt_disable();
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(9600);
// set the initial time here:
//DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(30,12,11,13,13,04,16);

//------- Initialize the Temperature measurement library--------------
sensors.begin();
// set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
sensors.setResolution(pufferfent, 10); //T1
sensors.setResolution(puffer1_3, 10); //T2
sensors.setResolution(puffer2_3, 10); //T3
sensors.setResolution(pufferlent, 10); //T4
temperature1.start();
temperature2.start();
temperature3.start();
temperature4.start();
pinMode(LED1, OUTPUT);
pinMode(SZV1START, OUTPUT);
pinMode(LAKAS1, OUTPUT);
pinMode(PUFFER, OUTPUT);
pinMode(SZV2START,OUTPUT);
pinMode(LAKAS2,OUTPUT);
pinMode(BYPASS,OUTPUT);
digitalWrite(SZV1START, HIGH); // szv1 áll
digitalWrite(LAKAS1, HIGH);
digitalWrite(PUFFER, HIGH); // pufferre állítja az irányváltó1-et
digitalWrite(SZV2START, HIGH); // szv2 áll
digitalWrite(LAKAS2, HIGH);
digitalWrite(BYPASS, HIGH); // bypassra állítja irányváltó2-őt

pinMode(A0, OUTPUT);
SD.begin(A0);
if (!SD.begin(A0)) {

Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

if (SD.exists("datalog.csv")) {
Serial.println("datalog.csv exists.");
}
else {
Serial.println("datalog.csv doesn't exist.");
}
wdt_enable(WDTO_8S);
}//--(end setup )---
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
/*void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
// send it to the serial monitor
Serial.print(hour, DEC);
// convert the byte variable to a decimal number when displayed
Serial.print(":");
if (minute<10)
{
Serial.print("0");
}
Serial.print(minute, DEC);
Serial.print(":");
if (second<10)
{
Serial.print("0");
}
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.print(" Day of week: ");
switch(dayOfWeek){
case 1:
Serial.println("Sunday");
break;
case 2:
Serial.println("Monday");
break;
case 3:
Serial.println("Tuesday");
break;
case 4:
Serial.println("Wednesday");
break;
case 5:
Serial.println("Thursday");
break;
case 6:
Serial.println("Friday");
break;
case 7:
Serial.println("Saturday");
break;
}
}*/

void loop() /****** LOOP: RUNS CONSTANTLY ******/

{

SD.begin(A0);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
digitalWrite(LED1, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(LED1, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second

// Lakástermosztát fűtésre kapcsol= A3=5V
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
delay(100);
sensors.requestTemperatures(); // Send the command to get temperatures
// Kiolvassuk Ds18B20 szenzorokat.
temppufferfent = sensors.getTempC(pufferfent);
temppuffer1_3 = sensors.getTempC(puffer1_3);
temppuffer2_3 = sensors.getTempC(puffer2_3);
temppufferlent = sensors.getTempC(pufferlent);
float T1 = sensors.getTempC(pufferfent);
float T2 = sensors.getTempC(puffer1_3);
float T3 = sensors.getTempC(puffer2_3);
float T4 = sensors.getTempC(pufferlent);
float kW1 = ((T1+T2+T2+T3+T3+T4)/6)-37 ;
float kW = kW1*1.2771 ;
float szazalek = kW/64*100;
delay(700);

// Read the temp from the MAX6675
fusthofok = temp.read_temp();

// Read the temp from the DS1624
float T5 = temperature1.getTemp();
float T6 = temperature2.getTemp();
float T7 = temperature3.getTemp();
float T8 = temperature4.getTemp();
float lakaskW1 = (T5-T6)*0.001161*12.5*60;
float kazankW1 = (T7-T8)*0.001161*22*60;

if (LAKASFUTES > 4)
{
lakaskW = lakaskW1;
}
else
{
lakaskW = 0;
}
if(T7 > 50)
{
kazankW = kazankW1;
}
else
{
kazankW = 0;
}
delay(500);

Serial.println(LAKASFUTES);
Serial.println(fusthofok);
Serial.println(T1);
Serial.println(T2);
Serial.println(T3);
Serial.println(T4);
Serial.println(T5);
Serial.println(T6);
Serial.println(T7);
Serial.println(T8);
Serial.println(kW);
Serial.println(szazalek);

String dataString = "";
dataString += String(dayOfMonth, DEC);
dataString += ";";
dataString += String(hour, DEC);
dataString += ";";
dataString += String(minute, DEC);
dataString += ";";
dataString += String(second, DEC);
dataString += ";";
dataString += String(LAKASFUTES);
dataString += ";";
dataString += String(fusthofok);
dataString += ";";
dataString += String(T1);
dataString += ";";
dataString += String(T2);
dataString += ";";
dataString += String(T3);
dataString += ";";
dataString += String(T4);
dataString += ";";
dataString += String(T5);
dataString += ";";
dataString += String(T6);
dataString += ";";
dataString += String(T7);
dataString += ";";
dataString += String(T8);
dataString += ";";
dataString += String(kazankW);
dataString += ";";
dataString += String(lakaskW);
dataString += ";";
dataString += String(kW);
dataString += ";";
dataString += String(szazalek);
dataString += ";";
dataString.replace('.',',');
File dataFile = SD.open("datalog.csv", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
// if the file isn't open, pop up an error:
else
{
//Serial.println("error opening datalog.txt");
}
delay (500);

if(T7 > 58 && fusthofok > 130)
{

digitalWrite(LAKAS1,LOW );
digitalWrite(SZV1START,HIGH);
digitalWrite(PUFFER, HIGH);
}
else
{
if(T7 > 50)
{
digitalWrite(PUFFER, LOW);
digitalWrite(LAKAS1, HIGH);
digitalWrite(SZV1START, HIGH);
}
else
{
digitalWrite(PUFFER, LOW);
digitalWrite(LAKAS1, HIGH);
digitalWrite(SZV1START, LOW);
}
}

if ( LAKASFUTES > 4 && szazalek >1)
{
digitalWrite(BYPASS, HIGH);
digitalWrite(LAKAS2, LOW); // 6. RELÉ 8d
digitalWrite(SZV2START, HIGH); // 2. RELÉ 4d
}
else
{
digitalWrite(LAKAS2, HIGH);
digitalWrite(BYPASS, LOW); // 5. RELÉ 7d
digitalWrite(SZV2START, LOW); // 2. RELÉ 4d
}
// clear the screen
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(5,0);
lcd.print("20");
lcd.setCursor(7,0);
lcd.print(year, DEC);
lcd.setCursor(9,0);
lcd.print(".");
lcd.setCursor(10,0);
lcd.print(month, DEC);
lcd.setCursor(12,0);
lcd.print(".");
lcd.setCursor(13,0);
lcd.print(dayOfMonth, DEC);
lcd.setCursor(15,0);
lcd.print(".");
lcd.setCursor(5,1);
lcd.print(hour, DEC);
lcd.setCursor(7,1);
lcd.print(":");
lcd.setCursor(8,1);
lcd.print(minute, DEC);
lcd.setCursor(10,1);
lcd.print(":");
lcd.setCursor(11,1);
lcd.print(second,DEC);
lcd.setCursor(1,3);
lcd.print(dayOfWeek);
lcd.setCursor(2,3);
lcd.print(".");
lcd.setCursor(5,3);
lcd.print("nap a heten");
delay(4000);
lcd.clear();
lcd.home(); lcd.backlight();
lcd.setCursor(8,0);
lcd.print("PUFFER");
lcd.setCursor(0,1);
lcd.print("T1=");
lcd.setCursor(4,1);
lcd.print(T1);
lcd.setCursor(11,1);
lcd.print("T2=");
lcd.setCursor(14,1);
lcd.print(T2);
lcd.setCursor(0,2);
lcd.print("T3=");
lcd.setCursor(4,2);
lcd.print(T3);
lcd.setCursor(11,2);
lcd.print("T4=");
lcd.setCursor(14,2);
lcd.print(T4);
lcd.setCursor(0,3);
lcd.print("kW=");
lcd.setCursor(4,3);
lcd.print(kW);
lcd.setCursor(11,3);
lcd.print("%=");
lcd.setCursor(14,3);
lcd.print(szazalek);
wdt_reset();
delay(4000);
// clear the screen
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(4,0);
lcd.print("LAKAS:");
lcd.setCursor(11,0);
lcd.print(lakaskW);
lcd.setCursor(0,1);
lcd.print("T5=");
lcd.setCursor(4,1);
lcd.print(T5);
lcd.setCursor(11,1);
lcd.print("T6=");
lcd.setCursor(14,1);
lcd.print(T6);
lcd.setCursor(4,2);
lcd.print("KAZAN:");
lcd.setCursor(11,2);
lcd.print(kazankW);
lcd.setCursor(0,3);
lcd.print("T7=");
lcd.setCursor(4,3);
lcd.print(T7);
lcd.setCursor(11,3);
lcd.print("T8=");
lcd.setCursor(14,3);
lcd.print(T8);
delay(4000);
// clear the screen
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(8,0);
lcd.print("FUSTHOFOK");
lcd.setCursor(0,1);
lcd.print("fusthofok=");
lcd.setCursor(11,1);
lcd.print(fusthofok);
wdt_reset();
} // End

Előzmény: Gogol69 (2621)
Sploc Creative Commons License 2016.12.22 0 0 2624

Szia! Örülök neki!

Akkor hibás volt a másik lapka? Létezik olyan, hogy csak egy adott funkciója "megy tönkre"? Mivel a másik soros porton amin az USB van oda-vissza kommunikál.

Előzmény: spiler0078 (2622)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!