From 459a44ca0247324d50b5ca9298c611627d2303c7 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Wed, 30 May 2018 16:24:43 +0200 Subject: [PATCH 1/1] Initial import --- Fritzing/Hall-Effect-Sensor.fzz | Bin 0 -> 29686 bytes ...US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp | 101 +++ Fritzing/svg/US1881_PCB.svg | 189 ++++++ Fritzing/svg/US1881_breadboard.svg | 122 ++++ Fritzing/svg/US1881_schematic.svg | 134 ++++ Tetramag-ring-magnet.svg | 751 +++++++++++++++++++++ rotary_encoder/Makefile | 6 + rotary_encoder/rotary_encoder.ino | 75 ++ show_quadrature_states/Makefile | 6 + show_quadrature_states/show_quadrature_states.ino | 44 ++ 10 files changed, 1428 insertions(+) create mode 100644 Fritzing/Hall-Effect-Sensor.fzz create mode 100644 Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp create mode 100644 Fritzing/svg/US1881_PCB.svg create mode 100644 Fritzing/svg/US1881_breadboard.svg create mode 100644 Fritzing/svg/US1881_schematic.svg create mode 100644 Tetramag-ring-magnet.svg create mode 100644 rotary_encoder/Makefile create mode 100644 rotary_encoder/rotary_encoder.ino create mode 100644 show_quadrature_states/Makefile create mode 100644 show_quadrature_states/show_quadrature_states.ino diff --git a/Fritzing/Hall-Effect-Sensor.fzz b/Fritzing/Hall-Effect-Sensor.fzz new file mode 100644 index 0000000000000000000000000000000000000000..57ba1d3e4ea245d504d65f6167953407985a3f3b GIT binary patch literal 29686 zcmb?@V|-oTwszduwryLD(Z<#miIXh_M>!Kf4MD5wW8{@ZXZ0q zHa$JrxCqR@tZ@0Xr7{eCMv^wE%c$x;%zo``13&d_Oitf4sKKwULt@f(taE-7>^gb9b-VEK z-!pm;#Hsvn^%VR|cirbs_Vx&Ab;`ZXTgtlqA^J0tzp>=o+JVy=Rr$eU?>Wg#YzGbe>ccaCIu!$o);!mh0qE7Z9P%;a<+G|Z)fuCdT{S65E(E$$Taux zo%l*7y5sU92ZAbL^CV^8XFBr?39}*k`X@{3+TGb@D>VUWe6Q5{VXF|X{-_lBvMcdJ z3IYoWTE!5WGz1>ig;;dKgF6pF8cI^rTKYj%2D9G+u29mhNR#GE_gh%^5|rq|*pxAZ zPlNUicczP4w12F3OEO8goe8HGH>>?x_gIVD!!0^S9^?xJ{GisTO1x=6!}Ct;7o*ID zI4yb1aSaoR5Jiblir&XdoZRMBoeMTu3`YrceMmg>O}9JPe2l$6iklkNA>k1jaVd3+M=ul7R#xuF`)U>J7Q(V#LP;-r9qrvLxV(<8tk;wV z!+%z{J@NVw8%v3cjgB*P04;`3R(~vL&|6TGl$Hmum#U*t zICP5+Qz<1)e08&|lQubYNq_Q8t19~VQDPr2B1 z)w<*RT^x8r0uFK@S-sI3EFe6m3anR{zH#)V2IYkSp=P$8mks36Bhopb%B+g?|#{D`lI~J7ay!*LczmET? z?T#toqGA^_JDTekM7>p8N2jsyiJ_MuXrqWMPFZ3bhUTF#6pLaGI8H+gYbPF~4~VL9s%q9id`H_sns z;34Z0^D>CG4Qhx)wBsG>k+B^H)pz1A(X7c5vSQk-2rv{p0LA2+iq5>v}1lD-pPZq@a?c*QA@`4z&{3Cly6TBo=z$U=YQ;Y4)xa z7Xb}#8w63JHHS)K@LqYhqVm1aB8*w=1nUbrJD7#K&(UH-N$n3B7M~LVn`EfPTjni0 z`cQ^gVRwDiWF$K6&)il`7hx56;o?lU4{3g8`Y>&S@zD$km`OQb_-~fL{-waSg3E`b zFwOQiix2t@?(qNEf4eW#qb18H2{F0b?v-9T-a|cW%H91J-x^i2hJ(P04L+V z`cxlbo__T0uakUzf?q(!+sCvm{oK&DL5FAtQp~iHFZ@qS1_r+s0ITpYNJ{hUZ3EpY zH(N&IZgh95JmjbZuc$~!@*T`{{HA>Xx6&<-Am$SKzC!>#`};3|6>|;w&pm1l)4bbo zoKvw1VYEh@AV(4)WJ-xwRAM0I;d?xrOy6PaT1bQN8C(lANFf9&1=Ud-}!iPZGBlb9h4LBBDBa6ZL`X|a>Vh88r*BjN8&Qa>_X zmserAUOqpz_o;Hd9C$VoPDn~`woj_>j%E|abw{sL#jl*ccY|xMy0j|C_HHAgXIo3R zC%c+g+m#caX{IV6z_j43K$hIulgs$Q~#7y1SKkz&1M5%Nx7T4%URp;loC)-lr2E>VGx0>+qAyUJR~~CgoJ+2#M$fsK+;C$b1h42wu$)d5A$>@$Dn1JSm40_! zl>O59bhL)|!@E13>E2d26ZJ(dwkM^q_8WeF3SDXx6)p*bw+0Kc&4Ol3`KSTU(FF7i z8L~7z%tG=vX!-myUBPOo|^~fe;{%?K+`bU76l>V`gF43PVimOEX^Z%YByKe#4y>n~WC5rWV$q0J~Q) zgN|f}RBge8yR(+kaT>y??|bj!C*^MGd)GcoavdO97zQc3f2vfj)SKI*(RZ>3_JF(M zY|k}mI&>5Ku~_s6PqZDMg*40A(C5|NWkGrMxlR9C;iS*fTzCN&w+{uv6YQlF!q)*6 zK5u(QbutTW*%E_XM0MVk@k~c&SV(XT%R<`?j(liVNH4rEWoK_qN?{H#(&?_VyF+vH z`3t_;@q1IlVnVxi8mG|Zsmtw}bj@6jA{-s5Ss>#ro#!6AO(V%)x8j$Dn=tAm(YNG) zo;i{RVeDMooPL$2$!p=pcX`~bcdQ5!e5S(_cX?l31q=(ngLEjPlr+@o7i2!nS*Fl` zYdd{`)8;R49o*YS;PI78KeV*L5xxXue+H4BRx%t0j*qFjbHqyGomzcVJ;e7u ze?`Tq9{$ukKxB%4HSzLi{j9os&(cg)eFP~J-OLO6q!IR#dLfTJ#xMtcv7~pCJVEa{ z_4*Wt6ZvgOq5vgqj&^tSlo0BU4&g|W0F0|>AzHVAqK!3+Svy%t%;~^N8=Oi?Kf$X!lgEMIvfLgS5`soTGzd3Xs1EBInKdBpZ%l*ct{%+pm@W)GLSHWi3y z*U>^#L$815!rRnCoHWRO(NonENAOp@`03E)3$Gf6wR?nMP$FCj2Ee~w{$LKNHZ5GD z8V^9ZPb_pr#5@;Y)oHOEsGh)lO?wV&{iRMCC?tV@Sw0hDi&lwzKd&?2e~iT({C;!Z z=X5oBLA}+i(>dm7ej10-r-}nyF(fDm5Og_%BH3QV06j>A06h*^OkaJCusu^y-R~!Z zaO&{k^FY8)ivBRAXEa)7`hDOV!BWiXZ#MzI-PGU7iPaFtWmifsnPtj^`T!Y*v0+gC zO;CZp#t%xgHcdRdrhaWfd`UWoKD%Fn2G0=Aht{NJCE;F4WAJt^dxenYU%~ASaYm zz6F-?{~q^Dvt79+kQy@R`!d>DncQiUs*jzVbubD2q; z2fv9JUBLUGLc8v(t3d8LSeiG+@F;EI=y z&F#J<)vS@G{K&|!=RzZ1A9W~|xV(D1~E3TwdH4y_4_K29fEwg7E zD#g==GRkinwKcD1ZD+|Kuj(H5yBXYg&AjwjYK*G(eww zMvuF3$kx1)mdl8nXJ$u_TO-V7?0CeM^akr1(%FnV)@r(8b(*nHwK>O+e^llXk_yIj7}(|(tP3A-%>r=B;e?eckRNDw6(cGYD5u{h zJVQ8(cP^PQMa*YwdQ51r6`3Ov!`ji?gUq1$M92~>0zXvc*>z!61}lm&qj)b>oGcq` zA-I3VajyoU__?)7H_PTVD ziWxwOS(^e$>aY}URIvdXlCbZSaH!k>rwe@c9JoiLkr5&Y2p#s1-S!swW=n=2yWG^7`+ zqZS>)_EZd64YTY8KJP~OqtQ7uz2$h{A<;^iRuOUEp`Ii_6+I7VkT6QEQ2Q~I6DG84 zz^EU~iGo}S1(G(2YHWrGkl|+Uj)F=H+!+o=j!Hppm8W1fh@Dvx9s=_`zFBr*RfCAO zpfKzsafaXpzUT7?PsMC_BHt*CK&9j;mSjgcYt}w{8u2QV9U6TajD{9!XC722Ts757 zzzugvf(O)3JAZ@f7g7V`K4763JOnbQa3AZ)2KBCts%Q|gn9>by3`&T)Qz;B~WnDp3L~r4m}b>sWl$H$O<>g^OWzYNkJgwYSMbTHc%uLpzGt z*IO0q+XZ-A&S!~e3++4J>q|~(Lf?q@Xzl-w*0vM3sh7VUtnD%Au3tIu*Qi`28 zj3_uBAG%4rEA(x{?0dO3F;qzmeI8p{q730d%`=$yT#x%<{Q}KS4>GKi?NzKVzSN?I zTlBL>f>t=KW1sb48%>e^Ab`*)=4uOOISze}Dd&uJpI%}5K^-h$D?jnI( zi9Xrdk^;X#R6ZD|QN=!Ip+<;c030sKV+~19OW*!SEL)WOq{8n5;mBS~#K3_4etr@o z`8x5MIWHYIPC%$_lKyMU(Wr`^ujL60Dm)@<@$!9G=WV!UqNKj=U97GcM>MXlg=%tI z3QCLGM^`&9t#EcEOkXn%8TkfixpI*KXgRvikAQSD9)VL?%jl;u`w{gXJ-OOG#SKl5 zyZ~12IWi=$#UE#~Ui!%y4yY|jj=p%lR`2#oP?pp_hS&vKhPU*D3%Af0QtCnU%@dnK z^d+8Im&>{5G@_^V-I@W!)I71d7UbUJi+UdV!^?^gcK8DTg_T@d3@|Xvou)TL z6|Yaa<;wq@ZxpUiSrrj?Bebu+Ohj)=bnqedf9CXT)`rm@{$&Rr_P)4Ssk#f{OBOr> zQA$80mD2j}DV;3v#-8^$d!}|f;mqZ+&GHQWxiB!_2m51!xCXOJw3t+?c>mA?#=ar| z)(vaVs-;E*g{V;G29F-@OHx_pajjRG;{}fq6+7S-7`XhpTtbU-FWde7gX$$~GnF70 zFiL{@Gqeas7!8KxUcKX%S99xR@qsz7=ldb!(T;N5Y8YBT;l!zUok!{dJNRfc%Rlq! zBVH7QeDuOk&$+qef6b^4dA@VACvpup=SSD&))FfFi<7Qx?%xgWdE8DtLhu^@~+(Wzz}wD73dP0~djVnOc;db|spS|N)f%;H(AO7U11{P>f( zg7D~i{#+5fKr4xOsnL)RMbh8F<=dv7r=7HaqBe!6bKBV!b7F?Z!k?a8ff6J?^sh~K z5?sg%sK1AU*Z-W$(Jx6LH-ZVn?7TReD{w=$a}tY_da00(;vFw)SNwUt6;FD8WpuyU zGn@?j*ayX=PQj!Ge`#xiS`6$vs=z^xG9Bno6MCkH(%c!BRrN_B^p`UNWsyfX8a@4|fWgore&k5{Pv`>3llL_b zc#kz!MUW~)O-SV=;vdA=j?9l|jjPab8+eFu-TLxiAXS|@0p7jIV-N4nEEaH9-vOFp z;WUM8um*qbxUp*l8HqxMxnT+|hhxkF*_c+h2ODaow0(SW_Y=TvJH@+tz?+;m0yr`Eyg& zN!8kR!3zOAYb`oBG#*O@TCN!!N`F%x11X2=S`qjR_fUYIz5+@9GQRpCqAn_NaFmA;VQeeNYa>SLtN5|J~g?k!IG~BtW7n4@hVSVrf>CzkqKqXC zuhGM#$v@Q=$SmtcX;fiki!IS!$T9>N=S^?4;t_2N^IVCd=klKY7t)f1EP|WZ z5@37fj2t55^gSF9#EUY+_H1G`88)i@l3f%G$5P;kc={KWBKy!471RlB6%jo0l6i=m z3WL-`GKsypc1rs3229b?JuJE0zsP){BCOSe-dja>0?$uSX#W_yW@yxVfKzEGk#96d z8?uWkXzUD$y^7I?Wyz=-J_L4K2#Ez^*8tlQetA1>R!W0pBYHju!z0VO`y%u(GIMCH zr3`0kW$GAgyW-&ybPq2Ct>ZDSVwPeM)RK3rFhss#91sNZy9S`5gFiJ1eZ${7&@X7M ziIpXV5-qv!dj=@ZBZH<;Az*`c9iU>WY3wi-6Dk0)ha%KoWo~$OcvM^^HFrxkF>=e; zobj0R%k46OJpI!iGKHE$B{W{qq@iZXNIC>L$6y>^uXoea(CLF|pi#(40Dj&o#;3S3 ziYL-#>GlK*M)cyaA(*%_epX>(T**rc!*S$CJ=?<-ZX$Svh0t_{NVc)AAyBAI7l)_FG&fF6AaPvjLO$9xfwv4XJ_RKdJ^bprrWR%vk^Y@xnL(|%-y@uf0V`wpP6v=u!hSo9 zWs=5sd(-a^*4~J4<7p8Drf2LItLby0Kn1Ms&8~U%X;&tMR zMGFsy;R2GQ6pPzCU9E*x+iN}W?MCzQVLg09eDSjNd5&|KY#;(?V`>CYhnmRcRPsZl zrK?G4mxnqh;jP;7rNB_?Rjoumbs4yH?&;CmGJn97)YDCxEu;7RT^25sd|eakXMPNf zoADbsXCP6CZD%yNRk7r852cSBw*i$mbd&63*~VxXsBeGxAnvXLtKFZ&Tm0jCdMs6$ z24ZT^7m&TRbRXSZXH;4>qM~Q;^?drmyYOF3g(a}mTIeA3+i$OPG9FzM3<6ij@o!Wy3Y-e((U2+jp!?|{bIJOy**x)BPBad~R|Ty9iOv@xT=9ooo~ zPl}4vTUOc9 zP(0swjt~O;7U4|dos(5Bn~3~o02)0H1i`aM4U5@ zmswyM6$xqvSP0)Ubn&!$a@zUKJATwG+{zrNY3-9TjmD6257AFjCJ zWMHFjZ}k4k+;;M(yv>RfD%6IDcVLc( zL31|(HDSoAyfYW_1R?N_aU~;yxe0y5-npaOo5shHPTvgxQf_`&x6Mt_Z7EcDg$lQD zoZNkSM!CK+*>B(Z$j_0DSRC){RNtjt)#aV_`qccmJ$Rj5j#U42bF!_?=l1Zqe)%Z5oi~-B!>i@#ddu!<*xg|#DP4$a9jkn_`Y70{ zy;Vo(=Q9hR>&y7+Pv_Q7i)v@k_&8=h*N1EC4d+^`>L^4cCc(7)=;7dc|Gm%0ue;WE zt83aP-G@7D-*lZXZuIYZ$Ai@upLE-vuB?A;SOIUX>R%VEo5pWXD5|qv(<(6UPWBGY z!k>0l=dOcGno;gCkjCE{=gOZ>RfIn63UvaVuovSrPP-1Sq*F7WyVm4>41RQ(kMCsSZ`H7VKVx4BK22}A8#5U+ zep+vyW3pK&e{=Nle%QX^dMu64q(8&bZLdFhecX5rb`d)kygAr>T0B^hUDIKAdtG1s zVtQA0Ao3dbfl2p@<6>iYM1yB^T}u+@@xUCas-UCF^ZGSWB$@SSZQ$g^puOW^mu9o{~`cvz;Mb$23lPOx_(c`L8(k&REsEV~qa|$HY&0 zu-+ZR`foU<`_5SDyJIx}1;<)>=)=K~IAooZsQ^x2nWMCQUlQ!b!PtO>c=d4u0e#$< zP_qU<{LGvTHKpaKBMdEw8H(sqK5-Sr{|41Q%o;rU9XJ`f{|odXX4w6CY$c=C30v3B zKMF=(PoL`k<#MgfXg(#8oDzLV@oR}X<=KgxTBI2TOD=O1m{=#5n~hzaxg1p}OrRY) z@!`&>$4b2FKlbuLP;3-9jRWfxJIVgBS0|1mg`@s;jL>-XufY%(8Z5bTyg3;IQGI;K z5Z7G$UdJ|;%zt(ZX{N=JtHzs?{R1}E(X=N<9`3}h?nq-2$KH$ykF|iQVA3BARgnMV zPlr*fp5|(b8Y&v>Hns3TdJ^lC9@TK~P*ErAKhxuc=$zu=JN7$-2_ zebvatEe=x3h=eVMwF)FLaiWcd?l-&dY*ZUFrl@fhCH|%!7Wu+@*YCj5koOPBWXhPL z!&Q|02TTGgFRaOa ze?bR_-s?7&&OhKHS9)Fda*2+@vUZjcD5}OLd_e@AuyJU;^@PkHHo`ODist_v*N(|n zJ>J!nPk%tVOt_-O$b&yY57*eEdNiL$x}Nv@b_J?&9rL@|QSxz?5#WhP5{Iv$K;vv< z*BL6DU_%i2(z{C%8$}pSL@72JqB}y=?GyOMutd@DQO-w6Pos?Fxj=|Y++;j&=u|$o zc50s23J{0q?oA6eEE)|i;9du4_f2wq?@8qWE_@^1+^T=Ihj_Ah2UT=0Vh=8sf6 z6}>rMmfcqlNz?~khwYAdLgp&(Y^lP>`L`~^FSC?5!~c~cmRZW2BmPQq%PghNa(|_Y zt2yV!!{8J1UXzor^g&r4p9-|&3Gn8lBH#PTdv`D;_~;B@M&SQfGIWk8Bgp?NDLc!R z5ybzMj-C~?D<4zaG|yvs|Dj9a|AQ{Rce)&_Fg@)N|DkL0|47$;>t*;)2S#?jh5ub9 z|BrkzIecsVehkosz0L4`@0JI_5r;hg*En(p8!K+)0!L3TA<7Yvhid6+vRSP)^oA@Q z4LN`3?{J^6=7a*Xzx4$1@65MEC>V@@WIG&+_!oHi4yrK6TThVx29J>n1}i4lij3yV ziT{P7*XvC#$1bK!XGL zuL}KM380LX)u{32`AGjs_Ad$lB)j6mzYV%3+xNn^vH1VVXDnK*i4r`vzeTg$zE`e| zCH@bnPM2Qy)+I&6K`Qm{F}PpV87PCse1>F zCyFc$Im;I1-#eDZS20XhaGGsc1&z@Py!zNbrB8F$5696E>Q7xf12U#4asdze7EP~uny2*0L&(H``U}R?zxqoO_tB8$Up7Ws^`KV&#+8ia38CcJVWAR-g5$j% zLWyrbz#0(p1=x`R?`l`L6zGIQZ78?&*HH`RQy^Qkh)+XysPc!)Mi+@?pMR zHZ|QI=L}Ibg(MuuK7}MZnD;<(!wAZ$j%;F-`6DLVFXoT0rW;0*CGiA?pMr4eQb>Yv zE{DOX_#`rqAskpIVg})PCSrtexR+rLjfzv^^@HevBl|{g_V>B zv?_{cBB_hpYD1_?*jho@<%jVS{U!&@oHnlrbyotzNl=ABL>}_HikLjbL?rE@XNkRE z8f-~vNSaIvp6d4p1q?_I3AAPMPO)BTP+Ac4R*|I!+;MQbpI2-svfuT?agpMWasVh8F0^?cW_Nc9OZHc6bjOqOH;p zbE&mux438>9+6kTsMKQ2kOsjpq(BpZQ5?+j zXB^faUr;$h(jW{OM%UBkHxEUI6l%`s$-9}z7!dY2JK@K8kZ`ohh=qLnTwhMI{W(fdIf&IL8Lx&->Oc^ha=9my+Mv%d(3M9A$q_s^=(r^w^`OR#pr7KAWcy;(T40{&bJtT^aRk`WR)i9IJYc{b$ z9~QAK2V}adrnkg~Tuaf?asf9G9uGXgTt)Zp9CFj2w(Ve}LiM9@n>6|-f)%FU3kG<( zFIpi{CL?QRteY$>!>`=QObCyGom1E&oyk<6`zZ$cMs4rFzfWVn@d_q*XEMil5lLnR zT&*^s3=HI>n+IJiy9UjH2M@#de|!j{6#3xJw0!ITqQCLw>%h-e{f+M>(3bSGE55F! z*7Xk{1h8j)WU&(&;7rC>#~01boBBE{K4isFsLe9xK!eai(QdMT* z=4Me9(Pd-fVK?GtVKHDa=44^xWH(~w1TwR+1Azv{96UTm2D+TTlde%+-eH9kx${Xq zhg&6ChL}Qi=EI2(39w88*3IWlrxh2!ITJ2A~zof%IWFBV*n;BnWg z7a*$h4yjc5PHs;NIG40yrx{|L8{yiN(X?A1eWHKV>9bYHstFS`mOXA7w#Rj9yFVpF z@7}2>gxhAlQRlmYcTHx3%-89S|Ka#5Goeb3wDFCEjddGUdnXKUH}()4BnYqfIS#iiN0b5M1!$WQU-(=5+UV$kB|n-7FDtTIl(+(mf|oG}x1II-;%=IW)!I`m#lq#sC5Wh~-E0Uk=B^D!-07E;k9Z z{hpQwkC~OGCy^+i?L4a8r-}TXlG8nzPd*-0)4zCboYEbyZFUhn-fPynlR>qkTjijoi&W5To?N0+KCVk*f5Ws?aL| zO%ulMagtJLoLNXA8M*LEe3z*~G~rp>Ei*src$sX-rEr9ah-;eEn@}?5M034yAFXeSH9sy1b|;cDG-`7p z2Uy-BI`-yp*S><2^tW?^MiZ~p#DUA+lpP--V}F&}dH*Yv_8kEpgctUYe(qz2HaL&m z_;n_`%}V>=ux{sxFKm>?InYlL?eP8bwh#u#X0B0mGFm=Fc}+Zx9$XrojERRMIPf@%py$d1t<$l&XvuxxxOi z;6f=4i;w$WH0-Ndrc3m(C;00m z@4D6D^StN6^h0@~BHdL`=2@54^XccaXT{$2va3}xzV)v{O;^#*dN)!JZ-qXW|8bh` zb;4LWfC>U4IST?p@?M%8oJ|-F{^ub5KhD+P(ZNg$o0SoqKp_(!$a3!ku-Ji3c_U<( zTDv;4FdZ<*c5xw$s7j}Zn;${H29|wvb%JJO?HKnWs2Sjwq8J=XsLnDzPRU+&JfDtN zH_zu|$I^??Pek9@uYClQUAD6}-o=m!y)$wfYY<(KM7FAW9uY0k2nXT7&J~zgE zS@3$<)wp(axVf(-&hK zwBFmcXZf_WJny(Wyd6}ny|mvb8@XEv=yf(TH6dXoAJs4S13R^C1gkCJXU30iy?mA` zn5qPS>RMJgug`aTFT6b-VNW7ucmAwkBFfLUv9|dJ^zqc@Agb?lVRsj*H?D8pak^@K zxq7rJHCL?Aq}5P-o2gj;_3+^4)U{%S!F0KLs}@fFxvkQPuer1P+4!X;Q{3rb)yk)9 z{n?$UC!>wtl^Vyb+@XauU#)*?d=|hoiu6D z*7S)CsEJ+#6>Gv}Wp4GUw`X$?)?W^Gw2(N@oO1{)yH-*gh>kCT4sPwI!LsA;n`v|Y zoX?Ysdwg2|@#fE3{f5SQLcj0Q_!NC;*Xd_RQ7(=jAPc#1_`$-KBCLnPY<1|HVHAMx zIBIE3>=>UiY2l25iPxYEb%0fb{t6ucg?jYCB9wy9AP~Fu90Sn1X+C_7zGQ)|UWBR9 z#XIA9{9%QuMs8z_A2R6zaslCpv4)Gg)?N`i^Z}MWr|Yry_J}SS{PBh2?)swan5EJiY1-^Td~y!nz}r|FQ%}-J55@1MMb|ZVL-`GW_v;$ zVOI}ffv?g&zL>mE#oo=R;+P6G1&L~qR2p5Mkel7#O>bHSgx%lc>vT&z(C!{YbW%4G zS^BbzZXPIdpSW40Pgi0U+p1%69Em~4?nrwN^8u$y+(nRQk6fQ(`_5D!wBwqmU7=z-oCD|i|!ds=vb`Z1Z2xMzbm zjQ#i+;ci1yN#D^>=ZF$-pG{D9r=gXNh3Xzn#$*4AS{-r*qg0=X#A5 z?*wu;Gb#;}?Cur}{6>e^|C&$|IQ^7ADJ^kY2?@2|nFDzsAYxH*r{D|u9qWD7BiOah ztmt*u`P|qgnsdmNYab#DH-WlQGPa3x8fPt#Q#w7RACg8e>WE#yAkrd@kVV%Z=GXSb zr#b3{2}(0`hZf>VD%;FF*`IT11+sEmqGCQf!--VIN6340UxK-D;FfNgYri?vK}OW` zO2Yx_FX^}N0CuEIEFz@Q?+45M>V}sUs}{RWabSbmb$$Z`CQfldRlpsMy2T9!3doSQ z0fH#R(DnhyP`)U-95y~imNTvIEntj$Fqm$m@ThJX8p4L0o|s;ZR=2qRRm!R?8|X>ScBqd2O&2 zZECP)gGC z{0IlAB+~8qcF||O-{SVQ8Wx8d>k0^3T?qVmMSmd2#|FM|G>moN z&{31#2CZ}2NZ=6*`5n;X_tG*1vPpFAmq644S5?uA7k&5Cu3oThvm&tL@n#I#U~(m` zb~wJvswHz^CuLZ8C!AN+GZXU@*5>O#<(8CSO5L{S&{)+2JY!@HdaO&6nV_}!H!6+v zf z5xDkH;_HT6<QKO^%O8pmMRdtfO%Pq%paNxsmE?tGem2F{XlX z7G=e@KG-kcM-XiCx1JYc)hI{9olreg9sNn=(20|!JY2fvTj5ovQ9*iNxWyL%t%TFN zmZ840esNfD=_WlGrIrmo*zq@Vbb0fN`?T-E7gm9Rv|iHAx-eQTv!7XzhLx)A5DM0m z03id(M%#%bkh0H&r7>-|79CI=)2?5%Nq*?W38+KFA=;VbESR z+UwF^#$7GYVjz~a5wuQ{7{I0DVJ)`D!SgF=36xdt1jgvzO6gV!9Jmv9(#0!-pz;FB zC3g#Bec!2sCa0JOZo$OyYm^Zcr|1oy^**SSyanbd5qmArNdBq>4qaGJk1NOflH9x%vQFK} zn5S>JW7q2YD4{SbwG`*KsDu&fkmrg1VcXmpHZ=D#9lEuL)fAyvSD0WnOm_l0Crqmz zau7NqTpXB8V`@>P@_=YAdk9VQyHyD)%D?l-+|J zLkb9|#vqedx5t&ECzDanmYWi7;_ov97?h`2QXbp%4``-X2$b5hTX*|5PD`7!C4tF zT`A=#o(y}yWksz@T*te+Um`k9i6ixFE;odp&XoHGP?FP)85soX1oTi`yKtrby--y5 z2CqZs9NC$X51)S7%y0C)|C@#{^ZK6NoUz@~JzqOtKuq*2wzNMB>#${pbEUNt*~fXL zIxAwoC=56~^r}0IQAapyeT(o32mg}EY+XoHA>QOOnYUfb3QRA|8$~v7ujs^a`}MWbStWaSTLiOZ|AR%>RIROrU`l>m>Q6T20Wel@ zKk`$k4|^qmiLarGqy7de#6mr(C_%`lAJS4+kl=Y}OADdq-0>dCAV_|paEtblBQo+e zODjH)LH?E=Ez6L=3EHNJtQkRjtUPi2Zs!00dXwFAlo-V=!Q z3;KOHA;Yg8f=>bg-oj7eaqGn#qxB5cMT5d^a?HMb#b@XmcpnlzGW{&ehM8{$>bR=v zn&@Dw2oWm}ewH=T5l;KuV{h@=;6`gWIgBa_LC;7Gq2!65BzaM3N1L%_0e~7DHl+y- zpE~k=@9euXPi9BsId=e^Xt5#4TVeCh8}{X$1nSV0u|KX3G#uSTG^5{dt#OU?W}ySF z`ukA_oWvo48?85h^bBm)9c%$`#L(#EngmO7vp|i(hz~LAj-MoQ#GsTNDBBq{DCOl` zvhY5*ENqX!Yx*=i8WgNWMZg{THe~g1EVx6fLo;X{o{aw4Mmr-9vciF}$P5&`M$PCc zImapP)#jUp-z$?eoT5j@f>~O3+5-Eeu3+(pIFF2FGv1!GWp)C+D6E1zh-&2q9}g`m zi#NotB!1DsdKoz{8m}D57 z@m}zFpN39{V(|eJ6zdWKrfs76D@10_V6%SzoN|WbX%si|r=<@K$oj)(kdFGwxyM@W zuy(1R-1lSKji6xor|5HF@O1P?oOp&j36=IKn56b$bUcxq$@Q2S7i0ObQwFiH$?siT z0>7LqliV*@!c}h^S;Bp5<4?;1+bC-xq!$@yxSyjeZo%3mP$c%lOojl15&SexcE7NZ z@JiyHvSFc_mFV_?k-}|enLlP@dxGCj$STk+X_sJ`KMn_L3LHkT_uYcC4oORf#g!fa zQ(G@)11%Txv@xwO=lH3m0TtKT2NQ9!K7!3E60+i3bZ%@f|I(@k1oNGH6afI5 z$=%o6GgLs=Amwn|7n^K;kxLoAs+(m`-*sMRPrqe;ExB}SnCyy~Ig#o-Lgf|OjrNlh z*RMcZIxcYjn6hoxp|aB`<;|+f8P}iY)*EOwDr6-3v{4^%%kNRlM=IBXd2#Y=GhOY3b{dlgJq|I3UsQ|m! zu4Y7C=HMsr4+%zN3E)r`Pw2_iq!TyfelZ5RaYrg|(CM#*<%cgTl$~9I`!J_!88VX) zvjM~2U)BzpK@7e6$STMUw_;oul2a)`m^6vjeX5xicPeTj8?jeQ0ke9-y%sFN-+}lY z+1y`}w5bfq+7bmh{}F-ZmkCu#)_VV1R0%2B`>b(BG@>`e?#54d{S%mg6yxk&;Qc_j zOo3oOYL8tTkCiZgNwLQWYNs^gcfGZ8e0_?>tW@_dX$9;GYzG&kw~5Bgz+u!KI>=?6 zV_94WG8ha~bk|{d(B`41N;%1y0j9{>k@os~osS!cS?~MMDT!RKB(1~?N_B?Iuv-=c zh3W)_*SiIgni!D2n~GwYScoVDGA28kT9`G2f!OGmyEiOmiJ~mgyX8aCy1OFF3{oc% zR?-I|0ywui^$vVcTE4q_w2PX;BXDyqEzp2UKAmFFJ9KuFhS#eH$n;{Q9l;V>TVpJu zQi8$fNCY*$<0$UiunvY>(NH2zXD)!RVTC>z)%I5s#6zWqH<3*x$q(-axM9aa>+`b- z=SYhqmq53=*dz`R!5MhkvwI~1O!N`7FB;XI$>2+%)9>`lphc6VaU27=u>I!j?VY!> zNW%kA1;rG(lh(pAc2*UkPuXq@10Ebu?%)u46mk5b4vqQxl8g@1$~%2GK$-II-PiE0Fr0OCMoK3=BIP7bu>f_{UHAt~=NxL6#V zizbGys>yEhk1Vw#A^45JnUr;~Kq=7yvK%&MxGfJ?w>1+CQvwtm&sw^1$KEpK0t2mU1RodgQrrdZ-32cc82gGF!&&gSMJ^KkRYg*%-E8LIPoB_g4Am&-LQo8Lj6wV zVD-|F!`ooBkR%6k+0=FGv5XYz^V7UtuaY0$p-I}kQ-oM9#>;HSieT!7XWYuRs9uT) z$Y)Cjo_zYC0@}mc^hFGca4WUKhzY8?_!!NPnFlbW=8o3rfS9DK?j4_13Ib}2?d0pE zwAI}@S=fiig71$sJU0KYXDiUYZjSF+#a7l)G&xdBsc zJjXJZHEZ0pEBrY0MOZ`w<<_p#8`Zvo?%az7v@G5=DI>Iva62r|#-LYvXj&n`j(440 zV^Ii-Iv9l8*UVZvzV19a_AX($Cs;}21@iwOZTGZx=3ualUt;BPd?)kGidz0{IYv5GcL62;wfub)xV#T6o-$LFJLJ? zYLI6ko<373h;j~5V?p4e(sbC07JeR2WQ~HQ9|Zpuh--TsAxF-e(EZ|4OK`%#oLOU? zbmrm9eFSm(%Vpf7FCsKU;SlnzZD==yJ9oU~f?l|;AN>HheSz*YAJDA1xZg=>c`AV! zg=zuSaCWlj0axnR@KKZNsJQPI{G52xez0FO(VEob4C*azswzH;YBy=4^$qAZ_vakF z5t~({5=pM>v2;_t22s=DWAY4NCZtvW&@U#l=aE0iHSEEm9Sq_f#3W zB}+ZTV;(

+X_)_S+x<`uZ0t}B}(e#rb_G1pkfY; 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 ZEnW$Qdg;0V14DXw&b?%405*TU`adAN;}`${ literal 0 HcmV?d00001 diff --git a/Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp b/Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp new file mode 100644 index 0000000..b68a8f3 --- /dev/null +++ b/Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp @@ -0,0 +1,101 @@ + + + 4 + Antonio Ospite + US1881 Hall effect sensor + + mar mag 29 2018 + + sensor + + + Variant 1 + Sensor + US1881 + + 100mil + + false + THT + + 3 + Single Row + + part.mystery.magical.3.pins + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + + + + + + + + + + + + + + + + + + + + + + Supply Voltage pin + + +

+ + +

+ + +

+

+ + + + + Ground pin + + +

+ + +

+ + +

+

+ + + + + Output pin + + +

+ + +

+ + +

+

+ + + + + diff --git a/Fritzing/svg/US1881_PCB.svg b/Fritzing/svg/US1881_PCB.svg new file mode 100644 index 0000000..c293c75 --- /dev/null +++ b/Fritzing/svg/US1881_PCB.svg @@ -0,0 +1,189 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fritzing/svg/US1881_breadboard.svg b/Fritzing/svg/US1881_breadboard.svg new file mode 100644 index 0000000..6b4c82c --- /dev/null +++ b/Fritzing/svg/US1881_breadboard.svg @@ -0,0 +1,122 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + mystery_part_3_sip_100mil_bread.svg + + + + + + + + + + + + + diff --git a/Fritzing/svg/US1881_schematic.svg b/Fritzing/svg/US1881_schematic.svg new file mode 100644 index 0000000..74ed33e --- /dev/null +++ b/Fritzing/svg/US1881_schematic.svg @@ -0,0 +1,134 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + VDD + + VSS + + + OUT + + diff --git a/Tetramag-ring-magnet.svg b/Tetramag-ring-magnet.svg new file mode 100644 index 0000000..2006099 --- /dev/null +++ b/Tetramag-ring-magnet.svg @@ -0,0 +1,751 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.25mm + + + + + + + + 5mm + + + + N + S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4.1mm + + + + + + + diff --git a/rotary_encoder/Makefile b/rotary_encoder/Makefile new file mode 100644 index 0000000..cc24a34 --- /dev/null +++ b/rotary_encoder/Makefile @@ -0,0 +1,6 @@ +BOARD_TAG = uno +MONITOR_PORT = /dev/ttyACM0 + +ARDUINO_LIBS = DFRkeypad Encoder LiquidCrystal + +include /usr/share/arduino/Arduino.mk diff --git a/rotary_encoder/rotary_encoder.ino b/rotary_encoder/rotary_encoder.ino new file mode 100644 index 0000000..8515524 --- /dev/null +++ b/rotary_encoder/rotary_encoder.ino @@ -0,0 +1,75 @@ +/* + * Rotary encoder example + * + * Copyright (C) 2018 Antonio Ospite + * SPDX-License-Identitier: WTFPL + */ + +#include +#include +#include + +#define ENCODER_CHANNEL_A 2 +#define ENCODER_CHANNEL_B 3 + +#define COUNTS_PER_ROTATION 84 + +#define LCD_RS 8 +#define LCD_EN 9 +#define LCD_D4 4 +#define LCD_D5 5 +#define LCD_D6 6 +#define LCD_D7 7 +#define LCD_BL 10 + +#define BACKLIGHT_VALUE 1023 + +long old_counts = 0; +Encoder encoder(ENCODER_CHANNEL_A, ENCODER_CHANNEL_B); +LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7); + +void setup() { + pinMode(LCD_BL, OUTPUT); + analogWrite(LCD_BL, BACKLIGHT_VALUE); + + lcd.begin(16, 2); + + lcd.setCursor(1, 0); + lcd.print("Rotary Encoder"); + lcd.setCursor(1, 1); + lcd.print("https://ao2.it"); + + DFRkeypad::FastADC(true); + DFRkeypad::iDEFAULT_THRESHOLD=140; +} + +void loop() { + byte key = DFRkeypad::GetKey(); + if (key == DFRkeypad::eSELECT) { + encoder.write(0); + } + + long new_counts = encoder.read(); + if (new_counts != old_counts) { + old_counts = new_counts; + + lcd.clear(); + + lcd.setCursor(0, 0); + lcd.print("Count: "); + lcd.setCursor(8, 0); + lcd.print(new_counts); + + /* Position normalized between 0 and COUNTS_PER_ROTATION */ + long position = ((new_counts % COUNTS_PER_ROTATION) + COUNTS_PER_ROTATION) % COUNTS_PER_ROTATION; + + float angle = position * (360.0 / COUNTS_PER_ROTATION); + + lcd.setCursor(0, 1); + lcd.print("Angle: "); + lcd.setCursor(8, 1); + lcd.print(angle); + } + + delay(20); +} diff --git a/show_quadrature_states/Makefile b/show_quadrature_states/Makefile new file mode 100644 index 0000000..7b0316f --- /dev/null +++ b/show_quadrature_states/Makefile @@ -0,0 +1,6 @@ +BOARD_TAG = uno +MONITOR_PORT = /dev/ttyACM0 + +ARDUINO_LIBS = Encoder + +include /usr/share/arduino/Arduino.mk diff --git a/show_quadrature_states/show_quadrature_states.ino b/show_quadrature_states/show_quadrature_states.ino new file mode 100644 index 0000000..b44f0ad --- /dev/null +++ b/show_quadrature_states/show_quadrature_states.ino @@ -0,0 +1,44 @@ +/* + * Show quadrature states of two Hall effect sensors. + * + * Copyright (C) 2018 Antonio Ospite + * SPDX-License-Identitier: WTFPL + */ + +#define HALL_CHANNEL_A 2 +#define HALL_CHANNEL_B 3 +#define LED_PIN 13 + +int hall_state_A = 0; +int hall_state_B = 0; + +int old_hall_state_A = -1; +int old_hall_state_B = -1; + +void setup() +{ + pinMode(HALL_CHANNEL_A, INPUT); + pinMode(HALL_CHANNEL_B, INPUT); + pinMode(LED_PIN, OUTPUT); + Serial.begin(115200); +} + +void loop() +{ + hall_state_A = digitalRead(HALL_CHANNEL_A); + hall_state_B = digitalRead(HALL_CHANNEL_B); + + if (hall_state_A != old_hall_state_A || + hall_state_B != old_hall_state_B) + { + digitalWrite(LED_PIN, hall_state_A); + + old_hall_state_A = hall_state_A; + old_hall_state_B = hall_state_B; + + Serial.print(hall_state_A); + Serial.print(" "); + Serial.print(hall_state_B); + Serial.print("\r\n"); + } +} -- 2.1.4