1. Introducción
El orangután de LV-168 conectado a un soporte de la batería de 3 AA.
Orangután del bebé B con pines de cabecera incluidos soldado en la instalacin de tablero.
Arduino es una plataf plataforma orma de prototi prototipado pado popular, popular, de código abierto que hace que sea fácil para las personas con poca experiencia en la electrónica para entrar en el mundo de los microcontroladores y programación embebida. El entorno Arduino consiste en un entorno de código abierto de desarrollo integrado (IDE y el compilador, librer!as de soft" so ft"ar are, e, y pl placa acas s de har hard" d"ar are e pr progr ogram amab able le ba basa sado do en el A#meg mega$ a$%& %& po pote tente nte y mi micr croc ocont ontro rola lador dores es Atmega'&. Debido a que nuestro )rangután *+xx& , orangután -+$%& , y de beb orangután / controladores de robots rob ots usan est estos os mis mismos mos micr microco ocontr ntrolad oladores ores,, tie tienen nen un alt alto o gra grado do de sola solapami pamient ento o con Arduino. Arduino.0or 0or tan tanto, to, nuestros controladores de robots orangután pueden ser una alternati1a atracti1a a hard"are oficial de Arduino para aquellos que ya están familiari2ados con el entorno Arduino, y el medio ambiente pueden ser una alternati1a amigable para los principiantes a A+3 *tudio para aquellos que buscan para empe2ar con los orangutanes.
Nota: El robot 'pi 0ololu tiene efecti1amente un orangután *+xx& como su n4cleo, por lo que esta gu!a y las bibliotecas orangután Arduino aplica al 'pi tambin. 0ara obtener más información sobre el 'pi, consulte la gu!a del usuario 'pi .
-a oferta orangutanes y robot 'pi hard"are que Arduinos no lo hacen, como controladores de motor doble de a bordo integrado. Esto los hace muy adecuados para aplicaciones que implican el control de peque5as y medianas robots. El orangután *+xx&, orangután -+$%&, y el robot 'pi tambin han integrado pulsadores, un 2umbador pie2o, y un -6D extra!ble, todas las cuales son caracter!sticas adicionales que no se encuentran en Arduinos oficiales. 6on algunos cambios menores en los archi1os de configuración de soft"are de Arduino, se hace posible programar nuestros orangutanes y robot 'pi usando el Arduino IDE y bibliotecas. Esta gu!a le guiará a tra1s del proceso de reconfiguración de la Arduino IDE, y ofrecerá una serie de bibliotecas personali2adas que harán más fácil para hacer interfa2 con todo el hard"are a bordo del orangután 7 de 'pi.
Nota: El robot 'pi 0ololu tiene efecti1amente un orangután *+xx& como su n4cleo, por lo que esta gu!a y las bibliotecas orangután Arduino aplica al 'pi tambin. 0ara obtener más información sobre el 'pi, consulte la gu!a del usuario 'pi .
-a oferta orangutanes y robot 'pi hard"are que Arduinos no lo hacen, como controladores de motor doble de a bordo integrado. Esto los hace muy adecuados para aplicaciones que implican el control de peque5as y medianas robots. El orangután *+xx&, orangután -+$%&, y el robot 'pi tambin han integrado pulsadores, un 2umbador pie2o, y un -6D extra!ble, todas las cuales son caracter!sticas adicionales que no se encuentran en Arduinos oficiales. 6on algunos cambios menores en los archi1os de configuración de soft"are de Arduino, se hace posible programar nuestros orangutanes y robot 'pi usando el Arduino IDE y bibliotecas. Esta gu!a le guiará a tra1s del proceso de reconfiguración de la Arduino IDE, y ofrecerá una serie de bibliotecas personali2adas que harán más fácil para hacer interfa2 con todo el hard"are a bordo del orangután 7 de 'pi.
8na diferencia cla1e entre las tablas estándar de Arduino y los controladores de robots orangután es que la mayor!a 1ienen con Arduino 8*/ a serial adaptadores integrados, que permiten conectar a su computadora y el programa a tra1s tra 1s de gest gestores ores de arr arranqu anque e pre precar cargado gado,, mie mientra ntras s que los oran oranguta gutanes nes car carecen ecen integrado integrado 8*/ a ser serie ie adaptadores. 6omo tal, para el )rangután *+xx&, -+$%& y el robot 'pi, le recomendamos que programe los orangut ora ngutanes anes o robo robott 'pi usa usando ndo un I*0 A+3 A+3 (de (denomi nominado nado I6*0 en el mund mundo o Ar Ardui duino no pro progra gramado madorr com como o nuestro 8*/ A+3 0rogrammer . 0rogrammer . Al adoptar este enfoque y de9ando fuera el gestor de arranque, se obtiene un :/ extra de espacio del programa. #ambin e1itar el retraso del gestor de arranque al encender o reiniciar el tablero.
!ololu progra"ador AV# $%B con cable incluido &%! seis pines.
Nota: Este documento se aplica sólo al robot 'pi y )rangután *+xx& , orangután -+$%& , y el beb orangutá orangután n / control controladores adores de robots. 0ara simplific simplificar ar,, los tre tres s 4lti 4ltimos mos dis disposi positi1 ti1os os se deno denomina minarán rán a partir partir de aho ahora ra
como "orangutanes" , a menos que una distinción debe hacerse entre los modelos )rangután espec!ficos. Este documento hacenosolicitar a la originalorangután , orangután del beb , orangután ; , o *+0 )rangután de control del robot. 2. ATmega168 Mapping / 328-in Arduino En nuestra documentación estándar orangután y 'pi, utili2amos la misma con1ención que Atmel utili2a en su A#mega$%& 7 '& ho9a de datos, en referencia a las patillas de sus puertos asociados. 0or e9emplo, el pin 0D< es el pin < del puerto D. *e utili2a esta con1ención, ya que cada puerto es controlado por sus propios registros A+3, y los bits de estos registros corresponden a los pines indi1iduales. El Arduino a!sla al usuario de este ni1el de detalle, en referencia a los pines de E 7 * como pines digitales =$' y entradas analógicas = <. #enga en cuenta que esta terminolog!a puede ser un poco enga5oso ya que las entradas analógicas => tambin se puede utili2ar como yo digital de propósito general pines E 7 * (referido como pines digitales $?$@. 8sted puede 1isitar http77""".arduino.cc7en7BacCing70inapping$%& para 1er exactamente cómo los mega$%& 7 '& pines se asignan a los pines de Arduino. #enga en cuenta que esta página muestra un chip encapsulado DI0 de & pines, mientras que los orangutanes lle1an peque5os paquetes de ' pines del - que contienen dos entradas analógicas dedicadas adicionales AD6% y AD6<. En el entorno de Arduino, estas patillas se con1ierten en entradas analógicas Arduino % y <, respecti1amente. El diagrama siguiente pro1iene de la página 1inculada anteriormente
2.a. !rangutn #$-%%8 & 'T-168 in Asignaciones
Orangután %V-168 'ista desde aba(o con di"ensiones )cartogra*ía pin de Arduino+.
Orangután LV-168 'ista desde aba(o con di"ensiones )cartogra*ía pin de Arduino+.
Ta()a Asignación in !rdenado por *unción +unción
Arduino in
mega168 in
digital de E 7 * (x&
pines digitales = y $ entradas analógicas =>
0D=, 0D$, 06= 06>
entradas analógicas (x&
entradas analógicas =<
06= 06>, AD6%, AD6<
$ de control del motor (A y /
pines digitales > y %
0D> y 0D%
de control del motor (A y /
pines digitales ' y $$
0D' y 0/'
-ED ro9o de usuario
pin digital $
0D$
-ED 1erde usuario
pin digital <
0D<
pulsadores de usuario (x'
entradas digitales @, $ y $'
0/$, 0/? y 0/>
2umbador
pin digital $=
0/
6ontrol -6D (3*, 3 7 F, E
pines digitales , & y ?
0D, 0/=, y 0D?
Datos -6D (? bits D/? D/<
pines digitales @, $, $' y <
0/$, 0/?, 0/>, y 0D<
trimmer de usuario potenciómetro
entrada analógica < (a tra1s de puente
AD6<
sensor de temperatura (sólo -+$%& de la bater!a del monitor de tensión (*+$%& solamente
entrada analógica % (a tra1s de puente *#
AD6%
-!neas de programación I6*0 (x'
pines digitales $$, $ y $'
0/', 0/?, 0/>
pulsador de rearme
rea9ustar
06%
8A3# (3; y #;
pines digitales = y $
0D= y 0D$
I6 7 #FI (*DA y *6-
entradas analógicas ? y >
06? y 06>
*0I
inaccesible para el usuario
Ta()a Asignación in !rdenado por in Arduino in
+unción orangutn
Notas / +unciones A)ternos
pin digital =
E 7 * digital
8*A3# pin de entrada (3;D
pin digital $
E 7 * digital
conectado a) , roo de usuario (altas 1ueltas -ED encendido pin de salida 8*A3# (#;D
pin digital
e contro) ,0 de
interrupción externa = (IG#=
)nea # pin digital '
,nea de contro) M2 #imer salida 0F / ()6/
pin digital ?
,nea de contro) ,0
pin digital >
,nea de contro) M1 #imer= salida 0F / ()6=/
pin digital %
,nea de contro) M1 #imer= 0F de salida A ()6=A
pin digital <
,nea de datos ,0 conectado a) , 4erde usuario (altas 1ueltas -ED encendido '
pin digital &
,0 )nea de contro) / 5
pin digital @
,nea de datos ,0 pu)sador de usuario (pulsando tira pin ba9a ' #imer$ salida 0F A ()6$A
pin digital $=
7um(ador
#imer$ salida 0F / ()6$/
pin digital $$
,nea de contro) M2
*alida #imer 0F A ()6A l!nea de programación I*0
pin digital $
,nea de datos ,0 pu)sador de usuario (pulsando tira pin ba9a recaución: tam(i9n una )nea de programación I# '
pin digital $'
,nea de datos ,0 pu)sador de usuario (pulsando tira pin ba9a recaución: tam(i9n una )nea de programación I# '6
entrada analógica =
entrada analógica y E 7 * digital
AD6 canal de entrada = (AD6=
entrada analógica $
entrada analógica y E 7 * digital
6anal de entrada AD6 $ (AD6$
entrada analógica
entrada analógica y E 7 * digital
6anal de entrada AD6 (AD6
8*A3# entrada de relo9 externa 7 salida (;6: contador externo #imer= (#=
#imer$ captura de entrada (I60$ salida de relo9 del sistema di1idido (6-:=
entrada analógica '
entrada analógica y E 7 * digital
6anal de entrada AD6 ' (AD6'
entrada analógica ?
entrada analógica y E 7 * digital
6anal de entrada AD6 ? (AD6? I6 7 #FI l!nea de datos de entrada 7 salida (*DA
entrada analógica >
entrada analógica y E 7 * digital
6anal de entrada AD6 > (AD6> I6 7 #FI l!nea de relo9 (*6-
entrada analógica %
#MT puenteado a sensor de temperatura (sólo -+$%& #MT puenteado de super4isar 4o)tae de )a de entrada analógica (atera (*+$%& solamente canal de entrada AD6 % (AD6% dedicada
entrada analógica <
de entrada analógica puenteado a recortador usuario potenciómetro dedicada del canal de e ntrada AD6 < (AD6<
rea9ustar
pulsador de rearme
tirado internamente altaH acti1o ba9o E 7 * digital desacti1ado por defecto
2.(. (e(9 orangutn ' in Asignaciones
Ta()a Asignación in !rdenado por *unción +unción
Arduino in
mega168 in
digital de E 7 * (x$%
pines digitales =, ?, <$=, $, $' entradas analógicas =>
0D= 0D, 0D?, 0D<, 0/= 0/, 0/?, 0/>, 06= 06>
entradas analógicas (x&
entradas analógicas =<
06= 06>, AD6%, AD6<
$ de control del motor (A y /
pines digitales > y %
0D> y 0D%
de control del motor (A y /
pines digitales ' y $$
0D' y 0/'
-ED ro9o de usuario
pin digital $
0D$
trimmer de usuario potenciómetro
entrada analógica <
AD6<
-!neas de programación I6*0 (x'
pines digitales $$, $ y $'
0/', 0/?, 0/>
3EIGI6I)
rea9ustar
06%
8A3# (3; y #;
pines digitales = y $
0D= y 0D$
I6 7 #FI (*DA y *6-
entradas analógicas ? y >
06? y 06>
*0I
inaccesible para el usuario
#imer$ salidas 0F (A y /
pines digitales @ y $=
0/$ y 0/
Ta()a Asignación in !rdenado por in Arduino in
+unción orangutn
Notas / +unciones A)ternos
pin digital =
E 7 * digital
8*A3# pin de entrada (3;D
pin digital $
E 7 * digital
conectado a) , roo de usuario (altas 1ueltas -ED encendido pin de salida 8*A3# (#;D
pin digital
E 7 * digital
interrupción externa = (IG#=
pin digital '
,nea de contro) M2
#imer salida 0F / ()6/
pin digital ?
E 7 * digital
8*A3# entrada de relo9 externa 7 salida (;6: contador externo #imer= (#=
pin digital >
,nea de contro) M1
#imer= salida 0F / ()6=/
pin digital %
,nea de contro) M1
#imer= 0F de salida A ()6=A
pin digital <
E 7 * digital
pin digital &
E 7 * digital
#imer$ captura de entrada (I60$ salida de relo9 del sistema di1idido (6-:=
pin digital @
E 7 * digital
#imer$ salida 0F A ()6$A
pin digital $=
E 7 * digital
#imer$ salida 0F / ()6$/
pin digital $$
,nea de contro) M2
*alida #imer 0F A ()6A l!nea de programación I*0
pin digital $
E 7 * digital
recaución: tam(i9n una )nea de programación I#
pin digital $'
E 7 * digital
recaución: tam(i9n una )nea de programación I#
e ntrad a analógic a =
entra da ana ló gica y E 7 * digita l
AD6 cana l de entrada = (AD6=
e ntrad a analógic a $
entra da ana ló gica y E 7 * digita l
6an al de entrad a AD6 $ (AD6$
e ntrad a analógic a
entra da ana ló gica y E 7 * digita l
6an al de entrad a AD6 (AD6
e ntrad a analógic a '
entra da ana ló gica y E 7 * digita l
6an al de entrad a AD6 ' (AD6'
entrada analógica ?
entrada analógica y E 7 * digital
6anal de entrada AD6 ? (AD6? I6 7 #FI l!nea de datos de entrada 7 salida (*DA
entrada analógica >
entrada analógica y E 7 * digital
6anal de entrada AD6 > (AD6> I6 7 #FI l!nea de relo9 (*6-
e ntrad a analógic a %
de entrada ana ló gica d edic ada
6an al de entrad a AD6 % (AD6%
entrada analógica <
de entrada analógica dedicada
conectado a) recortador de usuario potenciómetro canal de entrada AD6 < (AD6<
rea9ustar
3EIGI6I) pin
tirado internamente altaH acti1o ba9o E 7 * digital desacti1ado por defecto
2.c 3pi o(ot in Asignaciones
,aracterísticas generales del robot 3pi !ololu 'ista desde arriba.
Etiuetada 'ista in*erior del robot 3pi !ololu.
,aracterísticas especí*icas del robot 3pi !ololu 'ista desde arriba.
Ta()a Asignación in !rdenado por *unción +unción
Arduino in
mega168 in
e digital gratuito 7 )s (x' (uite el puente 06> al pin digital gratuito $@
pines digitales =, $, $@
0D=, 0D$, 06>
entradas analógicas libres (si se quita los puentes, x'
entradas analógicas ><
06>, AD6%, AD6<
motor $ (motor i2quierdo de control (A y /
pines digitales > y %
0D> y 0D%
motor (motor derecho de control (A y /
pines digitales ' y $$
0D' y 0/'
*ensores de reflectancia de #336 (de i2quierda a derecha, x>
pines digitales $?$&
06= 06?
ro9o (i2quierda -ED usuario
pin digital $
0D$
1erde (derecha -ED usuario
pin digital <
0D<
pulsadores de usuario (de i2quierda a derecha, x'
entradas digitales @, $ y $'
0/$, 0/? y 0/>
2umbador
pin digital $=
0/
6ontrol -6D (3*, 3 7 F, E
pines digitales , & y ?
0D, 0/=, y 0D?
Datos -6D (? bits D/? D/<
pines digitales @, $, $' y <
0/$, 0/?, 0/>, y 0D<
sensor de reflectancia I3 -ED de control (conducir ba9o para encender -EDs I3 apagado
pin digital $@ (a tra1s del puente
06>
trimmer de usuario potenciómetro
entrada analógica < (a tra1s de puente
AD6<
7 'rds de 1olta9e de la bater!a
entrada analógica % (a tra1s de puente
AD6%
-!neas de programación I6*0 (x'
pines digitales $$, $ y $'
0/', 0/?, 0/>
pulsador de rearme
rea9ustar
06%
8A3# (3; y #;
pines digitales = y $
0D= y 0D$
I6 7 #FI
inaccesible para el usuario
*0I
inaccesible para el usuario
Ta()a Asignación in !rdenado por in Arduino in
+unción orangutn
Notas / +unciones A)ternos
pin digital =
e digital gratuito 7 *
8*A3# pin de entrada (3;D
pin digital $
e digital gratuito 7 *
conectado a) , roo de usuario (altas 1ueltas -ED encendido pin de salida 8*A3# (#;D
pin digital
e contro) ,0 de )nea #
interrupción externa = (IG#=
pin digital '
,nea de contro) M2
#imer salida 0F / ()6/
pin digital ?
,nea de contro) ,0
8*A3# entrada de relo9 externa 7 salida (;6: contador externo #imer= (#=
pin digital >
,nea de contro) M1
#imer= salida 0F / ()6=/
pin digital %
,nea de contro) M1
#imer= 0F de s alida A ()6=A
pin digital <
,nea de datos ,0 '
con ectad o a) , 4erde us uario (altas 1ueltas -ED encendido
pin digital &
,0 )nea de contro) / 5
#imer$ captura de entrada (I60$ salida de relo9 del sistema di1idido (6-:=
pin digital @
,nea de datos ,0 '
pu)sador de usuario (pulsando tira pin ba9a #imer$ salida 0F A ()6$A
pin digital $=
7um(ador
#imer$ salida 0F / ()6$/
pin digital $$
,nea de contro) M2
*alida #imer 0F A ()6A l!nea de programación I*0
pin digital $
,nea de datos ,0 '
pu)sador de usuario (pulsando tira pin ba9a recaución: tam(i9n una )nea de
programación I# pu)sador de usuario (pulsando tira pin ba9a recaución: tam(i9n una )nea de programación I#
pin digital $'
,nea de datos ,0 '6
pin digital $?
#ensor de re*)ectancia de T- (8nidad de alta para el $= de nosotros, y luego esperar a la entrada de l!nea para ir ba9o 0 sensor marcado 06= (sensor más a la i2quierda
pin digital $>
#ensor de re*)ectancia de T- (8nidad de alta para el $= de nosotros, y luego esperar a la entrada de l!nea para ir ba9o 0 sensor marcado 06$
pin digital
%$#ensor de re*)ectancia de T- (8nidad de alta para el $= de nosotros, y luego esperar a la entrada de l!nea para ir ba9o 0 sensor marcado 06 (sensor central
pin digital $<
#ensor de re*)ectancia de T- (8nidad de alta para el $= de nosotros, y luego esperar a la entrada de l!nea para ir ba9o 0 sensor marcado 06'
pin digital $&
#ensor de re*)ectancia de T- (8nidad de alta para el $= de nosotros, y luego esperar a la entrada de l!nea para ir ba9o 0 sensor marcado 06? (sensor más a la derecha
pin digital $@
entrada analógica y E 7 * digital
puenteado con ,s I sensores ; (conducir ba9o apaga emisores canal de entrada AD6 > (AD6>
entrada analógica de entrada analógica dedicada %
puenteado a 2 / 3rds de 4o)tae de )a (atera del canal de entrada AD6 % (AD6%
entrada analógica de entrada analógica dedicada <
puenteado a recortador usuario potenciómetro del canal de entrada AD6 < (AD6<
rea9ustar
tirado internamente altaH acti1o ba9o E 7 * digital desacti1ado por defecto
pulsador de rearme
3. 0on*iguración de) Arduino Medio Am(iente
-as instrucciones de configuración de esta sección explican cómo alterar el Arduino IDE para que programe su orangután o un robot 'pi usando la configuración correcta, utili2ando un programador A+3 I*0 que soporte el protocolo a1risp1 (como el programador A+3 0ololu 8*/ o un Arduino bootloader. $. Ir a http77""".arduino.cc7en7ain7*oft"are y descargar el soft"are más reciente para su plataforma Arduino (Arduino $.=.$ partir de este escrito. . Agregue lo siguiente al final de la (oards.t%t archi1o en el arduino-1.<.1 / =ard>are / Arduino directorio 3. 4. 5. 6. 7. 8. '. (&. ((. (!. (3. (4. (5. (6. (7. (8. ('. !&. !(. !!. !3.
################################################## ############ orangutan48pgm.name = Pololu Orangután del bebé B-48 a través del programador orangutan48pgm.upload.usng = avrspv! orangutan48pgm.upload.ma"mums$e = 4%&'6 orangutan48pgm.buld.m)u = *+mega48 orangutan48pgm.buld.,)pu = !&&&&&&& orangutan48pgm.buld.)ore = arduno orangutan48pgm.buld.varant = estándar ################################################## ############ orangutan(68pgm.name = Pololu Orangután o robot 3p / *+mega(68 v0a programador orangutan(68pgm.upload.usng = avrspv! orangutan(68pgm.upload.ma"mums$e = (6384 orangutan(68pgm.buld.m)u = atmega(68 orangutan(68pgm.buld.,)pu = !&&&&&&&
!4. !5. !6. !7. !8. !'. 3&. 3(. 3!. 33. 34. 35. 36.
orangutan(68pgm.buld.)ore = arduno orangutan(68pgm.buld.varant = estándar ################################################## ############ orangutan3!8pgm.name = Pololu Orangután o robot 3p / *+mega3!8P través Programador orangutan3!8pgm.upload.usng = avrspv! orangutan3!8pgm.upload.ma"mums$e = 3!768 orangutan3!8pgm.buld.m)u = *+mega3!8P orangutan3!8pgm.buld.,)pu = !&&&&&&& orangutan3!8pgm.buld.)ore = arduno
orangutan3!8pgm.buld.varant = estándar
Esto agregará tres opciones para la ?erramientas@ unta men4 del IDE de Arduino. #i pre*iere uti)i7ar un programador di*erente Bue no admite e) protoco)o a4risp42 , a continuación, cambiar los up)oad.using l!neas para que coincida con el nombre de su programador 7 protocolo, y omita el paso ' (si el programador ya está definido por el entorno Arduino o a5adir la entrada correspondiente para su programador en programmers.t%t . Estas dos entradas siguientes son opcionales, pero le permiten usar un gestor de arranque Arduino en lugar de un programador externo ################################################## ############
orangutan(68.name = Pololu Orangután o robot 3p / *+mega(68 a través del )argador de arran1ue orangutan(68.upload.proto)ol = arduno orangutan(68.upload.ma"mums$e = (587! orangutan(68.upload.speed = (44&&& orangutan(68.bootloader.lo,uses = &"26 orangutan(68.bootloader.g,uses = &"dd orangutan(68.bootloader.e"tended,uses = &"&4 orangutan(68.bootloader.pat = optboot orangutan(68.bootloader.,le = optbootatmega(68.e" orangutan(68.bootloader.unlo)bts = &"32 orangutan(68.bootloader.lo)bts = &"&2 orangutan(68.buld.m)u = atmega(68 orangutan(68.buld.,)pu = !&&&&&&& orangutan(68.buld.)ore = arduno orangutan(68.buld.varant = estándar ################################################## ############ orangutan3!8.name = Pololu Orangután o robot 3p / *+mega3!8P a través del )argador de arran1ue orangutan3!8.upload.proto)ol = arduno orangutan3!8.upload.ma"mums$e = 3!!56 orangutan3!8.upload.speed = (44&&& orangutan3!8.bootloader.lo,uses = &"26 orangutan3!8.bootloader.g,uses = &"
orangutan3!8.bootloader.e"tended,uses = &"&5 orangutan3!8.bootloader.pat = optboot orangutan3!8.bootloader.,le = optbootatmega3!8.e" orangutan3!8.bootloader.unlo)bts = &"32 orangutan3!8.bootloader.lo)bts = &"&2 orangutan3!8.buld.m)u = *+mega3!8P orangutan3!8.buld.,)pu = !&&&&&&& orangutan3!8.buld.)ore = arduno orangutan3!8.buld.varant = estándar
#i desea uti)i7ar e) gestor de arranBue , usted toda1!a tendrá que utili2ar un programador A+3 cargar inicialmente el gestor de arranque en su orangután o 'pi, y usted tambin tendrá que obtener un adaptador serie 8*/ao 3*'a##- adaptador de serie a tra1s del cual el soft"are Arduino puede hablar con el bootloader de Arduino en su dispositi1o. El 0ololu 8*/ A+3 programador puede ser1ir como su programador A+3 I*0 y de 8*/ a serial adaptador. #enga en cuenta que tendrá que o bien restablecer el orangután 7 'pi manualmente cuando se programa con el gestor de arranque o modificar el hard"are para permitir que la se5al de control D#3 a autoreset del microcontrolador. #enga en cuenta que el beb orangután / 8 tiene un microcontrolador A#mega?&, que carece de una sección del gestor de arranque, es decir, la 1ersión /?& sólo se puede programar utili2ando un I6*0. '<. *i está utili2ando un programador A+3 I*0 como nuestro 8*/ A+3 programador, a5adir lo siguiente al final de la programmers.t%t archi1o en el arduino-1.<.1 / =ard>are / Arduino directorio 38.
avrspv!.name = * 9:P v!
3'.
avrspv!.)ommun)aton = seral
avrspv!.proto)ol = avrspv!
Esto permitirá que el Arduino IDE para programar con el protocolo a1risp1 utili2ado por nuestro 8*/ A+3 0rogrammer. . Cti)i7ando e) Arduino I: un , parpadeante Ahora es el momento de dar el Arduino IDE para dar una 1uelta. Guestro primer ob9eti1o será cargar un boceto -ED parpadeante sencillo (programa de Arduino en nuestra orangután o 'pi. A(ra e) Arduino I & crear e) siguiente (osBueo: J 1 2 3 4 5 6 7 8
/ ; ; Bln ; ; l eos usar el pn ( por1ue orangutanes tenen un ; en P(% 1ue )orresponde a *rduno pn (. ; ; ttp?//.arduno.))/en/+utoral/Bln ; /
9 10
nt ledPn = (@
// )one)tado al pn dgtal ( AP( en orangutanes
11 12 13 14 15 16 17
vod setup A C pnDode AledPn% OE+PE+@ F
// e
vod loop A C
// e
// estable)e el pn dgtal )omo salda
18 19
dgtalGrte AledPn% H9IH@ retardo A(&&&@ dgtalGrte AledPn% OG@ retardo A(&&&@
20 21 22 23
// estable)e el el // espera un segundo // estable)e el apagado // espera un segundo
F
24 25
) copie el texto anterior en un nue1o boceto en blanco, o descargar este como )rangutan/linCExample.pde (pde $C y abrirlo en el IDE de Arduino. #e)ecciona una de nuestras ta()as especia)mente creados uti)i7ando e) menD ?erramientas@ unta:
bosque9o
#e)eccione e) programador:
*i está utili2ando un 0ololu 8*/ A+3 programador, seleccione KA+3 I*0 1K en el men4 0rogramador. De lo contrario, consulte la documentación de su programador para a1eriguar qu opción para seleccionar. #e)eccione e) puerto serie de) programador:
*i está utili2ando un 0ololu 8*/ A+3 programador, aseg4rese de que ha instalado los controladores adecuados (1ase la gu!a del usuario del programador y conectarlo a su ordenador. 8na 1e2 hecho esto, usted deber!a ser capa2 de 1er su puerto 6) aparece en las ?erramientas@ #eria) ort men4. *i usted no sabe qu puerto 6) su programador está acti1ada, se puede determinar esto crian2a de administrador de dispositi1os de su equipo y la ampliación de los uertos E0!M F ,TG lista. 0ara abrir el administrador de dispositi1os, haga clic en Ki 06K y seleccione Administrar , haga clic en elAdministrador de dispositi4os de opción que aparece en el lado i2quierdo, en ?erramientas de) sistema . /usque el puerto que dice K0ololu 8*/ A+3 0rogrammer 0uerto de programaciónK.
*i está utili2ando un 1erdadero programador 8*/ (es decir, uno que no emula un puerto serie, que no es necesario para seleccionar un puerto serie. rograma tu o 3pi !rangutn con e) (oceto: 6onecte el programador con el orangután o 'pi a tra1s de su 9efe de la I*0 de seis pines, asegurándose de que el pin $ de las l!neas programador hasta con el pin $ del conector de programación del ob9eti1o. El )rangután *+xx&, orangután -+$%&, y 'pi cada uno tiene una cabecera en1uelta que hará cumplir la orientación pin correcto, pero el beb orangután / no lo hace. 0in $ del orangután del beb está marcado por una flecha de cobre en el 06/ y el pin $ en nuestro 8*/ A+3 0rogrammer está marcada por un triángulo de plástico en relie1e en el conector ID6. 6on el programador conectado a su ordenador y su orangután o 'pi, haga clic en el #u(ir a) 0onseo irecti4o de) I / ! botón (en el c!rculo en la siguiente captura de pantalla o pulse 6trl L # para compilar el boceto y lo cargue en el dispositi1o de destino. -a barra de estado en la parte inferior de la 1entana dirá K*ubida a la I 7 ) /oard ...K, mientras que la carga está en curso y se leerá Kuploading Done.K 6uando la carga est completa. *i todo ha funcionado correctamente ahora deber!a 1er usuario ro9a del blanco -ED parpadeante y apaga cada segundo. #enga en cuenta
que si está utili2ando un 'pi y a4n no ha soldado en los -ED opcionales a tra1s de hoyos, usted tendrá que mirar en la parte inferior del robot para 1er el parpadeo del -ED.
. Arduino 'i()iotecas para e) orangutn & e) ro(ot 3pi
Nota: Debido a que los orangutanes no fueron dise5ados como placas Arduino oficiales, no todo el código de la biblioteca Arduino existente será directamente compatible con ellos. 0or e9emplo, ciertas funciones Arduino como de)a&Microseconds EG y pu)seIn EG están dise5ados para funcionar a $% B2 y por lo tanto su comportamiento se 1e alterada por el relo9 del orangután de = B2. En otros casos, las bibliotecasorangután espec!fica pueden entrar en conflicto con las librer!as de Arduino existentes, si los dos están compitiendo por los mismos perifricos de hard"are mega$%& (por e9emplo, dos bibliotecas que intentan utili2ar #imer$ de diferentes maneras no será compatible. $isión de conunto En esta sección se ofrece una serie de bibliotecasorangután espec!fica que le permiten hacer interfa2 con facilidad con el hard"are 7 'pi orangután desde el entorno Arduino. Es importante tener en cuenta que el beb orangután / es un subcon9unto de hard"are de la mayor orangután *+xx& y -+$%&, y estos orangutanes son (casi un subcon9unto de hard"are del robot 'pi. -o que esto significa es que cualquier código de la biblioteca que funciona en el beb orangután / tambin traba9ará en el robot orangután y 'pi, y (casi cualquier código de la biblioteca que funciona en el orangután tambin traba9ará en el 'pi.-as siguientes subsecciones contienen documentación detallada de cada biblioteca orangután Arduino. Todas )as (i()iotecas Bue se ap)ican a) orangutn 4a a tra(aar para e) =ard>are correspondiente en e) ro(ot 3pi . -a 4nica clase biblioteca para lo cual es significati1o tener 1arias instancias es 0ololu#3*ensors.#odas las otras clases consisten enteramente en mtodos estáticos, por lo que no tiene sentido para crear instancias de ellos 1arias 1eces. Desde la 1ersión $=$ $>, las 1ersiones 6 de las funciones de la biblioteca tambin están disponibles para su uso en sus programas de Arduino. Esto significa que hay tres formas posibles para que usted pueda llamar a los mtodos de la biblioteca J 1 2
unsgned nt "@
3 4 5
// J KK a través de la ,un)Ln ob
6 7 8
// J KK ,un)Ln a través ámbto de )lase " = Orangutan*nalog ?? read+rmpot A@
9 10 11
/ / ,un)Ln J " = readtrmpot A@
-as 4nicas clases de biblioteca que necesitan ser iniciali2ado expl!citamente antes de que se utili2an son 0ololu#3*ensors y 0ololu'pi, ya que estos ob9etos se iniciali2an con los parámetros especificados por el usuario. Ginguno de los restantes ob9etos de la biblioteca )rangután debe iniciali2ar expl!citamente en su con*iguración EG función que la iniciali2ación se reali2a automáticamente cuando sea necesario. Instrucciones de descarga -os 0ololu Arduino /ibliotecas están dentro de un archi1o comprimido, que se puede descargar desde el siguiente enlace o)o)u Arduino 'i()iotecas 4ersión 12
•
*i está utili2ando una 1ersión anterior del entorno Arduino, le recomendamos que actualice a Arduino $.=.$ y utili2ar la 4ltima 1ersión de los 0ololu Arduino /ibliotecas. *in embargo, las 1ersiones anteriores de las bibliotecas se proporcionan para garanti2ar la compatibilidad con los entornos Arduino mayores 0ololuArduino-ibraries$$$$ ($= ($=
• • • •
Nota: *i actualmente tiene una 1ersión más antigua de nuestras 0ololu Arduino /ibliotecas, el primer paso debe ser el de eliminar todos los directorios )rangutanMMM y 0ololuMMM desde el directorio de bibliotecas. *i no reali2a este paso, la 1ersión más reciente de las bibliotecas no puede ser compilado. Descomprimir el archi1o y mo1er cada uno de los directorios )rangutanMMM y 0ololuMMM dentro de la carpeta libpololu a1r en la (i()iotecas subdirectorio dentro de su cuaderno de dibu9o Arduino. 8sted puede 1er su ubicación cuaderno de dibu9o seleccionando Arc=i4o@ re*erencias en el entorno ArduinoH si no hay ya una carpeta KbibliotecasK en ese lugar, usted debe crear usted mismo. -a captura de pantalla muestra donde los directorios de librer!as deben aparecer una 1e2 que se extraen
Despus de instalar la biblioteca, reinicie el entorno de Arduino para que pueda encontrar las librer!as y sus e9emplos. Ahora e9emplos. Ahora deber!a ser capa2 de utili2ar estas bibliotecas en sus bocetos. 0or e9emplo, si desea utili2ar la biblioteca )rangutan/u22er, puede seleccionar #etc=@ seleccionar #etc=@ Importar (i()ioteca@ !rangutan'u77er desde !rangutan'u77er desde tu Arduino
IDE, o simplemente puede escribir Jinc)ude escribir Jinc)ude K!rangutan'u77er.=@ en la parte superior de su dibu9o. #enga en cuenta que puede que tenga que reiniciar el Arduino IDE antes de 1er las nue1as bibliotecas. *i usted no necesita la funcionalidad funcion alidad de una biblioteca espec!fica, espec!fica, debe de9arlo fuera de su dibu9o (simplemente (simplemente elimine el J inc)ude l!nea asociada a ella desde la parte superior de su esquema si ya has agregado l. /ibliotecas incluidas ocuparán espacio del programa, incluso si estos no se utilicen en su programa.
emp)os de uso -a mayor!a de las bibliotecas cuentan con al menos un e9emplo boceto que muestra cómo se puede utili2ar la biblioteca. 0ara cargar un boceto e9emplo, abra el Arduino IDE y 1aya a Arc=i4o@ emp)os@ !rangutanLLLL .
-a biblioteca 0ololu'pi 1iene con 1arios bocetos de seguimiento de l!neas y e9emplo laberinto de resolución detallados que se pueden cargar mediante Arc=i4o@ emp)os@ o)o)u3pi . .a !rangutanAna)og - Ana)og 'i()ioteca entrada $isión de conunto Esta biblioteca proporciona un con9unto de mtodos que se pueden utili2ar para leer las entradas de tensión analógicas, as! como las funciones espec!ficamente dise5adas para leer el 1alor del potenciómetro de a9uste (en el ro(ot 3pi , !rangutn #$-%%8 , orangutn ,$-168 , y el (e(9 orangutn ' , el ni1el de 1olta9e de la bater!a en mili1oltios (robot 'pi, *+xx&, y el 1alor del sensor de temperatura en dcimas de grado o 6 (en el orangután sólo -+$%&. Esta biblioteca le da más control de las funciones de entrada analógica Arduino existentes. Go es necesario para iniciali2ar el ob9eto )rangutanAnalog antes de su uso.#oda la iniciali2ación se reali2a automáticamente cuando sea necesario. #odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto )rangutanAnalog en su dibu9o. M9todos !rangutanAna)og -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a sección 2 de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso Esta biblioteca cuenta con dos bocetos de e9emplo que se pueden cargar por ir a Arc=i4o@ emp)os@ !rangutanAna)og . -os e9emplos de bocetos que 1ienen con el !rangutanMotors biblioteca tambin hacen uso limitado de esta biblioteca. 1. !rangutanAna)og%amp)e uestra cómo puede utili2ar los mtodos en esta biblioteca para leer el 1olta9e analógico del potenciómetro de a9uste en el fondo, mientras que el resto de su código se e9ecuta. *i el AD6 es libre, el programa se inicia una
con1ersión en el potenciómetro de entrada analógica (canal <, y luego se procede a e9ecutar el resto del código en bucle (, mientras que las obras de hard"are AD6. *ondeo del mtodo is6on1erting ( permite que el programa para determinar cuándo se completa la con1ersión y para actuali2ar su noción del 1alor trimpot en consecuencia.*e da retroalimentación a tra1s del -ED ro9o de usuario, cuyo brillo se hace a escala con la posición trimpot. J 1 2 3 4 5 6 7 8 9 10
#n)lude MOrangutans.N #n)lude MOrangutan*nalog.N / ; ; Orangutan*nalog"ample para el 3p% Orangután :-""8% ; orangután -(68% o Orangután del bebé B ; ; ste bos1ue
11 12 13 14 15 16
leds@ analLg)a Orangutan*nalog@
17 18 19 20 21 22 23 24
unsgned nt suma@ sn ,rmar nt @ avg sn ,rmar Jar muestras@ vod setup A C analog.setDode ADO8B9+@ suma = &@
// :e e
muestras = &@ avg = &@ analog.startJonverson Aa
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
// n)a )onversLn n)al
F vod loop A // e
40
// )uando avg == &% el ro
41 42 43 44 45 46 47 48 49 50 51 52 53 54
F
55
2. !rangutanAna)og%amp)e2 0re1isto para el uso en el orangután -+$%&. #enga en cuenta que se e9ecutará en el robot 'pi y )rangután *+xx&, pero la temperatura mostrada será incorrecta como la entrada analógica conectada a la sonda de temperatura en el orangután -+$%& está conectado a 7 'rds de la tensión de la bater!a en el 'pi y $7' de la tensión de la bater!a en el )rangután *+xx&. *e muestra en la pantalla -6D de la salida potenciómetro de a9uste en mili1oltios y la salida del sensor de temperatura en grados ahrenheit. *i mantiene el dedo en la parte inferior del 06/ del orangután de -+$%&, cerca del centro de la tabla, deber!a 1er la lectura de temperatura lentamente comen2ará a subir. #enga cuidado de no 2ap la tar9eta con descargas electrostáticas si intenta estoN J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#n)lude MOrangutanJ.N #n)lude MOrangutan*nalog.N / ; ; Orangutan*nalog"ample!? el orangután de -(68 ; ; ste bos1ue
19
; /
20 21 22 23 24 25 26
OrangutanJ l)d @ Orangutan*nalog analLg)a@ vod setup A C analog.setDode ADO(&B9+@ F
// e
27 28 29 30 31
vod loop A // e
32
l)d.gotoQR A&% (@
33 34
// obtener la temperatura en dé)mas de grado 2 unsgned nt temp = analog.read+emperature2 A@ l)d.prnt Atemp / (&@ // obtener el nUmero total de grados l)d.prnt A V.V @ // mprme el punto de)mal l)d.prnt Atemp - Atemp / (& ; (&@ // mpresLn el dé)mas d0gtos l)d.prnt AA Jar !!3@ // mprme un s0mbolo de grado l)d.prnt A S2S @ // espa)os aTaddos son sobres)rbr la $1uerda sobre )ara)teres
35 36 37 38 39 40 41 42 43 44 45 46 47 48
// J )ursor al n)o de la segunda l0nea
de retardo A(&&@ F
// spera a (&& ms A redu)e el parpadeo J
49
.( !rangutan'u77er - de A)to Ni4e) 'u77er 0ontro) ,i(rar& $isión de conunto Esta biblioteca le permite controlar fácilmente el 2umbador pie2o en el ro(ot 3pi , !rangutn #$-%%8 y orangutn ,$-168 . #e da la opción de 9ugar ya sea una nota o una frecuencia para una duración especificada en un 1olumen determinado, o puede utili2ar el uego EG mtodo para reproducir una melod!a entera en el fondo. 6ontrol Oumbador se logra utili2ando una de las salidas 0F #imer$, y la duración de tiempo se reali2a mediante una alarma de desbordamiento #imer$, por lo que esta (i()ioteca estar en con*)icto con otras (i()iotecas Bue dependen de o recon*iguran Timer1 . 0or e9emplo, la función de Arduino ana)og5rite EG no funcionará en los pines de salida 0F #imer$ una 1e2 que han comen2ado a utili2ar esta biblioteca en su dibu9o. -a 1enta9a de este enfoque es que se puede 9ugar notas sobre la bocina, de9ando la 608 sobre todo libre para e9ecutar el resto de tu código. Esto significa que puede tener un 9uego melod!a de fondo mientras su 'pi orangután o hace su tarea principal. 8sted puede sondear el is)a&ing EG mtodo para determinar cuando el timbre se terminó de tocar. Go es necesario para iniciali2ar el ob9eto )rangutan/u22er antes de su uso. #oda la iniciali2ación se reali2a automáticamente cuando sea necesario. #odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto )rangutan/u22er en su dibu9o. M9todos !rangutan'u77er -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a sección 3 de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso
Esta biblioteca cuenta con tres bocetos de e9emplo que se pueden cargar por ir a Arc=i4o@ emp)os@ !rangutan'u77er . 1. !rangutan'u77er%amp)e Demuestra una forma de utili2ar de esta biblioteca )a&Note EG mtodo para tocar una melod!a sencilla almacenada en la memoria 3A. *e debe comen2ar inmediatamente a tocar la melod!a, y se puede utili2ar el botón de usuario superior para detener y reproducir la melod!a. El e9emplo está estructurado de modo que usted puede a5adir su propio código para )oop EG y la melod!a toda1!a 9ugará normalmente en el fondo, asumiendo que su código se e9ecuta con la suficiente rapide2 para e1itar la inserción de los retrasos entre las notas. 0uede utili2ar esta misma tcnica para tocar melod!as que se han almacenado en la EE03) (la mega$%& tiene suficiente espacio en la memoria EE03) para almacenar $<= notas. J 1 2 3 4 5 6 7 8 9 10
#n)lude MOrangutanJ.N #n)lude MOrangutanPusbuttons.N #n)lude MOrangutanBu$$er.N / ; ; OrangutanBu$$er"ample? para el Orangután :-""8% orangután -(68% ; 3p robot ; ; n este e
11 12 13 14 15 16
DOR>I+H '5
17 18 19 20 21 22
// stas matr)es o)upan un total de !85 btes de *D Ade un l0mte ( sn ,rmar )arbLn nota WDOR>I+HX = C >O+ A5% :9>+>O+% >O+ A5% :9>+>O+% >O+ A5% :9>+>O+ % >O+J A5% >O+ A5% >O+I A5% :9>+>O+% >O+I A4% :9>+>O+%
23
>O+J A5% >O+I A4% :9>+>O+% >O+ A4% >O+* A4% >O+B A4 % >O+B2*+ A4% >O+* A4% >O+I A4% >O+ A5% >O+I A5% >O+* A5% >O+2 A5% >O+I A5% :9>+>O+% >O+ A5% >O+J A5% >O+ A5% >O+B A4%
24 25 26 27 28
>O+J A5% >O+I A4% :9>+>O+% >O+ A4% >O+* A4% >O+B A4% >O+B2*+ A4% >O+* A4 % >O+I A4% >O+ A5% >O+I A5% >O+* A5% >O+2 A5% >O+I A5% :9>+>O+% >O+ A5% >O+J A5% >O+ A5% >O+B A 4%
29 30 31 32
:9>+>O+% >O+I A5% >O+2:H*P A5% >O+2 A5% >O+:H*P A5% >O+ A5% :9>+>O+% >O+I:H*P A4% >O+* A4% >O+J A5% :9>+>O+% >O+* A4% >O+J A5% >O+ A5%
33 34 35
:9>+>O+% >O+I A5% >O+2:H*P A5% >O+2 A5% >O+:H*P A5% >O+ A5% :9>+>O+% >O+J A6% :9>+>O+% >O+J A6% :9>+>O+% >O+J A6%
36 37 38 39
:9>+>O+% >O+I A5% >O+2:H*P A5% >O+2 A5% >O+:H*P A5% >O+ A5% :9>+>O+% >O+I:H*P A4% >O+* A4 % >O+J A5% :9>+>O+% >O+* A4% >O+J A5% >O+ A5%
40 41 42 43 44 45 46
:9>+>O+% >O+2*+ A5% :9>+>O+% >O+ A5% >O+J A5 F@ unsgned nt dura)Ln WDOR>I+HX =
47
C (&&% !5% (!5% (!5% (!5% (!5% (!5% !5&% !5&% !5&% !5&% !5&%
48 49
375% (!5% !5&% 375% !5&% !5&% (!5% !5&% (67% (67% (67% !5&% (!5 % (!5% (!5% !5&% (!5% (!5% 375%
50 51 52
375% (!5% !5&% 375% !5&% !5&% (!5% !5&% (67% (67% (67% !5&% (!5% (!5% (!5% !5&% (!5% (!5% 375 %
53 54
!5&% (!5% (!5% (!5% !5&% (!5% (!5% (!5% (!5% (!5% (!5% (!5% (!5% (!5%
55 56
!5&% (!5% (!5% (!5% !5&% (!5% (!5% !&&% 5&% (&&% !5 % 5&&%
57 58
!5&% (!5% (!5% (!5% !5&% (!5% (!5% (!5% (!5% (!5% (!5% (!5% (!5% (!5%
59 60 61
!5&% !5&% (!5% 375% 5&& F@
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
OrangutanJ del J@ OrangutanPusbuttons botones@ $umbador OrangutanBu$$er @ sn ,rmar )arbLn )urrent9d"@ vod setup A C )urrent9d" = &@ l)d.prnt A SDUs)aS @ F
// e
vod C // // s C
// e
loop A
s no an termnado de I+H YY bu$$er.sPlang A
// ote Anota W )urrent9d"X% dura)Ln W)urrent9d"X% (5@
77 78 79
// op)onal retroalmenta)Ln J Apor dversLn l)d.gotoQR A&% (@ // 9r al n)o de la segunda l0nea del J l)d.prnt AAunsgned nt nota W)urrent9d" X@ // valor entero de mpresLn de la nota a)tual l)d.prnt A SS @ // sobres)rbr )ual1uer sobrante )ara)teres )urrent9d" KK@
80 81 82 83
F
84 85
// // // //
86 87 88
9ntrodu)r algUn otro )Ldgo Utl a1u0 ... la melod0a
89
// Por e C bu$$er.stopPlang A@ // slen)ar el tmbre s A)urrent9d" MDOR>I+H )urrent9d" = DOR>I+H@ // termnar la melod0a demás )urrent9d" = &@ // ren)ar la melod0a buttons.at2orelease A+OPBE++O>@ // esperar a1u0 el botLn 1ue se lan$ará F
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
F
107 108 109 110 111 112 113 114 115
2. !rangutan'u77er%amp)e2 uestra cómo se puede utili2ar de esta biblioteca p)a& EG mtodo para iniciar un 9uego melod!a. 8na 1e2 iniciada, la melod!a se reproducirá todo el camino hasta el final con ninguna otra acción requerida de su código, y el resto de su programa se e9ecutará con normalidad mientras se reproduce la melod!a en el fondo.El p)a& EG mtodo está impulsado en su totalidad por la interrupción de desbordamiento #imer$. El pulsador de usuario superior 9ugará una fuga de /ach de la memoria del programa, el pulsador usuario medio será tranquilamente 9ugar la escala de Do mayor arriba y hacia aba9o de la memoria 3A, y el pulsador de usuario final se detendrá cualquier melod!a que se está reproduciendo o 9ugar una sola nota si el timbre está inacti1o. J 1 2 3 4 5 6 7 8 9 10
#n)lude MOrangutanJ.N #n)lude MOrangutanPusbuttons.N #n)lude MOrangutanBu$$er.N / ; ; OrangutanBu$$er"ample!? para el Orangután :-""8% orangután -(68% ; el robot 3p ; ; n este e
11 12 13 14
; ; ; ;
ste e
15 16 17 18 19 20 21
l)d@ OrangutanPusbuttons botones@ OrangutanBu$$er $umbador@
22 23 24 25 26 27 28 29 30 31 32 33 34
#n)lude Mavr / pgmspa)e.N // esto vamos a re,errnos a los datos en el espa)o del programa Aes de)r% ,las // alma)enamos esta ,uga en el espa)o del programa medante la ma)ro POIDD. // Dás tarde lo aremos
35 36 37 38 39 40
vod setup A C l)d.prnt A S Pulse S @ l)d.gotoQR A&% (@ l)d.prnt A SbotLn ..S @ F
// e
41 42 43 44 45
vod loop A // e:@ l)d.)lear A@
46 47
s AbotLn == +OPBE++O> C bu$$er.pla2romProgram:pa)e A,uga@
48 49 50
l)d.prnt A S2ugaS @ l)d.gotoQR A&% ( @ l)d.prnt A S2las -NS @
51 52
F s AbotLn == D9BE++O> C bu$$er.pla A S 8 J2I*BN )bag,ed) S @ l)d.prnt A So DaorS @ l)d.gotoQR A&% (@ l)d.prnt A S*D -NS @ F s AbotLn ==
53 54 55 56 57 58 59 60 61 62 63 64 65 66
!&&% (5@ l)d.prnt A Snota *5S @
67 68
F
69 70
F F
71 72 73 74 75 76 77 78 79 80 81 82 83 84
3. !rangutan'u77er%amp)e3 Demuestra el uso de 0-AP)DE de esta biblioteca ( y 0lay6hecC ( mtodos. En este e9emplo, el modo de reproducción automática se utili2a para permitir la melod!a para seguir 9ugando mientras que parpadea el -ED ro9o de usuario. -uego se cambia el modo de 9ugar de comprobación de modo durante una fase en la que estamos tratando de medir con precisión el tiempo. Bay tres macros Qdefine que le permiten e9ecutar este e9emplo de diferentes maneras y obser1ar el resultado. 0or fa1or, 1ea los comentarios en la parte superior del boceto para una información más detallada. J 1 2 3 4 5 6
#n)lude MOrangutanJ.N #n)lude MOrangutans.N #n)lude MOrangutanBu$$er.N / ; ; OrangutanBu$$er"ample3? el orangután de -(68% Orangután :-""8% ; o robot 3p
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
; ; n este eIJOJ+R es )omentada% el programa debe e
37 38 39 40 41 42
; : sLlo *G*R:JHJZ es )omentada% el programa estará en pla-)e1ue ; Dodo tanto durante la ,ase de parpadeante la ,ase de dstrbu)Ln. *1u0 ; verá el e,e)to de 1ue los retrasos -parpadear tenen en pla-)e1ue ; Dodo Ala se)uen)a será mu agtado mentras el parpadea% pero ; sonar normal durante la ,ase de sn)ron$a)Ln. a le)tura má"ma sn)ron$a)Ln debe ser ; !&% )omo se esperaba. ; /
43 44 45 46 47
// ;;; des)omentar E>* *: 9J+9*: pre)omplador ;;; // Alos dos restantes deben ser )omentada #de,ne GOZ9>IJOJ+R // este es el )amno )orre)to utl$ar P*RDO A // # de,ne *G*R:*E+OD*+9J // P*RDO A es sempre P*R*E+OD*+9J Ael tempo es ne"a)ta // # de,ne *G*R:JHJZ // P*RDO A sempre P*RJHJZ Aretrasos nterrumpen la se)uen)a
48 49 50 51 52 53 54 55
Orangutans leds@ OrangutanBu$$er $umbador@ OrangutanJ l)d @ #n)lude Mavr / pgmspa)e.N )onst )ar rapsoda WX POIDD = SO6 +4& (6 d # Mb M, # Md # M, # Mbd # , #S S+8& ) # Mb- M, # M) # M, # Mb) # 8 S S+(8& # b M, # d # , #N bd # , # ) # b- M, # ) # , #N b) # 8
56 57 58 59 60 61 62 63 64
e+! = !56 A[ 3 ms bu$$er.pla2romProgram:pa)e Arapsoda@ F
65 66
vod loop A C
// e
67 68 69 70 71 72 73 74 75 76
// permte la se)uen)a a segur
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
&@ l)d.prnt A StmngS @ l)d.gotoQR A&% (@ l)d.prnt A SS @ // )lara l0nea de J n,eror // esa)tvar reprodu))Ln automát)a para 1ue nuestro )Ldgo de tempo-)r0t)o ganL V t ser nterrumpdo por // tmer( largo del $umbador de nterrup)Ln. e lo )ontraro% esta nterrup)Ln podr0a sa)udr nuestras // med)ones de tempo. n )ambo% aora vamos a utl$ar PlaJe) A para mantener la se)uen)a // +! = &@ mentras A+J>+! M!& // tempo de [ !5& nosotros
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
@ s A+J>+!N Da"+me Da"+me = +J>+!@ // s el tempo trans)urrdo es maor 1ue el má"mo anteror% guárdelo #,nde, *G*R:*E+OD*+9J bu$$er.plaJe) A@ // )omprobar s es el momento de e
127 128
.c. !rangutan,0 - 'i()ioteca de contro)es de ,0 $isión de conunto Esta biblioteca le da la capacidad de controlar el carácter -6D de & R en el ro(ot 3pi , !rangutn #$%%8 y orangutn ,$-168 . Implementa el protocolo estándar BD??<&= de ? bits, y utili2a la función de ocupado espere de bandera para e1itar las innecesariamente largos retrasos presentes en otras bibliotecas Arduino -6D de ? bits. Esta amplia biblioteca está destinado a ofrecer el máximo control -6D como sea posible, por lo que lo más probable es que te da más mtodos de las que necesita. 8sted puede comentar mtodos que no sean necesarios (por e9emplo *ho"6ursor ( en )rangutan-6D.cpp hacer esta biblioteca más peque5a.*i usted hace esto, recuerde que debe eliminar )rangutan-6D.o as! y reiniciar el IDE de Arduino para que se 1ol1erá a compilar la biblioteca. Esta biblioteca está dise5ado para mane9ar con gracia uso alternati1o de las cuatro l!neas de datos -6D. *e 1a a cambiar sus registros de dirección de datos y estados de salida sólo cuando sea necesario para un comando de -6D, despus de lo cual restaurar inmediatamente los registros a sus estados anteriores. Esto permite que las l!neas de datos -6D para funcionar como entradas de pulsador y un controlador -ED en el orangután y 'pi. Go es necesario para iniciali2ar el ob9eto )rangutan-6D antes de su uso. #oda la iniciali2ación se reali2a automáticamente cuando sea necesario. #odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto )rangutan-6D en su dibu9o. M9todos !rangutan,0 -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a sección de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso
Esta biblioteca cuenta con dos bocetos de e9emplo que se pueden cargar por ir a Arc=i4o@ emp)os@ !rangutan,0 . #enga en cuenta que la mayor!a de las otras bibliotecas tienen e9emplos de bocetos que utili2an la pantalla -6D, as! que por fa1or 1er estos e9emplos de uso para más )rangutan-6D. 1. !rangutan,0%amp)e Demuestra cambiando el contenido de la pantalla mo1iendo la palabra KBolaK en torno a las dos l!neas de la pantalla -6D. J 1
#n)lude MOrangutanJ.N
2 3 4 5 6 7 8 9 10 11 12 13
/ ; ; OrangutanJ"ample para el orangután -(68% Orangután :-""8% ; o robot 3p ; ; n este e
// e
vod loop A C l)d.prnt A SHolaS @ de retardo A!&&@
// e
14 15 16 17
// pantalla SHolaS en A&% &% tambén )ono)do )omo superor $1uerda
18 19 20 21
// espla$a la pantalla dere)a )ada !&&ms tres ve)es l)d.s)roll AJ9IH+% 3% !&&@ l)d.)lear A@ // borrar la pantalla l)d. goto" A3% (@ // r al )uarto persona
22 23 24
l)d.prnt A SHolaS @ de retardo A!&&@
25
// pantalla SHolaS en A3% (% tambén )ono)do )omo n,eror dere)a
26 27
// espla$a la pantalla de
28 29 30
F
31 32
1. !rangutan,0%amp)e2 Demuestra crear y mostrar caracteres personali2ados en la pantalla -6D. -a siguiente imagen muestra un e9emplo de caracteres personali2ados, usándolos para mostrar un gráfico de barras de las lecturas del sensor y una cara sonriente
J 1
#n)lude MOrangutanPusbuttons.N #n)lude MOrangutanJ.N
2
#n)lude Mstdlb.N // utl$ado por sus ,un)ones Sal a$arS SsrandomS
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/ ; ; OrangutanJ"ample!? para el Orangután :-""8% orangután -(68 o robot 3p ; ; n este e
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
)onst )ar nd,erente WX = CPOIDD &b&&&&&% &b&(&(&% &b&(&(&% &b&(&(&% &b&&&&&% &b&&&&&% &b&(((&% &b&&&&& F@ )onst )ar sorprendL WX POIDD = C &b&&&&&% &b&(&(&% &b&(&(&% &b&&&&&% &b&(((&% &b(&&&(% &b(&&&(% &b&(((& F@ )onst )ar burlándose WX = CPOIDD &b&&&&&% &b&(&(&% &b&(&(&% &b&(&(&% &b&&&&&% &b(((((% &b&&(&(% &b&&&(& F@ Jar prevDood = 5@ vod setup A
// e
62
C l)d.loadJustomJara)ter A,el$% &@ l)d.loadJustomJara)ter Atrste% (@ l)d.loadJustomJara)ter And,erente% !@ l)d.loadJustomJara)ter Asorprenddo% 3@ l)d.loadJustomJara)ter Aburlándose% 4@ l)d.)lear A@ // debe ser llamada antes de poder usar el )ara)teres personal$ados l)d.prnt A Sestado de ánmo?\S @
63 64 65 66 67 68 69
// n)al$ar el generador de nUmeros aleatoros basados en )uánto tempo mantenga pulsado el botLn la prmera ve$ OrangutanPusbuttons ?? at2orPress A*BE++O>:@ larga semlla = &@ mentras AOrangutanPusbuttons ?? 9sPressed A*BE++O>: semlla KK@ srandom Asemlla@ // lo msmo 1ue? random:eed AAunsgned nt de la semlla @
70 71 72 73 74 75 76 77 78
F vod loop A C l)d.gotoQR A6% &@
// e
79
// asegurar 1ue )onsegumos un nuevo estado de ánmo 1ue se d,eren)a de la anteror Jar estado de ánmo@ do C estado de ánmo = random A] 5@ // lo msmo 1ue? umor = random A5@ F mentras 1ue Aumor == prevDood@ prevDood = estado de ánmo@
80 81 82 83 84 85 86
l)d.prnt Aestado de ánmo@
87 88
// esperar para )ual1uer botLn para presonar OrangutanPusbuttons ?? at2orButton A*BE++O>:@
89 90 91
// mprme un )ará)ter umor aleatoro
F
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
.. !rangutan,s - 'i()ioteca de contro) , $isión de conunto Esta biblioteca le permite controlar fácilmente el -ED (s en el ro(ot 3pi , !rangutn #$-%%8 , orangutn ,$-168 , y (e(9 orangutn ' . En el )rangután *+xx& y -+$%&, hay dos -EDs de usuario están en la parte superior de la placa con el -ED en la parte inferior de color ro9o a la i2quierda y el -ED 1erde en la parte superior derecha. En el 'pi, hay dos -EDs de usuario en el lado inferior de la 06/ con el -ED ro9o a la derecha (al mirar en la parte inferior y el -ED 1erde de la i2quierda. -EDs adicionales incluidas con el 'pi se pueden soldar en en la parte superior (en paralelo con los -ED de monta9e en superficie en la parte inferior para facilitar la 1isuali2ación. El beb orangután tiene un solo -ED ro9o y el -ED no 1erde.
#enga en cuenta que el -ED ro9o está en el mismo pin como el transmisor de serie 8A3#= (0D$, as! que si usted está utili2ando 8A3#= para la transmisión en serie entonces el -ED ro9o comandos no funcionan, y 1erá el -ED ro9o parpadea bre1emente cuando se transmiten los datos en 8A3#=. #enga en cuenta que el -ED 1erde está en el mismo pin como un pin de control -6DH el -ED 1erde parpadeará bre1emente cuando los datos se en1!an a la pantalla -6D, pero las dos funciones de lo contrario no 1a a interferir unos con otros. Go es necesario para iniciali2ar sus )rangutan-EDs ob9eto antes de su uso. #oda la iniciali2ación se reali2a automáticamente cuando sea necesario. #odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto )rangutan-EDs en su dibu9o. M9todos !rangutan,s -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a sección 6 de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso Esta biblioteca cuenta con un boceto de e9emplo, que puede cargar por ir a Arc=i4o@ emp)os@ !rangutan,s . 1. !rangutan,%amp)e 0arpadea alternati1amente los -EDs ro9os y 1erdes en el )rangután *+xx&, orangután -+$%&, o un robot 'pi. *i e9ecuta este programa en el beb orangután /, sólo 1erá el usuario ro9a comen2ará a parpadear, pero se puede conectar un -ED externo al pin 0D< (pin de Arduino < si usted quiere 1er el segundo parpadeo del -ED. *i usted hace esto, no te ol1ides de incluir una resistencia limitadora de corrienteN J 1
#n)lude MOrangutans.N
2 3 4
/ ; ; Orangutan"ample? para el robot 3p% orangután (68% Orangután :-""8% ; o bebé orangután B.
5 6 7 8 9 10 11 12
; ; ; ; ;
ste programa utl$a las ,un)ones Orangutans para )ontrolar los ro
leds Orangutans@
13 14 15 16 17 18 19 20 21 22 23 24 25 26
vod setup A C F
// e
vod loop A C leds.red AH9IH@ retardo A(&&&@ leds.red AOG@ retardo A(&&&@ leds.green AH9IH@ de retardo A5&&@ leds.green Aba
/ / e
27 28
.. !rangutanMotors - 'i()ioteca de 0ontro) de Motores $isión de conunto Esta biblioteca le da la capacidad de controlar los controladores de motor en el ro(ot 3pi , !rangutn #$%%8 , orangutn ,$-168 , y el (e(9 orangutn ' . Esto se logra mediante el uso de las salidas 0F cuatro
hard"are de tempori2adores #imer= y #imer, por lo que esta (i()ioteca entrar en con*)icto con cua)Buier otra (i()ioteca Bue dependen de o recon*iguran Timer< o Timer2 . Debido a que el entorno de Arduino se basa en #imer= para funciones de tiempo como millis ( y retraso (, esta biblioteca no puede 1ol1er a configurar los tempori2adoresH en consecuencia, )as sa)idas 5M se )imitan a una *recuencia de 12 ?7 en e) entorno Arduino . En muchos casos, esto se traducirá en un gemido audible del motor. 0ara e1itar este problema, puede en lugar del programa en 6 o 6 LL con la /iblioteca A+3 0ololu , lo que le permite utili2ar los controladores de motor a frecuencias 0F mayores. Go es necesario para iniciali2ar sus )rangutanotors ob9eto antes de su uso. #oda la iniciali2ación se reali2a automáticamente cuando sea necesario. #odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto )rangutanotors en su dibu9o. M9todos !rangutanMotors -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a sección de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso Esta biblioteca cuenta con dos bocetos de e9emplo que se pueden cargar por ir a Arc=i4o@ emp)os@ !rangutanMotors . 1. !rangutanMotor%amp)e Demuestra controlar los motores utili2ando el potenciómetro de a9uste y usa el -ED ro9o para la retroalimentación. J 1 2 3 4
#n)lude MOrangutans.N #n)lude MOrangutan*nalog.N #n)lude MOrangutanDotors.N
5 6 7 8 9 10 11 12 13
/ ; ; OrangutanDotor"ample para el robot 3p% orangután -(68% Orangután :-""8% ; bebé orangután B ; ; n este e
14 15 16 17 18 19 20
analLg)o@ leds Orangutans@ motores OrangutanDotors@
21 22 23 24 25 26 27 28 29 30 31 32 33 34
vod setup A C
// e
F vod loop A // e
35 36 37 38 39
s Aledela M& ledela = -ledela@ // a)er la demora un no negatvo nUmero ledela = !56 ledela@ // el retraso debe ser )orta )uando la velo)dad es alta
40 41 42
leds.red AH9IH@ retardo Aledela@
43 44 45
leds.red AOG@ retardo Aledela@
46 47
// en)ende en ro
// en)ende el ro
F
48 49 50 51
2. !rangutanMotor%amp)e2 Demuestra controlar los motores utili2ando el potenciómetro de a9uste, pero utili2a la pantalla -6D para la mayor!a de las 1otaciones, por lo que no 1a a funcionar plenamente en el beb del orangután. J 1 2 3 4 5 6 7 8
#n)lude #n)lude #n)lude #n)lude
MOrangutans.N MOrangutan*nalog.N MOrangutanDotors.N MOrangutanJ.N
/ ; ; OrangutanDotor"ample! para el robot 3p% orangután -(68% ; Orangután :-""8. ; ; ste e
9 10 11 12 13
; motores en respuesta a la pos)Ln del poten)Lmetro de a
14 15 16 17 18 19 20
OrangutanJ l)d@ motores OrangutanDotors@ analLg)a Orangutan*nalog@ leds Orangutans@ vod setup A C
/ / e
21 22 23 24 25 26 27
F vod loop A // e
28 29 30 31 32
// evte lmpar la pantalla J para redu)r el parpadeo l)d.gotoQR A&% &@ l)d.prnt A Spot =S @ l)d.prnt APO+@ // mprmr el guarne)do pos)Ln olla A& - (&!3 l)d.prnt A SS @ // sobres)rbr )ual1uer sobrante d0gtos
33 34 35 36 37 38
nt Dotor:peed = A5(! - pot / !@ l)d.gotoQR A&% (@ l)d.prnt A Sspd =S @ l)d.prnt ADotor:peed@ // mprme la velo)dad resultante del motor A-!55 a !55 l)d.prnt A SS @ motors.set:peeds ADotor:peed% Dotor:peed@ // estable)er las velo)dades de los motores ( !
39 40 41 42 43 44 45
// todos los apagados leds.red AOG@ leds.green AOG@ // en)ende verde )uando los motores están grando a)a adelante s ADotor:peedN & leds.green AH9IH@ // en)ende el ro
46 47 48 49 50 51 52 53 54
F
55 56 57 58
.+. !rangutanus=(uttons - u)sador Inter*ace ,i(rar& $isión de conunto Esta biblioteca le permite interactuar fácilmente con los tres pulsadores de usuario en el ro(ot 3pi , !rangutn #$%%8 y orangutn ,$-168 por cualquiera de 1otación para el estado de botones espec!ficos o esperando a e1entos de pulsación 7 soltura en los botones que se pueden especificar. -os >ait+or LLLL EG mtodos en esta biblioteca resol1erá automáticamente el botón de eliminación de rebotes. Go es necesario para iniciali2ar sus )rangutan0ushbuttons ob9eto antes de su uso. #oda la iniciali2ación se reali2a automáticamente cuando sea necesario.
#odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto )rangutan0ushbuttons en su dibu9o. M9todos !rangutanus=(uttons -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a sección H de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso Esta biblioteca cuenta con un boceto de e9emplo, que puede cargar por ir a Arc=i4o@ emp)os@ !rangutanus=(uttons . 1. !rangutanus=(utton%amp)e Demuestra la interfa2 con los pulsadores de usuario. *e esperará que usted empu9e el botón superior o el botón inferior, momento en el que se mostrará en la pantalla -6D que se pulsa el botón. #ambin detectará cuando se libera posteriormente ese botón y mostrar que para la pantalla -6D. J 1 2 3 4 5 6 7 8 9 10 11 12
#n)lude MOrangutanJ.N #n)lude MOrangutanPusbuttons.N / ; ; OrangutanPusbutton"ample? para el robot 3p% orangután -(68% ; Orangután :-""8 ; ; n este e
13
vod setup A
// e
14 15 16 17 18
C F
19 20 21 22
vod loop A C l)d.)lear A@ l)d.prnt A SGatngS @
// e
23 24
// esperar a 1ue )ual1uera de los botones superores o n,erores al ser presonadas // alma)enar el valor del botLn se pulsa en el botLn VV varables sn sgno )arbLn botLn = botones. at2orPress A+OPBE++O> ^ BO++ODBE++O>@ l)d.)lear A@ s AbotLn == +OPBE++O> // muestra el botLn 1ue se presonL l)d.prnt A Sde arrba aba
25 26 27 28 29 30 31 32 33 34
F
35 36 37
.g. o)o)u3pi - 'i()ioteca de) sensor para e) ro(ot 3pi $isión de conunto Esta biblioteca le permite interactuar fácilmente con los cinco sensores de reflectancia en el infrarro9o en el ro(ot 3pi . #enga en cuenta que para utili2ar esta biblioteca, tam(i9n de(e inc)uir o)o)uT#ensors.= en su di(uo . 8sted debe tener algo como lo siguiente en la parte superior de su dibu9o
J 1 2 3 4
#n)lude #n)lude #n)lude #n)lude
MPololu3p.N // da a))eso al sensor ,un)ones de nter,a$ MPololu_+:ensors.N // utl$ado por Pololu3p. MOrangutanDotors.N // da a))eso a las ,un)ones de )ontrol de motor MOrangutanBu$$er. N // da a))eso a las ,un)ones de )ontrol del $umbador
A diferencia de las otras bibliotecas orangután, debe llamar expl!citamente al init EG mtodo para iniciali2ar el ob9eto 0ololu'pi antes de usarlo. #odos los mtodos de esta clase son estáticosH nunca se debe tener más de una instancia de un ob9eto 0ololu'pi en su dibu9o. M9todos o)o)u3pi -a documentación completa de los mtodos de esta biblioteca se puede encontrar en )a #ección 1H de la 0ololu A+3 -ibrary 6ommand 3eference . emp)os de uso Esta biblioteca cuenta con tres bocetos de e9emplo que se pueden cargar por ir a Arc=i4o@ emp)os@ o)o)u3pi . Bay un e9emplo muy simple, basada siguiente, un e9emplo de l!nea de seguimiento más a1an2ado basado en 0ID, y un e9emplo básico laberinto de resolución.