- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Projektor topic
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- HiFi műszaki szemmel - sztereó hangrendszerek
- Gigabyte alaplap topik
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Melyik tápegységet vegyem?
- Hamarosan megkezdődik a nubia 2,8K-s táblagépének szállítása
- Házimozi belépő szinten
- Házi hangfal építés
-
PROHARDVER!
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
-
Janos250
őstag
válasz
Teasüti #10199 üzenetére
"Ha már szóba hoztad az RMT-t, akkor kérdeznék: Szerinted azzal célszerűbb volna frekvencia modulált jelet létrehozni, mint a PWM vezérlővel?"
Én az RMT-vel csinálnám, azon egyszerű oknál fogva, hogy azt már használtam, nagyjából ismerem, de a PWM-et még nem
Persze lehet, hogy a PWM a jobb, ezt az tudná megmondani, aki mindkettőt használta.
"olvastam a technical reference manual-t. (Ez régen is megvolt már?"
Igen, néhány havonta frissítik, bővítik. Én ez alapján használtam az RMT-t 2017 ősszel, télen.
"a PCNT és az RMT az ugyanaz a hardver vajon, vagy csak a véletlen műve, hogy mindkettőben 8 csatorna van?"
Nem ugyanaz.
0x3FF5_6000 0x3FF5_6FFF 4 KB RMT
0x3FF5_7000 0x3FF5_7FFF 4 KB PCNT
Más memória címen vannak.
Table 6: Peripheral Address Mapping - Tech. Ref. 30. oldal
Egyébként a Tech. Ref sem teljes, még mindig. Vannak területek, amik még mindig hiányoznak, illetve egyes memóriacímek funkciója sincs leírva.
Például az RMT esetében bejelöltem sárgával, amik nincsenek dokumentálva: http://arduinouser.hu/esp32/ESP32_RMT_Register_Summary.pdf
Pl. azok a regiszterek sincsenek leírva, ami azt mutatja, hogy az egyes csatornák hol tartanak a kivitelben, azaz a RAM területük memória számlálója."Mondjuk a pcnt.h fájlnál nem mentem lejjebb, vmelyik include biztos hardver közelibb kódot rejt."
Igen:
https://github.com/espressif/esp-idf/blob/master/components/driver/pcnt.c
Aztán valamelyik fájlban a regiszterek címei is megvannak (általában struktúrában), de azt már nem keresem, megyek aludni
A PCNT-vel kapcsolatos tapasztalataidat - mindannyiunk okulására - majd oszd meg, lsz! -
Teasüti
nagyúr
válasz
Janos250 #10198 üzenetére
Igen.
Hardveres számlálás és szoftveres kiolvasás. Nekem ennyi bőven elég.
Közben átnyálaztam a PCNT driver-t is, hogy milyen függvényeket használ.
A rotary encoderes példa csont nélkül betalált (bár a srác eredeti szándéka szerint nem tudom a rotary encodernél mi az elképzelés a control pin használatára). Összeraktam a saját példámat ez alapján (copy & paste) és kipróbáltam egy PWM csatornára kötve. Szuperül működik.
Azt még nem tudom, a PCNT és az RMT az ugyanaz a hardver vajon, vagy csak a véletlen műve, hogy mindkettőben 8 csatorna van? Azért, mert legalább 6 csatornát használni kívánok az RMT-ből, de lehet mind a nyolcat idővel.Ha már szóba hoztad az RMT-t, akkor kérdeznék:
Szerinted azzal célszerűbb volna frekvencia modulált jelet létrehozni, mint a PWM vezérlővel?
Jelenleg a ledcpwm-et használom erre 50% kitöltéssel és a frekvenciát váltogatom (illetve szeretném váltogatni, de még nem jutottam el a próbáig). Viszont az előzetes tesztjeim szerint a ledcpwm nem igazán működik 0 Hz közelében. Úgy kb 10 Hz volt a minimum, ami jól működött. Nekem meg 0-2000 Hz között kellene PFM jelet csiholnom.szerk: olvastam az a technical reference manual-t. (Ez régen is megvolt már? Asszem most láttam először ezt a doksit.) De nem látom a kapcsolatot a driver-ben használt függvények és a regiszter nevek közt. Mondjuk a pcnt.h fájlnál nem mentem lejjebb, vmelyik include biztos hardver közelibb kódot rejt.
(#10187) ecaddsell
Amúgy köszi a biztatást! Végül csak IDF függvényekkel lett megoldva! -
Janos250
őstag
válasz
Teasüti #10197 üzenetére
Van, persze, de még én se használtam, csak azt láttam, hogy elvileg van:
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
482. oldal, 17. PULSE_CNTÍgy persze nagyon macerás, de valahol van hozzá valami hasonló, mint az RMT-hez, de amikor néztem, nem nagyon érdekelt, és nem is volt túl részletes a leírás.
Ami tetszett, hogy van benne hardware szűrés. Ez egy kapcsoló prell (pergés) mentesítéséhez jól jöhet.Szerkesztés:
Hopp, most nézem, hogy az általad linkelt pont ez. -
Teasüti
nagyúr
válasz
ecaddsell #10196 üzenetére
Most néztem át ezt, de ebben nincs megszakítás kezelés.
Itt csak kiolvassa a függvény a számlálót a loop()-ban.
Természetesen már szoftveresen számolom ki a frekvenciát, vagy ezt hogy érted? Ha jól értem ezt a programot a számlálás maga nem szoftveres. Nem változóban számolja a megszakításokat, hanem regiszterben. És függetlenül attól mit csinál a cpu, legalábbis remélem. Ennyiből áll a pulse counting, nem? Vagy van rá hardveres gyorsítás, ahol a pulzusok számából frekvenciát köp ki eredményül? Meglepne...Nem akarom túlbonyolítani a dolgot. Nekem elég annyi, hogy a program blokkolása nélkül tudjon számolni és igény szerint kiolvasni ezt az értéket.
Ezt hogy kell elképzelni? Vmi olyasmi, mint ESP32-nél a tetszőlegesen beállítható GPIO mátrix?
-
ecaddsell
aktív tag
válasz
Teasüti #10193 üzenetére
Lehet, hogy egyszerű, de pont azt a módszert követi ("megszakítást használni és programból számolni") amire korábban azt írtad, hogy lehetőleg ne.
Amit korábban linkeltél PCNT-s rotary encoder dekódolás szintén nem működik, ha nincs prellmentesítve a dekóder (ami túlárazottá teszi az egészet), ezt a kört már korábban lefutottam és itt leírtam.
Nekem úgy tűnik szisztematikusan megtalálod (előnyben részesíted) a rossz módszereket, csak azért mert az egyszerű.
Nem saját saját microchipet tervezek, hanem a gyártó által tervezett, utólag meghatározható logika összeköttetéseket határozom meg (ami tudtommal tényleg hasonló a digitális microchip-ek tervezéséhez).
Lelkes hobbisták így szokta retro gépeket/procikat összedobni (nem érdekel a téma csak érdekesség).
-
_q
addikt
Miért fontos, hogy a gombot röviden vagy hosszan nyomod meg? A leírásod szerint semmi különbség nincs ha csak röviden egyszer lenyomod akkor indul, még egyszer meg nyomod akkor meg leáll. Így programozás szempontból is egyszerűbb lenne.
Itt egy egyszerű példa interruptra.
Loop-ba belerakod a led és a motor vezérlő részt. interrupt függvénybe csak 1 változó értékét változtatod. 1x lenyomod a gombot belép példa szerint void blink, változó állít "HIGH" mondjuk, loop-ban if turn on == 1 akkor motor forog, led bekapcsol.
Ha megint lenyomod akkor meg változó void blink-en bleül LOW-ra áll és leáll a motor, led kikapcsol. -
Imy
veterán
válasz
Teasüti #10192 üzenetére
Köszönöm, ez részben már működik, de sajnos még nem jól.
Gombnyomásra elindul => OK
Hosszú gombnyomásra nem áll meg.
Nem tudom hol állítani, hogy X fordulatot menjen, majd Y ideig ne. (X fordulat a végleges programban 20 oda-vissza forgás lesz, és Y idő 55 perc) Azaz óránként megtesz 20 fordulatot, és 55 percig nem csinál semmit.
Ha nem csinál semmit, akkor a LED-et kell villogtatni, hogy lehesen látni, hogy stand-by állapotban van a cucc. -
Teasüti
nagyúr
válasz
ecaddsell #10187 üzenetére
Na jó, de azért mentségemre szolgáljon, hogy ez amit most találtam kb 30 sor az egész.
Amit te linkeltél, ott az egyikről elképzelésem sincs mit csinál, a másik pedig... Ágyúval verébre.Először hallok erről a VHDL-ről.
Én naiv azt hittem vmi CAD félében terveznek processzorokat...
Soha nem hallottam még ilyen "program" nyelvről.
Akkor te saját microchip-eket tervezel? -
Teasüti
nagyúr
Átírtam neked a programod.
Lefuttatni nem nyilván nem tudom, de ránézésre kb jónak tűnik.
Elvileg bekapcsolásra oda-vissza jár a léptetőmotor (feltéve ha ez a része jól működött az eredeti programnak) és felvillantja a led-et a mozgás végén. Majd két másodperc múlva újra.
Hosszú gombnyomásra megáll és két másodperces villogtatásba kezd, majd 1 perc elteltével újraindul a motor.Amúgy a Stepper.h könyvtár blokkolja a program futtatást, amíg mozgásban van a motor. Vagyis addig nem ugrik a következő sorra, amíg be nem fejezi a mozgást. Ez problémás lehet. Pl. nem tudom ez a könyvtár milyen hardvert használ (Timer, Int, stb.). Ha kikapcsolja a megszakításokat, akkor a millis() nem fog számlálni a motor léptetése közben.
-
Imy
veterán
-
Imy
veterán
válasz
Teasüti #10189 üzenetére
Köszi, akkor érdemes kitenni külön "void"-ba azaz szubrutinba, ugye?
Amúgy a működés így fest, vagyis így kellene működnie, csak a kapcsolót kellene beleintegrálni. [link]
Az általad említett:
if (millis() > temp + 1000) { }
Ezt mire is tudom használni? Hogy csak akkor ugorjon be a ciklusba, ha eltellik az idő? A millis az 1ms? Temp? +1000?
-
Teasüti
nagyúr
Ez így jelenleg halva született. Ennyi delay() mellett nem lehet időt számolni. Ezzel így max billenőkapcsolót tudnál használni, azt nem kell időzíteni. Ha gombnyomást akarsz mérni, ahhoz másodpercenként többször ellenőrizni kell a gombot, vagyis gyorsnak kell lennie a programnak. Ennyi delay()-el 4-5 másodperc legalább, mire egyszer lefut a loop(). A lineáris gondolkodás még hiányzik, de majd kialakul ha megérted, hogy nem muszáj minden egyes ciklusban végigmenni az összes parancson.
Ezért használunk feltételeket, hogy szabadon ki-be ugrálhassunk az elágazásokba. Így lehet, hogy egy If parancs csak minden századik ciklusban fut le. Vagy ezredik. Vagy százezredik... Ha millis()-el időzítesz, akkor eltelt időt számolsz milliszekundumokban. Ezt feltételben vizsgálod, hogy igaz-e a reláció:if (millis() > temp + 1000) { }
. Ideális esetben nincs megakasztva a program ennyi delay-el és mire teljesül pl. az 1000 ms várakozási idő, addigra akár sokezerszer ismétlődhet a loop(). Futhat akár üresen, ha egyik elágazásba (feltételbe) se ugrik bele, vagy csinálhat addig akármi mást is. -
Tankblock
aktív tag
-
ecaddsell
aktív tag
válasz
Teasüti #10184 üzenetére
Az első az ESP-IDF-hez íródott, miközben én Arduino IDE-ben vagyok.
Nekem még soha nem okozot gondot ESP-IDF-et használni az Arduino IDE-ből...
Többek között a második kód esetén sem.
De mindegy, te tudod mire kell és mit vállalsz be ehhez.Én elég sokat vállaltam ebben a témában (talán túl sokat is) pl. VHDL kód írása és tesztelése (működni látszik) Xilinx CPLD-re, nyáktervezés (kétfajta progit is bevetettem) stb. Nagyon sokat tanultam belőle, annak ellenére, hogy lehet ez is a befejezetlen projectek sorát fogja gyarapítani.
-
Teasüti
nagyúr
válasz
Teasüti #10184 üzenetére
Viszont ezt kipróbálom. Holnap. Mert a mai estém teljes egészében sz.pással és kutatással telt...
-
Imy
veterán
válasz
Teasüti #10178 üzenetére
Ez a programom, és így kellene működnie, de most már nem tudom, hogy mit is, és hova kellene beleraknom...
Nekem így működik most:
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- ... (végtelenségig megy, ha nincs gombnyomás)A gombnak ennyit kellene csinálnia:
- Gomb megnyom röviden, akkor indul el a motor
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- ... (végtelenségig megy, ha nincs gombnyomás)
- Gomb megnyom hosszan, akkor megáll a motor
- LED, motor áll, nem csinál semmit
- Gomb megnyom röviden, akkor indul el a motor
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- ... (végtelenségig megy, ha nincs gombnyomás)Programkód:
/*
===============
Stepper wiring:
===============
Arduino - Driver
D8 - IN1
D9 - IN2
D10 - IN3
D11 - IN4
===========
LED wiring:
===========
LED "-" : GND
LED "+" : D13
*/
#include <Stepper.h>
#define STEPS 100
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
Stepper small_stepper(STEPS, 8, 10, 9, 11);
int Steps2Take = 0;
long temps = 0;
int Cycle;
int Rotate_n_temp;
int Rotate_n;
int PSW = 5;
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
pinMode(IN1,OUTPUT); //stepper motor coil-1
pinMode(IN2,OUTPUT); //stepper motor coil-2
pinMode(IN3,OUTPUT); //stepper motor coil-3
pinMode(IN4,OUTPUT); //stepper motor coil-4
pinMode(PSW, INPUT); // Push Switch
}
void loop()
{
Rotate_n=1;
Rotate_n_temp = Rotate_n-1;
digitalWrite(13, HIGH);
delay(100);
Serial.println("Stepper motor working, one cycle is OK ");
small_stepper.setSpeed(300);
if (Cycle<=Rotate_n_temp){
Steps2Take = -4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
Serial.println("Rotate cycle noumber:");
Serial.println(Rotate_n);
Serial.println("Motor step noumber:");
Serial.println(temps);
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
Steps2Take = 4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
Serial.println(temps);
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
Cycle++;
}
else{
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
/* digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);*/
//1 min waiting, and restart motor
Cycle=0;
}
} -
Teasüti
nagyúr
válasz
ecaddsell #10183 üzenetére
Hát mondjuk megszakítást használni és programból számolni. Az szoftveres és sokat elvesz a cpu időből, ha nagy a frekvencia.
Értékelem a segítséget, de sajnos nem tűnik számomra használhatónak egyik sem.
Az első az ESP-IDF-hez íródott, miközben én Arduino IDE-ben vagyok.
A második meg egyáltalán micsoda? Nem fogom tudni visszafejteni azt a kódot, ahhoz túl nagy és bonyolult.
Főleg, hogy egy rakás hardver közeli függvényt hív be, amikről fingom sincsen.Vmi Instructables.com színvonalú példa nincs véletlen? Én nem találtam...
-
Teasüti
nagyúr
válasz
vargalex #10179 üzenetére
Vagy ha úgy érted, hogy a Motionapps20 header fájlból van-e több példány is, akkor igen. Van egy módosítatlan a könyvtárban és a módosított meg a program mellett. De nem gondolom, hogy ez probléma lenne. Ha nem a program mellettit töltené be, akkor nem az osztályra dobna hibát, hanem sok másra.
Meg a példában simán lefordul így. -
-
Teasüti
nagyúr
válasz
vargalex #10179 üzenetére
Azt a header fájlt egy az egyben másoltam át a példából. Az alap könyvtár meg nincs módosítva.
-
Teasüti
nagyúr
Nyomógomb épp most volt terítéken nálam, itt egy konkrét példa.
Az utolsó oldalon láthatod a teljes kódot, amiben benne hagytam egy már nem használatos részletet is, ami a nyomvatartást kezeli.
Ha további magyarázatra lesz szükséged, írj bátran!(#10176) Imy
Itt némi zavart érzek az erőben. Miért szeretnéd leállítani a loop()-ot? Ha azt megállítod, akkor csak reset után fog újraindulni a program. Amúgy ki tudsz lépni belőle egy simareturn;
paranccsal, de innentől megáll működni a processzor. Ha egy feltételes várakozás kell (feltételes program stop, ha ez ismerős), akkor azt csinálhatod egy while ciklussal, ami végtelenül fut amíg nem teljesül a feltétele. De ezekre igazán semmi szükség, hisz maga a loop() is végtelenül ismétlődik, viszont ha a gombnyomásodtól függően indítasz el feltételeket, akkor megcsinálhatod úgy, hogy egész egyszerűen átugorja a parancsokat az if-ben egészen addig, amíg nem teljesül vmeyiknek a belépési feltétele. Ilyen formában nem áll meg a program működése, mégis kvázi üresen fut a loop().(#10170) ecaddsell
Pulse counter kellene frekvencia méréshez. Hardveres lehetőleg. És Arduino IDE-ben.(#10171) vargalex
Igen, természetesen. A működő példaprogramból emeltem át a szükséges sorokat egy az egyben, természetesen a helyüknek megfelelő sorrendben elhelyezve.
A második fülön lévő header fájl hívja meg az MPU6050.h könyvtárat, amiben meg definiálva van az MPU6050 osztály. Ez így ebben a formában simán lefordul a párhuzamosan megnyitott példaprogramban. Ötletem sincs itt miért nem. -
Ha van egy Wemos D1 r2-es lapom, meg egy SensorShield 5-öm, honnan tudom, hogy melyik kimenet mi?
Elvileg ez a Wemos lábkiosztása: -
Imy
veterán
Egy pédát tudsz?
Neme úgy kell, hogy a "void loop" többször lefut, de a gomb megnyomásának az értéke a "void loop"-ok alatt mindig "bekapcsolnak" kell lennie. Hosszú vagy 2. gombnyomásra pedig hamisnak, hogy álljon le a "void loop".
Azaz pl a "void loop"-ban egy LED fel, le kapcsolás van (csak egy példa), és ez úgymond vilog addig, amíg a gombot nem nyomom meg még egyszer, vagy pedig hosszan.
-
Imy
veterán
válasz
gyapo11 #10172 üzenetére
Igen, a loopnak pörögnie kellene, de a gomb megnyomását valahol el kellene tárolni, és akár kiolvasgatni. De azt nem tudom, hogy hova, vagy hova.
Egyszerű dolgokra szoktam használni az arduinot, most is egy relé panellel ezt meg tudnám oldani, de hely nincs a panelnek, és könnyű, egyszerűnek kellene lennie.
Remélem valaki tud segíteni, aki már csinált ilyet.
-
Janos250
őstag
válasz
gyapo11 #10172 üzenetére
Az ilyesmik miatt (is) kedvelem én az ESP32-t. Egyik szál nem csinál mást, csak figyeli a gombot, a másik szál meg..., a harmadik meg.. és így tovább, ahány kell. A szálon belül nyugodtan lehet "várakozás", mert az nem igazi várakozás, hanem a másik szálnak adódik át a vezérlés.
-
gyapo11
őstag
Nálam úgy volt, hogy a gomb benyomására egy változóba került a millis() értéke, indult egy while ciklus, ami figyelte a gomb felengedését, amikor ez bekövetkezett, akkor a jelenlegi és eltárolt millis összehasonlításából kiderült a nyomvatartási idő. Hátránya ennek a megoldásnak, hogy amíg a while fut, addig a loopban levő többi teendő nem fut, de nálam ez nem volt gond.
Ha fontos, hogy közben a loop pörögjön, akkor kicsit bonyolultabb.
Gomb benyomása után változóba millis, ezután olvasgatni a millist meg a gomb állapotát, 50 ms-en belül nem kell nézni a gomb felengedését, az még prell idő, utána már igen, és a felengedéskor kiszámolni a jelenlegi és a tárolt millis értékéből a nyomvatartási időt.
Hogy mikor mit csináljon a pörgő loopban, azt egy változóval lehet vezérelni, értékétől függően pl. egy switch egy-egy ága fut. Ha a változó 1, akkor mondjuk várja a gomb benyomását. Ha benyomódott a gomb, akkor a változóba 2, ekkor várja a felengedést. Ha felengedted, akkor változóba megint 1, és ismét várja a megnyomást.
Vagy vannak időzítő libek is, amikkel talán egyszerűbb, még nem próbáltam ilyeneket. -
vargalex
félisten
válasz
Teasüti #10166 üzenetére
Szia!
Az include ugye a definíció előtt szerepel a kódban? <> és a "" include között csak a keresés sorrendjében van különbség. Előbbi esetében az IDE-ben definiált search directory-kban keresi, ezt használjuk a lib-ekben definiált header-ek include-olásához. A "" módon megadott pedig először a programod forrás könyvtárában keresi a header file-t, ezt a saját modulok include-olásához használjuk.
-
Imy
veterán
válasz
Teasüti #10167 üzenetére
Hát nem az első, de bonyolult dolgokat nem szoktam vele csinálni.
Amit linkeltél, abban nem találom, de inkább leírom szavakkal.
Adott egy gomb, és egy nyomógomb.
A LED addig nem villog, amíg nem nyomom meg a nyomógombot. Ha röviden megnyomom nekiáll villogni a végtelenségig vagy ha hosszan nyomom a gombot akkor megáll. Ha ismét röviden nyomom, akkor kezdi elöről, addig nem áll meg, amíg a nem nyomom hisszan a gombot. Ezt rá tudnám húzni a jelenlegi motormozgatásra is szerintem. De erre kellene nekem egy mintaprogram, mert annyira ezt így nem vágom.
-
Teasüti
nagyúr
Kérhetnék egy kis segítséget a PCNT-vel ESP32-n? Nem találok egyetlen egy példát sem.
-
Teasüti
nagyúr
Ahogy nézem a gomb kezelésed még nagyon-nagyon primitív. Volna egy erős gyanúm, hogy ez kb az első programod lehet és nem foglalkoztál még túl sokat a témával.
Jelenleg csak annyit csinálsz, hogy lefut az első feltétel ha nyomod a gombot és a második, ha nem.
Ez sajnos még elég messze van a kitűzött céltól, de ajánlanék egy tutorialt, ha megy az angol. Ez egész jó bevezetőnek tűnik az időzítő használatába.
A goto-ra meg nem lesz szükség. Mivel a loop() végtelen ciklusban fut, ezért felesleges vissza-vissza ugrálni a kódban, mivel úgyis kezdi elölről. -
Teasüti
nagyúr
Szép estét!
Van itt aki több fülön ír programot? Előfordult már olyan, hogy nem találta a program a függőségeket és hiába rakom be akár a program mellé a referált könyvtárat, egyszerűen nem látja és hibát dobál a típus definiálásakor.
Próbáltam <> és "" jelekkel is behívni a könyvtárt, sikertelenül.
A program legelső fülén (a fő fájlban) konkrét példaként szerepel egyMPU6050 mpu;
sor. Ez az osztály az MPU6050.h fájlban van, amit betettem a program mellé. Meg is nyitja a többi füllel együtt, és rohadt idegesítő, hogy egy kattintásra van az osztály a definíciótól, mégis 'MPU6050' does not name a type hibát dob.Van vkinek bármi elképzelése miért?
-
Imy
veterán
Olyan problémám lenne, hogy egy nyomógombbal akarom elindítani, majd esetleg egy hosszú nyomással leállítani a motort, ami a következő program szerint fut:
/*
*/
#include <Stepper.h>
#define STEPS 100
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
Stepper small_stepper(STEPS, 8, 10, 9, 11);
int Steps2Take = 0;
long temps = 0;
int Compteur;
int Rotate_n_temp;
int Rotate_n;
int PSW = 5;
int PSW_S = 0;
void setup()
{
pinMode(13, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(PSW, INPUT); // Push Switch
}
void loop()
{
if (digitalRead(PSW) == HIGH)
{
Push_b_on:
Rotate_n=2;
Rotate_n_temp = Rotate_n-1;
digitalWrite(13, HIGH);
delay(100);
small_stepper.setSpeed(300);
if (Compteur<=Rotate_n_temp){
Steps2Take = -4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
Steps2Take = 4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
Serial.println(temps);
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
// Glignotement de la LED
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
Compteur++; //Ajoute 1 au Compteur
}
else{
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
Compteur=0;
goto Push_b_on;
}
}
else
{
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(100);
}
}Mivel soros futású a program, így a goto paranccsal nem ugrik vissza az elejére, azaz ha akkor nincs benyomva a gomb, akkor nem megy a motor.
Hogyan lehetne megoldani, hogy a gomb egyszeri rövid nyomására elinduljon, és addig ne álljon le, amíg a gombot nem nyomom hosszan? (Leállítás kb 2sec nyomásra)
-
gyapo11
őstag
Csinálok egy mozgásérzékelős lámpát arduinoval, és nyilván sleepben kellene lennie az idő nagy részében, és a szenzortól jövő jelre kell fölébrednie. Van valakinek kéznél kód erre?
Van egy ilyen kódom, ezt is itt kaptam:#include <avr/sleep.h>
void sleepNow() // here we put the arduino to sleep
{
byte adcsra = ADCSRA;
wait(100);
ADCSRA = 0;
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
attachInterrupt(0, wake_up_pin, LOW);
sleep_mode();
sleep_disable();
ADCSRA = adcsra;
detachInterrupt(0);
}
void loop()
{
Serial.println(" Megyek aludni..");
sleepNow() ; // elmegy aludni, majd felkelted
Serial.println(" Most keltem fel."); // majd innen folytatja
}Lehet, hogy ez jó is, a wake_up_pin-re kell kötni a szenzort, szintet majd meglátom, és elaltatás előtt ellenőrizni kell, hogy ne legyen aktív a szenzor. Vagy lehet, hogy ez se kell, mert akkor azonnal fölkel megint, indul az időzítés, ha az lejárt, jöhet az altatás.
Meg még az lenne a kérdés, hogy ha van egy másik ébresztés egy másik lábon, akkor kell egy másik sleepNow függvény arra a lábra és kész? Vagy még több esetén? Össze kell vagy kapcsolattal gyűjteni, egy lábon ébreszteni, és más lábakon beolvasni, hogy ki volt az? -
Janos250
őstag
válasz
vampire17 #10162 üzenetére
Nem értek hozzá, csak a neten próbáltam utánanézni, de azért beledumálok
Ez a chip OOK modulációval dolgozik, ami azt jelenti, hogy van jel/nincs jel, azaz nulla esetén nincs jel, míg 1 esetén egy adott ideig van jel.
http://www.rfwireless-world.com/Terminology/OOK-vs-FSK-vs-ASK.html
https://www.edaboard.com/showthread.php?300713-help-about-modunlate-OOKÉn hogyan próbálkoznék:
Egyenirányítanám a jelet, szűrném, azaz kondi-ellenállással kiegyenlíteném, szkóppal megnézném, hogy mekkora a jel, szükség szerint erősíteném, vagy gyengíteném, hogy TTL szint legyen, azt rátenném egy digitális analizátorra, és látnám, mi a helyzet.
https://www.ebay.com/itm/USB-Logic-Analyzer-Device-Set-Compatible-to-Saleae-24MHz-8CH-for-ARM-FPGA-M100/253841718379?hash=item3b1a253c6b:gNoAAOSwjXVaoiyH
Ahogy elnézem, a beállításra elég sok variáció van, a fene tudja, hogyan állították be:
http://www.cmostek.com/download/AN113%20CMT2150A-2250(1)A%20One-Way%20RF%20Link%20Development%20Kits%20Users%20Guide.pdf
http://www.cmostek.com/download/AN115%20Pairing%20CMT2150A%20and%20CMT2250(1)A.pdfVagy a vevő oldalon nézném dig. anallal, hogy mi jön be.
Vagy vennék helyette egy könyebben kezelhetőt.
-
vampire17
addikt
Sziasztok!
Egy ideje kuzdok egy Ilyen kapucsengovel:
Ebbol az "F56" -os Kinetic van nekem.
Par info amit mar kideritettem rola es kep:
- A chipje az adonak: cmt2150A
(Ebbol elv van 433-as es 315-os is)
Kep az ado belsejerol:
Eddig semmivel sem sikerult megfognom a jelet... Amivel probalkoztam: Sonoff RF Bridge 433 mhz-es (modositott radio FW-vel) meg B1-ben sem lat semmit...
Arduino + QIACHIP 433mhz RF Relay Receiver Module
A szoftver az RFlink volt. szinten nem lat semmit...meg debug modban sem latja a csengo jelet (Ekkor kodolas nelkul fog mindent)
Itt van egy kep a gyari vevorol is (Ezzel termeszetesen tokeletesen mukodik az ado):
Megjegyzes: Mind a Sonoff, Mint az RFlinkel tokeletesen foghato mas csengo vagy egyeb 433-as eszkoz jele. csak a Kinetic csengo nem megy (van egy masik kinetic nyomogomom is, masik gyartotol, az sem latszik...)
Most probakepp rendeltem meg egy ilyet, ez az utolso otletem: [link]
ha esetleg tudnatok valami tippet, megis mivel lehetne fogni a csengo jelet az nagy segitseg lenne! Kezdem feladni... Nem akkora dolog amugy, csak mar nagyon bosszant, hogy nem akar osszejonni...
-
Lego-hoz keresek arduinót, amit lehet távirányítani. Most melyik ajánlott? Még mindig a wemos, vagy van már azóta jobb? (arduinos motorvezérlő lenne, 2-3 motor, plusz ledekhez kellene)
-
Tankblock
aktív tag
Lineáris 0.1V és 3,1V között... Ez is van a linken amit küldtem. Bele kell tervezni a projectbe. Anno az attiny13A projectemben inkább a 1V referenciát választottam mint a tápfeszültségig mérést.
Ha meg nagy pontosság kell arra vannak cél ICk. Valamit valamiért....
Boldog 2019 et Mindenkinek! -
ecaddsell
aktív tag
válasz
Tankblock #10148 üzenetére
Ha csak ez az egyetlen gondja lenne az ESP32 ADC-jének, akkor igen, de sajnos több sebből vérzik.
A nemlinearitás egyébként máshol jobban vesézve van:
https://github.com/espressif/esp-idf/issues/164Amit linkeltél meg van említve a zaj is, amibe már korábban is belefutottam és amit sokkal nehezebb kezelni.
Amit ajánlgatnak az vicc, 100nF-os kondit csak az tehet oda, aki valami lassú szenzort olvas. Eleve az ESP32 ADC-je nem valami gyors, szóva tipikusan a multisampling se opció.Visszatérve a zajra: A zaj forrása tipikusan a digitális kapcsolási zaj és erősen függ attól, mennyi kimenet változik szimultán módon. Na erről nem szól az ábra.
Ma (meg már 1 ideje) a komolyabb analóg és digitális részt is tartalmazó chipek több tápfeszt igényelnek. Azaz külön kellhet szűrni és stabilizálni a digitális mag tip. alacsonyabb tápfeszét (1V tól 1.8V környéke), a digit interface-t (tip. 1.8-3.3V) ill. az analóg részeket. Ez persze megdrágítja a dolgot és ott spórolnak ahol tudnak.
Kb. ennek az eredménye, hogy a spec szerint 12 bites ESP32 ADC kb. 7 vagy max. 8 bites valójában...Amivel ezzel kapcsolatban mostanában küzdök: Miután az ESP32-vel a 8 digit/s reciprok freki mérőt megcsináltam, elkezdtem áttérni a 10 digit/s-es interpoláló reciprok freki mérőre. Ennek az a lényege, hogy nemcsak azt mérjük, hogy a jel egy adott egész számú periódusára hány egész referencia jel periódus tartozik, hanem a referencia jel tört periódus idejét is mérjük.
Ez úgy történik, hogy a tört periódus ideje alatt 1 kondenzátort töltünk konstans árammal és a töltés végén megmérjuk a kondenzátor feszültségét (ennek a digitális részét CPLD adja nem az ESP32).
Mivel nálam a referencia periódusa 10ns (100MHz) max. ennyi ideig tölt a kondenzátor, ami túl nagy nem lehet, mert akkor nagyon nagy tötlő áram kellene. Szóva a kondenzátor kb. 1 nF, és 30mA körüli töltőárammal kb. 280mV feszültség emelkedést lehet elérni max (azaz normálisan 0-280mV emelkedés, ami nem nulláról indul, szóval lényegtelen, hogy kis értékeket nem tud az ESP32 mérni).
Azaz a két digithez kb. 3mV felbontással kellene mérni. Viszonylag gyorsan, mert a kis kondenzátor gyorsan veszti a töltést még nagy impedancián is.
Na itt az ahol az extra 100nF nem opció.
Oszcilloszkópon frankón látszik a jel. A filléres Aneng 8008 multiméter is konzisztensen tudja indikálni az feszültség emelkedést.
Csak az ESP32 küzd a jellel a saját maga által generálta zajban...Szóval messze nem csak a linearitás a gond. Zajos és a sebessége is megérne 1 külön github részt, hogy mi a teendő, ha normális sebességet szeretnénk (erre is elég sok fórumbejegyzés van már). Talán mégsem véletlen a sok panasz.
-
_q
addikt
válasz
Tankblock #10151 üzenetére
Igen, emiatt vettem külső ADC-t. Költségbe így rosszul jöttem ki.
Az ESP 3v3 regulátorából jövő feszültséget használtam és egy potit, közben multiméterrel mértem. 0-3V között 10-15 pontot vettem fel. A multiméter ami elvileg pontos, ahhoz képest tized voltokat tért el az ESP ADC-jével mérve az érték. 3-3.3V között talán 1 értéket mért az ADC, 3.1 V körül már 3.3V-ot mért, miközben multiméterrel láttam, hogy nem annyi az érték. Közel 0 V-nál is hasonló volt, bár ott pontosabb. Tehát a 0 és 3 V körül levágta az értékeket és nem pontosan mérte, a kettő között pedig tized-század V eltérések is előfordultak. Ahol esetleg a tized V eltérés belefér ott még használható lehet talán.
Sajnálom, mert az uno-n lévő atmel ADC-je elég pontos és általános mérésekre szépen használható, ami nem mondható el az ESP32-ről.
(#10153) tvamos
Én mikor keresgéltem arduinos könyvtár support-ot, akkor az ADS1115-ot találtam, így nekem az lett. -
-
rsanya87
tag
válasz
gyapo11 #10145 üzenetére
Legjobb esetben a 2 fekete tekerővel lehet jobbra balra állítani, de úgy, hogy egymásnak ellen kell tekerni. Szóval egyiket ki másikat be, úgy fordul. A két ezüst tekerentyű pedig a fel-le irány, azt is egymásnak ellen kell tekerni, ugyanúgy működik mint a másik. Szóval 4 motor kellene aminek iszonyat nyomatéka van.
-
Tankblock
aktív tag
-
Attix70
aktív tag
válasz
Tankblock #10148 üzenetére
Teszteltem de nem lineáris, és nem is 0-tól indul a mérés ez a grafikonon is látható (persze attól még lineárisnak tüntetik fel). Ha használni akarom akkor kell egy tartományt keresnem amin belül lineáris (egyéb hardveres trükkökkel). Ez egy nagy hibája az ESP32-nek, remélem megjelenik valami hasonló amin az AD konverter jól működik
-
rsanya87
tag
válasz
gyapo11 #10145 üzenetére
Majdnem jó a koncepció, csak hogy az égi pólus fix, akörül "forog az ég". Szóval ha a mechanika pontosan pólusra áll, attól még kell a vezetés. Valamint átalakítani annyira a mechanikát, hogy pólusra tudjunk állni, nagyon a stabilitás hátrányára válik. A mechanikafej mozgatása több csavar egyidejű mozgatását kívánja, amit kézzel is elég nehéz tekerni. A pólusra állás talán az egyetlen amit nagyon nehéz motorizálni, talán lehetetlen is (de lehetetlen nincs mint tudjuk
) Csinálok mindjárt képet és szerkesztem a hsz-t.
-
gyapo11
őstag
válasz
rsanya87 #10136 üzenetére
Ja, nem írtam elég részletesen. Szóval nem a távcsővel kell pólusra állni, hanem annak a platformnak a tengelyét kell a pólusra irányítani, ami aztán a távcsővel együtt forog. Tehát kell egy másik arduino, vagy az egy arduinonak egy másik funkciója, ami nem a platformot forgatja a Föld forgásával ellentétes irányba, hanem a platform tengelyét állítja két koordináta mentén, hogy az pontosan a pólusra nézzen. És ennek a vezérlését lehetne úgy megcsinálni, hogy a távcsövet a tengellyel párhuzamos helyzetbe állítani, ráállni gombok nyomogatásával a Polarisra vizuális visszacsatolással, majd egy gombnyomásra az időpont ismeretével rá tudna állni a pólusra. Innentől már bárhova nézhet a távcső, a csillagok állnak.
-
Attix70
aktív tag
válasz
rsanya87 #10134 üzenetére
A tápnak nem az áramával van gond, hanem a stepper motorokkal. Mivel induktív jellegű ezért lehet, hogy az adott alkalmazásban (12V-ról) csak pár tized ampert vesz fel. Ahol erő is kell ott minimum 24V-os táplálást használnak, csak tanácsot szerettem volna adni (szerintem ez lenne az egyszerűbb, egy próbát megér).
Más:
Korábban kérdeztelek titeket, hogy mivel oldanátok meg elektromos bicikli diagnosztikáját (HC-05+arduino vagy ESP32). ESP32-őt ajánlottatok. Próbálkozásaim alapján tapasztaltam, hogy nagyon NEM lineáris az ADC benne ami egy akkus eszköznél fontos lenne. Valami tanácsotok lenne? -
brickm
őstag
válasz
brickm #10101 üzenetére
Sziasztok ismét!
A probléma valami olyasmi lesz, hogy a külső .h file-t nem forgatja be a változóba MAC alatt az IDE.
Kipróbáltam egy korábbi programomat, amiben nincs külső file, ezesetben szépen megjelenik a lap.
Viszont window alól az új programom is. Másképp kellene megadni az elérési utat mac alatt? De akkor miért nem ad hibát, hogy nincs file?#include "index.h" -val hívom meg programban.
-
rsanya87
tag
Ha goto-s rendszer van, akkor bármelyik planetáris programmal lehet vezérelni. Stellarium talán a leghíresebb. Csak kell egy ascom driver, ami megszünteti a mechanikák közti különbséget. A program koordinátákat küld a vezérlőnek, és az rááll.
Ez a rendszer amit én készitek jelenleg, annyit tud, hogy követi a beállított objektumot (óramű), illetve van egy phd2 nevű program, ami egy kamerát használva követ. Beállítasz egy vezetőcsillagot, és ahogy az kimozdul a területről (nagyon pici kocka) automatikusan jelet küld az ardunak a korrigációról.
A goto-s rendszer kivitelezése nehéz.. és mivel programozási tudásom 0, igy neki sem állok -
rsanya87
tag
válasz
gyapo11 #10135 üzenetére
A pólusra állás azért nem ennyire egyszerű. A komplett mechanika fejet kell pólusra rakni, kézzel is kell bőven erőt kifejteni, + kétkezes mutatvány. Magának a pólusra álláskor a teleszkópnak semmi köze az egész folyamathoz, elvileg cső nélkül egyszerübb is, kisebb súly.
Sőt elvileg a GOTO-t is meg lehet vele tanittatni (goto mikor megmondom mit akarok látni és rááll. Csak a programozáshoz teljesen h.lye vagyok sajnos.... Ha tudnék programozni már olyan vezérlésem lenne beszabehu..
Ez a projekt ha boltban veszem meg 60ezer ft, Így szerintem max 15ezer ft a vége + az idő amit beleölök, de forrasztgatni építeni szeretek.
-
gyapo11
őstag
válasz
rsanya87 #10134 üzenetére
Úgy tudom, hogy több képet készítenek, és azokat adják össze software-rel, mert így az egyes képek zaja kioltja egymást, a hosszabb expós egy képen viszont ott lesz a zaj.
Ha már arduinoval vezérled a távcsövet, akkor meg lehetne oldani a pólusra állást úgy, hogy a pólus közelében egy csillagra ráállítod pontosan a távcsövet, célszeűen a Polarisra, és onnan az arduino lépteti a pólusra, csak az időpontot kell tudnia pontosan az arduinonak ehhez.
-
rsanya87
tag
A táp egy ATX pc táp, a 12voltos ága 16A ad le (a papírja szerint).
Egyenlőre kipróbálom majd így.
Azért kell a két motor, ha kézzel irányítom (keresek az égen) a távcsövet, minden irányba tudjam mozgatni, valamint ha PC által megy a vezetés (kamera adatai alapján korrigál, így mindig fix helyen marad az objektum) akkor tudjon bármerre korrigálni. Alapesetben a távcsővel pólusra kell állni, és így elég csak az egyik tengelyt mozgatnia a vezérlésnek ha csak nézelődök (óragép funkció), erre kellett a lenti számítás. Ezzel a módszerrel 30s-1m képeket lehet készíteni (mert 100%ban pólusra állni kb lehetetlen), a PC vezetéssel viszont 5-10perces képek sem kizártak.
A 4:1 áttétellel mint írták is a kollegák pontosabb vezetést lehet kihozni.
Még hátra van a mechanikafej szétszedése, és valami fasza grafitos zsírral történő kezelése.Majd lehet kérdezek még a pontos meghajtóbeállításról (drv8825), az se legyen hiba.
-
gyapo11
őstag
válasz
Attix70 #10130 üzenetére
Lehet, hogy az erősebb táp megoldaná a mostani áttétellel is, de ha a software-ben át tudja állítani több lépésre adott idő alatt, és a két kerék is megvan, akkor így is jó lehet, 1/2.4 erő fog hatni a motor lépése ellen. Ha nem elég, akkor jöhet a nagyobb táp vagy még nagyobb áttétel. Nem tudom melyik tudós mondta, hogy adjatok egy fix pontot, és kimozdítom a Földet a helyéről. És tényleg, csak áttétel kérdése. Bármilyen kis motorral lehet mozgatni bármekkora távcsövet, csak áttétel kérdése. Ha túl nagy áttétel kell, akkor persze a Föld forgása gyorsabb lesz, és nem tudja követni.
-
Amarton
tag
Van egy MCUfriend 2.4" TFT shieldem.
A lábait kikötöttem egy próba panelra, azaz nem shieldként használom.
Sajnos kellene még egy analóg port, de arra a displaynek a lábai vannak konfigurálva.
Hogyan tudom azt megoldani, hogy A4 (LCD_RST) helyett mondjuk a D12 legyen használva? -
Vladi
nagyúr
válasz
rsanya87 #10120 üzenetére
A kérdés, hogy hány amperes a tápod. Ha erősebb, akkor több erőt : nyomatékot ad le. 2 db 2 amperes motornál minimum a 4 amperes táp, de sokkal nagyobbra is tervezheted. Akár 10-es pl.
Ha kicsi a tárcsa a motorn és nagy a másikon akkor pontosabban tudod mozgatni, sokkal kisebb lépéseket tesz meg pl. Ha 4:1 az arány, akkor az 1.8 fokos motor elmozdulás a teleszkópnál ez már negyede!
Viszont akkor az erőd a nyomaték lecsökken. A fordulatszám megint más. Viszont ha léptetőmotord van, akkor ki tudod nagyon nagyon pontosan számolni, hogy 1 lépés az egyiken és 3 lépés a másikon akkor átlósan mennyit jelent. Így nagyon nagyon nagyon pontosan tudod követni a csillagok mozgását.
Nagyon érdekes projekt amúgy, örülnék, ha leblogolnád.
Mondjuk ez a kérdéskör már inkább gépészet.
mod: de van mégegy áttáted! a forgó alkatrésznél a teleszkópban.
-
gyapo11
őstag
válasz
rsanya87 #10123 üzenetére
Persze, csak az arány számít, ha több méter átmérőjű/több száz fogú kerekek vannak, akkor is. Vagy ha több kerék adja ki a végáttételt, akkor is.
Szerintem itt célszerűbb a 4:1, mert a meghajtás felől nézzük a vége felé, a meghajtó motor 4-szer annyit fog forogni, mint a végső kerék. -
rsanya87
tag
-
gyapo11
őstag
válasz
rsanya87 #10116 üzenetére
Az áttétel változásának arányában kell változni a meghajtó fordulatszámnak, hogy a végfordulatszám azonos maradjon.
A 18-as kerék 1 fordulatára a 30-as kerék 0.6-nyit fordul el, a 10:40-es áttételnél meg 0.25-nyit.
18/30 helyett a 10/40 2.4-szeres, ezért az új rpm 6.38675*2.4 = 15.3282. -
rsanya87
tag
12voltos a rendszer, rendes 220as tápegységről (ATX táp átalakítva), néha autóaksiról megy a rendszer.
Uno az alap, 2db DRV8825 vezérlő van. Egyedi shield azért kellett, hogy ne a csupasz vezetékek legyenek szanaszéjjel. Azon van a tápcsatlakozó, a 2 motorvezérlő, meg a kivezetések a motorhoz (2db nema17 2A motor), valamint 6 input a pc vezérléshez, 4 out a visszajelző ledeknek.Mivel cél a lassú preciz mozgás, nem a motoron kell lennie a kis tárcsának, a mechanikán a nagynak? Az én értelmezésem szerint ha a motoron van a kis tárcsa, annak többet kell forognia, ezáltal egyszerre kevesebb erőt kell kifejtenie ahhoz hogy megmozdítsa a cuccost.
És nekem is az a problémám, hogy nem tudom miként kell kiszámolni
Rakok fel képet, hogy értsd/értsétek
-
Vladi
nagyúr
válasz
rsanya87 #10118 üzenetére
Most fejből nem vágom, de itt is erőkart kellene számolni, nem? Tehát elvileg nagyobb tárcsa hajt kisebbet, akkor növeled az erőt.
De a motor is kérdéses! Lehet, hogy a táp kevés neki és azért erőlködik. Nameg a szíjnak is van ilyen tulajdonsága, hogy hajlamos megcsúszni.
Akkor a lényeg, hogy fix rpm-et kapj a végén. Ez csak arányszámítás. Most van 6 valamennyi, így kapsz x fordulatot a végén. Akkor már minden változód ismert.
Itt nem is a lépésszám számít, hanem a motor sebessége. Ezt szoftveresen állítod leginkább. Milyen szoftver és hardveres vezérlőd van? Írtál valamilyen custom shileldet.
Hány tengelyed van? Mármint hány motor? 1?
-
rsanya87
tag
Bordájszíhajtás van, és ahhoz a kerék.
Igen kicsit gyenge a nyomaték. Abban nyilvánul meg, ha nem tökéletes az egyensúly, hajlamos megállni. Nem minden esetben áll meg, de jobb a biztos ezért változtatnám meg az áttételt.Távcső mechanikáról van szó, és a jelenlegi rpm-el közel tökéletes a csillagkövetés.
Nagyobb áttétellel a motor sem erölködne annyit, de a sebességnek maradnia kell a jelenlegin. -
rsanya87
tag
Igen.
A jelenlegi (motor 18borda, mechanika30borda) áttétel rpm-e 6.38675, és növelni szeretném az áttételt, motor 10 vagy 12borda, mechanika 40 vagy 48borda, de a sebességnek pontosan maradnia kellene annyinak, amennyi most, mivel precíz vezetés kell, ami be lett lőve, de kissé gyenge ezzel az áttétellel.
itt egy kódrészlet:float rpm= 6.38675; // alapsebesség fordulat/perc
float spr= 200.00; // lépés / fordulat a motorodnak ez fix értékeNa az új áttételnek kellene kiszámolni az RPM számát. Itt akadtam meg.
4:1 lenne az új áttétel (ha jól írom, motoron a kisebb szijtárcsa), de lövésem nincs az áttételekről, hogy miként hogy számolom :/ -
rsanya87
tag
Sziasztok!
Lenne egy ardus projektem, de elakadtam egy ponton.
2 stepper motor precíziós meghajtása a feladat. A program kész, egyedi uno shield kész, lassan minden a helyére kerül, de...
Az eredeti koncepció úgy szól, hogy a motoron 18 bordás tárcsa van, a meghajtani kívánt eszközön pedig egy 30bordás. Ehhez ki lett kisérletezve a pontos lépésszám.
Jelenleg szeretném megváltoztatni az áttételt 10-40 vagy 12-48 tárcsákkal. Van rá mód, hogy ne kelljen kísérletezgetni újra? Valahogy kiszámolható? Vagy mindenképp tesztelgetni kell?
Köszönöm a választ.
Üdv. Sanya -
Janos250
őstag
válasz
XP NINJA #10110 üzenetére
Az én tapasztalataim:
Ha a feltöltés nem megy, akkor
1.) nálam az esetek 90 %-ban az USB driver a bűnös.
A windows eszközkezelőjében az látszik, hogy csatlakozott, de mégsem tud feltölteni.
Melyik windows, melyik driver? Sokféle driver forog a neten.2.) A töltési sebességet kisebbre kell venni. Akkor ugyan meg lehet közben inni egy kávét, de felmegy.
-
_q
addikt
válasz
XP NINJA #10110 üzenetére
Pedig ez jó board. Esetleg másik gép ha van még azzal lehet érdemes megnézni. Elképzelhető, hogy hibás darabot kaptál. Ha vissza tudod kérni az árát kérd vissza és rendelj egy másikat szerintem. Elmondásod szerint mindent jól csináltál. Van ismerősi körömben aki alapból táp hibásat kapott.
-
_q
addikt
válasz
XP NINJA #10108 üzenetére
Ezzel próbáltad? [link] Én legutóbb ezzel sikeresen felraktam.
Amúgy ha nem megy a rátöltés, akkor a gomb nyomkodásnál annyit kell, hogy a töltés közben mikor kiírja, hogy "....." ott lenyomni a boot gombot az ESP board-on, reset-et nem kell nyomkodni.
Belinkeled milyen ESP32 board-ot vettél?
-
XP NINJA
őstag
Megérkezett az ESP32 nekem is, de nem tudom összehozni a géppel..
Felraktam a könyvtárat hozzá, CP210x_Universal_Windows_Driver is meg van, de upload-nál: A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
Ha a boot gombot nyomom hosszan, közben megnyomom az EN-t akkor pedig A fatal error occurred: Invalid head of packet (0x65). Keresem, de nem találok megoldást
Valakinek ötlete esetleg? -
brickm
őstag
-
brickm
őstag
Sziasztok!
Atom és platformIO modullal küzdök jelenleg. A Problémám az, hogy építettem egy szoftvert egy hardverre, amit windows alól buildelve feltöltöttem éshazsnálok jelenleg is, viszont most MAC-en sajnos nem sikerül a buildelés.
Egy ESP8266 NodeMCU-0.9es devboardra menne a program. a main.ino tartalmazza a vezérlést, az index.h pedig a webes megjelenést. Viszont feltöltés után nincs weblap. Látom a mikrokontrolleren, hogy érkezik kérés, (handle kezelőm van) de nem küld vissza lapot. Az az első gyanúm, hogy mac-en nem buildeli automatikusan hozzá az index.h file-t (ez amúgy stringbe töltődik be a programban) Meg tudom valahol nézni, hogy miket buildel? Esetleg más ötlet?
Aruino IDE alól ugyan ez a jelenség, amúgy error mentesen lefut a compile.
Új hozzászólás Aktív témák
Hirdetés
- Honda topik
- Nagyrobogósok baráti topikja
- Luck Dragon: Asszociációs játék. :)
- Kerékpárosok, bringások ide!
- Linux kezdőknek
- Formula-1
- Gumi és felni topik
- PayPal
- A fociról könnyedén, egy baráti társaságban
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- További aktív témák...
- DELL G2724D / Samsung Odyssey G5 1440p 165hz árak leírásban.
- Asus RTX 4070 12GB DDR6X - DUAL-RTX4070-O12G-EVO-DLSS 3 Garancia
- Apple iPhone 14 128GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 14 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
- Új Apple iPhone 16 Pro 128GB, Kártyafüggetlen, 3 Év Garanciával
- 15db töltő egybe (65W + 90W) kerek végűek (ELKELT)
- LG 65C4 - 65" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - 1000 Nits
- Update 06.13. Bomba árak 2025-ben is! Üzleti - Consumer laptopok DELL FUJITSU HP LENOVO
- LG 27GP95RP - 27" Nano IPS - UHD 4K - 160Hz 1ms - NVIDIA G-Sync - FreeSync Premium PRO - HDR 600
- Telefon felváráslás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest