• Most regisztráltál, de nem tudsz privát üzenetet küldeni?

    Kérjük olvasd el milyen korlátozások vonatkoznak rád, miután regisztrációd jóvá lett hagyva.
    Regisztrációs korlátozások

Építsünk akváriumvezérlőt Arduino-ból

Közös tápról pull-up-okkal fél órát bírta. :( Egész jó, de még mindig nem az igazi. Még az jutott eszembe, hogy amíg megy a motor, addig nem olvasom az RTC-t, hogy ne legyen forgalom az I2C-n. Mondjuk ez se elegánsabb megoldás, mint a relé...
 
Én egy tápot használok, teszek az ardu elé egy 7809 plusz szűrő kondikat és egy 7805 a hőmérőnek a rtc-nek természetesen ide is teszek szűrő kondikat és a 12V-ot használom a relék meghúzására illetve az alkatrészek megtáplálására (ledszalag, dózispumpa, relék, stb) és ennek az egésznek csinálok egy nyáklemezt amire rárakom az összes cuccot. Több éve tökéletesen működik több embernél.
 
Probálj ki egy 100n kerámia hidegitőt közvetlenül a motorra meg a diodát is a motorra tedd.Nekem ez jött be az 1u nem ette meg a tüskéket.
 
Köszi a tippeket @kslszl! Esetleg leírnád, hogy pontosan mekkora szűrő kondikat teszel a 7805-re? Az adatlapján 330nF és 100nF-ot javasol, de valamiért nálam így gyakrabban kiakad, mint amikor mindkét oldalra 100nF-ot teszek.
Illetve nem egyértelmű számomra, hogy akkor a motorokat relével kapcsolod, vagy mosfettel?

Annyira alap motorvezérlésről van szó, nem akarom elhinni, hogy ez ennyire megbízhatatlan legyen.
Lehet, hogy az én óra modulom a gyenge. A szoftvert meg tudom úgy írni, hogy naponta egyszer kérdezze le az időt az RTC-ből, és onnantól a millis()-sel dolgozzon. Meg ott van a watchdog timer is, amivel resetelni lehet az egészet ha dráma van. De ezek mind tüneti kezelések, az igazi probléma a zaj.

Probálj ki egy 100n kerámia hidegitőt közvetlenül a motorra meg a diodát is a motorra tedd.Nekem ez jött be az 1u nem ette meg a tüskéket.
Köszi szépen, mindjárt ki is próbálom.
 
Végül is ez is egy megoldás. Nem gondoltam rá, de valószínűleg megoldja a dolgot, főleg, ha külön tápról hajtanám. Végső esetben ez lesz.

Amúgy most ott tartok, hogy tettem egy-egy 4,7Kohmos pullup ellenállást az SDA,SCL kimenetekre (A4,A5 a nanón) + a motorhoz egy 1uF-os kondit. Ezek nélkül "szerencsére" egy perc alatt tudom már produkálni a hibát. Most így már lassan 10 perce ki-be kapcsolgat a motor és még megy.

Mindjárt megpróbálom közös tápról hogy viselkedik.


Szia,

Keress rá gooliban: tavir arduino
Van egy nagyon jó forumuk és itt szinte mindíg kaptam választ az komplexebb kérdésekre is.
(akik most kezdik: itt találnak egy 60 napos arduino tanfolyamot is ingyen!)
 
Probálj ki egy 100n kerámia hidegitőt közvetlenül a motorra meg a diodát is a motorra tedd.Nekem ez jött be az 1u nem ette meg a tüskéket.
Ezzel sajnos kb 20sec alatt kiakad. Ezek szerint csak nálam van valami nagyon érzékeny óra, ki kellene próbálni másikat.

Eddig a legjobb eredményt így értem el: 2db 100nF a fesz.szab. lábain, dióda és 10uF a próbapanelen, a motor csatlakozónál, utána kb 20cm kábel a motorig. Így kb 2 órán át ment folyamatosan tegnap éjjel, utána lelőttem. És persze ott vannak a 4,7K pull-up ellenállások, azok lendítettek a legtöbbet a dolgon eddig. Most mondjuk ugyanezzel a konfiggal is leáll 5-10 perc után, szóval lehet, hogy nem erőltetem tovább és összerakom relékkel amíg meg nem jön a DS3231. :(

Köszi a tippet @ierdelyi, megnézem a fórumukat.
 
Kipróbáltam a relés megoldást is.

1-es próba:
12V-os közös táppal, fesz.szabályzóval, a relé az arduino 5V-ját kapja, a motor a 12V-ot. Kivettem a pullupokat, de bent hagytam a diódát és a kondit a motoron.
2 perc után kiakad. :(

2-es próba:
Teljesen külön táppal, mindenféle dióda vagy kondi nélkül hajtva a motort, relével kapcsolva, szintén pár perc után kiakad. Ez már azért eléggé ufójelenség.
Ugyanez motor táp nélkül, csak a relét kapcsolgatva stabilnak tűnik.

Lehet, hogy maradok a kézi tápozásnál... :D
 
Sziasztok!

Eléggé elakadtam, hátha valaki tud segíteni. :(
Megjöttek a dózispumpák,
View attachment 43738
és össze is raktam az első motorral a rendszert valahogy így:
View attachment 43737
12V hajtja meg egy IRFZ44N mosfeten keresztül a motort, 1N5819 Schottky diódával, 10k lehúzó ellenállással. A vezérlés szépen működik is. Az időt egy DS1307-es tinyRTC modultól kapom, ami I2C buszon kommunikál (Wire.h). A probléma az, hogy a motor olyan (elektromos) zajt csinál, hogy a DS1307 rendszeresen megdöglik, és ettől a Wire.h lib végtelen ciklusba kerül, lefagyasztva az egész arduinót. Találtam egy WSWire.h nevű library-t, amiben lekezelik az ilyen helyzeteket, és egy idő után kilép a ciklusból, hogy legalább a rendszer fusson tovább. Viszont az óra attól még elveszik, szóval nem annyira jó. Maga az arduinó egyébként nem resetel ilyenkor.
Mindez csak akkor történik, ha jár a motor. Nem mindig, de egy-két perc alatt reprodukálható. (Mondjuk elkezdi tolni a carbót, bedöglik, és benyomja az egész flakont a vízbe...)

Amit eddig próbáltam:
- 12V-os LED tápról meghajtva, L7805CV fesz szabályzóval csináltam 5V-ot. Leddel tök jó, motorral halál. Mindegy milyen kondikat tettem a lábaira.
- 12V-os táp -> LM2596 szabályozható DC-DC -> 5V dettó ugyanaz
- 12V-os táp csak a motornak, USB 5V az arduinóhoz, szóval két külön tápról meghajtva, csak a földeket összekötve, szintén ugyanúgy jelentkezik. Ez az a pont ahol már kezdem feladni.

Próbáltam a motorral párhuzamosan tenni 1uF, 10uF, 470uF-os kondikat, nem segített.
Próbáltam a DS1307 +5V-ja és a GND közé kisebb-nagyobb kondikat, nem segített.

Eddig motor nélkül kb. 3 hete teljesen stabilan ment ugyanezekkel a dolgokkal a ledes lámpa vezérlése. Szóval tanácstalan vagyok. A motor rossz? Vagy az óra modul?

Hogyan lehet ezt megoldani?


Nekem is voltak gondok az óramodulla. lefagyott, összetörte a kijelző karakterkészletét......Én külön tápra raktam teljessen az alappanelt ,s külön tápra a relé panelt. beiktattam 100nF kondikat, megemeltem a puffer kondik méretét...
meg a progiba be lett iktatva a WatsDog.
Azóta minden oké.
 
Sziasztok,

Olvasva a fórumot ma én is megpróbáltam rákötni a dózispumpát.
Ami idáig ment: Mega + óra (DS3231), 4 soros kijelzö, 120cm 8520as led, 60cm NeoPixel, 1venti, 1hömérö.
Mindez egy 10A -es 12V-os Meanwell tápról.

Rákötöttem a pumpát egy 4 csatornás mosfet modulra. Se kondi se semmi direktben.
Idáig tökéletes, kb 20 perce megy. Ha ráteszem a pumpa részt a tengelyre, akkor elkezd zúgni a tápom.
Az mitöl lehet? Lehet vele valamit kezdeni?

És talán még 1 fontos dolog nem használom a RTC libraryt.

Ha valamit kifelejtettem szóljatok.


WAAR-Vmub2ENNMBX2ChvvWroqZpxRmH0g-fPC0i-gciS8OkA8lefp4TaxiDdQ?width=800&height=800&cropmode=none.jpg
 
Utoljára módosított:
Azt hiszem sikerült kipróbálni minden variációt. TávIR fórumos javaslatra még azt is, hogy teljesen szétválasztva az áramköröket, a motort kézzel ki-be kapcsolva mi történik. Hát úgy is sikerült lefagyasztani. Szóval nem csak a kábeleken futó, de elektromágneses zaj is bekavar az óra modulomnak.

Az eddigi javaslatokat nagyon köszönöm mindenkinek!

Úgy tűnik el kell fogadnom, hogy nagyon zajos motorom és mellé nagyon érzékeny órám van. Mivel nem szeretnék két külön táppal vacakolni, és közös táppal viszont a relés kapcsolás és a motor árnyékolás mellett is jelentkezik a baj, így valószínűleg úgy oldom meg, hogy amíg járnak a motorok, addig nem lesz I2C forgalom. Most épp egy ilyen teszt fut, és eddig bizakodó vagyok. És persze egy kicsit csalódott is, hogy nem sikerült megoldani, de azt hiszem nem érdemes többet rugózni ezen.
 
Ha ráteszem a pumpa részt a tengelyre, akkor elkezd zúgni a tápom.
Az mitöl lehet? Lehet vele valamit kezdeni?
Az általában azért van, mert a PWM frekvencia a hallható tartományba esik. Nekem legalább is a ledek dimmelése miatt sípol a táp egy nagyon kicsit. Mondjuk ha nem PWM jelet küldesz a motornak, hanem simán digital HIGH, akkor nincs tippem.
Elvileg a PWM frekit lehet állítani az arudinoban, de még nem jutottam el addig.
 
Üzenetben nem tudok válaszolni mert nincs meg még a megfelelő számú hozzászólásom.
Próbáltam úgy átírni ahogy a linken volt, már ha jól értelmeztem, de így is ugyan az a helyzet. LOW-on aktív a relé.
Igazából mindegy, hogy mire kapcsol a reléd, és a te modulodat úgy tűnik nem is fogod tudni átállítani. A lényeg, hogy a kódot úgy írd meg, hogy a setup()-ban alapból HIGH menjen ki a relét vezérlő pin-re, és amikor be akarod kapcsolni, akkor küldj rá LOW-t.
 
így valószínűleg úgy oldom meg, hogy amíg járnak a motorok, addig nem lesz I2C forgalom
Azért ezen most kicsit felröhögtem magamban: Ha nem akarom hiper-szuper elegánsan, blokkoló funkciók nélkül megoldani a tápadagoló pumpák járatását, hanem maradok a kő egyszerű delay()-es időzítésnél, akkor ez az egész probléma eleve fel sem merül. Addig a 10-15 másodpercig, amíg járnak a pumpák, a delay miatt áll az egész rendszer, nincs ami kiakadjon a kósza zavarok miatt, nincs probléma. :)
 
Aha ez olyan mint amikor a fagyi visszanyal.
Egyebként még azt meg lehetne próbálni hogy a motor házat leföldelni nem a gnd-re hanem a védőldre egy 1.5 kábellel direktbe.
Már nem emlékszem milyen a tápod (5V DC)
de ha valami kapcsoló üzemű akkor ez bejöhet.
 
A sima GND-re földeltem, az nem segített. A konnektoros földre is gondoltam, de annyira nem voltam elszánt már.

Viszont van fejlemény, így zárszóra ma megérkezett a pakk kínából, többek között a 2 db DS3231-es modullal. Még szerencse, hogy kettőt rendeltem, mert az egyik hibás volt: "szinte" működött, csak sajnos állt rajta az óra. :)
A másikat viszont bepattintottam a 1307 helyére, és láss csodát árnyékolás nélkül is tök stabilan fut rajta az extrém I2C teszt. Szóval tényleg csak a DS1307-es órám volt ennyire érzékeny.

Viszont nem is akkora baj, hogy ez így alakult, mert egy csomó mindent tanultam közben az arduinokról:
  • Megértettem a simító kondik működését (jobbára), és hogy miért fontos minden lényeges pontra betenni egy-két ilyet. A motorokhoz jó nagy kell (470uF), a kütyük +5V-ra 100nF is elég.
  • Kiderült hogy elméletileg mindenképp kell egy 4.7K-s felhúzó ellenállás az I2C buszra, mert a belső 20k-s nem elég. A jó hír, hogy ez minden eddig kezem ügyébe került I2C modulba be volt építve. Ami mondjuk kevésbé jó, ha egyszerre többet is rá akarsz kötni, mondjuk órát és LCD-t, de eddig 2-nél nálam nem volt gond.
  • Megismerkedtem a watchdog funkcióval, ami egy időzítő óra, amit ha nem reszetelsz le a lejárata előtt, akkor újraindítja a mikrokontrolleredet. Ez nagyon fontos dolog a stabil működés szempontjából, ha valami durván kiakad, akkor is újra tudod vele indítani a rendszeredet. Persze a fent említett 10-15 másodperces delay-ek csak a watchdog kikapcsolása mellett játszanának, szóval mégis jobb valami kulturált megoldást használni. Itt egy egész kulturált leírás: https://forum.arduino.cc/index.php?topic=63651.0 (Érdemes a PDF-et megnyitni.)
  • Extraként azt is megtudtam, hogy lehet állítani az I2C busz sebességét, de azért ennyire már nem akartam belemászni. Elvileg a régi óra is simán stabil lehet, ha lelassítom a buszt. (valószínűleg soha nem fogom megtudni, mi lett volna ha...) :D
  • És még egy rakás fájdalmas apróságot a C++ rejtelmeiről, ami miatt komolyan töröm a fejem, hogy ki az aki ép ésszel ezt a nyelvet választja a magasabb szintű (JS vagy Java) nyelvek helyett. Az biztos, hogy ha ezzel a tápadagolóval készen leszek, akkor a következő projekt egy ESP32 lesz node-dal, ahogy ezt már azt hiszem más is emlegette itt a fórumban.
 
Igazából mindegy, hogy mire kapcsol a reléd, és a te modulodat úgy tűnik nem is fogod tudni átállítani. A lényeg, hogy a kódot úgy írd meg, hogy a setup()-ban alapból HIGH menjen ki a relét vezérlő pin-re, és amikor be akarod kapcsolni, akkor küldj rá LOW-t.
Mostmár így lesz, mert valószínűleg ilyen ez a panel, hogy fordítva dolgozik.
 
Back
Oldal tetejére