Fórum témák

» Több friss téma
Fórum » 3D kapacitív interfész
Lapozás: OK   1 / 1
(#) geris hozzászólása Okt 18, 2012 /
 
Sziasztok!

Találtam egy nagyszerű és egyszerű 3D interfészt, amit alapvetően Arduinóhoz készítettek.
Nagyon részletes az építési leírás, ti is kipróbálhatjátok mert szerintem hatalmas lehetőségek vannak benne. Én például egy robotkart szeretnék vele vezérelni. Arduinóm nincsen, de a letölthető programot próbáltam meg átírni PIC C-re, bár nem sok sikerrel.

A program az alufólia és a kezem alkotta kapacitás feltöltési idejét méri. Így néz ki a kapcsolás.
Ha jól értelmezem, akkor a mikrokontroller lábát alacsony logikai szintű kimenetnek beállítva kisüti a kondenzátort, majd bemenetre állítja a lábat. Ezután a felhúzó ellenállás tölti a kondenzátort és feszültség a 10k-s ellenálláson keresztül csak akkor fog fellépni a most már input lábon, amikor a kondenzátor feltöltött és már szigetel.
A sikertelen átírási után a meglévő logikán alapulva elölről saját programot kezdtem írni figyelmen kívül hagyva a hálózat frekvenciáját és csak simán timer-rel mérve a feltöltési időt, de továbbra sem kapok mérési eredményeket.

Szerintetek milyen tényezőket kellene átírni a programban a pár utasítást kivéve ami máshogy van Arduinóra? Pl nem tudom az órajel hol jelenhet meg ebben a programban.
Vagy nem látok Timer0 megszakítást sem, amiben növelné a timer0_overflow_count-nak nevezett változó értékét.
A lényeg az, hogy Ti ha megépítitek ezt, működik-e nektek, illetve milyen irányban kellene elindulnom. Hogyan mérjek kapacitást vagy kondenzátor feltöltési időt PIC segítségével, úgy hogy az működjön is?

Köszönöm, illetve jó szórakozást ha valakinek működik.
(#) sargarigo válasza geris hozzászólására (») Okt 18, 2012 /
 
Még nem néztem meg, de elöljáróban annyit, hogy a timer0 az arduino rendszerben alapból megy. Tehát saját célra úgy tudom nem is használható. Szóval ott van az a megszakítás azért..
(#) efraim hozzászólása Okt 18, 2012 /
 
Én csak ezt találtam
(#) sargarigo hozzászólása Okt 18, 2012 /
 
Nem kell ezt túlspirázni!
Én sem vagyok arduinós (natív avr forever! ), de ez nem olyan bonyolult kód, hogy aki tud pic-ül, az ne tudná átírni. Hol akadtál el, hátha összedobjuk együtt?
C-ben írod a kódot?
A hozzászólás módosítva: Okt 18, 2012
(#) geris hozzászólása Okt 18, 2012 /
 
Igen, C-ben írom. A szintaxisok átírásával nem is volt gond, de nem értem a kód alján a check_timer() függvény miért azt az értéket adja vissza, miért számol az elektromos hálózat frekvenciájával.
Azt értem, hogy a time() függvény mérések átlagát adja vissza, de azt nem, hogy miért csúsztatja a számot 8 bittel.
Továbbá nem tudom min változtat az Arduinótól különböző órajel és hogy állítsak-e valamit a timereken.
De amúgy értem a programot
(#) Hp41C válasza geris hozzászólására (») Okt 19, 2012 /
 
Szia!

Egy kicsit régi, de benne van a kapacitásmérés módja: Bővebben: Link
(#) sargarigo válasza geris hozzászólására (») Okt 19, 2012 /
 
Ugyan nem építettem meg a dolgot, de van egy elgondolásom rá. Szerintem azért számol ilyen bitang nagy számokkal, mert az arduino eleve nem spórol sem az órajellel, sem pedig a tárkapacitással. Ha megnézed, a time() függvény végén van egy maradék nélküli (egész) osztás. Ha nagy számot osztasz kicsi számmal, akkor az eredmény még értékelhető marad az egész számok halmazán. Magyarán megspórolja a lebegőpontos számítást (ami mint tudjuk elég komoly fegyvertény).
Az elektromos hálózat frekvenciája számomra hatalmas koppanás volt, mert eddig eszembe sem jutott volna, hogy érdemes ezzel is foglalkozni. Miért is?
Ugye ha szabadon kalimpál egy hi-state bemenet, ráadásul még egy jókora antenna is van rajta, akkor az szépen összeszedi amit a környéken talál. Az 50Hz egyszer felfelé tölti a kondidat, egyszer meg sütögeti kifelé. Mivel nincs szinkronban a vezérlőd a hálózattal, ez teljesen rapszodikus eredményhez vezet, értékelhetetlen lesz.
Ellenben ha mindig ugyanakkor veszel mintát (50Hz-en), akkor az az 50Hz mindig éppen ugyanazt csinálja, tehát rapszodikus helyett állandó hibához vezet, ami már nem okoz gondot. Szóval ne hagyd ki belőle, mert ha jól értem pont ez a lényege az egésznek
A hozzászólás módosítva: Okt 19, 2012
(#) geris hozzászólása Okt 24, 2012 /
 
Helló!

Köszönöm az eddigi segítséget, végre már tudok jeleket kicsalni belőle.
Beszúrtam egy pár mikroszekundumos várakozást is, hogy a kapacitásnak legyen ideje kisülni, és így sokat kellett szórakoznom ennek a várakozásnak a hosszával, illetve a felbontással, amivel a time függvény return értékét számolja, de így sem elég jó az eredmény.
Akkora és olyan érzékelő dobozt készítettem, mint a videóban is van, de a kívánt távolság kb. felétől ( kb. 10 cm) változik a kapott érték és elég exponenciálisan, ez így még elég használhatatlan, mielőtt hozzáérnék a fóliához az utolsó 2 centiméteren változik csak számottevően az eredmény. Hogyan növelhetném meg a hasznos távolságot, hogy ha a kezem messzebb van, akkor is egy feltölthető kapacitást alkosson az alufóliával?
(#) sargarigo válasza geris hozzászólására (») Okt 24, 2012 /
 
Jó lenne tudni, hogy a vezérlődnek milyen bemenetei vannak! Elképzelhetőnek tartom, hogy nem elég nagy a bemeneti ellenállása neki. Ezt meg lehetne gyógyítani mondjuk műverősítős bufferrel. Most így elsőre. Természetesen az lenne az igazi, ha szkóppal rá tudnál nézni hogy mit kap a pic.
A hozzászólás módosítva: Okt 24, 2012
(#) idlob válasza geris hozzászólására (») Okt 25, 2012 /
 
Legutoljára múlthéten néztem bele, de ha jól emlékszem írja is, hogy a kimenet nem lineáris (nyilván nem, ahhoz konstans árammal kellene tölteni a kondenzátort).
Ha jól emlékszem a Processing kódban van példa arra, hogyan kell linearizálni.
(#) sargarigo válasza idlob hozzászólására (») Okt 25, 2012 /
 
Rossz helyre böktem..
Szóval semeddig nem tart rátenni egy áramgenerátort.És akkor nem kell linearizálni.
A hozzászólás módosítva: Okt 25, 2012
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem