Anda di halaman 1dari 11

Homemade wheel encoder

By Aniss1001
November 1, 2009
Basically I just printed out one of these (laser printer recommended!
"""And attached it to a #heel (double sided tape recommended"
$hen I hoo%ed up one of these (a 2& I' sensor! ('B11)*!
"""And attached it to the motor pointin+ to#ards the #heel"
I,ve been testin+ it a bit #ith a fe# lines of Arduino code and damnit it #or%s !- I,m no# able to
measure ho# much the #heel is rotatin+ and therefore calculate ho# far a robot is movin+" I just
love it #hen these cheap lo#tech solutions #or%"
.ere are some photos (sorry about the bad /uality!

.ere is the schematic I used to hoo% up the ('B11)* sensor!
I used a 0"1u0 ceramic cap" -on,t %no# if that,s #hat #as intended1 It does have a 2 indicatin+ a
polari3ed cap, but I dunno1 4an I #ish people #ould #rite the %ind of cap you,re supposed to
use, but apparently that,s obvious to everyone but me !5 If anyone has a su++estion of #hat to use
I,m open1
.ere is the Arduino code I used for testin+!
6define I78 1*
6define 894 )
int val:ne#;
int val:old;
int clic%s < 0;
int turns < 0;
void setup( =
pin4ode(I78, IN8@$;
val:ne# < di+ital'ead(I78;
val:old < val:ne#;
void loop( =
analo+9rite(894, B0;
val:ne# < di+ital'ead(I78;

if(val:ne# C< val:old =
if(clic%s << *0 =
clic%s < 1;
>erial"print(D$@'N>! D;
else clic%s22;

>erial"print(DEFIEG>! D;
val:old < val:ne#;
Basically I just add 1 to the variable click every time the color in front of the sensor chan+es"
9hen I reach *0 clic%s I reset the variable click and add 1 to the variable turns" And off course
I,m lo++in+ everthin+ throu+h serial for testin+" $hat,s it !
Comment viewing options
post code and a schematic on ho# you hoo%ed it up please !
Hust posted schematic and code used ;
Foo%s +ood but #hen you reset clic%s to 1 you are outputtin+ the clic%s variable #hen you #ant
turns" 4inor thin+ to fiI and really only affects debu++in+ ; Jood job I #ill use this #hen I
ma%e my K47> and Arduino tutorials usin+ encoders to +ive me a le+ up on doin+ the code"
Lou may #anna use interrupts for this sorta thin+" I loo%ed into it and found out that this can
only be done #ith pin 2 and )" @nfortunately my homemade motor shield allready uses pin ) for
motor 894, so I thou+ht I #ould try it this #ay to avoid resolderin+ my motor shield"""Hust
thou+ht I,d let you %no# ; 8>! Mery much loo%in+ for#ard to your KNmos tutorial"""
Actually, any pin can be used as an interrupt NN just not usin+ the DattachInterruptD function" $he
ne#er AM's support DpinNchan+eD interrupts on any pin" Lou have to end up delvin+ a bit deeper
into understandin+ the AM' architecture, but there,s some sample code in a tutorial I #rote over
at $'E! http!55forums"trossenrobotics"com5tutorials5ho#NtoNdiyN12B5anNintroductionNtoN
It is +oin+ to be a #hile it #ill be one of the last turorials and the easy ones #ont start for a
couple #ee%s" I #ant to finish my da+u contest bot first
By Aniss1001 O >un, 2009N11N01 2)!)B
>orryC It,s because I chan+ed the variable names from counter1 and counter2 into somethin+
more descriptive just before I posted the code" It has been corrected"""
Foo%s +reat, no# your robot is +ettin+ ready for closed loop speed control and mappin+C
I am an amateur robotics enthusiasts" I #anted to %no# if a ('-111* can be used instead of the
('B11)*1 As i have ('-111* component available and ('B11)* is not available" 9hat
chan+es do i need to ma%e in the circuit schematics" I intend to ma%e a #heel encoder and
pro+ressin+ a little for#ard, be able to control the speed of the dc motor usin+ 894"
I feel #eird as%in+ this! .o# do u decide these values for ur components1 Any +ood lin%s so that
i could learn and eIperiment more (my electronics %no#led+e suc%sC"
9ith a 12M dc motor O 100 rpm"" I am unable to distin+uish the blac% and #hite patches of the
#heel" I am usin+ a ('-111* as the optoNs#itch" Any su++estions1 (one #ould be to reduce the
speed and chec%, #ill do that, any other su++estions1
I su++est you start a separate forum post" 8rovide pictures, schematics, details of #hat you have
tested, etc" $his #ill help us help you"
>earch this site for ('-111* and you #ill find several circuits for optical encoders based on
these devices" $he eIact values for the components can be a bit tric%y, as I am findin+" It is
hi+hly dependent on your physical set up" Maryin+ the resistor value on the I' FP- #ill +ive you
more or less I' li+ht to be reflected" -ependin+ on your ho# the ('-111* is placed, the
ambient li+ht, and other physical factors, you may #ant more or less I' li+ht"
Ehec% out the pa+es that have been posted" 8lay #ith the reflective and absorbent material for
your encoder, %eep tryin+ until you +et the results you can count on" I,m #or%in+ on this at the
moment myself"
PIperimentations #ould be +ood if i had a lot of ('-111*s for burnin+" $his components is so
scarcely found in india that it too% t#o #ee%s for me to procure * pieces" >o i am just #orried
that i may end up burnin+ all of them before seein+ some action"
But i #ill remember your advice and try to %eep it safe and educative ;
Lou don,t ris% of burnin+ them if you al#ays %eep a series resistor for the FP- and a pull up
resistor" $he values of these resistors depend +reatly on your setup" I #ould su++est to print a
stripped dis% then hoo% #ires to the sensor and plu+ it in a breadboard" then test different values
for the series resistor (bet#een ?0 ohms and 1%, lo#er values #ill ma%e the FP- shine bri+hter
and the pull up resistor (from *"Q% to 1?%" 9hat you #ant is to have a 0"""0"BM for a F79 value
and over )"?M for a .IJ. value" >tart #ith the standard resistors, measure the volta+es, then
lo#er the series resistor little by little until you reach 100 ohms" If the F79 volta+e is still hi+h,
lo#er the pull up resistor until you +et a +ood F79 volta+e and chec% the .IJ. volta+e so it
doesn,t drop under )"?M"
Need Assistance...
--I understand the schematic above but dont quite follow how you have this hooked up--
I came across another site that had the same schematic as you have listed above. The site also had some instruction like what I
have listed below, Please read...
////on!t use this code it is from another web site. I!m usin" it as an e#ample...
$onnect analo" pin % to & via a %.'u( capacitor
$onnect the white wire )collector* from the sensor to pin %, '%+ resistor to ,
$onnect the blue wire)emitter* to &
$onnect the "reen wire)cathode* to &
$onnect the oran"e wire)anode* to , via a --%ohms resistor
///.nd of e#ample.
/ookin" at the above code he has the white wire on line %. I believe you have it connected to analo" line 0. but what i don!t
understand is how you are readin" di"ital line '1.
2s you can see this e#ample is usin" analo". It looks like you are usin" a mi# of analo" and di"ital.
I would deeply appreciate it if you could type up somethin" like this as an e#ample so I can use your code e#ample.
3orry, as Im quite new to this4

0or+ive me my i+norance but could you tell me #hat this Done of theseD thin+s is 1
I understand your confusion" 8eople just call it an DencoderD #hich is an a#ful term for it, since
everythin+ that transforms information of any %ind into another format is an DencoderD" $he term
D#heel encoderD I just invented because I don,t %no# #hat to call it" It doesn,t /ualify as a
D/uadrature encoderD because it has only one I' sensor, and a Drotary encoderD is (to my
%no#led+e synonimous #ith D/uadrature encoderD" >o I,m not sure #hat %ind of encoder I just
made !
.o#ever it #or%s li%e j%lu+B0 says! $he #heel is divided into *0 steps (in my case and the I'
sensor allo#s me to detect #henever the #heel has turned another step" I then %no# that the
#heel has turned )R0 5 *0 < 9 de+rees" Asumin+ that both #heels of the robot are turnin+ #ith
the same speed, and %no#in+ the diameter of the #heel, I can then calculate ho# far the robots
has moved usin+ the +eometric formula! c < 8I S d (c! the full circle and d! diameter"
It is an encoder" It counts every time it transitions from blac% to #hite and #hite to blac%" If you
%no# that you have 1R transitions and your #heel has a R inch circumference then you %no# that
every 1R encoder tic%s you drove R inches" MP'L useful if you #ant your robot to map a room
or drive a certain distance"
Eodificador de la rueda .omemade
BTsicamente yo sUlo imprimV uno de ellos (impresora lTser recomendado!

""" L unido a una rueda (cinta de doble cara se recomienda"
Pntonces me puse en uno de ellos (a 2 & sensor I'! ('B11)*!

""" L unido al motor apuntando hacia la rueda"
.e estado probando un poco con unas pocas lVneas de cUdi+o de Arduino y maldita sea funciona!
- yo soy ahora capa3 de medir la cantidad de la rueda estT +irando y por lo tanto calcular hasta
/uW punto un robot estT en movimiento" 4e encanta cuando estas soluciones Fo#tech baratos
A/uV estTn al+unas fotos (lo siento por la mala calidad!

Pste es el es/uema /ue solVa conectar el sensor ('B11)*!

.e utili3ado una tapa de cerTmica 0"1u0" No sW si eso es lo /ue se pretendVa1 Pl hotel tiene un 2
indica una +orra polari3ado, pero no sW1 Pl hombre me +ustarVa /ue la +ente escribir el tipo de
tapa /ue se supone /ue usar, pero al parecer eso es obvio para todos menos para mV !5 >i al+uien
tiene una su+erencia de lo /ue debe usar estoy abierto1
A/uV estT el cUdi+o Arduino utilicW para la prueba!
6 -efine 8I7 1*
6 -efine 894 )
int val:ne#;
int val:old;
int hace clic < 0;
int convierte < 0;
void setup ( =
>erial"be+in (11?"200;
pin4ode (I78, IN8@$;
val:ne# < di+ital'ead (I78;
val:old < val:ne#;
void loop ( =
analo+9rite (894, B0;
val:ne# < di+ital'ead (I78;

si (val:ne#C < val:old =
if (clics << *0 =
clic%s < 1;
'esulta 2 2;
>erial"print (DM@PF$A>!D;
>erial"println (vueltas;
clics else 2 2;

>erial"print (Dclic%s!D;
>erial"println (clics;
val:old < val:ne#;
BTsicamente Acabo de aZadir 1 a la variable clic cada ve3 /ue el color frente a los cambios de
los sensores" Euando lle+o a *0 clics puedo restablecer la variable clic y aZadir 1 a los turnos
variables" L por supuesto /ue estoy tala PMP'$.INJ a travWs de serie de la prueba" Pso es
todo !
Eomentario opciones de visuali3aciUn
8ublicaciUn de cUdi+o y un es/uema de cUmo se en+anchU para arriba por favor !
Acaba de publicar es/uemTtico y el cUdi+o utili3ado ;
>e ve bien, pero cuando se restablece clics para 1 estT dando salida la variable clics cuando desee
vueltas" Eosa menor para arre+lar y realmente sUlo afecta a la depuraciUn ; Buen trabajo voy a
utili3ar esto cuando ha+o mis tutoriales K47> y Arduino usando codificadores me darT una
ventaja en hacer el cUdi+o"
Ps posible /ue /uieras usar interrumpe para esta cosa sorta" Fo mirW a Wl y se enterU de /ue esto
sUlo se puede hacer con el pin 2 y )" -esafortunadamente mi escudo motor casera utili3a allready
pin ) para 894 del motor, por lo /ue pensW /ue iba a tratar de esta manera para evitar
resolderin+ mi escudo motor """ >Ulo /uerVa hacerle saber ; 8-! 4uy ilusionado con su KNmos
tutorial """
Pn realidad, cual/uier pin se puede utili3ar como una interrupciUn N simplemente no utili3ando la
funciUn de DattachInterruptD" Fos mTs nuevos AM's admiten interrupciones DpinNcambioD en
cual/uier pin" @sted tiene /ue lle+ar a ahondar un poco mTs en la comprensiUn de la ar/uitectura
AM', pero no hay un cUdi+o de ejemplo en un tutorial /ue escribV sobre al $'E!
http!55forums"trossenrobotics"com5tutorials5ho#NtoNdiyN12B5an NintroducciUnNaNinterrumpeN)2*B 5
Ma a ser un tiempo /ue serT uno de los [ltimos turorials y los fTciles no comen3arT por un par de
semanas" (uiero terminar mi da+u concurso bot primero
8or Aniss1001 O >un, 2009N11N01 2)!)B
\Fo sientoC Ps por/ue he cambiado los nombres de las variables de contador1 y counter2 en al+o
mTs descriptivo justo antes he publicado el cUdi+o" >e ha corre+ido """
Fuce muy bien, ahora el robot se estT preparando para el control de velocidad en la3o cerrado y
Lo soy un entusiastas de la robUtica amateur" (uerVa saber si un ('-111* se puede utili3ar en
lu+ar de la ('B11)*1 Eomo he componente ('-111* disponible y ('B11)* no estT
disponible" ](uW cambios necesito hacer en los es/uemas de circuitos" $en+o la intenciUn de
hacer un codificador de la rueda y avan3a un poco hacia adelante, serT capa3 de controlar la
velocidad del motor de corriente continua mediante 894"
4e siento raro pedir esto! @ ]EUmo deciden estos valores para ur componentes1 Eual/uier bien
comunicado para /ue yo pudiera aprender y eIperimentar mTs (mi conocimiento de la
electrUnica es una mierdaC"
Eon un motor de corriente continua de 12 M a 100 rpm "" Lo soy incapa3 de distin+uir las
manchas blancas y ne+ras de la rueda" Pstoy utili3ando un ('-111* como el interruptor Uptico"
]Al+una su+erencia1 (@no podrVa ser la reducciUn de la velocidad y comprobar, harT eso, al+una
otra su+erencia1
Fe su+iero /ue comience un mensaje en el foro independiente" 8roporcione los cuadros,
es/uemas, detalles de lo /ue has probado, etc Psto ayudarT a ayudarle"
Buscar en este sitio para ('-111* y encontrarTs varios circuitos para codificadores Upticos
basados en estos dispositivos" Fos valores eIactos de los componentes puede ser un poco
complicado, ya /ue me estoy encontrando" Ps altamente dependiente en su confi+uraciUn fVsica"
Mariando el valor de la resistencia en el FP- I' le darT mTs o menos lu3 infrarroja /ue se refleja"
-ependiendo de cUmo se coloca el ('-111*, la lu3 ambiental, y otros factores fVsicos, es
posible /ue desee mTs o menos lu3 I'"
Pcha un vista3o a las pT+inas /ue se han publicado" Hue+a con el material reflectante y
absorbente para su codificador, si+ue intentando hasta /ue obten+a los resultados /ue usted
puede contar" Pstoy trabajando en esto en el momento mismo"
PIperimentaciones serVa bueno si yo tenVa un montUn de ('-111*s para la +rabaciUn" Pste
componente es tan apenas encontraron en la India /ue tomU dos semanas para /ue yo procuro *
pie3as" AsV /ue estoy preocupado de /ue yo podrVa terminar /uemando todos ellos antes de ver
al+o de acciUn"
8ero voy a recordar sus consejos y tratar de mantenerlo a salvo y educativo ;
@sted no lo hace el ries+o de /uemarlos si siempre mantiene una resistencia en serie para el FP-
y una resistencia pull up" Fos valores de estas resistencias dependen en +ran medida de la
confi+uraciUn" Lo su+erirVa a imprimir un disco despojado a continuaciUn, conectar cables al
sensor y conWctelo en un tablero" lue+o probar diferentes valores para la resistencia en serie
(entre ?0 ohmios y 1%, los valores mTs bajos harTn /ue el FP- brille mTs brillante y la
resistencia de pull up (de *,Q % de 1?%" Fo /ue /ueremos es tener un 0 """ 0,B M por un valor de
sobre y baja )"?M para un valor alto" Eomience con las resistencias estTndar, medir las tensiones,
a continuaciUn, baje la resistencia en serie poco a poco hasta lle+ar a 100 ohmios" >i la tensiUn
baja es a[n elevada, baje la resistencia pull up hasta /ue obten+a una buena baja tensiUn y
comprobar la tensiUn alta, asV /ue no cae bajo )"?M"
]Necesita ayuda con """
N Pntiendo /ue el es/uema de arriba, pero no lo comprendo muy bien cUmo ha esta conectado N
4e encontrW con otro sitio /ue tenVa el mismo es/uema como usted ha mencionado
anteriormente" Pl sitio tambiWn tenVa al+una instrucciUn como lo /ue he enumerado a
continuaciUn, por favor, lea "
5 5 5 5 No utilice este cUdi+o es de otro sitio #eb" Fo estoy usando como ejemplo """
Eonecte pin analU+ico 0 a J a travWs de un condensador de 0"1u0
Eonecte el cable blanco (colector del sensor al pin 0, resistencia de 10G a M
Eonecte el cable a3ul (emisor a J
Eonecte el cable verde (cTtodo a J
Eonecte el cable naranja (Tnodo de M a travWs de una resistencia de 220ohms
5 5 5 0in del ejemplo"
4irando el cUdi+o de se+uridad /ue tiene el cable blanco en la lVnea 0" Ereo /ue usted tiene /ue
conectar a la lVnea analU+ica )"
8ero lo /ue no entiendo es cUmo usted estT leyendo lVnea di+ital 1*"
Eomo se puede ver este ejemplo es el uso analU+ico" 8arece /ue estTs utili3ando una me3cla de
analU+ico y di+ital"
4e +ustarVa profundamente a+radecidos si usted podrVa escribir al+o como esto como un ejemplo
para /ue pueda utili3ar su ejemplo de cUdi+o"
Fo sentimos, ya /ue estoy bastante nuevo en esto """

8erdona mi i+norancia, pero ]podrVa decirme lo /ue esta Duna de esasD cosas es1
Pntiendo su confusiUn" Fa +ente simplemente lo llaman un DencoderD /ue es un tWrmino muy mal
por Wl, ya /ue todo lo /ue transforma la informaciUn de cual/uier tipo a otro formato es un
DencoderD" Pl tWrmino Dcodificador de la ruedaD /ue acabo de inventar, por/ue no sW cUmo
llamarlo" No calificar como Dcodificador de cuadraturaD, ya /ue sUlo tiene un sensor de
infrarrojos, y un Dcodificador rotativoD es (a mi conocimiento sinUnimo de Dcodificador de
cuadraturaD" AsV /ue no estoy se+uro de /uW tipo de codificador /ue acabo de hacer !
>in embar+o, funciona como j%lu+B0 dice! Fa rueda estT dividida en *0 pasos (en mi caso y el
sensor de infrarrojos permite /ue yo detecto cada ve3 /ue la rueda ha +irado un paso mTs"
Pntonces sW /ue la rueda ha +irado )R05*0 < 9 +rados" Asumiendo /ue las dos ruedas del robot
estTn recurriendo a la misma velocidad, y conociendo el diTmetro de la rueda, puedo entonces
calcular hasta /uW punto los robots se ha movido con la fUrmula +eomWtrica! c < 8I S d (c! el
punto de partida y d ! diTmetro"
Ps un codificador" Euenta cada ve3 /ue cambia de ne+ro a blanco y de blanco a ne+ro" >i usted
sabe /ue usted tiene 1R transiciones y la rueda tiene una circunferencia de R pul+adas, entonces
usted sabe /ue cada 1R codificador +arrapatas /ue condujiste R pul+adas" 4uy [til si usted /uiere
/ue su robot para mapear o conducir una cierta distancia una habitaciUn"
Eon el fin de estimar la posiciUn y la orientaciUn usando la nave+aciUn a estima, hay /ue medir
la rotaciUn de las ruedas (o el eje del motor o en+ranaje tracciUn a las ruedas" Psto si+nifica
utili3ar al+[n tipo de eje o rueda de codificador" Pl '8? tiene un en+ranaje /ue +ira *I para cada
rotaciUn de la rueda, y un a+ujero en Wl /ue se indican se puede utili3ar para contar las rotaciones
del en+ranaje utili3ando al+[n tipo de (infrarrojos codificador Uptico"
@no puede conse+uir mucha mTs precisiUn mediante el uso de mTs a+ujeros 5 ranuras o mTs
marcas, como se discute en este hilo de los codificadores caseros" AdemTs, tener dos conjuntos
de marcas de despla3amiento permite hacer la codificaciUn de cuadratura y determinar el sentido
de la marcha tambiWn" 8ara mi primer robot, sUlo estoy usando un codificador Tspero, con *
pulsos por vuelta de rueda"
Al mirar en el chasis, no hay mucho espacio" Eomo resultado de ello, decidV /ue harVa uso de un
pe/ueZo sensor transmisivo, en lu+ar de un sensor reflectante" Ambos tienen un emisor de I' y
un fotodetector de infrarrojos" 8ara las unidades reflectoras, ambos en el mismo sentido, y la
medida de infrarrojos detector reflejadas de vuelta al sensor" 8ara una transmisivo o interrumpir
el sensor, las dos unidades estTn separadas por un hueco, y el detector reco+e I' /ue pasa a
travWs de la brecha" .asta ahora, todo bien"
$erminW usando sensores Mishay transmisores Upticos (modelo $E>$1202 he comprado
-i+iGey" PncontrW un ciruch y cableado para arriba basado en el circuito 8ublicado por
Aniss1001 en el hilo Dcodificador de la rueda caseraD en el foro de Arduino"
dia+rama del circuito codificador
-ia+rama de circuito del codificador N por otro codificador, pero funcionU bien
Lo construV el circuito en un circuito de prototipos para pruebas y ten+o una sorpresa" Pl circuito
funcionaba bien, pero el tren es transparente a I'C 'esulta /ue el nylon y la mayorVa de los
plTsticos /ue se utili3an para los en+ranajes econUmicos son bastante transparente al I'" 8rimero
intentW crear una secciUn opaca con un marcador ne+ro, pero al mismo tiempo /ue trabajU en el
papel, no se adhiriU suficientemente bien como para el tren" $erminW usando un peda3o de cinta
de color ne+ro" @na ve3 /ue trabajaba, me cortW al+unas pe/ueZas placas de circuito hacia abajo
a medida y construido los codificadores, practicando mis habilidades de soldadura"
Acabo de utili3ar pe+amento caliente para montar los codificadores" Fas tarjetas captador se
pe+an para arriba por encima de la base del chasis, asV /ue estoy utili3ando separadores para
levantar la placa de plTstico con el controlador de 'omeo y otros dispositivos" A/uV hay una foto
de uno de los codificadores antes del montaje, y despuWs se monta en el bastidor!
Eodificador de la rueda .omemade
Eodificador de la rueda .omemade
Pncoder montado