Keresés

Részletes keresés

Prof Creative Commons License 2016.09.05 0 0 2112

Ez on-line, de működik.

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

Hali!

 

 Az UnoArduSim progit használja vki szimulációra?

Vagy a progi használhatatlan vagy én vagyok tök hülye. :)

Törölt nick Creative Commons License 2016.09.05 0 0 2110

Előzmény: Prof (2109)
Prof Creative Commons License 2016.09.04 0 0 2109

Segédreszelő,

Volt itt egy kérdésed még júliusban 600 méterről meg erős elektroszmogról.

Itt van rá egy lehetséges válasz:

https://developer.mbed.org/platforms/MTS-mDot-F411/

Előzmény: Törölt nick (2020)
Prof Creative Commons License 2016.09.03 0 0 2108

Köszi, jogos.

Előzmény: Vargham (2107)
Vargham Creative Commons License 2016.09.03 0 0 2107

A Processing Java nyelvet használ, nem C-t.

Előzmény: Prof (2104)
Prof Creative Commons License 2016.09.02 0 0 2106

Szia,

 

Meg kellene nézni, hogy miért szalad bele a végtelen ciklusba. Valahogy írj ki egy logot, hogy el tudd csípni a hibajelenséget (én azt sem tartom kizártnak, hogy nem végtelen ciklusba szalad -- a kód alapján nem tud, bár ehhez alant lesz egy megjegyzésem --, hanem a feszültség instabilitása egyszerűen kiüti a mikrokontrollert (megáll, mint a bot).

Az elektronikai tervezés oldalához annyit kell hozzátenni, hogy vagy nagyon védeni kell a mikrokontrollert (stabilizátor IC-k, kondenzátorok a táphoz), vagy teljesen külön tápról kell járatni a nagyobb fogyasztókat, és a mikrokontrollerről teljesen függetleníteni kell minden "meleg" részt (meleg itt = tápfeszültség).

A jelek átadásának ilyetén való módját galvanikus leválasztásnak hívják, és egyik (nem egyetlen) eszköze az optocsatoló. Bináris jelátvivő, egyik oldalán az adóval (arduino láb), másik oldalán a vevővel (relé tápellátás). A két tápoldal teljesen külön van, visszafelé nem jöhet semmi (nagyon leegyszerűsítve egy LED és egy fényérzékelő ellenállás), áram nem is folyik. A föld közösítés sem feltétlen muszáj, de ha a föld valami okból kifolyólag nem azonos potenciálon van, abból lehetnek galibák. Több megoldás van erre, ezt lásd alant.

 

A kódra visszatérve:

if (cefrezo >= cefrezo_cel_be){
  digitalWrite(rele_c, LOW);
}
  else{
  }
if (cefrezo <= cefrezo_cel_ki){
  digitalWrite(rele_c, HIGH);
}
  else{
  }

Mondom sorban a javaslatokat:

1. else teljesen fölösleges, redundáns (le sem fordítja a compiler).

2. elegánsabb megoldás külön venni a vizsgálatot és a kimenet állítását. Ehhez kell egy boolean változó, mondjuk cefrezoReleAllapot néven, true szinten behúzva, false szinten kiengedve.

 

bool cefrezoReleAllapot = false;             // ez a Setup-ba vagy elé, deklarálunk és hozzá is rendelünk egyből

 

// vizsgáljuk a célértéket ÉS azt is, hogy a relé be van-e húzva, csak akkor változtatunk, ha nincs. Az && jelentése logikai ÉS, vagyis az if csak akkor teljesül, ha mindkét feltétel igaz.

if (cefrezo >= cefrezo_cel_be && cefrezoReleAllapot == false)

{

cefrezoReleAllapot == true;

}

 

digitalWrite(rele_c. cefrezoReleAllapot);   // Itt csak beállítjuk a relé állapotát aszerint, ahogy előtte módosítottuk (ha módosítottuk egyáltalán).

 

 

 

A tápot multiméterrel tudod ellenőrizni. Rákötöd a két relét és párhuzamosan a multimétert (ha van két multimétered, akkor az egyiket sorosan árammérésre). Mérsz egy feszültséget és bízol benne, hogy 4,9 és 5,1 között lesz. Behúzod az egyik relét. Ha röccen vagy változik a feszültség, akkor szar a táp. Aztán behúzod a másik relét is, ha röccen vagy változik, akkor vegyél új tápot, nem lehet segíteni rajta. A röccenésen mondjuk annyit lehet, hogy egy tetemes méretű kondit beleraksz a lehető legközelebb a tápfelvételi ponthoz (reléhez). 0,2 A áramfelvételt is láttam már kicsiolcsókínai relétől, ami egy Arduino táp IC-hez képest igen tetemes és USB-n sem épp elhanyagolható.

 

Nézzük tovább.

Van a hőelem és van a hőelem csatoló. A hőelem csatolóra írhatott Lady Ada 3,3 V-ot, de specifikáció szerint 3–5,5 V-ig működőképes. Az igaz (nagyon igaz), hogy két eltérő feszültségre két eltérő hőmérsékletet fog konvertálni, ezért fontos, hogy stabil tápegységet kapjon (amelyik minden bekapcsolásnál, minden körülmények között stabilan mondjuk 5 V-ot ad neki). Az Arduino kimenete kevésbé tud ilyet produkálni. Illetve az egyes lábak ugye high-on rendszerint 5V +/-0,5V kb., kivéve a Due-t, ami 3,3V.

 

Nézzük az ideális bekötést egyszerűsítve, szövegesen.

1. Az egyik tápról menjen az Arduino és a két hőelem csatoló, de lehetőleg úgy, hogy a hőelem csatolók tápellátása közvetlenül vagy az Arduino 3.3 V-os lábáról vagy közvetlenül a tápról menjenek (ha küldesz linket arról, hogy pontosan milyen eszközeid vannak, akkor lehet konkrét ötletet adni).

2. A reléken lévő bemeneten remélem van optocsatoló (elvileg kell lennie). Normális körülmények között ez úgy van megoldva, hogy a relé két oldala teljesen el van választva (van egy erősáramú relés oldal és egy másik, ami a mikrokontroller felé néz, ezeken nincs közösítve a földelés vagy egy jumperrel széthúzható). A +5V-ra menjen a másik táp +5V-ja, a GND-re a táp GND-je, a bemenetre az Arduino láb kimenete.

3. Az Arduino GND-t és a relé GND-t össze kell kötni (ellenkező esetben az optocsatoló "adó" oldala nem fog működni).

 

A kalibrálásnak utána kell olvasnom, de a max6675-ben eleve van valami (a hidegpontot kompenzálja hozzá, de a kapott adat már feldolgozott/korrigált).

 

 

 

Előzmény: Sploc (2102)
Prof Creative Commons License 2016.09.02 0 0 2105

Hali!

Igen, az fontos valóban, hogy ahány kártya (szinte), annyi különböző feszültség a HIGH.

Minden hőelem azonos elven működik: két félvezető hőmérséklettől függően adott feszültséget produkál, ezt lehet nagyon pontosan mérni. Nem feltétlen kell hozzá átalakító (MAX6675 például), de az analóg jelfeldolgozásnak vannak hátrányai. A K a legszélesebb körben támogatott, legsűrűbben használt típus, hátránya, hogy a vízhez kapcsolódó feladatokra már nem kellően nagy a felbontása/pontossága.

Előzmény: mekkGyver (2100)
Prof Creative Commons License 2016.09.02 0 0 2104

Processing (az Arduino IDE alapja). Ugyanúgy C, de inkább a PC-s oldalra kihegyezve. A serial adatokat simán tudja fogadni és onnan már azt csinálsz vele, amit akarsz, grafikus kijelzést is akár. C alapú ez is. Adatmegjelenítésre, feldolgzásra, mentésre is van rengeteg példa rá.

http://playground.arduino.cc/Interfacing/Processing

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

Van! Látom az értékeket az Arduino serial monitorán :-)

Már csak valami az Arduino IDE-től független szoftver kellene a megjelenítéshez. Egyelőre a Pythont tanulmányozom, némi sikerrel.

Előzmény: Prof (2098)
Sploc Creative Commons License 2016.09.02 0 0 2102

Huhúú

 

Sima USB-s telefontöltőt, 1,5Ah -at már próbáltam USBn keresztül megtáplálni, de ugyanazt a jelenséget produkálta amit leírtam. Teljensen jól működött míg csak az egyik hűtővel kellett bajlódnia, de mikor párhuzamosan melegedett mind a kettő, akkor elkezdett másodpercenként ki-be kapcsolni. Rá tudtam nézni gépről a mért adatokra, és bizony mikor valamelyik relét húzni kellett, akkor a következő mérés már 30C-vel mellé ment, és az már túl volt a hiszterézisen, így elengedte, majd megint húzta, megint el.... egyenlőre rendes USB-ről "stabilan" működik, azon kívül, hogy bele-bele szalad egy végtelen ciklusba.

Van mellette egy 5V-os 2A-s tápom, amit perpill nem használok, de oda lett hozzá tervezve, mondjuk nem tudom menniyre stabil, szkópom sajnos nincs, de multival "jónak néz ki".

Ha legközelebb ott leszek akkor megpróbálom külön-külön meghajtani, mert jelenleg valóban a board 5V-járól kapja a relé is a tápot. Ha kér külön tápot tennék a relének és a boardnak akkor csak a "gndket összekötöm"( lehet hülyeség de nem lesz ettől +- os a táp) ?

A hőelemmel viszont egyenlőre nem tudok mit kezdeni ( a pufferkondin kívül) mivel annak sajnos 3,3V-ra van szüksége, ezért külön tápot nem akartam hozzá, így szeretném ha maradna a boardról.

A kalibrálásra én is gondoltam, de ezt programban hogy kezelhetem le? Csak beleírom, hogy ha mér X-et de az amúgy 5-el kevesebb akkor Y=X+5 és Y-ra kapcsoljon?

 

A kijelző tervben van, de ettől még van egy nagyobb projekt ami több figyelmet igényel, ( szerintem arról is be fogok számolni :-) ) A Serial.print csak azért maradt, hogy rá tudjak nézni gépről.

 

@mekkGyver a hűtőtornyokba direkt a K elemeknek lett fészek kialakítva (10cm-es belső felületen mérnek), illetve az ithoni fűtésemet is ők ellenőrzik évek óta, így megbízom bennük, ezért ragaszkodom is hozzá.

 

@titusz99 légy szíves kifejtenéd bővebben ezt az optóval való leválasztást?

 

Köszi mindenkinek!!

 

u.i.: még nem sikerült kipróbálnom a wdt-t talán jövőhéten

Előzmény: Prof (2097)
titusz99 Creative Commons License 2016.09.02 0 0 2101

Kiegészítésként:

A MAX6675 rendkívül kényes a tápellátásra.

Ezért érdemes lehet optóval leválasztani az arduino-ról és külön táppal ellátni, mert különben csúnyán mellé tud mérni. A kondenzátorok a tápon és a hőelemen semmit sem segítenek.

Előzmény: Prof (2097)
mekkGyver Creative Commons License 2016.09.02 0 0 2100

A lényeget Prof elmondta, és azt én is kihangsúlyoznám, hogy semmit nem SZABAD a vezérlő kimenetéről táplálni. Nem csak azért, mert tönkremegy, hanem azért is, mert nem mindig stabil, hiszen a szabvány szerint nem kell fix 5V-nak lennie a H értékhez, és a L érték is lehet néhány mV. 

Nem ismerem a K-hőelem lényegét, de azt tudom, hogy többszáz fokot tud mérni, de gondolom ez esetben, ha vízhűtésről van szó, akkor 100C lehet a teteje, 0 az alja, és ezek is csak extrém esetben. Ilyen tartományban tud mérni a DS18B20 is, ami nagyon olcsó, és 2 ér elég neki, mivel onewire kommunikációt használ, és atomstabil, nem kell kalibrálni. Persze ezt mondom úgy, hogy nem ismerem a fizikai hátteret és hogy hogyan tudnád rögzíteni a méréshez.

Előzmény: Sploc (2094)
szatti Creative Commons License 2016.09.01 0 0 2099

Nanoval csak bootloader csere után megy a watchdog. Legalábbis 5 db ami nekem van alapból nem tudta. Megán még nem próbáltam. Sikerült bekapcsolni? Jövő héten kell építenem egy vezérlést de wdt nélkül nem hagynám !

Előzmény: mekkGyver (2091)
Prof Creative Commons License 2016.09.01 0 0 2098

Segédreszelő,

siker?

Előzmény: Törölt nick (2090)
Prof Creative Commons License 2016.09.01 0 0 2097

Szia!

Megoldás a tápra:

-- veszel egy bármilyen USB-s töltőt, rádugsz egy USB kábelt, bedugod a kártyába, ezzel ez a rész meg van oldva,

-- veszel egy megfelelő teljesítményű (2A+) stabilizált bedugós tápot, rádugod a relére, a relé vezérélének földelését (optokapun) közösíted az arduino földelésével.

És ugye arduino táp lábra direktben nem kötünk relét, mert nem vagyunk füstjelzéssel kommunikáló indiánok.

 

Hőelem meghajtó IC tápját ne már GPIO-ról adjuk! Oké, elbírja, de akkor sem elgáns.

Hőelem datasheet a VCC-re (tápra): Positive Supply. Bypass with a 0.1μFcapacitor to GND. Ez a stabilitásán segíthet.

 

Sokan nem tudják, hogy a K-elemet kalibrálni kell (elég sűrűn), emiatt simán előfordulhat, hogy jelentősen félremér. Relatív hőmérsékletmérésnél ez irreleváns, de ha pontos abszolút hőmérséklet kell, akkor figyelni kell rá. Bár ha 25-30 fok a hiszterézis,

 

Előbb vizsgáld me ezeket a fentieket.

Serial.print helyett én inkább rátennék egy LCD-t vagy ledekből tákolnék egy kijelzőt. Elegánsabb, mint a géppel szenvedni állandóan.

 

Watchdog csak ha a fentiek nem hoznak stabil megoldást. (Nem kezdek bunkert építeni emiatt. :-D )

 

Üdv,

 

Prof

Előzmény: Sploc (2094)
Prof Creative Commons License 2016.09.01 0 0 2096

Ez pont olyan, mint a nem olyan régi Huawei reklám, hogy "egészen olyan képeket csinálhat vele, mint egy dSLR-rel", mellette meg az eredeti dSRL kép... Ezzel csak az a gond, hogy a "majdnem olyan" az soha nem olyan... :-D

Előzmény: mekkGyver (2093)
Sploc Creative Commons License 2016.09.01 0 0 2095

Köszi! Hamarosan kipróbálom, tényleg hasznos a link :D

Előzmény: mekkGyver (2091)
Sploc Creative Commons License 2016.09.01 0 0 2094

Szia!

 

Köszi, a kódot alább bemásolom, nem atomreaktor hűtőt vezérel, hanem egy pálinkafőzdében a hűtőtorony kézzelvezérlését hivatott kiváltani szakaszosan. Semmi probléma nem történik, ha nem hűt időben, vagy ha befagy is észreveszem, de most egy ideje a táppal kínlódok, mivel nagyon érzékeny a kapott tápegységre, mikor a relé behúz az 10mA-el megcsapolja a tápot és rögtön félremér a K-elem amitől ki-be húzgál minden másodpercben. Ez csak külsőtápról csinálja, ha gépre kötöm tökéletesen működik, mivel az USB-t meg tudja húzni... jelenleg USB-ről jár, hosszú 7,5m-es kábelen de így meg a feszültségesés miatt ~10C vel alámér... :D A táppal szívok egy ideje, nincs valami "tökéletes" megoldás? Egy 500W-os AXT-t nem akarok járatni miatta... :-D

 

#include <max6675.h>

float cefrezo;
int rele_c = 28;
float cefrezo_cel_be;
float cefrezo_cel_ki;

float finomito;
int rele_f = 29;
float finomito_cel_be;
float finomito_cel_ki;

int c_vcc = 39;
int c_gnd = 41;
int c_so = 37;
int c_cs = 35;
int c_sck = 33;        //Max6675 K-hőelemhez szükséges lábkiosztás

int f_vcc = 38;
int f_gnd = 40;
int f_so = 36;
int f_cs = 34;
int f_sck = 32;       //Max6675 K-hőelemhez szükséges lábkiosztás

MAX6675 thermocouple(c_sck, c_cs, c_so);
MAX6675 thermocouple1(f_sck, f_cs, f_so);

void setup() {
  Serial.begin(9600);

pinMode(rele_c, OUTPUT);
pinMode(rele_f, OUTPUT);

pinMode(f_vcc, OUTPUT);
pinMode(f_gnd, OUTPUT);
pinMode(c_vcc, OUTPUT);
pinMode(c_gnd, OUTPUT);

digitalWrite(rele_c, HIGH);
digitalWrite(rele_f, HIGH);

digitalWrite(f_vcc, HIGH);
digitalWrite(f_gnd, LOW);
digitalWrite(c_vcc, HIGH);
digitalWrite(c_gnd, LOW);
 
cefrezo_cel_be = 65;
cefrezo_cel_ki = 40;

finomito_cel_be = 70;
finomito_cel_ki = 40;

}

void loop() {
  cefrezo = (thermocouple.readCelsius());

  delay(500);
  finomito = (thermocouple1.readCelsius());

  Serial.print(" Cefrezo huto homerseklete: ");
  Serial.print(cefrezo);
  Serial.print(" Finomito huto homerseklete: ");
  Serial.println(finomito);

if (cefrezo >= cefrezo_cel_be){
 
  digitalWrite(rele_c, LOW);
 
}
  else{
    
  }
if (cefrezo <= cefrezo_cel_ki){
  digitalWrite(rele_c, HIGH);
 
}
  else{
    
  }
if (finomito >= finomito_cel_be){
  digitalWrite(rele_f, LOW);
 
}
  else{
    
  }

if (finomito<= finomito_cel_ki){
  digitalWrite(rele_f, HIGH);
 
}
  else{
    
  }

delay(1000);


}

Előzmény: Prof (2088)
mekkGyver Creative Commons License 2016.09.01 0 0 2093

Igazad van, rosszul fogalmaztam.

"Egy klón arduino nano akár olcsóbban kijöhet, mint egy komolyabb WDT IC"... kis költői szabadsággal  *<:oD

 

Előzmény: Vargham (2092)
Vargham Creative Commons License 2016.09.01 0 0 2092

https://www.hestore.hu/search.php?q=watchdog

 

"könnyen lehet, hogy olcsóbb, mint egy wdt ic"

 

Nem, nem olcsóbb. :-) A WDT IC kifejezetten olcsó eszköz.

Előzmény: mekkGyver (2091)
mekkGyver Creative Commons License 2016.09.01 0 0 2091

Itt van szájbarágósan leírva:

http://www.elektromanoid.hu/progi26.html

 

Beállítod az időzítőt, hogy mennyi idő múlva járjon le, utána a lehető leggyakrabban nullázod. Ha valami miatt a program elakad, akkor lejár, és reseteli a kontrollert. Nem nagy dolog beállítani. Nem kell semmit bűvészkedni bootloaderrel. A gond ott szokott lenni, ha úgy fagy meg a cucc, hogy nem ugrik a megszakításokra, mert akkor nem tud ugrani a resetre sem. Ha valami fontos dolgot üzemeltetsz (pl. atomreaktor hűtéshez kell :D), akkor jobb egy kiegészítő áramkört beépíteni, ami ugyanezt csinálja, hogy ha nem kap jelet bizonyos időn belül, akkor újraindítja az arduinodat. Minél primitívebb áramkör, annál biztosabban üzemel! Lehet sima passzív R-C tag, vagy egy kifejezetten erre fejlesztett wdt áramkör, de jó egy másik arduino is, könnyen lehet, hogy olcsóbb, mint egy wdt ic. Csak akkor fontos, hogy oda-vissza figyeljék egymást.

Előzmény: Sploc (2086)
Törölt nick Creative Commons License 2016.08.31 0 0 2090

Remek, köszönöm!

Előzmény: Prof (2089)
Prof Creative Commons License 2016.08.31 0 0 2089

Hali!

No, itten van. Nem rövid alapvetően, de működik (lesz mit fejtegetni).

 

Használat: bekábelezel bármilyen Arduino lapot a megadott paraméterekkel, a kódot kimásolod, aztán bemásolod az IDE-be, feltöltöd, megnyitod a Serial Monitort (Ctrl+Shitf+M), alul a sebességet átállítod 9600-ra és kész.

 

Github Link

 

Előzmény: Törölt nick (2083)
Prof Creative Commons License 2016.08.31 0 0 2088

Szia!

A beillesztéshez kell látni a programot, magában elég nehéz, illetve gondokat okozhat.

 

watchdog valóban két féle van. Az alapelv többé-kevésbé azonos. A lényeg, hogy adott időpillanatban elindul két számláló (idő), az egyik, amikor lejár, indít egy jelzést a másiknak és újraindul. A másik figyeli, hogy jön-e jelzés a türelmi időn belül, ha nem, akkor automatikusan elindít egy protokollt, ami eszközről eszközre változhat (lehet reset, megszakítás stb.). Nyilván az első időintervallum számottevően rövidebb, mint a második. A watchdog alkalmazástól függően néhány tizedmásodperctől akár perces várakozásra is beállítható.

 

Arduino keretrendszerben a szűk keresztmetszet az, hogy ugyan az Atmega 328 dugig van órákkal, ezek közül az IDE+bootloader páros sajnos csak elég keveset, konkrétan egyet enged egyszerűen elérni, és azt is csak hívás szintjén (megkérdezhetjük, hogy reset vagy túlcsordulás óta mennyi idő telt el). A másik, hogy mivel a jelek szerint végtelen ciklusba kerül a rendszer, tök mindegy, hogy kód szintjén mit oldasz meg, mert a watchdog kódrészhez nem fog elérni a szoftver.

 

Itt jön képbe a külső watchdog, ami lehet egy pár alkatrészből álló egyszerű áramkör, ami úgyszintén számol és nulláz, ha jelet kap. Ha nem jön jel az adott ideig, akkor például elindít egy hard reset-et.

 

A műszaki megvalósításban nem tudok segíteni, Arduino keretrendszerben nem foglalkoztam a dologgal.

 

 

Előzmény: Sploc (2086)
Prof Creative Commons License 2016.08.31 0 0 2087

Tesztelem, mindjárt kész.

Előzmény: Törölt nick (2085)
Sploc Creative Commons License 2016.08.31 0 0 2086

Sziasztok,

 

Egy kisebb problémába ütköztem. Csináltam egy vezérlést ami két, egymástól független hűtőtorony vízcseréjét működteti.

Egy Mega panel MAX6675-ös chippel ellátott K-típusú hőelem értékeit olvassa be 1 másodpercenként, és egy ha függvénnyel a programba beírt hőmérséklet fölé emelkedik, akkor HIGH-ra húzza a kimenetét, amin egy optorelé kapcsol, és vezetésben marad, mindaddig míg nem hűtötte le a megadott érték alá.

 

A programmal nincs is magában gond, jól végzi a dolgát, eltekintve attól, hogy szabálytalan időközönként valahol megakad, végtelen ciklusba fut, ezt az Rx,Tx ledekről lehet észrevenni, mivel nem olvas, illetve a hűtő is túlmelegszik...

 

Táp, ki, be megoldja a gondot, órákra, néha napokra.

 

Itt jött az ötlet, hogy kell egy Watchdog...

Utánaolvasva a témának, nem is biztos, hogy olyan egyszerű a dolog... gondoltam beillesztek pár sort a programba, és működik... ha nem számol akkor reset.

Olvastam több fórumon, hogy valamit át kell írni a bootloaderben, mert kizárhatom magam a chipből stb... vannak csak szoftveres és hardveres őrkutyák is, mi a különbség? Mitől függ, hogy melyiket kell használni?

 

Valaki tud benne segíteni, hogy tisztába tegyem ezeket a dolgokat, illetve hogyan is illesszem be a meglévő programba?

 

Köszönöm!

 

Törölt nick Creative Commons License 2016.08.31 0 0 2085

Köszönöm!

Előzmény: Prof (2084)
Prof Creative Commons License 2016.08.30 0 0 2084

arduino.cc-n biztos van.

Holnap nézek, most tente.

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

Esetleg egy rövid példát hol találnék rá?

Egyébként köszönöm! :-)

Előzmény: Prof (2082)

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