Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok!
Ma szereztem egy ilyent: MPU-6050 (GY-512) Feltöltöttem itt a példákat: Link Ilyen értékek jönnek:
Nekem elég vadnak tűnnek és nem is tudom nagyon értelmezi egyértelműen őket, mert a ketyere egy helyben áll az asztalon. És az értékek is szépen ugrálnak. Mennyire jó ez? Köszi előre is.
Köszi!
![]() Remélem a második megoldással működik majd. ![]() A hozzászólás módosítva: Okt 5, 2016
Szia!
Szerintem kalibrálnod kell, ezért nem jó. Bővebben: Link Lényeg, hogy ezek az értékek nem jók, ennyivel el kell majd tolni minden kapott értékedet, azaz ki kell nulláznod. A fenti linkben van egy ilyen sor: Idézet: „Write down your offsets for that particular MPU6050 and use them with library's functions "...setoffset..." in your projects.” Gondolom a setoffset-tel egyszer beírod a kapott értékeket, utána majd tudni fogja más bekapcsoláskor, hogy mennyivel is kell eltolnia az értékeket. Semi gond nincs vele, csak kalibrálni kell. Láttam, hogy ez 3.3V-os rendszerű, erre figyeltél?
Utána olvasgattam még egy kicsit.
A kalibráció menete is nagyon fontos, egy mérés nem mérés, ezért azt csinálták, hogy addig mértek, míg a vizsgált átlag (középérték) eltérése/ingadozása a chip pontossága alá nem megy. Ha ez megtörtént, akkor ezzel a módszerrel kapott értékkel kalibrálják a mérőezközt. Ennek leprogramozása nem annyira egyszerű azért. Nem tudom mennyire vágod a statisztikát, mert lehetne finomítani még, de egyszerű átlagszámítással is jó eredményt kapsz, ha a mérés alatt biztosítod a műszer zavartalan működését, és elég nagy mérési adatsorból számolsz egyszerű átlagot. Ennek leprogramozása sokkal egyszerűbb, viszont kényes a külső zavarokra. Találsz sok ilyen programot Arduino alá, de véleményem szerint jobb, ha az ember saját maga csinál egyet, mert sokat lehet tanulni belőle.
Köszi megnéztem és otthon kipróbálom.
Sokat segítettél. Ha jól értem, akkor ezt elég egyszer elvégezni, és nem kell minden alkalommal beállítgatni valami sík terepen. Nem tudom a bonyolult pontosság mennyire számít, vagy mennyit tévedhet, mert nekem ez egy jelmez fejében lesz, és igazából a fejtartást kell követnem, és abból következtetéseket levonni. Viszont a zajt hogy érted? Milyen zaj? A csatornán, vagy a környezetében, mert körülötte lesz pár más egység pár centire. Sőt alatta megy (mert picit meg van emelve) az egyik 5V-os ventinek a vezetéke. Illetve az egészet kívülről műszőr fedi. Gondolom itt meg lehetnek statikus érdekességek ha ilyesmire is érzékeny lehet netán. Láttam 3.3V-os, de 5 voltra ment, mert az van írva ahol vettem, hogy MPU6050 gyro/gyorsulás szenzor Érzékelő Tápfeszültség: 2.4V - 3.45V, Modul Tápfeszültség: 3.3...5.5V, Amúgy közben találtam pár példát, ahogy ezen nyers adatokból valami matematikailag számolnak szöget. De olyanra is utaltak valahol (ha nem értettem félre), hogy lehet ezt maga az egységre is bízni. De amit próbáltam, ott abban a pillanatban a program tárkapacitása az egekbe szökött. Tehát meg lehet oldani, hogy ne az adru számoljon, mert ugye minél több ilyen matematikai feladat az annál jobban fogyasztja az erőforrásokat. A másik kérdésem, hogy kalibrálás után adott a sík felület alapján 2 tengely. Ezzel nincs is gond. A harmadik viszont a függőleges középpont körüli elfordulás. Ezt hogy kell értelmezni? Úgy mint a többit gondolom. Ha északnak áll a modul, akkor a 0 észak felé lesz mindig. Kicsit mint egy iránytű hatás? Azért kérdem, mert ugye mozgás gesztusokat kéne elemezni, és míg a másik kettő azért jó reprodukálható (pl. hogy tartom a fejem) addig itt ez esetben égtáj szerint is kéne fordulnom. Valakinek volt már dolga ilyen gesztus érzékelős projekttel, hogy ehhez hogy lehetne hozzányúlni majd? Optimális esetben (hogy minimális legyen a tévedés) egy farkas vonyításhoz, picit lentebb kellene biccenteni a fejet, majd onnan határozottan utána felfelé kéne néznem, miközben a jelmez száját nagyra nyitom. Tehát valami határokon belül valami érzékelőmintázatot kellene felismerni. Ha ez nem lehet, akkor legrosszabb esetben csak annyit tudok, hogy ha a fej felfelé néz, plusz nyitva a száj. Előre is köszi. Zoli A hozzászólás módosítva: Okt 6, 2016
Ebben a modulban egy gyorsulásmérő és egy giroszkóp van, ezek alapján szeretnél te dőlésszöget mérni. Ez egy klasszikus szenzorfúziós probléma.
A gyorsulásmérő erőt mér 16 bites pontossággal, így nem csoda, hogy nagyfrekvenciás zaj van rajta. Ha ábrázolod az adatokat, és dobbantasz egyet a lábaddal akár az asztaltól méterekre, garantálom, hogy meg fog jelenni a jelben. A giroszkóp szögsebességet mér. Amit ugyebár integrálnod kell ahhoz, hogy elfordulást kapj. Viszont így a hibát is integrálod, tehát a mért szög idővel egyre pontatlanabb lesz. Tehát van két szenzorod, de külön-külön egyik sem túl jó. A trükk az, hogy a kettő együttes adatával már lehet mit kezdeni. Az egyszerűbb megközelítés a komplementer szűrő: a gyorsulásmérő jele nagyfrekvenciás zajjal terhelt, a giroszkóp integrált jelének pedig egy lassú driftje van, tehát kézenfekvő, hogy az előbbit aluláteresztő, utóbbit felüláteresztő szűrőn kell átengedni, és a két kimenetet valamilyen arányban súlyozni. A másik, profibb lehetőség a Kálmán-szűrő (a nemrég elhunyt magyar-amerikai mérnök, Kálmán Rudolf után). Ez egy adaptív algoritmus, ami idővel "megtanulja" az egyes szenzorok hibáinak statisztikai jellemzőit. A Kálmán-szűrő elég bonyolult, a komplementer szűrőt viszont pár sor lekódolni. A harmadik lehetőség, hogy az MPU-6050-ben van egy DSP mag, ami képes elvégezni a szenzorfúziót, és a szűrt adatokat visszaadni. Amikor én foglalkoztam ezzel a modullal, akkor ez még nagyon rosszul dokumentált volt, úgyhogy én inkább magam számítottam mindent, de ha már elérhető hozzá valami leírás, akkor talán ez a legegyszerűbb. A hozzászólás módosítva: Okt 6, 2016
Gyroskópos cikk itt is : egyik robotika topicban felvetve kb középen a téma
Fizikus cikke gyro használatáról
Szia!
Lehet félreértettem a feladatot, de hátha. Nem is értem, hogy miért megy, a loop kihagyása miatt, de nem gond. Ha jól sejtem akkor az a gond, hogy hiába nyomod a gombot, mindig csak 5-el növekszik az érték ugye? Vagy egyáltalán nem növekszik, ha nyomvatartod? Lényeg, ha növekszik, de lassan akkor egy kis trükk, és máris minden ok lehet. Persze tévedhetek is.
Igen arrol lenne szo hogy, ha tobb ideig tartom nyomva a taviranyito gombjat akkor szamolgasson automatikusan otossevel fel, vagy le. Peldaul ha 50-et akarok allitani rajta akkor ne kelljen 10-szer megnyomjam, hanem csak egyszer es tartsam nyomva a megfelelo ideig, amig eleri a megfelelo erteket.
Az egyszeri nyomigalasra mukodik. Azert van kihagyva a loop resz mert ez csak egy reszlet es az infravevo „attachInterrupt”-be van illesztve. Kosz A hozzászólás módosítva: Okt 6, 2016
Értem.
Azt hiszem elhamarkodtam a választ, mert nem erre gondoltam. A lényeg szerintem:
Itt lesz a kutya elásva. Míg nyomod a gombot, nem lesz a pin-en változás, ezért nem hívódik meg újra a CHECK_IR(){ függvényed. Az adott attacheInterrupt modjai első körben nem lesznek elegek szerintem, mert mind arra jó, hogy magasról alacsonyra, (vagy fordítva), vagy változásra legyen érzékeny. Sajnos nem tudom 100%-ban a megoldást, mert sosem csináltam ilyet, de elgondolkodnék azon a lehetőségen, hogy a CHECK_IR(){ függvényben a break utasítások előtt 0-ra, vagy épp 1 re húznám a lábat (Negálnám), már ha ezt a IR szenzor megengedi egyáltalán. A gond az lehet esetleg, hogy az IR vevőd, mikor folyamatosan ad jelet, akkor pl 1-en tartja a lábat, nem tudom, hogy Te lehúzhatod e kódból 0 ra. (vagy fordítva, 0-n tartja, 1 re akarod húzni kódból.) Ennek utána kell még néznem.
Van még egy ötletem, nem tudom, mennyire lesz hasznos.
A Check függvényben indítasz egy olyan ciklust, ami addig megy, míg változás nem lesz az adott lábon. A ciklusmagon belül növeled az értéket 5-el. Szóval az interrupt megszakítja a program futását, és elindítja a check függvényt, ha az végez akkor folytatja a megszakítás utáni résszel. A checkben kiolvasnám a láb értékét (Low/High), majd belezavarnám egy loop-ba addig, míg ez az érték az ellenkezőjére nem vált. (persze delay(20); -el) Első körben úgy gondolom, hogy mikor lenyomod a gombot a láb pl Highra lép, elindul a check+ loop, amíg az a láb low nem lesz (elengeded a gombot), érték nő 5-el. Így nem kell állítgatni semmit sem, nem lesz ütközés, föstölés stb. Ezek csak ötletek, lehet nem jók, de hátha ad egy lökést a projektednek. A hozzászólás módosítva: Okt 6, 2016
Vigyázz, nehogy olyan loop-ba keveredj, amiből nem lehet kijönni. Sajnos nincs itthon ilyen IR szenzorom, nem tudom kipróbálni.
Egy távirányító jele nem sima magas meg alacsony, hanem szabványos kódolású. NEC, Sony, Panasonic, stb. Általában egy 16 bites jel, amiben van egy address és egy command byte. Nagyon sok magas és alacsony követi egymást, pontosan szabályozott Mark és Space jelszint hosszokkal. Általában elküldi a távirányító az address-t majd a command-ot aztán jön a repeat vagyis az ismétlés ha nem engedi el.
Mint látható, olyan library-t használ ami dekódolja ezeket a parancsokat. Itt inkább el kéne kapni a repeat jelet és akkor ismételgetni a változó növelését. Benne is van a kódban, hogy decode() aztán meg egy resume(), hogy visszakapja a vezérlést. A hozzászólás módosítva: Okt 6, 2016
A lényeget nem ismertetted! Milyen típusú vezérlőt használsz?
Mert mind másféle kódot ad vissza. Kellene készíteni egy ki listázó alkalmazást, hogy lássad, mit kapsz ismétléskor? Pl. itt csak 1* küldi a gomb kódját, utána csak az ismétlést jelzi: Bővebben: Link Szóval azt is figyelni kellene a megszakításban! És hibás a:
Lehet, nem tudom.
Csak azt látom, hogy interrupttal figyel egy lábat, amin, ha változás van futtat egy függvényt. Nem tudom, hogyan csatlakozik ez a cucc az arduino-hoz, lehet i2c, plusz ez a láb, ami üzen az interrupton keresztül az ardunak, hogy hé, lesz valami. Ha sok jel menne ezen a lábon, akkor menne szerintem, mert az interrupt után folytatja a többi kódot, de megint lenne változás, megint megszakítaná a fő programot, stb. Természetesen tévedhetek is, nem értem pontosan ezt az ezközt. A hozzászólás módosítva: Okt 6, 2016
üdv mindenkinek
Azt szeretném megkérdezni, hogyan lehet a for ciklust Úgy írni, hogy visszafelé számoljon?
for(int x=100; x==0; x--){
} Szerintem valahogy ehhez hasonlóan.
Egy adat láb kimenete van a vevőnek amin "soros" jellegű adatküldés van, pl. a NEC szabványban 16 bit. Pontosan szabályozva van, hogy milyen jellel kezdődik a jelsorozat, mekkora idő telik el egy bit érkezéséig és van lezáró jel, majd ismétlőjelek. A függvény pontosan ezeket kapja el, felismeri a bevezető jelet, megvár egy teljes szekvenciát majd a lezárás után értelmezi. Ez a library csak a NEC kódolást tudja értelmezni, a többi nincs kész benne. Amint megvan az address és a command, visszaadja a vezérlést. Fél jelsorozattal nem tud mit kezdeni, meg kell várnia egy újabb szabályos csomagot. Ez a library szerintem nem kezel repeat jelet. Viszont van olyan ami igen, RC5-master a neve, ebben van egy toggle változó ami beáll 1-be ha ismétlés jön. Az ismétlés csak egy jelző, nem ismétli meg a jelsorozatot újra, csak jelzi.
A hozzászólás módosítva: Okt 6, 2016
Akkor tovább kell gondolni még ezt a függvényt valahogy.
Nem tudom, hogyan lehetne benntartani tovább.
Hello!
Találtam ebay en külön erre valo cuccost. http://www.ebay.com/itm/251977958119 A kérdésem, hogy tudok a jack bemenetre egy ilyet Bővebben: Link kötni? Vagy kell neki valami előerősítő?
De csúnyan hangzik.
Kis oktalan azt hittem csak kiolvasom és kész. De most ez is abban erősít, hogy ezeket ki kene adni egy másik ardunak, hogy számolgasson csak amit akar ( valódi pozíció, elfordulás, pl futás utáni megállás ,stb.). A fő program meg egy másik egységben meg az előkeszített adatokkal dolgozzon. Vagy rosszul látom? A csatolt cikkeket meg a vonaton elolvasom.
Cikk az ICről
Kell egy kis 100-1000 közötti hangfrekis előerősítő az elektret mikrofon és a eqvalizer IC közé. pl.: NE5532 műveleti erősítővel . Nem kell iphone-s elég bármiből kitermelt elektret mikrofon A hozzászólás módosítva: Okt 6, 2016
Elfogadom amit írsz, de nem értem már pontosan.
Azt hiszem rá kell aludnom. ![]() Iterrupt 0-s lábon, a kommunikáció meg a 2-s lábon a kód szerint. Már nem értem, belezavarodtam. 1: A szenzor (+IC ha van benne, de ezekszerint nincs), ha fel tudta dolgozni a jelsort (fény), akkor küld egy jelsorozatot az ardu felé, ami a lib segítségével feldolgoz, majd visszaadja a vezérlést az ardunak, de nem küld semmi mást arra a lábra tovább, csak akkor, ha felengedi a gombot, majd újra lenyomja. Ha ez így van (Lenne), akkor mikor nyomva tartja a gombot, az ardu által figyelt lábon nem lesz változás, nem fut le a check megint. (Szenzor +IC 0-n tartja az interrupt által figyelt lábat, azon nem lesz változás a következő Arduinós feldolgozásban sem, mert hiába nyomja a gombot, nem ad jelet a szenzor+IC.) Ez volt az első gondolatom, de látom egyáltalán nem ilyen a kivitelezés, ezért ez blődség. 2: Ha a szenzor (feldolgozó ic nélkül) nem dolgoz fel semmit, hanem csak átalakítja a IR adó fényimpulzusait elektromos impulzusokká, akkor megint nem értem miért nem megy. Ha nincs fény, akkor a lábon nincs változás. Ha van BÁRMILYEN fényimpulzus akkor az változást okoz, lefut a check, feldolgozza az adatokat, visszaadja a vezérlést. Ok, de utána lévő Arduinós lopp-on belüli feldolgozáskor megint lesz változás, mert a IR adó ad jelet. Megint le kellene futtatnia. 3: Az 1-es blődség, a 2-s meg azért nem jó, mert, az IR adó a gomb lenyomása után elküld 1 azaz CSAK 1 fényimpulzus sorozatot, hiába tartja nyomva a gombot. Ennek a fény impulzus sorozatnak kell eljutnia interrupttal az Arduinohoz, azt fel is dolgozza, visszadja az irányítást, de mivel nem ad több fényimpulzust az adó, ezért nem is lez több változás, ezért nem fut le megint. Lehet a 3-as, vagy ahhoz hasonló a megoldás, de ekkor ezzel nem is lehet megoldani a kérdező problémáit. Bocs, ha nagyon hibásan gondolkodom, fáradok kissé. ![]() A hozzászólás módosítva: Okt 6, 2016
Mégegy Airsoft bomba?
![]() A hozzászólás módosítva: Okt 6, 2016
Sziasztok!
Tudna valaki segíteni nekem. Elakadtam, kezdő vagyok. Az alábbi program (részlet) egy számláló, de 9 óra hozzáadása után mínuszba számol. Ahogy olvasgattam, túlcsordul. Hogyan lehet megoldani a maximum 24 órás visszaszámlálást?
Véletlenül nem 9 óra 6 perc hozzáadása után lesz rossz?
Elkel hagyni a {} jeleket:
|
Bejelentkezés
Hirdetés |