-
GAMEPOD.hu
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
fpeter84
senior tag
[itt] tudsz mazsolázni a microchip kínálatából - I2C-re vannak 2 és 4 bemenetes I2C AD-k is, pl az MCP3424 vagy MCP3428... lehet picit feleslegesen túl okosak a célra, de ha a költségvetés elbírja a bruttó ~2e-es árát akkor még arduino támogatást is hozott hozzájuk a gugli, találsz lib-et példaprogikkal - itthon a chipcad-nél vannak is raktáron...
ja meg elhangzottak a multiplexerek is, ha nem kell nagy sebességgel olvasni az analógokat, akkor az is lehet jó megoldás hogy pár analógnak jelölt lábat digitként használsz, és azzal kapcsolgatsz egy multiplexert az 1db analóg lábra és úgy olvasod a sok sok bemenetet egyesével[ Szerkesztve ]
-
Undoroid
őstag
válasz Janos250 #17688 üzenetére
Szia Janos250!
Csináltam egy próbatákolást a Joy-hoz, de a középső furat (4 szélső a felfogatás és egy maga az irányító) egy kicsit mellé ment. Nem-e lehet valahonnan megszerezni a pontos furattávokat erről a Joy-ról? Sokat keresgéltem a NET-en, de nem találtam. Ezekben a 3D-s nyomtatási tervekben nem találhatóak meg ezek a méretek? Valahogyan nem-e lehet kimenteni ezeket az adatokat?
Ellenkező esetben kénytelen leszek leforrasztani mindent a hordozópanelról és úgy méretet venni...https://logout.hu/bejegyzes/ngabor2/nyugodj_bekeben_bordoi.html _ https://robo-venture.com -> Az ökotudatos, digitális közösségi alkotóműhely <-
-
Dißnäëß
veterán
Sziasztok Urak, szerintetek kell nekem egy mini üvegházas projektke automatizálásához a sok-sok szenzorhoz és ahhoz a pár víznyitó-záró szelephez egy marék Arduino (pl. pici Leonardo-kat tenni X kaspónként és őket szólítani meg wifin keresztül), vagy jobban járok 1db Mega-val, ami letudja mondjuk az 5V-os Arduino ökoszisztémát és egy ESP-vel vagy akár Pi-vel, amivel meg a 3.3V-os motyókat tudom vezérelgetni. Ezek nyilván összebeszélnének, ...
Ti hogy csinálnátok legegyszerűbben ? És bíznátok a wifiben amúgy ? Nyilván ha lehal, ugrott az egész, ezért gondolkodom valamiféle busz rendszeren, amiről minden cserépben lévő szenzor felrak adatot (vezetéken, vagy vezeték nélkül, de a wifivel az a gondom, hogy ha a router lehal, ugrott minden, esetleg több eszközből csinálok mesh-t, de minek bonyizzam + drága is).. szóval .. inkább valami 1-wire-re gondoltam és digitális címzésre, hogy egyetlen eszközön fizikailag csak kevés tüskét foglaljak el a vezetékes kapcsolattal és akkor erre meg mindegyik szenzort és/vagy kontroll eszközt fel tudom aggatni és digitálisan címezni, elérni.
Egyszerűre gondoljatok: pár kaspó ilyen növénynek, pár kaspó amolyannak, megint pár kaspó a harmadiknak, semmi különös. Mindegyikben lenne 1 talajnedvesség szenzor, meg kontrollálnám valami elektromosan vezérelhető szeleppel a vizet is nekik (csepegtetés valszeg, de nekem az is oké, ha kinyit, locsol X mp-ig, majd elzár).
Meg talán egy fénymérő még. Ennyi.
Nem akarom hülyére bonyizni, de jó kis önmenedzselő valamit vizionálok.
Van egy régi öreg Pi1B-m, befoghatnám, meg ilyenekre lövök (úristen... mikor legutoljára vettem, még $1.5 volt darabja, de apám 0.99-ért is kapott).A vezeték híve vagyok, lehet nem wifiznék, de érdekelne a véleményetek.
A "mindent látó és intéző" központi agy ideája (Pi) és a kaspónkénti Arduino, némileg oda letolt logikák közt billegek. Ha a Pi összekakilja magát (megeshet, mint mindennel), mivel ide van hozva programba a vezérlés az utolsó mindenségig is, az egész kisház lehalna. Ha pedig a kaspónként elhelyezett kis Arduino-kba ki van ez téve, vagy legalábbis a vezérlési logika egy darabja, akkor viszonylag autonóm módon is elmennek ezek, akkor is, ha a központi agy, a Pi még létezik és irányítja őket.
Én arra gondoltam, hogy kaspónként egy ilyen kis Arduino, és a Pi arra lehetne jó, hogy egyetlen paraméter-változást, parancsot, akármit, egyszerre juttassak el mindegyik - önállóan autonóm - Arduino-hoz.
Túlbonyizom, lehet, de szeretnék egy optimális logikát/setup-ot kitalálni.
Ha van kedvetek - nem akarok untatni senkit ilyenekkel - szívesen látnék pár gondolatot, bármi jöhet, tapasztaltabbaktól.
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
Janos250
őstag
válasz Undoroid #17706 üzenetére
Szia!
Megnéztem, töltöttem le ilyen fájlt, de sokra nem jutottam.
Esetleg az Alin a panel képe alulról?
https://www.aliexpress.com/item/1005002740079191.html
vagy felülről?
https://www.aliexpress.com/item/4001276857056.htmlVagy erről a képről:
https://sensorkit.joy-it.net/de/sensors/ky-023Esetleg erről a képről, itt vannak mértek, lehetne arányosítani.
https://lastminuteengineers.com/joystick-interfacing-arduino-processing/Aztán persze az is elgondolkodtató, hogy ha VÁM-mal, ÁFA-val, szállítással 500 forintért bejön Kínából, érdemes-e sajátot csinálni.
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
biker
nagyúr
válasz Dißnäëß #17707 üzenetére
szerintem túlbonyolítod (növényvilágító lámpákkal foglalkozunk), ilyen helyeken a jó megoldás vagy agyaggolyós hidrós megoldás, ahol folyamatos csepegtetés van, esetleg időzítővel csepegtető ki-be, vagy ebb-flood rendszer ami szintén mezei időzítővel ár-apály rendszerrel nedvesít.
A talajnedvesség érzékelés féle ultrahightech nagyon kevés növénynek kell, vagy a határok feszegetésekor, pl magas hőmérsékleten és páratartalmon co2 beoldással hozamot növelni, mert ha nincs elég hőmérséklet akkor a co2 nem hasznosul eléggé.
Fényből meg ha automatizálni akarod úgy igazán, akkor csatornánként dimmelhető lámpa (hideg-meleg fehér, UV, IR, FR sávok), és akkor lehet recepteket kialakítani, de ahhoz spécibb fényérzékelők kellenek, mert a klasszik lux mérők erre nem alkalmasak.Elektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
-
Undoroid
őstag
válasz Janos250 #17708 üzenetére
Szia!
Köszönöm a sok keresgélést, de sajnos ezek nem a legjobb kiindulási alapok! Annyit viszont segített, hogy a forrcsúcsok közül a 'belső négy' (szürke körök) megadja / megadják a Joy 'gombájának' a középpontját! Látszik a képen, hogy a négy pont átlójának metszőpontjában ott lehet a 'gomba' közepe! Sajnos ehhez is ki kell forrasztanom az egész elektronikát a hordozóról, de az alapján már össze tudok hozni egy teljes furatképet (sablont) a Joy furatairól! Vagy lenyomatot veszek egy négyzetrácsos papírral a panel forrcsúcsairól és abból rajzolom vissza a furatképet...
" Aztán persze az is elgondolkodtató, hogy ha VÁM-mal, ÁFA-val, szállítással 500 forintért bejön Kínából, érdemes-e sajátot csinálni. " Úgy tűnik, hogy félreértettél! Nem egy új ilyen szerkezetet akarok építeni, hanem a meglévőt szeretném valami előlapba beleszerelni, ahol szépen tudja majd a dolgát végezni és védve lesz a külső, ártó behatásoktól!
https://logout.hu/bejegyzes/ngabor2/nyugodj_bekeben_bordoi.html _ https://robo-venture.com -> Az ökotudatos, digitális közösségi alkotóműhely <-
-
Janos250
őstag
válasz Dißnäëß #17712 üzenetére
Ha profi megoldást akarsz, akkor persze még a napot is dimmelhetővé kell tenned, de kérdés, akarsz-e ilyen profi, méregdrága megoldást, vagy maradsz az egyszerűbb, olcsóbb, de kevesebbet tudó megoldásnál. Ez utóbbi az Arduino! :-) Ezért (is) szeretjük! :-) Nagyon sokszor elegendő az, amit az Arduino tud! Én ennél maradnék.
Csatlakozásokra én azt csinálnám, hogy a szenzorokhoz valami kis panelka, ami vagy vezetéken, vagy WiFin kapcsolódik össze. A router hibája kiküszöbölhető az ESPNOW megoldással, mert ott nem igazi WiFi kapcsolat van, csak a WiFi hardverrel az egyes egységek MAC címmel tartják egymással a kapcsolatot, nincs pl. IP cím. (Ezt is csak elméletből tudom, még jutottam odáig, hogy kipróbáljam.) Ennél a megoldásnál az Espressif elég kevés információt tesz közzé, nem nagyon lehet vele variálni, csak azt lehet, és úgy, ahogy ők leírták. Például az ESP32-nél az egyes perifériakezelések regiszterei, és azok használata is elég jól le van írva, a WiFinél még azt sem tudjuk, melyik címtartományban van.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
biker
nagyúr
válasz Dißnäëß #17712 üzenetére
Dehogyis, a hobbi az hobbi, nyomjad neki
Csak a talajnedvesség mérése (a talaj egy adott részén) lehet félrevezető a gyökérzet egészére nézve.HA a napot akarod dimmelni, akkor Zeus lámpa, és ehhez lehet venni érintőképernyős vezérlőt, emi 2 csatornán (mondjuk két külön terem) 50 lámpát kezel egyszerre, óránként beállítható hideg fehér, meleg fehér, és UV arányokkal, napkelte napnyugta szimulálható a növénynek akár.
PWM jelekkel operál, akár csinálhatsz is rá egy vezérlőt te magad.Elektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
Undoroid
őstag
Egy újabb kérdésem lenne EZZEL a projekttel kapcsolatban...
Amikor túrtam a NET-et a furatképpel kapcsolatban, akkor belefutottam egy YT-videóba, amiben ez (?) az összeállítás volt megplusszolva egy 2x16-os LCD kijelzővel. A kijelzőn mindössze annyi volt olvasható, hogy a vezérlő mennyit léptetett + és - irányba! Sajnos a videó kommentjei közötti "Code?" kérdésre nem érkezett válasz!
Az lenne a kérdésem, hogy az eredeti kódot át lehetne úgy írni, hogy kezelje az LCD-t, az pedig indikálja az elforgatás mértékét?
https://logout.hu/bejegyzes/ngabor2/nyugodj_bekeben_bordoi.html _ https://robo-venture.com -> Az ökotudatos, digitális közösségi alkotóműhely <-
-
Undoroid
őstag
válasz Undoroid #17717 üzenetére
Kicsúsztam a szerkesztési időből, mire megtaláltam a videót: KLIKK
" Sajnos a videó kommentjei közötti "Code?" kérdésre nem érkezett válasz! " Vagyis érkezett, rosszul emlékeztem: " The test code had been deleted!!!! " Ezzel, ugye egy olyan kezdő, mint Én nem tud elindulni...belógatta a mézesmadzagot ezzel a videóval és törölte a kódot!Valaki tudna valami támpontot adni ezzel kapcsolatban? Nem kérem senkitől, hogy oldja meg helyettem a feladatot, mindössze iránymutatásra lenne szükségem...
Mielőtt belebonyolódnánk az egészbe: nem kell a uC-nek megjegyezni az utolsó értéket! Azt minden bekapcsoláskor 0-ról kezdene számolni!
Előre is megköszönném mindenkinek a Rám fordított idejét...ha lesz ilyen!
https://logout.hu/bejegyzes/ngabor2/nyugodj_bekeben_bordoi.html _ https://robo-venture.com -> Az ökotudatos, digitális közösségi alkotóműhely <-
-
Tankblock
aktív tag
válasz Undoroid #17718 üzenetére
Ha az elforgatás mértéke érdekel, akkor annyit kell tudnod, hogy 1 step az hány fok, és azt hogy steppet lépsz vagy microsteppet. --> Motor datasheet segít 1.8 fokos vagy más.
Ugye a microstep az egy step felosztva annyiad részre ahány microstep.
Microsteppet normál esetben csak motorvezérővel fogsz tudni megoldani, annke ez paramétere lesz valahol....Ezek után ha tudod a loop elején h jobbra vagy balra forgatod a steppert, ki tudod számítani a fokot is... Az LCDre kiírod majd kiadod motornak a forgás fvg h merre is csináljon mit....
[ Szerkesztve ]
Release the Beast....
-
Dißnäëß
veterán
Atyaég, értem amit mondasz, de ez iszonyú profi megoldás, ennyire nem rohanok előre.
Bevallom, kiskertet szeretnék. Most mindenki be van ijedve, én ugyan nem, de már 5 éve filózok ilyenen. Kicsiben indulni, pl. a kertben leteszek egy ~3x4-es alapot, arra egy kreatívan megcsinált "kisház", ahol a tető mondjuk ütésálló fóliázott biztonsági üvegezett valami (jégeső..) és alatta tudnék alkotni. Megtehetem tök legálisan, beépíthetőség, stb.. minden engedi.
"Piramis" jellegű állványzat pár gerendából-lécből, hosszúkás vízszintes "muskátlis" kaspók egymás mellett-felett, eltolva mindig eggyel bentebb, így mind kap (természetes) fényt. Oldalról mint egy "A" betű, aminek a száraira teszem fel lépcsőzetesen ezeket.
És akkor paradicsom, paprika, uborka, bab - elsőre. Hagyma.. De még lehet ezt is átgondolom, mindenesetre a húsmentest is kidolgoznám és a bab jó fehérjeforrás. Meg még biztosan lehet mást is.
A cél az lenne, hogy kitanuljam ennek csínját-bínját, ellátni nem fog ennyi nyilván, de szeretném megtanulni ezeket. Az egyes növényeket ismerve, folyadékigényüket (is), lehet tudnék automatizálni (csepegtetést-locsolást mindenképp), a fénymérő és hőmérséklet mérő pedig kiadná idővel, hogy mennyi természetesen fény érte őket és milyen hőmérséklet mellett akkor mennyi nedvesség kellhet. Most csak hangosan agyalok, teljesen kezdőként-laikusként, de szeretném ezt megtanulni.
[ Szerkesztve ]
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
biker
nagyúr
válasz Dißnäëß #17723 üzenetére
van 3 ilyenem, ez elemes időzíthető csepegtetős, kombinálhatod akár akvapóniával is.
Az irodai teszt installáció elvan kb 2 éve
itt van egy 25liters akva, ebből szívja a halkakis vizet, napi 2x30mp elég ezeknek a kis igényű növényeknek, és versenyban a halas fénycső, normál fénycső, piros-kék led, 4000K led
na nem offolok tovább, ígérem, max írsz PM ha kérdés vanElektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
Dißnäëß
veterán
Hát ez marhajó, köszi.. a linket is.. hidroponikus motyó is jó, amúgyis imádom a hidroponikus kertet.
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
gordonfreemN
addikt
Sziasztok. Próbálkozok az első programom megírásával. Tulajdonképp működik, de azért közszemlére teszem, lehet e bármit elegánsabban megoldani.
#include <EEPROM.h>
const int mode_led1 = A2;
const int mode_led2 = A3;
const int mode_led3 = A4;
const int set_led1 = 11;
const int set_led2 = 12;
const int set_led3 = 13;
const int in_relay1 = 4;
const int in_relay2 = 5;
const int in_relay3 = 6;
const int out_relay1 = 7;
//const int out_relay2 = 8;
const int cb_relay1 = 9;
//const int cb_relay2 = 10;
const int reset_relay_cb = 1;
const int reset_relay_out = 2;
const int reset_relay_in = 3;
const int button_m = A0; //mode gomb
const int button_s = A1; //set gomb
bool buttonstate_m;
bool buttonstate_s;
bool lastbuttonstate_m;
bool lastbuttonstate_s;
byte vmod;
byte vset;
byte vset_in;
byte vset_out;
byte vset_cb;
unsigned long timer;
void setup()
{
//Serial.begin(9600);
pinMode(mode_led1, OUTPUT);
pinMode(mode_led2, OUTPUT);
pinMode(mode_led3, OUTPUT);
pinMode(set_led1, OUTPUT);
pinMode(set_led2, OUTPUT);
pinMode(set_led3, OUTPUT);
pinMode(in_relay1, OUTPUT);
pinMode(in_relay2, OUTPUT);
pinMode(in_relay3, OUTPUT);
pinMode(out_relay1, OUTPUT);
//pinMode(out_relay2, OUTPUT);
pinMode(cb_relay1, OUTPUT);
//pinMode(cb_relay2, OUTPUT);
pinMode(reset_relay_in, OUTPUT);
pinMode(reset_relay_out, OUTPUT);
pinMode(reset_relay_cb, OUTPUT);
pinMode(button_m, INPUT);
pinMode(button_s, INPUT);
buttonstate_m = 1;
buttonstate_s = 1;
lastbuttonstate_m = 1;
lastbuttonstate_s = 1;
digitalWrite(set_led1, 1);
digitalWrite(set_led2, 1);
digitalWrite(set_led3, 1);
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 1);
digitalWrite(mode_led3, 1);
delay(500);
vmod = EEPROM.read(0); //"mode" tárolt értéket a vmod változóba ír
vset_in = EEPROM.read(1); //"set_in" tárolt értéket a vset változóba ír
vset_out = EEPROM.read(2); //"set_out" tárolt értéket a vset változóba ír
vset_cb = EEPROM.read(3); //"set_out" tárolt értéket a vset változóba ír
//az eeprom vmod, vset_in stb tartalom legelőször 255 lesz, ha e változók eepromtartalma nem 0,1 vagy 2, akkor legyen 0
if ((vmod < 0) || (vmod > 2)) {vmod = 0;}
if ((vset_in < 0) || (vset_in > 2)) {vset_in = 0;}
if ((vset_out < 0) || (vset_out > 1)) {vset_out = 0;}
if ((vset_cb < 0) || (vset_cb > 1)) {vset_cb = 0;}
//bekapcsoláskor a ki-be és schematik választók (relék) beállítása az eltárolt értékre-----------------------------------------------
if (vset_in == 0) {
digitalWrite(in_relay1, 1);
digitalWrite(in_relay2, 0);
digitalWrite(in_relay3, 0);
digitalWrite(reset_relay_in, 0);
delay(20);
digitalWrite(reset_relay_in, 1);
}
if (vset_in == 1) {
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 1);
digitalWrite(in_relay3, 0);
digitalWrite(reset_relay_in, 0);
delay(20);
digitalWrite(reset_relay_in, 1);
}
if (vset_in == 2) {
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 0);
digitalWrite(in_relay3, 1);
digitalWrite(reset_relay_in, 0);
delay(20);
digitalWrite(reset_relay_in, 1);
}
if (vset_out == 0) {
digitalWrite(out_relay1, 1);
digitalWrite(reset_relay_out, 0);
delay(20);
digitalWrite(reset_relay_out, 1);
}
if (vset_out == 1) {
digitalWrite(out_relay1, 0);
digitalWrite(reset_relay_out, 0);
delay(20);
digitalWrite(reset_relay_out, 1);
}
if (vset_cb == 0) {
digitalWrite(cb_relay1, 1);
digitalWrite(reset_relay_cb, 0);
delay(20);
digitalWrite(reset_relay_cb, 1);
}
if (vset_cb == 1) {
digitalWrite(cb_relay1, 0);
digitalWrite(reset_relay_cb, 0);
delay(20);
digitalWrite(reset_relay_cb, 1);
}
timer = 0;
}
void loop()
{
//vmod beállítása----------------------------------------------------------------------------------------
buttonstate_m = digitalRead(button_m); //gomb állapot kiolvasása
if (buttonstate_m != lastbuttonstate_m) //gombnyomás történt? Gomb állapota változott az előzőhöz képest?
{
delay(50); //ha történt változás az előző állapothot képest, várj 50ms-ot
if (buttonstate_m == 0) //ha a gomb nyomva, azaz bemenet értéke alacsony akkor
{
vmod++; //növelje vmod változó értékét eggyel
timer = millis(); //timer változó legyen millis aktuális értékével feltöltve
}
}
switch (vmod) {
case 0: //ha értéke null
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
break;
case 1: //ha értéke egy
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 1);
digitalWrite(mode_led3, 0);
break;
case 2: //ha értéke kettő
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 1);
break;
default: //ha értéke bármi más mint az előzőek
vmod = 0; //akkor vmod értéke legyen null
break;
}
lastbuttonstate_m = buttonstate_m; //gomb előző állapotát írja be a gomb aktuális állapotának
if ((millis() - timer) > 5000) //ha millis értéke mínusz timer értéke nagyobb mint 5sec (azaz eltelt 5mp)
{
EEPROM.update(0, vmod); //tegye eepromba a vmod változó értékét, ha az változott
}
//vset beállítása------------------------------------------------------------------------------------------
if (vmod == 0) {vset = vset_in;}
if (vmod == 1) {vset = vset_out;}
if (vmod == 2) {vset = vset_cb;}
buttonstate_s = digitalRead(button_s);
if (buttonstate_s != lastbuttonstate_s)
{
delay(50);
if (buttonstate_s == 0)
{
vset++;
timer = millis();
}
}
switch (vset) {
case 0:
digitalWrite(set_led1, 1);
digitalWrite(set_led2, 0);
digitalWrite(set_led3, 0);
break;
case 1:
digitalWrite(set_led1, 0);
digitalWrite(set_led2, 1);
digitalWrite(set_led3, 0);
break;
case 2:
if (vmod == 0) {
digitalWrite(set_led1, 0);
digitalWrite(set_led2, 0);
digitalWrite(set_led3, 1);}
else if (vmod == 1 || vmod == 2){vset = 0;}
break;
default:
vset = 0;
break;
}
lastbuttonstate_s = buttonstate_s; //gomb előző állapotát írja be a gomb aktuális állapotának
//bemenet kiválasztása----------------------------------------------------------------------------------------
if (vmod == 0 && vset == 0) { //ha vmod nulla, akkor a bemenet beállítása történik és vset_in felveszi az aktuális vset értéket
vset_in = 0; //bemeneti változó beállítása
digitalWrite(in_relay1, 1); //bemeneti 1-es relé kiemenet HIGH
digitalWrite(in_relay2, 0); //bemeneti 2-es relé kiemenet LOW
digitalWrite(in_relay3, 0); //bemeneti 3-mas relé kiemenet LOW
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);} //csak ha set gombnyomás történik akkor az 1-es relé resetje LOW
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);} //csak ha set gombnyomás befejeződött akkor az 1-es relé resetje HIGH
}
if (vmod == 0 && vset == 1) {
vset_in = 1;
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 1);
digitalWrite(in_relay3, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);}
}
if (vmod == 0 && vset == 2) {
vset_in = 2;
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 0);
digitalWrite(in_relay3, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);}
}
//kimenet kiválasztása---------------------------------------------------------------------------------------
if (vmod == 1 && vset == 0) {
vset_out = 0;
digitalWrite(out_relay1, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_out, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_out, 1);}
}
if (vmod == 1 && vset == 1) {
vset_out = 1;
digitalWrite(out_relay1, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_out, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_out, 1);}
}
//áramköri lap kiválasztása-----------------------------------------------------------------------------------
if (vmod == 2 && vset == 0) {
vset_cb = 0;
digitalWrite(cb_relay1, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_cb, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_cb, 1);}
}
if (vmod == 2 && vset == 1) {
vset_cb = 1;
digitalWrite(cb_relay1, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_cb, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_cb, 1);}
}
//EEPROM írása------------------------------------------------
if ((millis() - timer) > 5000) {
EEPROM.update(1, vset_in); //tegye EEPROM-ba a vset_in változó értékét, ha az változott
EEPROM.update(2, vset_out); //tegye EEPROM-ba a vset_out változó értékét, ha az változott
EEPROM.update(3, vset_cb); //tegye EEPROM-ba a vset_cb változó értékét, ha az változott
}
//--------------------------------------------------------------------------------------------------------
//Serial.println(buttonstate_s);
}
A működése:
Ez egy be és kimenetválasztós előerősítő lenne majd.
vmod kiválasztja, hogy be vagy kimenet
vset a be vagy kimeneten belül kiválasztja, hogy melyik (0,1,2 ami pl be esetén hasamraütök, TV, CD, PC).
nem szeretném, hogy elfelejtse a beállított értékeket kikapcsolás után, mivel nem szeretnék minden bekapcsolást azzal kezdeni, hogy beállítom a be és kimeneteket amiket épp használnék - ezért az eepromos huncutság.
Illetve amikor beállítom a bemenetet, majd a kimenetet, aztán mégis visszaléptetem a mod-dal a bemeneti választásra, akkor a visszajelző LED (digitalwrite-ok a switch-ben) a bemenet aktuális allapotát jelezze, ne pedig maradjon ott, ahova a kimenetkor állítottam.¯\_(ツ)_/¯ ▁ ▂ ▃ ▅ ▆ ▇ Üdv, Andris.
-
Undoroid
őstag
válasz Tankblock #17719 üzenetére
Szia!
Nem akarom precízen tudni az elfordítás mértékét, hanem csak annyit, hogy tudjam azt a pontot, amikor még nem töröm össze mechanikusan az egész tákolmányomat...esetleg azt megoldanám, hogy az elforgatást egy bizonyos szög után nem engedné tovább a program. Onnantól már csak visszafelé mehetne...
https://logout.hu/bejegyzes/ngabor2/nyugodj_bekeben_bordoi.html _ https://robo-venture.com -> Az ökotudatos, digitális közösségi alkotóműhely <-
-
Tankblock
aktív tag
válasz Undoroid #17727 üzenetére
Szia
A linkelt mikrokapcsolós végállásfigyelést be tudod tenni ....
Szerintem minden infod megvan,A léptetés előtt megnézed, hogy a kapcsoló be van -e kapcsolva, ha igen akkor nem lépsz arra. Ez mind a két irányba működik, és relatíve olcsó. A kapcsoló lehet optokapu is....
Mire lenne még szükséged ?
Release the Beast....
-
Tankblock
aktív tag
válasz gordonfreemN #17726 üzenetére
Szia
Első blikkre használhatsz
#define
-t a PIN definícióhoz...Az EEPROM kiírást gondold át még egyszer, mert első blikkre minden 5 [sec] kiírod, és nem azt csinálod amit szeretnél. Ezzel lassan elhasználod EEPROMOT.... Elegendő ha volt valós change kiírni azt ahol volt change.
Én a gombokat csak interruptból figyelném, ha van változás akkor azt as loopba kezelném, hogy hol vagy a "menüben", és csak a setgomb változására kezdenék neki a funkció szerint a LED ill a relay kapcsolásoknak.
Ha beleásod magad a C++ rejtelmeibe is akkor nagyon sokféle megoldást fogsz találni.
A HW PIN kiosztást lesd meg, - én most nem tettem meg - mert ha egy portra teszed LED és a kimeneteket akkor 1 port írással megúszhatod az egészet.... De ez már csak szépség....
[ Szerkesztve ]
Release the Beast....
-
gordonfreemN
addikt
válasz Tankblock #17729 üzenetére
Ha jól értem ezt a #define-t akkor ez annyi, hogy kevesebb program memóriát használ fel ezért lenne nekem jobb?
Az EEPROM csak akkor ír ha változik, egyébként nem. Az update vizsgál és csak ha van változás, akkor ír.
De egyébként lehetne úgy is, hogy teszek rá egy if ágat és csak akkor léptetem bele ha volt gombnyomás így a loop nem hajtaná végre minden ciklusban a parancsot.Nem sok időm van a C++-ra most, utolsó félévem következik plusz államvizsga (nem programozásból ) de köszi a tippet, észben fogom tartani, ha lesz kapacitás, elkezdem olvasgatni a témát. Személy szerint a Python jobban megtetszett a C mellett. Azt nem tudom piacképes-e, illetve abból mit tudok majd felépíteni a későbbiekben, de ezeket amúgy inkább csak érintőleges tanultuk. Épp ezért kezdtem el arduino-zni, hogy ne vesszen az a kevéske tudás sem.
Viszont érdekelne ez az interrupt-os téma. Ebben tudsz néhány mondattal segíteni még, hogy hogyan is gondoltad? Akár egy egyszerű de hasonló példán keresztül, mint amit feltettem (abból egy részlet mondjuk).
Egy portra nem bírom tenni, mert nincsenek összerendelve a ledek és a be/kimenetek fizikailag, a kettő közt a program teremt kapcsolatot. Arra gondolok, hogy míg a SET LED kapcsolja a bemenetet is, addig a kimenetet is meg még egy áramkör váltást is kezel. Vagy félre értettelek?
Ami lemaradt az előző hsz-emből, arduino uno-ról van szó. Bár ez lehet egyértelmű volt
[ Szerkesztve ]
¯\_(ツ)_/¯ ▁ ▂ ▃ ▅ ▆ ▇ Üdv, Andris.
-
nagyúr
válasz gordonfreemN #17730 üzenetére
Fölösleges külön kimenetre tenni a LED-eket, amikor a vezérelt kimenetre is kötheted, ami elbír egyszerre egy relével és egy LED-del is, ezzel kódot, memóriát, kimenetet takarítasz meg és kellemes mellékhatás, hogy mindig a kimenet valós állapotát fogja visszajelezni, akkor is, ha mondjuk valami miatt lefagyna vagy resetelődne a program.
-
gordonfreemN
addikt
válasz Tankblock #17729 üzenetére
Lehet rájöttem mire gondoltál, vagy ha nem is, olyan ötletet adtál, amivel megoldottam egy utolsó számomra zavaró jelenséget: bár működőképes volt a panel, mégis ha elég gyorsan nyomkodtam a mode gombot, akkor volt a mode változó 2 értékének 0-ra történő írásakor a ledek váltásában némi késleltetés.
A következő módosítással sikerült (már csak a loop-ot teszem be, a többi változatlan):void loop()
{
//vmod beállítása----------------------------------------------------------------------------------------
buttonstate_m = digitalRead(button_m); //gomb állapot kiolvasása
if (buttonstate_m != lastbuttonstate_m) //gombnyomás történt? Gomb állapota változott az előzőhöz képest?
{
delay(50); //ha történt változás az előző állapothot képest, várj 50ms-ot
if (buttonstate_m == 0) //ha a gomb nyomva, azaz bemenet értéke alacsony akkor
{
if (vmod < 2) {
vmod++; //növelje vmod változó értékét eggyel
}
else {
vmod = 0;
}
timer = millis(); //timer változó legyen millis aktuális értékével feltöltve
}
}
lastbuttonstate_m = buttonstate_m; //gomb előző állapotát írja be a gomb aktuális állapotának
if ((millis() - timer) > 5000) { //ha millis értéke mínusz timer értéke nagyobb mint 5sec (azaz eltelt 5mp)
EEPROM.update(0, vmod); //tegye eepromba a vmod változó értékét, ha az változott
}
//vset beállítása------------------------------------------------------------------------------------------
if (vmod == 0) {vset = vset_in;}
if (vmod == 1) {vset = vset_out;}
if (vmod == 2) {vset = vset_cb;}
buttonstate_s = digitalRead(button_s);
if (buttonstate_s != lastbuttonstate_s)
{
delay(50);
if (buttonstate_s == 0)
{
vset++;
timer = millis();
}
}
switch (vset) {
case 0:
digitalWrite(set_led1, 1);
digitalWrite(set_led2, 0);
digitalWrite(set_led3, 0);
break;
case 1:
digitalWrite(set_led1, 0);
digitalWrite(set_led2, 1);
digitalWrite(set_led3, 0);
break;
case 2:
if (vmod == 0) {
digitalWrite(set_led1, 0);
digitalWrite(set_led2, 0);
digitalWrite(set_led3, 1);}
else if (vmod == 1 || vmod == 2){vset = 0;}
break;
default:
vset = 0;
break;
}
lastbuttonstate_s = buttonstate_s; //gomb előző állapotát írja be a gomb aktuális állapotának
//bemenet kiválasztása----------------------------------------------------------------------------------------
if (vmod == 0 && vset == 0) { //ha vmod nulla, akkor a bemenet beállítása történik és vset_in felveszi az aktuális vset értéket
vset_in = 0; //bemeneti változó beállítása
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
digitalWrite(in_relay1, 1); //bemeneti 1-es relé kiemenet HIGH
digitalWrite(in_relay2, 0); //bemeneti 2-es relé kiemenet LOW
digitalWrite(in_relay3, 0); //bemeneti 3-mas relé kiemenet LOW
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);} //csak ha set gombnyomás történik akkor az 1-es relé resetje LOW
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);} //csak ha set gombnyomás befejeződött akkor az 1-es relé resetje HIGH
}
if (vmod == 0 && vset == 1) {
vset_in = 1;
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 1);
digitalWrite(in_relay3, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);}
}
if (vmod == 0 && vset == 2) {
vset_in = 2;
digitalWrite(mode_led1, 1);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 0);
digitalWrite(in_relay1, 0);
digitalWrite(in_relay2, 0);
digitalWrite(in_relay3, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_in, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_in, 1);}
}
//kimenet kiválasztása---------------------------------------------------------------------------------------
if (vmod == 1 && vset == 0) {
vset_out = 0;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 1);
digitalWrite(mode_led3, 0);
digitalWrite(out_relay1, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_out, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_out, 1);}
}
if (vmod == 1 && vset == 1) {
vset_out = 1;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 1);
digitalWrite(mode_led3, 0);
digitalWrite(out_relay1, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_out, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_out, 1);}
}
//áramköri lap kiválasztása-----------------------------------------------------------------------------------
if (vmod == 2 && vset == 0) {
vset_cb = 0;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 1);
digitalWrite(cb_relay1, 1);
if (buttonstate_s == 0) {digitalWrite(reset_relay_cb, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_cb, 1);}
}
if (vmod == 2 && vset == 1) {
vset_cb = 1;
digitalWrite(mode_led1, 0);
digitalWrite(mode_led2, 0);
digitalWrite(mode_led3, 1);
digitalWrite(cb_relay1, 0);
if (buttonstate_s == 0) {digitalWrite(reset_relay_cb, 0);}
delay(10);
if (buttonstate_s == 1) {digitalWrite(reset_relay_cb, 1);}
}
//EEPROM írása------------------------------------------------
if ((millis() - timer) > 5000) {
EEPROM.update(1, vset_in); //tegye EEPROM-ba a vset_in változó értékét, ha az változott
EEPROM.update(2, vset_out); //tegye EEPROM-ba a vset_out változó értékét, ha az változott
EEPROM.update(3, vset_cb); //tegye EEPROM-ba a vset_cb változó értékét, ha az változott
}
//--------------------------------------------------------------------------------------------------------
//Serial.println(buttonstate_s);
}
A mode változónál kivettem a switch case-t és egy egyszerű if-el helyettesítettem¯\_(ツ)_/¯ ▁ ▂ ▃ ▅ ▆ ▇ Üdv, Andris.
-
gordonfreemN
addikt
Teljesen igazad van. Az első esetben amikor a bemeneteket vezérlem. A másik két esetben már gonsoloodóba estem, hogy hogyan tudnám megoldani, nyilván plusz alkatrészekkel.
Feltöltök hozzá egy rajzot.
Set-reset reléket használok a jel kapcsolására.
A kimenetvalasztás úgy történik, hogy set állapotban az egyik kimenet aktív, reset állapotban a másik. Ez vezérlö oldalról annyit tesz, hogy van a mikrovezérlő kimenetén fesz vagy nincs. Ezért ide már kellene eg, tranzisztor is, hogy amikor nincs fesz, akkor kapjon feszt a másik visszajelző led. Hasonló a helyzet az áramkör választó (cb) esetén is. Nyilván megfontolandó a kevés plusz alkatrész cserébe a felszabaduot kikenetekért. Ha kell.[ Szerkesztve ]
¯\_(ツ)_/¯ ▁ ▂ ▃ ▅ ▆ ▇ Üdv, Andris.
-
nagyúr
válasz gordonfreemN #17733 üzenetére
Ezért ide már kellene eg, tranzisztor is, hogy amikor nincs fesz, akkor kapjon feszt a másik visszajelző led.
Kivéve akkor, ha minden kimenetre két ledet kötsz, egyiknek az anódját, másiknak pedig a katódját. Akkor az egyik csak magas, a másik csak alacsony szintnél világít.
Értelemszerűen a másik lábukat a +5V illetve GND-re kötve.
Mellékhatás: reset után, vagy ha bármilyen oknál fogva a kimenet bemenetre van állítva (hi-z) mindkét LED világítani fog egyszerre, ami egyébként hibajelzésnek is használható.[ Szerkesztve ]
-
gordonfreemN
addikt
Na jó, de a doboz már megvan és egy LED-nek van hely
Azaz pontosabban 3 mod LED meg 3 set LED
Még mielőtt elmerülünk ebbe: ugyanezeket a LED-eket kell használni a bemenetnél is, ahol viszont van vezérlés minden beállított kimenetre és ez 3szor a 3 bemenetre.a kimenet bemenetre van állítva ez nem világos. Hogy érted, hogy a kimenet bementre van állítva?
[ Szerkesztve ]
¯\_(ツ)_/¯ ▁ ▂ ▃ ▅ ▆ ▇ Üdv, Andris.
-
nagyúr
válasz gordonfreemN #17735 üzenetére
Jaj már
pinMode(mode_led1, OUTPUT);
Itt állítod kimenetre a pin-t. Azelőtt a pin bemenet (hi-z).Bocs, nem merültem el a kódban, hogy mivel mit csinál, csak a felmerült pin-spórolás témára reagáltam.
[ Szerkesztve ]
-
-
Béééla
őstag
Ha valakinek új: YouTube-on indult egy Arduino tanfolyam nulláról. Hátha segít
Bélabá
-
Dißnäëß
veterán
Kedves Szakik !
Nézzétek el kezdő kérdésem, de egy igen hosszú, tényleg nagyon sok logikát, menürendszerben lépkedést szeretnék megvalósítani ESP8266-al a szobai erősítőmhöz.
Egyetlen gomb lesz előlapon, és ennek nyomkodásával fogok navigálni a menüben, illetve van hozzá egy 256x64 4-SPI OLED kijelzőcske is, amin a menüpontok, státusz, ilyesmik, mikor mi, megjelenik. Rövid nyomások, hosszú nyomások, két rövid, három rövid, ilyennel fogok operálgatni majd a menüben, meg lehet lesz egy visszaszámláló is minden egyes menüpontban a jobbfelső sarokban, ami kidobja az embert mentés és minden nélkül vissza az alapállapotba (vagy akár előző menübe, mindegy is most).
Elég lesz nekem a kódhoz - vélhetően - az ESP8266 ? Belefér vajon ?
Ugye a kis Arduino Leonardo-knál látom mindig, mennyi lett a program és néha elgondolkodom, hogy hűha, ez ilyen pici terület ?
Szóval amikor egy sima gyári Fade 15%-ot elvesz egy Micro-ból, akkor mire van esélyem egy ESP8266-al ? Itt 25%-ot eszik meg, oké, valszeg nagyobb az overhead, de úúúú
Sketch uses 263233 bytes (25%) of program storage space. Maximum is 1044464 bytes.
Global variables use 28004 bytes (34%) of dynamic memory, leaving 53916 bytes for local variables. Maximum is 81920 bytes.Arduino IDE-t használok (Debian Testing legfrissebbet, apt install -al feltoltam), szokásos ESP library, Board Manager-ben pedig Node MCU.. látjátok. (A kütyü is az, ESP-F-em van, de ez az ESP-E-től csak antenna formában tér el, azt olvastam neten, a NodeMCU pedig 1-2 plussz könnyítő elektronikával van ellátva egy sima pucér ESP-hez képest).
Beleférhetek ? Most lehet megmosolyogtok, de na.
Milyen beállításon érdemes Szerintetek dolgoznom vele ?
Most ez van, ezt kaptam, a LED-en kívül semmit nem kellett állítanom, teszi a dolgát.Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
biker
nagyúr
válasz Dißnäëß #17740 üzenetére
hát, lehet én vagyok hozzád hasonló hülye, aki ezt nézegeti, de én még nem fejtettem meg, mitől függ a méret.
Volt hogy egy sort hozzáírtam, elment pl 600byte, kitöröltem, erre elment még 900byteElektromos autó töltő berendezések | Mesterséges növényvilágítás | Mai ajánlatunk: www.gerisoft.hu | www.e-autotoltokabel.hu | www.agrar-vilagitas.hu |
-
nagyúr
válasz Dißnäëß #17740 üzenetére
Nézd meg, hogy mennyit tesz ki, ha egy teljesen üres sketch-et fordítasz le. Az ESP nem egészen úgy működik, mint az AVR-ek, ezen eleve elfoglal valamennyi helyet az oprendszer. Másrészt ha nem használsz filerendszert (FS), valamint úgy tudom az OTA részt is le lehet valahogy tiltani (legalábbis régebben le lehetett), akkor 4MByte felhasználható tárhellyel tudsz gazdálkodni, szemben az AVR-ek kbyte-jaival.
A lefordított program mérete nem csak a beírt sorok számától függ, hanem attól, hogy használsz-e olyan dolgot, amihez be kell fordítani valami standard (vagy 3rd party) library-t.[ Szerkesztve ]
-
Dißnäëß
veterán
Igazából vállvonós, csak nem szeretnék egy többnapos kódolás, szívás, tanulás, fejtörés, és vért izzadt eredmények után - most mondok valamit - 75%-nál megakadni, hogy feltöltésnél egyszercsak szól az IDE, hogy nem fér több bele. Akkor nagyon morci lennék, lehetne kódot optimalizálni vagy átírni, vagy komplett új kütyü nagyobb flash-el, vagy feltenném a kérdést, hogy micropython-al beleférnék-e és utána azt is, hogy vajon megőrültem-e, mert nem hiszem, hogy sokkal lean-ebb lenne a végeredmény más nyelvről, mint egy C++.
No, de addig is, hogy rájöjjek, hogyan osszam fel ezt a kis kontrolleremet mekkora "particiókra", találtam egy marha jó leírást arról, mi a különbség az EEPROM és a FLASH között és megint hatalmasat tanultam.
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
Dißnäëß
veterán
válasz ekkold #17746 üzenetére
Köszönöm és az Előtted szólónak is, megnyugvással tölt el. Kimentem futni és a spirituális angyaloktól kezdve a majdnem-barátnőmmel történő szexen át gyorsan kikötött az agyam a 8266 leendő kódján és menüjén és úgy mindenén, viszont közben sürgősen meg kéne találnom Gugli bugyraiban valahol azt, hogyan fordítom meg 180 fokkal a kis OLED kijelző képét, mivel az oldalán lévő csatlakozói miatt csak fejjel lefele tudom beszerelni a nyílásba, hogy ne akadályozzák egymást a mellette lévő nyomógombbal (amit túl közel tettem a nyíláshoz, epic human error). Aaaaah jól indul, hát ez sem az a smooth sailing lesz
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
Új hozzászólás Aktív témák
- Villanyszerelés
- Robot fűnyírók
- HiFi műszaki szemmel - sztereó hangrendszerek
- bb0t: Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- Kerékpárosok, bringások ide!
- Google Pixel 6/7/8 topik
- Alkoholista nevelde
- AMD off topik: VGA, CPU, APU és minden, ami AMD
- Android alkalmazások - szoftver kibeszélő topik
- LEGO klub
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen