Keresés

Részletes keresés

Prof Creative Commons License 2017.01.04 0 0 2664

Hehe... :-) Vicces, de egyébként meg jogos.

Előzmény: halaloszto (2663)
halaloszto Creative Commons License 2017.01.04 0 0 2663

https://forum.arduino.cc/index.php?topic=397240.0

 

itt azt írják, hogy ezek tranyók.

Előzmény: enginer (2662)
enginer Creative Commons License 2017.01.04 0 0 2662

Az fasza! Akkor én is beszoptam 10db-ot.

Előzmény: Sploc (2661)
Sploc Creative Commons License 2017.01.04 0 0 2661

Szia!

Semmit... kipróbáltam 8at a 10ből, de egyik sem működik a "hagyományos példákkal".

Visszakértem az árát az eladótól, és vettem itthon DS18b20+ -ost.

Tényleg mi a különbség a DS18b20+os és a sima DS18b20 között?

Előzmény: enginer (2660)
enginer Creative Commons License 2017.01.04 0 0 2660

Én is belefutottam ebbe a kintről rendelt  DALLAS 1541C4 +233AA szenzorba. Google nem talál róla semmit.

Te találtál valami megoldást?

 

Előzmény: Sploc (2540)
Sploc Creative Commons License 2017.01.01 0 0 2659

Köszi! 

Előzmény: Gogol69 (2653)
Sploc Creative Commons License 2017.01.01 0 0 2658

A véletlen  félremérésekre fel is vagyok készülve, 5elemu tömbökbe olvasok,  legkisebb,  legnagyobb elemek eldobasaval és a maradék átlagolásával.  De ha egy mérőeszköz folyamatosan  - 127c t ad azzal nem tudok mit kezdeni. Érdekes, hogy mikor USB-n volt az arduino akkor jót mért a hőmérő is és meg is találta a címét is,  de mikor külső tápot kapott megállt. Pedig a másik 3 is azon a tápon van.  Lehet hogy az előző leírásom nem volt egyértelmű,  de külön-külön használom a hőmérőket,  mind a 4 másik digitális lábon van.  One-wire ként egyik sem működött. Ki fogom cserélni azt az egy hőmérőt hátha csak annak van valami kínja. 

 

Köszi! 

B. U. É. K. 

Előzmény: titusz99 (2655)
Sploc Creative Commons License 2017.01.01 0 0 2657

Köszi.  Ez jutott nekem is eszembe mikorra feltettem a kérdést... nem is értem miért nem így csináltam meg eddig,  hiszen más változót is így olvasok onnan. Szerencsére csak egy oldalas a kijelzés ez így nem okoz problémát. 

Előzmény: nagyharcos (2656)
nagyharcos Creative Commons License 2017.01.01 0 0 2656

Szia!

 

A Nextion-os problémárba én is belefutottam. A dualstatebutton , vagy sima button és új global változó a megoldás. Nyomáskor megváltozik a dsbutton értéke ( vagy nyomáskor megváltoztatod az új változó érték (mondjuk va_valami.val=1). Nextion tárolja a dsbutton vagy a va_valami értékét addig, amíg nem írod felül. Mikor már nincs szükség rá, visszaíratod a változó értékét. (Mondjuk a programban a lekérdezés közvetlen visszaírod alapra).

 

nextion 0.7.0 vagy 0.9.0 könyvtárral így megy pld:

dualstate button-al:

 

uint32_t uzemmod;  

NexDSButton bt_uzemmod = NexDSButton(0, 1, "bt_uzemmod");

 

void setup(void)
{

 nexInit();

}

void loop(void)
{

bt_uzemmod.getValue(&uzemmod);  //kiolvasod az értéket

iif (uzemmod == 1) { 

 .....

}

bt_uzemmod.setValue(0);  //visszaírod az értéket alapra

}

 

Szépséghiba, hogy a kiolvasáshoz, visszaíráshoz az adott lapon kell lenned a nextion-on. (bár elméletben a global változókkal, ha minden lapon letárolod, akkor mennie kell).

Előzmény: Sploc (2652)
titusz99 Creative Commons License 2017.01.01 0 0 2655

Szia!

 

Mintaként 10 db dallast kötöttem egy nano-ra. Eredeti 3m-es árnyékolatlan kábelével.

A nano-n 8 db onewire buszt hoztam létre. Így 6-ra 1-1, 2-re 2-2 dallas, került.

Kb. 1000-ből 1 esetben olvasott félre.

Én másodpercenként 1* olvasom ki őket, majd indítom a mérést. Amíg mérnek csinálhatok mást.

1 dallas kiolvasása kb 13 ms ideig tart.

Árnyékolást egyik végén, célszerűleg arduino oldalon.

A felhúzó ellenállás csökkentésével némileg csökkenthető a zavar hatása.

Mindenesetre a programban fel kell készülni a zavarokra.

 

Soros portnak van buffere. Annak csökkentésével szoktam több ram-ot adni a programnak.

Alapértelmezetten 64 byte.

 

Nextion-om egyenlőre nincs, de tudomásom szerint:

Ha megyomod a gombot, akkor üzenetet küld arduinonak. Amit feldolgoz arduino.

Esetedben relé meghúz vagy elenged. Ha nem így megy akkor valami logikai bukfenc vagy túlcsordulás áll fenn.

 

B.U.É.K!

Előzmény: Sploc (2652)
Törölt nick Creative Commons License 2016.12.31 0 0 2654

Ez a minden ds18b20 adat lábra 4k7 ellenállás nálam nincs, csak egy az arduino-n.

Az árnyékolás nincs GND-ra kötve, szabad.

Előzmény: Sploc (2652)
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)

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