<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlanJAS</id>
		<title>Proyecto Butiá - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlanJAS"/>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php/Especial:Contribuciones/AlanJAS"/>
		<updated>2026-04-05T18:42:47Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=8739</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=8739"/>
				<updated>2017-04-05T03:25:48Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Versión estable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;quot;recursive&amp;quot; se encarga de descargar los submódulos necesarios para ejecutar TurtleBots.&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 30&amp;quot;:&lt;br /&gt;
 git checkout v30&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtlebots&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la actual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=8738</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=8738"/>
				<updated>2017-04-05T03:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Versión estable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;quot;recursive&amp;quot; se encarga de descargar los submódulos necesarios para ejecutar TurtleBots.&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 30&amp;quot;:&lt;br /&gt;
 git checkout -b v30&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtlebots&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la actual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=8737</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=8737"/>
				<updated>2017-04-05T03:17:47Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Versión estable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;quot;recursive&amp;quot; se encarga de descargar los submódulos necesarios para ejecutar TurtleBots.&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 23&amp;quot;:&lt;br /&gt;
 git checkout -b v30&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtlebots&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la actual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=5148</id>
		<title>Shield CC</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=5148"/>
				<updated>2014-04-11T21:01:13Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Otros datos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shield para Motores de Corriente Contínua ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shield_2.JPG | 400px]]&lt;br /&gt;
&lt;br /&gt;
Un &amp;quot;Shield&amp;quot; podríamos decir que es una plaqueta secundaria que se anexa o se &amp;quot;enchufa&amp;quot; sobre otra placa principal para agregarle alguna funcionalidad.&lt;br /&gt;
En este caso el Shield CC es una placa que se agrega al USB4Butiá para utilizar motores de Corriente Contínua en lugar de los AX12.&lt;br /&gt;
&lt;br /&gt;
'''Principio de funcionamiento:'''&lt;br /&gt;
Esta plaqueta utiliza un circuito integrado (L298) que contiene en su interior un conjunto de transistores conectados de tal forma que nos permite controlar, usando algunos pines de la USB4Butiá, el giro de los motores de CC.&lt;br /&gt;
Esta placa utiliza los HackPins 5, 6, 7 y 8 de la USB4Butia para controlar los motores de CC que mueven al butiá.&lt;br /&gt;
&lt;br /&gt;
Para que desde TortuBots se pueda controlar a los motores de CC con la misma sencillez que se hace con los AX12, es decir con comandos simples como Adelante, Atras, etc, es necesario tener:&lt;br /&gt;
* la versión 20 de TortuBots&lt;br /&gt;
* la versión 1.9 o superior de placa USB4Butia&lt;br /&gt;
* la versión 7.0 de firmware en la usb4butiá.&lt;br /&gt;
&lt;br /&gt;
== Lista de materiales: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para realizar el shield es necesario adquirir los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;background:#ffffff&amp;quot; align=&amp;quot;top&amp;quot; class=&amp;quot;sortable wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;center&amp;quot; style=&amp;quot;background:DarkSlateBlue; color:white&amp;quot;|&amp;lt;big&amp;gt;'''Lista de materiales para el USB4Butiá motor shield'''&amp;lt;/big&amp;gt;&lt;br /&gt;
! width=&amp;quot;60 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Component&lt;br /&gt;
! width=&amp;quot;20 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Quantity&lt;br /&gt;
! width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Description&lt;br /&gt;
! width=&amp;quot;60 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|PCB Identifier&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.digikey.com/product-search/en?vendor=0&amp;amp;keywords=L298HN L298HN]|| 1 ||IC BRIDGE DRIVER PAR 15MULTIWATT||U1 L298      &lt;br /&gt;
|-&lt;br /&gt;
|1A7||8||diode type 1N4001 o 1N4007||D1..D8   &lt;br /&gt;
|-&lt;br /&gt;
|male headers pins ||14||Contact spacing 2.54mm (0.1&amp;quot;)||P1..P4&lt;br /&gt;
|-      &lt;br /&gt;
|100nF (10V minimum, 20% tolerance)||2||ceramic capacitor||C1, C2    &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Placa PCB: ==&lt;br /&gt;
&lt;br /&gt;
Hay dos versiones de la placa, originalmente pensadas para las versiones vertical y 90º del L298 (L298n, y L928hn respectivamente).&lt;br /&gt;
&lt;br /&gt;
La placa del L298hn es doble faz, lo que dificulta su ejecución a mano:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Archivo:L298hn_doble_faz.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
Especificaciones de la placa pcb: &lt;br /&gt;
* FR4 Material&lt;br /&gt;
* 1.6MM Thickness&lt;br /&gt;
* HASL Lead Free Surface Finish&lt;br /&gt;
* 1oz Copper Thickness&lt;br /&gt;
* Green Solder Mask&lt;br /&gt;
* White Silkscreen &lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/PCBenero2014/shield_l298hn.zip Archivos gerber para fabricación]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La placa del L298n puede ejcutarse en simple faz agregando unos puentes (en rojo).&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Archivo:L298n_simple_faz.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
Especificaciones de la placa pcb:&lt;br /&gt;
* Cualquiera simple faz&lt;br /&gt;
* [http://sourceforge.net/p/usb4all/code/ci/master/tree/pcb/puenteH/l298/gerber/ Archivos gerber para fabricación]&lt;br /&gt;
&lt;br /&gt;
== Construcción a mano ==&lt;br /&gt;
&lt;br /&gt;
Para el método manual existen 2 pdf con las respectivas versiones (para el L298n y para el L298hn):&lt;br /&gt;
 * [http://www.fing.edu.uy/inco/proyectos/butia/files/hardware/l298n-copper.pdf L298N]&lt;br /&gt;
 * [http://www.fing.edu.uy/inco/proyectos/butia/files/hardware/l298hn-copper.pdf L298HN]&lt;br /&gt;
&lt;br /&gt;
Se puede utilizar a modo de ejemplo el instructivo utilizado para la USB4Butiá: [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/USB4buti%C3%A1_tutorial Tutorial USB4Butiá]&lt;br /&gt;
&lt;br /&gt;
Otra alternativa es enviando los archivos gerber a (SeedStudio: [http://www.seeedstudio.com/depot/fusion-pcb-service-p-835.html?cPath=185]).&lt;br /&gt;
&lt;br /&gt;
* Montar los componentes como están en la foto:&lt;br /&gt;
[[Archivo:Shield-mejorado.png]]&lt;br /&gt;
&lt;br /&gt;
== Utilizando el shield ==&lt;br /&gt;
&lt;br /&gt;
Para que la placa USB4Butiá reconozca el shield, deberá tener:&lt;br /&gt;
&lt;br /&gt;
* Firmware v7 (o posterior)&lt;br /&gt;
&lt;br /&gt;
* Utilizar TortuBots v20 (o posterior)&lt;br /&gt;
&lt;br /&gt;
== Otros datos ==&lt;br /&gt;
&lt;br /&gt;
Ver Hoja de datos del integrado L293: [http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics/mXrqqxz.pdf]&lt;br /&gt;
&lt;br /&gt;
Ver Archivos fuente (Kicad) para realizar el circuito impreso:[http://sourceforge.net/p/usb4all/code/ci/PCBs/tree/pcb/puenteH/l298/]&lt;br /&gt;
&lt;br /&gt;
Imagen para imprimir y realizar el circuito manualmente (ver Construcción a mano)&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=5147</id>
		<title>Shield CC</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=5147"/>
				<updated>2014-04-11T21:00:57Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Utilizando el shield */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shield para Motores de Corriente Contínua ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shield_2.JPG | 400px]]&lt;br /&gt;
&lt;br /&gt;
Un &amp;quot;Shield&amp;quot; podríamos decir que es una plaqueta secundaria que se anexa o se &amp;quot;enchufa&amp;quot; sobre otra placa principal para agregarle alguna funcionalidad.&lt;br /&gt;
En este caso el Shield CC es una placa que se agrega al USB4Butiá para utilizar motores de Corriente Contínua en lugar de los AX12.&lt;br /&gt;
&lt;br /&gt;
'''Principio de funcionamiento:'''&lt;br /&gt;
Esta plaqueta utiliza un circuito integrado (L298) que contiene en su interior un conjunto de transistores conectados de tal forma que nos permite controlar, usando algunos pines de la USB4Butiá, el giro de los motores de CC.&lt;br /&gt;
Esta placa utiliza los HackPins 5, 6, 7 y 8 de la USB4Butia para controlar los motores de CC que mueven al butiá.&lt;br /&gt;
&lt;br /&gt;
Para que desde TortuBots se pueda controlar a los motores de CC con la misma sencillez que se hace con los AX12, es decir con comandos simples como Adelante, Atras, etc, es necesario tener:&lt;br /&gt;
* la versión 20 de TortuBots&lt;br /&gt;
* la versión 1.9 o superior de placa USB4Butia&lt;br /&gt;
* la versión 7.0 de firmware en la usb4butiá.&lt;br /&gt;
&lt;br /&gt;
== Lista de materiales: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para realizar el shield es necesario adquirir los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;background:#ffffff&amp;quot; align=&amp;quot;top&amp;quot; class=&amp;quot;sortable wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;center&amp;quot; style=&amp;quot;background:DarkSlateBlue; color:white&amp;quot;|&amp;lt;big&amp;gt;'''Lista de materiales para el USB4Butiá motor shield'''&amp;lt;/big&amp;gt;&lt;br /&gt;
! width=&amp;quot;60 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Component&lt;br /&gt;
! width=&amp;quot;20 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Quantity&lt;br /&gt;
! width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Description&lt;br /&gt;
! width=&amp;quot;60 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|PCB Identifier&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.digikey.com/product-search/en?vendor=0&amp;amp;keywords=L298HN L298HN]|| 1 ||IC BRIDGE DRIVER PAR 15MULTIWATT||U1 L298      &lt;br /&gt;
|-&lt;br /&gt;
|1A7||8||diode type 1N4001 o 1N4007||D1..D8   &lt;br /&gt;
|-&lt;br /&gt;
|male headers pins ||14||Contact spacing 2.54mm (0.1&amp;quot;)||P1..P4&lt;br /&gt;
|-      &lt;br /&gt;
|100nF (10V minimum, 20% tolerance)||2||ceramic capacitor||C1, C2    &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Placa PCB: ==&lt;br /&gt;
&lt;br /&gt;
Hay dos versiones de la placa, originalmente pensadas para las versiones vertical y 90º del L298 (L298n, y L928hn respectivamente).&lt;br /&gt;
&lt;br /&gt;
La placa del L298hn es doble faz, lo que dificulta su ejecución a mano:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Archivo:L298hn_doble_faz.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
Especificaciones de la placa pcb: &lt;br /&gt;
* FR4 Material&lt;br /&gt;
* 1.6MM Thickness&lt;br /&gt;
* HASL Lead Free Surface Finish&lt;br /&gt;
* 1oz Copper Thickness&lt;br /&gt;
* Green Solder Mask&lt;br /&gt;
* White Silkscreen &lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/PCBenero2014/shield_l298hn.zip Archivos gerber para fabricación]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La placa del L298n puede ejcutarse en simple faz agregando unos puentes (en rojo).&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Archivo:L298n_simple_faz.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
Especificaciones de la placa pcb:&lt;br /&gt;
* Cualquiera simple faz&lt;br /&gt;
* [http://sourceforge.net/p/usb4all/code/ci/master/tree/pcb/puenteH/l298/gerber/ Archivos gerber para fabricación]&lt;br /&gt;
&lt;br /&gt;
== Construcción a mano ==&lt;br /&gt;
&lt;br /&gt;
Para el método manual existen 2 pdf con las respectivas versiones (para el L298n y para el L298hn):&lt;br /&gt;
 * [http://www.fing.edu.uy/inco/proyectos/butia/files/hardware/l298n-copper.pdf L298N]&lt;br /&gt;
 * [http://www.fing.edu.uy/inco/proyectos/butia/files/hardware/l298hn-copper.pdf L298HN]&lt;br /&gt;
&lt;br /&gt;
Se puede utilizar a modo de ejemplo el instructivo utilizado para la USB4Butiá: [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/USB4buti%C3%A1_tutorial Tutorial USB4Butiá]&lt;br /&gt;
&lt;br /&gt;
Otra alternativa es enviando los archivos gerber a (SeedStudio: [http://www.seeedstudio.com/depot/fusion-pcb-service-p-835.html?cPath=185]).&lt;br /&gt;
&lt;br /&gt;
* Montar los componentes como están en la foto:&lt;br /&gt;
[[Archivo:Shield-mejorado.png]]&lt;br /&gt;
&lt;br /&gt;
== Utilizando el shield ==&lt;br /&gt;
&lt;br /&gt;
Para que la placa USB4Butiá reconozca el shield, deberá tener:&lt;br /&gt;
&lt;br /&gt;
* Firmware v7 (o posterior)&lt;br /&gt;
&lt;br /&gt;
* Utilizar TortuBots v20 (o posterior)&lt;br /&gt;
&lt;br /&gt;
== Otros datos ==&lt;br /&gt;
&lt;br /&gt;
Ver Hoja de datos del integrado L293: [http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics/mXrqqxz.pdf]&lt;br /&gt;
&lt;br /&gt;
Ver Archivos fuente (Kicad) para realizar el circuito impreso:[http://sourceforge.net/p/usb4all/code/ci/PCBs/tree/pcb/puenteH/l298/]&lt;br /&gt;
&lt;br /&gt;
Imagen para imprimir y realizar el circuito manualmente (ver construcción)&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Shield-mejorado.png&amp;diff=5146</id>
		<title>Archivo:Shield-mejorado.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Shield-mejorado.png&amp;diff=5146"/>
				<updated>2014-04-11T20:56:31Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=5145</id>
		<title>Shield CC</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=5145"/>
				<updated>2014-04-11T20:56:13Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Método de conexión */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shield para Motores de Corriente Contínua ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shield_2.JPG | 400px]]&lt;br /&gt;
&lt;br /&gt;
Un &amp;quot;Shield&amp;quot; podríamos decir que es una plaqueta secundaria que se anexa o se &amp;quot;enchufa&amp;quot; sobre otra placa principal para agregarle alguna funcionalidad.&lt;br /&gt;
En este caso el Shield CC es una placa que se agrega al USB4Butiá para utilizar motores de Corriente Contínua en lugar de los AX12.&lt;br /&gt;
&lt;br /&gt;
'''Principio de funcionamiento:'''&lt;br /&gt;
Esta plaqueta utiliza un circuito integrado (L298) que contiene en su interior un conjunto de transistores conectados de tal forma que nos permite controlar, usando algunos pines de la USB4Butiá, el giro de los motores de CC.&lt;br /&gt;
Esta placa utiliza los HackPins 5, 6, 7 y 8 de la USB4Butia para controlar los motores de CC que mueven al butiá.&lt;br /&gt;
&lt;br /&gt;
Para que desde TortuBots se pueda controlar a los motores de CC con la misma sencillez que se hace con los AX12, es decir con comandos simples como Adelante, Atras, etc, es necesario tener:&lt;br /&gt;
* la versión 20 de TortuBots&lt;br /&gt;
* la versión 1.9 o superior de placa USB4Butia&lt;br /&gt;
* la versión 7.0 de firmware en la usb4butiá.&lt;br /&gt;
&lt;br /&gt;
== Lista de materiales: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para realizar el shield es necesario adquirir los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;background:#ffffff&amp;quot; align=&amp;quot;top&amp;quot; class=&amp;quot;sortable wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;center&amp;quot; style=&amp;quot;background:DarkSlateBlue; color:white&amp;quot;|&amp;lt;big&amp;gt;'''Lista de materiales para el USB4Butiá motor shield'''&amp;lt;/big&amp;gt;&lt;br /&gt;
! width=&amp;quot;60 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Component&lt;br /&gt;
! width=&amp;quot;20 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Quantity&lt;br /&gt;
! width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Description&lt;br /&gt;
! width=&amp;quot;60 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|PCB Identifier&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.digikey.com/product-search/en?vendor=0&amp;amp;keywords=L298HN L298HN]|| 1 ||IC BRIDGE DRIVER PAR 15MULTIWATT||U1 L298      &lt;br /&gt;
|-&lt;br /&gt;
|1A7||8||diode type 1N4001 o 1N4007||D1..D8   &lt;br /&gt;
|-&lt;br /&gt;
|male headers pins ||14||Contact spacing 2.54mm (0.1&amp;quot;)||P1..P4&lt;br /&gt;
|-      &lt;br /&gt;
|100nF (10V minimum, 20% tolerance)||2||ceramic capacitor||C1, C2    &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Placa PCB: ==&lt;br /&gt;
&lt;br /&gt;
Hay dos versiones de la placa, originalmente pensadas para las versiones vertical y 90º del L298 (L298n, y L928hn respectivamente).&lt;br /&gt;
&lt;br /&gt;
La placa del L298hn es doble faz, lo que dificulta su ejecución a mano:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Archivo:L298hn_doble_faz.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
Especificaciones de la placa pcb: &lt;br /&gt;
* FR4 Material&lt;br /&gt;
* 1.6MM Thickness&lt;br /&gt;
* HASL Lead Free Surface Finish&lt;br /&gt;
* 1oz Copper Thickness&lt;br /&gt;
* Green Solder Mask&lt;br /&gt;
* White Silkscreen &lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/PCBenero2014/shield_l298hn.zip Archivos gerber para fabricación]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La placa del L298n puede ejcutarse en simple faz agregando unos puentes (en rojo).&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Archivo:L298n_simple_faz.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
Especificaciones de la placa pcb:&lt;br /&gt;
* Cualquiera simple faz&lt;br /&gt;
* [http://sourceforge.net/p/usb4all/code/ci/master/tree/pcb/puenteH/l298/gerber/ Archivos gerber para fabricación]&lt;br /&gt;
&lt;br /&gt;
== Construcción a mano ==&lt;br /&gt;
&lt;br /&gt;
Para el método manual existen 2 pdf con las respectivas versiones (para el L298n y para el L298hn):&lt;br /&gt;
 * [http://www.fing.edu.uy/inco/proyectos/butia/files/hardware/l298n-copper.pdf L298N]&lt;br /&gt;
 * [http://www.fing.edu.uy/inco/proyectos/butia/files/hardware/l298hn-copper.pdf L298HN]&lt;br /&gt;
&lt;br /&gt;
Se puede utilizar a modo de ejemplo el instructivo utilizado para la USB4Butiá: [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/USB4buti%C3%A1_tutorial Tutorial USB4Butiá]&lt;br /&gt;
&lt;br /&gt;
Otra alternativa es enviando los archivos gerber a (SeedStudio: [http://www.seeedstudio.com/depot/fusion-pcb-service-p-835.html?cPath=185]).&lt;br /&gt;
&lt;br /&gt;
* Montar los componentes como están en la foto:&lt;br /&gt;
[[Archivo:Shield-mejorado.png]]&lt;br /&gt;
&lt;br /&gt;
== Utilizando el shield ==&lt;br /&gt;
&lt;br /&gt;
Para que la placa USB4Butiá reconozca el shield, deberá tener:&lt;br /&gt;
&lt;br /&gt;
* Firmware v7 (o posterior)&lt;br /&gt;
&lt;br /&gt;
* Utilizar TortuBots v20 (o posterior)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ver Hoja de datos del integrado L293: [http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics/mXrqqxz.pdf]&lt;br /&gt;
Ver Circuito esquemático del shield:[[Archivo:CircuitoShield.jpg]]&lt;br /&gt;
Ver Archivos fuente (Kicad) para realizar el circuito impreso:[http://sourceforge.net/p/usb4all/code/ci/PCBs/tree/pcb/puenteH/l298/]&lt;br /&gt;
Imagen para imprimir y realizar el circuito manualmente:[[Archivo:ShieldCu.jpg]]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Ejemplos&amp;diff=5016</id>
		<title>Ejemplos</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Ejemplos&amp;diff=5016"/>
				<updated>2014-03-29T21:01:35Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Seguidor de líneas a ambos lados */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Seguidor de líneas a ambos lados ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#si no estoy en la carpeta&lt;br /&gt;
import sys&lt;br /&gt;
sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
from pybot import usb4butia&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
i = 0&lt;br /&gt;
veces = 1&lt;br /&gt;
gireDerecha = 0 &lt;br /&gt;
#inicializacion de variables&lt;br /&gt;
&lt;br /&gt;
while i&amp;lt;200:&lt;br /&gt;
        #creamos la variable i para que se ejecutara 199 veces y no por siempre&lt;br /&gt;
        i += 1&lt;br /&gt;
        linea = robot.getGray()&lt;br /&gt;
        print linea&lt;br /&gt;
        #guardamos el valor del sensor en linea y lo imprime en pantalla&lt;br /&gt;
       &lt;br /&gt;
        if linea &amp;gt; 2000:&lt;br /&gt;
                veces = 1&lt;br /&gt;
                robot.set2MotorSpeed(0, 400, 0, 400)&lt;br /&gt;
                #si el valor del sensor es &amp;gt;2000 los motores avanzan&lt;br /&gt;
        else:&lt;br /&gt;
                if gireDerecha == 1:&lt;br /&gt;
                        #si gire a la derecha ahora giro a la izq&lt;br /&gt;
                        robot.set2MotorSpeed(1, 400, 0, 400)&lt;br /&gt;
                        gireDerecha = 0&lt;br /&gt;
&lt;br /&gt;
                else:&lt;br /&gt;
                        #si gire a la izquierda ahora giro a la der&lt;br /&gt;
                        robot.set2MotorSpeed(0, 400, 1, 400)&lt;br /&gt;
                        gireDerecha = 1&lt;br /&gt;
                &lt;br /&gt;
                time.sleep(veces * 0.1)&lt;br /&gt;
                #procesa la info&lt;br /&gt;
                robot.set2MotorSpeed(0, 0, 0, 0)&lt;br /&gt;
&lt;br /&gt;
                veces += 1&lt;br /&gt;
                #incrementa el angulo de giro&lt;br /&gt;
        time.sleep(0.2)&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(0, 0, 0, 0)&lt;br /&gt;
#se detiene&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4990</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4990"/>
				<updated>2014-03-26T16:59:45Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Bajando el Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;quot;recursive&amp;quot; se encarga de descargar los submódulos necesarios para ejecutar TurtleBots.&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 23&amp;quot;:&lt;br /&gt;
 git checkout -b v23&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtlebots&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la actual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4989</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4989"/>
				<updated>2014-03-26T16:58:57Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Generando .deb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 23&amp;quot;:&lt;br /&gt;
 git checkout -b v23&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtlebots&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la actual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4988</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4988"/>
				<updated>2014-03-26T16:58:38Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Versión estable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 23&amp;quot;:&lt;br /&gt;
 git checkout -b v23&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtle_art_plugin&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la acrual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4987</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4987"/>
				<updated>2014-03-26T16:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Bajando el Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code --recursive&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 18&amp;quot;:&lt;br /&gt;
 git checkout -b v18&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtle_art_plugin&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la acrual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4986</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4986"/>
				<updated>2014-03-26T16:43:49Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Compilando */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 18&amp;quot;:&lt;br /&gt;
 git checkout -b v18&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtlebots           # ir a la carpeta tortubots&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtlebots&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtle_art_plugin&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la acrual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4985</id>
		<title>Git Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Git_Butia&amp;diff=4985"/>
				<updated>2014-03-26T16:42:02Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Bajando el Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se explicara la estructura del Git Butia, como esta organizado, bajarse una version estable y compilarlo.&lt;br /&gt;
&lt;br /&gt;
== Empezando con Git ==&lt;br /&gt;
Primero que nada es necesario saber como usar git, para ello se recomienda leer algun tutorial por la web ANTES de seguir leyendo esta wiki&lt;br /&gt;
&lt;br /&gt;
== Bajando el Git ==&lt;br /&gt;
Para descargar el Git vamos a una terminal y ejecutamos:&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code&lt;br /&gt;
&lt;br /&gt;
Luego de bajar el git, vamos a la carpeta &amp;quot;turtlebots&amp;quot;&lt;br /&gt;
 cd turtlebots&lt;br /&gt;
&lt;br /&gt;
== Estructura del Git ==&lt;br /&gt;
&lt;br /&gt;
El GIT está compuesto de varias carpetas que mantienen distintas partes vitales del todo:&lt;br /&gt;
&lt;br /&gt;
 bobot&lt;br /&gt;
 butiaXO&lt;br /&gt;
 docs&lt;br /&gt;
 firmware            código de la actividad Firmware Update&lt;br /&gt;
 lualibusb:          binding para USB en Lua&lt;br /&gt;
 pybot&lt;br /&gt;
 serialcomm          binding para serial en Lua&lt;br /&gt;
 turtle_art_plugin   todos los plugins&lt;br /&gt;
 butialo             código de la actividad Butialo&lt;br /&gt;
 dibujos&lt;br /&gt;
 examples&lt;br /&gt;
 libs&lt;br /&gt;
 newPatterns&lt;br /&gt;
 pythonAPI&lt;br /&gt;
 Seguidor&lt;br /&gt;
 usb4all&lt;br /&gt;
&lt;br /&gt;
== Versión estable ==&lt;br /&gt;
Es importante utilizar una versión ESTABLE!&lt;br /&gt;
Por ejemplo si queremos utilizar la &amp;quot;versión 18&amp;quot;:&lt;br /&gt;
 git checkout -b v18&lt;br /&gt;
&lt;br /&gt;
== Compilando ==&lt;br /&gt;
&lt;br /&gt;
Si estamos en una versión estable:&lt;br /&gt;
 cd turtle_art_plugin    # ir al plugin tortuga&lt;br /&gt;
 make dev                # genera en tmp el TurtleBots&lt;br /&gt;
&lt;br /&gt;
Para ejecutarlo:&lt;br /&gt;
 cd tmp&lt;br /&gt;
 ./turtleblocks.py&lt;br /&gt;
&lt;br /&gt;
También, si tenemos un emulador de Sugar, como el &amp;quot;sugar-emulator&amp;quot; este comando genera&lt;br /&gt;
una instalación para poder usarlo desde allí.&lt;br /&gt;
&lt;br /&gt;
Para generar un .XO, estando en la carpeta &amp;quot;turtle_art_plugin&amp;quot;:&lt;br /&gt;
 make xo&lt;br /&gt;
&lt;br /&gt;
Eso nos crea en la carpeta el .XO&lt;br /&gt;
&lt;br /&gt;
== Generando .deb ==&lt;br /&gt;
&lt;br /&gt;
Para generar un .deb vamos a la carpeta:&lt;br /&gt;
  cd turtle_art_plugin&lt;br /&gt;
&lt;br /&gt;
y ejecutamos:&lt;br /&gt;
 dpkg-buildpackage&lt;br /&gt;
&lt;br /&gt;
Luego de finalizado, encontraremos el paquete una carpeta arriba de la acrual.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4729</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4729"/>
				<updated>2013-12-07T11:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Agrego HELP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
El código puede ser obtenido clonando el repositorio:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code&lt;br /&gt;
&lt;br /&gt;
''(Al día de hoy 10/11/13 la carpeta pesa 98MB es un poco pesada)''&amp;lt;br&amp;gt;&lt;br /&gt;
El código se encuentra en &amp;quot;/lugar/de/clonado/turtlebots/pybot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Diseño==&lt;br /&gt;
Pybot consta de distintos módulos que se encargan de una parte específca:&lt;br /&gt;
&lt;br /&gt;
 baseboard.py         funciones inerentes a la placa USB4Butia&lt;br /&gt;
 com_chotox.py        simula la conexión con una placa y todas las funciones&lt;br /&gt;
 com_usb.py           implementa la comunicación usb&lt;br /&gt;
 device.py            abstracción de un dispositivo (botón, motores) conectado a la placa&lt;br /&gt;
 drivers/&lt;br /&gt;
     hotplug/         drivers de módulos abiertos automáticamente por la placa&lt;br /&gt;
         button.py    driver del sensor botón&lt;br /&gt;
         light.py     driver del sensor de luz&lt;br /&gt;
         -----&lt;br /&gt;
     motores.py       driver del módulo de motores&lt;br /&gt;
     butia.py         driver del módulo butiá&lt;br /&gt;
     -----&lt;br /&gt;
 functions.py         funciones comunes entre el cliente y la usb4butia&lt;br /&gt;
 pybot_client.py      aplicación cliente&lt;br /&gt;
 pybot_server.py      aplicación servidor&lt;br /&gt;
 server_functions.py  lista de funciones del servidor&lt;br /&gt;
 usb/                 librería PyUsb&lt;br /&gt;
 usb4butia.py         módulo principal (core) que implementa las funciones&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en pybot_client.&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server via Telnet==&lt;br /&gt;
&lt;br /&gt;
Cuando se levanta el servidor, se abre un socket en el puerto 2009.&lt;br /&gt;
Esto permite conectarnos via red local a un Butiá y poder controlarlo.&lt;br /&gt;
Para eso podemos levantar un Telnet así:&lt;br /&gt;
&lt;br /&gt;
    telnet localhost 2009&lt;br /&gt;
&lt;br /&gt;
Ponemos &amp;quot;localhost&amp;quot; porque en nuestro caso estamos corriendo en la misma computadora,&lt;br /&gt;
de lo contrario, pondríamos la dirección IP.&lt;br /&gt;
&lt;br /&gt;
===Comandos del Server===&lt;br /&gt;
&lt;br /&gt;
Para poder acceder al robot contamos con algunos comandos.&lt;br /&gt;
La forma de saber los comandos presentes es mediante otro comando &amp;quot;HELP&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    HELP&lt;br /&gt;
    BUTIA_COUNT, CALL, CLIENTS, CLOSE, DESCRIBE, HELP, LIST, LISTI, OPEN, QUIT, REFRESH&lt;br /&gt;
&lt;br /&gt;
Si queremos saber qué hace cada comando (solo en la versión 23 de PyBot) podemos hacer:&lt;br /&gt;
&lt;br /&gt;
    HELP clients&lt;br /&gt;
    Get a list of current clients in PyBot server&lt;br /&gt;
&lt;br /&gt;
Los comandos y su descripción:&lt;br /&gt;
&lt;br /&gt;
    BUTIA_COUNT:  Get the number of boards connected&lt;br /&gt;
    CALL:         Call a function of certain module&lt;br /&gt;
    CLIENTS:      Get a list of current clients in PyBot server&lt;br /&gt;
    CLOSE:        Close an 'openable' module such as motors, butia..&lt;br /&gt;
    DESCRIBE:     Get the list of functions and parameters of a module&lt;br /&gt;
    HELP:         Return a list of commands or the use of specific one&lt;br /&gt;
    LIST:         Get a list of open modules in a board&lt;br /&gt;
    LISTI:        Get a list of instanciables modules of the board&lt;br /&gt;
    OPEN:         Open an 'openable' module such as motors, butia..&lt;br /&gt;
    QUIT:         Close PyBot server&lt;br /&gt;
    REFRESH:      Search for new devices&lt;br /&gt;
&lt;br /&gt;
Otro comando útil es el &amp;quot;DESCRIBE&amp;quot;: este comando permite describir un módulo (por ejemplo, un botón, un motor) y decirnos sus funciones y argumentos. Por ejemplo, en el caso de &amp;quot;grey&amp;quot; (sensor de grises):&lt;br /&gt;
&lt;br /&gt;
    DESCRIBE grey&lt;br /&gt;
    {'getVersion': [], 'getValue': []}&lt;br /&gt;
&lt;br /&gt;
Ésto nos dice que el sensor de grises (grey) cuenta con 2 funciones: &amp;quot;getVersion&amp;quot; y &amp;quot;getValue&amp;quot;.&lt;br /&gt;
Para usar el comando, teniendo un sensor conectado en el puerto 2, por ejemplo, haríamos un &amp;quot;CALL&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    CALL grey:2 getValue&lt;br /&gt;
    25789&lt;br /&gt;
&lt;br /&gt;
Eso nos devuelve el valor del sensor de grises conectado en el puerto 2 de la placa Butiá.&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4717</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4717"/>
				<updated>2013-11-30T20:01:50Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Diseño */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
El código puede ser obtenido clonando el repositorio:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.code.sf.net/p/butia/code&lt;br /&gt;
&lt;br /&gt;
''(Al día de hoy 10/11/13 la carpeta pesa 98MB es un poco pesada)''&amp;lt;br&amp;gt;&lt;br /&gt;
El código se encuentra en &amp;quot;/lugar/de/clonado/turtlebots/pybot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Diseño==&lt;br /&gt;
Pybot consta de distintos módulos que se encargan de una parte específca:&lt;br /&gt;
&lt;br /&gt;
 baseboard.py         funciones inerentes a la placa USB4Butia&lt;br /&gt;
 com_chotox.py        simula la conexión con una placa y todas las funciones&lt;br /&gt;
 com_usb.py           implementa la comunicación usb&lt;br /&gt;
 device.py            abstracción de un dispositivo (botón, motores) conectado a la placa&lt;br /&gt;
 drivers/&lt;br /&gt;
     hotplug/         drivers de módulos abiertos automáticamente por la placa&lt;br /&gt;
         button.py    driver del sensor botón&lt;br /&gt;
         light.py     driver del sensor de luz&lt;br /&gt;
         -----&lt;br /&gt;
     motores.py       driver del módulo de motores&lt;br /&gt;
     butia.py         driver del módulo butiá&lt;br /&gt;
     -----&lt;br /&gt;
 functions.py         funciones comunes entre el cliente y la usb4butia&lt;br /&gt;
 pybot_client.py      aplicación cliente&lt;br /&gt;
 pybot_server.py      aplicación servidor&lt;br /&gt;
 server_functions.py  lista de funciones del servidor&lt;br /&gt;
 usb/                 librería PyUsb&lt;br /&gt;
 usb4butia.py         módulo principal (core) que implementa las funciones&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en pybot_client.&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=4533</id>
		<title>Shield CC</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Shield_CC&amp;diff=4533"/>
				<updated>2013-07-31T23:22:44Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Shield para Motores de Corriente Contínua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shield para Motores de Corriente Contínua ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shield_2.JPG | 400px]]&lt;br /&gt;
&lt;br /&gt;
Un &amp;quot;Shield&amp;quot; podríamos decir que es una plaqueta secundaria que se anexa o se &amp;quot;enchufa&amp;quot; sobre otra placa principal para agregarle alguna funcionalidad.&lt;br /&gt;
En este caso el Shield CC es una placa que se agrega al USB4Butiá para utilizar motores de Corriente Contínua en lugar de los AX12.&lt;br /&gt;
&lt;br /&gt;
'''Principio de funcionamiento:'''&lt;br /&gt;
Esta plaqueta utiliza un circuito integrado (L298) que contiene en su interior un conjunto de transistores conectados de tal forma que nos permite controlar, usando algunos pines de la USB4Butiá, el giro de los motores de CC.&lt;br /&gt;
Esta placa utiliza los HackPins 5, 6, 7 y 8 de la USB4Butia para controlar los motores de CC que mueven al butiá.&lt;br /&gt;
&lt;br /&gt;
Para que desde TortuBots se pueda controlar a los motores de CC con la misma sencillez que se hace con los AX12, es decir con comandos simples como Adelante, Atras, etc, es necesario tener:&lt;br /&gt;
* la versión 20 de TortuBots&lt;br /&gt;
* la versión ?? de placa USB4Butia&lt;br /&gt;
* la versión 7.0 de firmware en la usb4butiá.&lt;br /&gt;
&lt;br /&gt;
== Lista de materiales: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para realizar el shield es necesario adquirir los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
* L298 (ver en Eneka o Mundo Electrónico)&lt;br /&gt;
* 1 condensador de 100nF (Eneka)&lt;br /&gt;
* 1 condensador de ???uF (Eneka)&lt;br /&gt;
* 8 diodos de uso general 1N4001 o 1N4007 (Eneka)&lt;br /&gt;
* Conectores de tipo pines para conectar la placa a la &lt;br /&gt;
* Placa para realizar el circuito impreso o circuito ya impreso en el exterior&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shild.png]]&lt;br /&gt;
&lt;br /&gt;
== Método de conexión ==&lt;br /&gt;
&lt;br /&gt;
* Realizar el impreso de la placa ya sea por método manual (ver instructivo utilizado para la USB4Butia:[http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/USB4buti%C3%A1_tutorial] )&lt;br /&gt;
o enviando los archivos gerber a (SeedStudio: [http://www.seeedstudio.com/depot/fusion-pcb-service-p-835.html?cPath=185]).&lt;br /&gt;
&lt;br /&gt;
* Montar los componentes como están en la foto:&lt;br /&gt;
[[Archivo:Shild.png]]&lt;br /&gt;
&lt;br /&gt;
* Cargar el firmware V7 a la USB4Butiá&lt;br /&gt;
&lt;br /&gt;
* Actualizar TortuBots a la versión 20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ver Hoja de datos del integrado L293: [http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics/mXrqqxz.pdf]&lt;br /&gt;
Ver Circuito esquemático del shield:[[Archivo:CircuitoShield.jpg]]&lt;br /&gt;
Ver Archivos fuente (Kicad) para realizar el circuito impreso:[http://sourceforge.net/p/usb4all/code/ci/PCBs/tree/pcb/puenteH/l298/]&lt;br /&gt;
Imagen para imprimir y realizar el circuito manualmente:[[Archivo:ShieldCu.jpg]]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Actas_Reuniones_Butia&amp;diff=4433</id>
		<title>Actas Reuniones Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Actas_Reuniones_Butia&amp;diff=4433"/>
				<updated>2013-05-06T06:16:44Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Participantes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== 03/04/13 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Faivel, Lucio, Enrique, Jorge, John, Andrés, Juan Pablo Devone, Guille, Pablo, Alan&lt;br /&gt;
&lt;br /&gt;
====Minuta====&lt;br /&gt;
*las reuniones se harán cada 15 días.&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
*usar 2 pines para detección. &lt;br /&gt;
*&amp;quot;desde arriba&amp;quot; es lo mismo: se llama a motors y y el módulo se encarga de resolver si tiene conectado motores de continua o AX-12.&lt;br /&gt;
*el shield se detectan al comienzo -&amp;gt; no es hotplug&lt;br /&gt;
*si hay ax-12 y el shield: se utilizan los motores del shield para el Butiá y los ax-12 para (en el futuro) usar un brazo u otra cosa.&lt;br /&gt;
&lt;br /&gt;
== 20/03/2013 ==&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
* Se discute la alternativa elegida la reunión anterior de conectar a los hack-points y rj45 como previo a módulo motor.&lt;br /&gt;
** Se manda mail para discutir alternativas a futuro sobre objetivos y motores de chata CC.&lt;br /&gt;
&lt;br /&gt;
== 13/03/2013 ==&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
*Control de motores CC:&lt;br /&gt;
**Módulo hardware para pwm, se descarta pwm hablado en reunión anterior (utilizando pic de usb4all), se va a hacer puente H con control binario, como paso intermedio a placa enchufada a puerto rj45. Aylen va a tener algo para mostrar jueves 14&lt;br /&gt;
&lt;br /&gt;
*Hardware para controlar motores:&lt;br /&gt;
**Opción de identificación a rj45, con shield y cable. Se enchufa H-Bridge a los hackpoints, Rodrigo y John generan un prototipo para jueves 14.&lt;br /&gt;
**Shield con autoidentificacion, idea de Guille, se puede manejar a futuro, por ejemplo para módulo Bluetooth.&lt;br /&gt;
====Software====&lt;br /&gt;
*Software para controlar motores CC&lt;br /&gt;
**Alan adapta software, si detecta módulo de motores CC, utiliza hack points para controlar motores.&lt;br /&gt;
&lt;br /&gt;
== 28/02/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
* Barandas al revés: no se cambia, el usuario debería redefinir el adelante del robot.&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
* puente h, llegaron unos micros que se pueden utilizar&lt;br /&gt;
** Se discuten alternativas: &lt;br /&gt;
** 1-implementar control de motores utilizando hack-points como primera alternativa - aylen empieza el desarrollo del firmware. &lt;br /&gt;
** Se va a diseñar un conector estandar para conectar los hack-points al módulo motores. Se discuten alternativas de como usar los pines:&lt;br /&gt;
*** a- Utilizar 2 pines por motor, utilizando transistores para puentear los estados del L293d&lt;br /&gt;
*** b- utilizar 3 pines por motor, evitando más componentes eléctricos, sacrificando hack-point&lt;br /&gt;
** 2-implementar protocolo ax-12 con un pic independiente (John estaba trabajando con esto), luego de la versión 2.0.&lt;br /&gt;
&lt;br /&gt;
== 14/02/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
* se hicieron pruebas con el sensor de distancia a partir de un comportamiento extraño que encontró daniel. Lo raro es que el sensor no se comporta como debería para diferentes distancias da el mismo valor de voltaje. El resultado es que se aprovecha la mitad del rango del sensor en lugar de poder aprovechar todo. Probamos si era un tema de voltaje y alimentando con una fuente externa mediante un hub sigue dando el problema. Probamos conectarlo directamente a una fuente de corriente y medir con tester y funciona correctamente al parecer es un problema de ruido.&lt;br /&gt;
&lt;br /&gt;
* Mejorar la serigrafía de los sensores especificando el pinout de los sensores de distancia al conectarse al PCB.&lt;br /&gt;
&lt;br /&gt;
* Agregar logo butiá a los sensores.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
* Vamos a agregar a turtlebots que se deahabilite el control automático de energía para que no se suspenda el USB, tenemos lo que nos mandaron de la lista de sugar-dev. Hay que estudiar porque parece que el turtlebot ya trae un código para esto pero esta fallando, en el log se ven unos errores al intentarlo en la clase activity.&lt;br /&gt;
&lt;br /&gt;
====Otros====&lt;br /&gt;
* Se resolvió poner en la wiki mejor documentación en la parte de construcción, en particular falta poner el conector rj45 y especificar su pinout&lt;br /&gt;
* El sábado 23 es el primer taller del año en colón.&lt;br /&gt;
&lt;br /&gt;
== 7/02/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Pablo,  Andres, John, Faivel, Humberto, Guille, Enrique, Javier, Rafael, Nicolás, Edgardo, Mario, Lucio&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunión a las 18:50&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
* Se está preparando versión de acrílicos final de Butiá SAM.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Bloque nuevo de casteo para adaptar el valor del sensor a un rango conocido, y los bloques de usurio a bloques conocido. En paleta extra, agrega un bloque nuevo.&lt;br /&gt;
** Problema: que pasa cuando se levanta devuelta el archivo, despues de reiniciar el programa? Hay que probar&lt;br /&gt;
* Bloque módulo user 1,2,3&lt;br /&gt;
* Bloque python de tortuga no funciona, no almacena el código, si no referencia al archivo. Corregir (Walter?)&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
* Es complicado agregar un nuevo módulo de firmware, por más que sea parecido a los anteriores.&lt;br /&gt;
** Agregar módulo genérico, al instanciarlo por sw, pasarle parametro el rango de identificación. (Descartado por la siguiente opción)&lt;br /&gt;
** Agregar módulos de usuario en fw, que sean genéricos, permitiendo así compartir el sensor con otras placas. Mantiene estructura actual de firmware. Cuando se instancia se define si es digital o análogo. Se genera un alias al instanciar en código. Tiene metodo getValue y setValue.&lt;br /&gt;
* Puente H, se le va a poner un micro, se está trabajando&lt;br /&gt;
** Generar entrada en wiki para discutir como conectar motores (placa con cantidad variable de motores, 2 motores, etc)&lt;br /&gt;
** El h-bridge diseñado va a permitir conectar a los hack-points o al puerto.&lt;br /&gt;
** Módulo usando un pin de los puertos y 2 hack-points&lt;br /&gt;
** Módulo utilizando un puerto con 2 pines de datos.&lt;br /&gt;
* Implementar módulo de PWM&lt;br /&gt;
&lt;br /&gt;
== 31/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Pablo,  Andres, John, Faivel, Humberto, Guille, Enrique, Javier&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunión a las 18:09&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se realizo la prueba de colocar la rueda en el eje del motor con un prisionero directo a la rueda y dio muy buen resultado. De momento parece ser la mejor idea y queda muy prolijo.&lt;br /&gt;
*Se le agrego los agujeros para trasladar la placa chica de acrílico para dejar espacio para los motores de continua&lt;br /&gt;
*Se le agrega una ficha butia para ensamblar los motores al butia&lt;br /&gt;
*Parece que con esa modificación el puerto USB de la placa queda muy cerca de la rueda loca y queda tocando con el cable USB.&lt;br /&gt;
** Se discutio si se rota 180 la placa USB4butia quedando el USB hacia la otra direccion y los 4 conectores para sensores hacia la rueda, igual va a tocar con la rueda pero los cables de los sensores son mas flexibles y el conector no sobresale tanto o también lo de rotar todo el modulo que contiene placa, pilas y chasis chico de acrilico 180 o  Intercambiar la placa con las pilas. Se decidio intercambiar la placa con las pilas.&lt;br /&gt;
*Se discutió sobre simetrizar los agujeros para amurar de la placa, pero se decidió que no porque pierde compatibilidad con los butias anteriores&lt;br /&gt;
* Se probo colocarle una rueda con el sistema del prisionero al motor de DX, el sistema de la ficha no es compatible con este pues tienen diametros distintos, se quiere llegar a una ficha mas universal por lo que se discutieron varias ideas sobre eso, quedamos en que se va a seguir investigando.&lt;br /&gt;
*Se dise;o el topecito para la parte de enfre con el logo de butia&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
*Se siguieron plantenado ideas sobre la USB4butia avanzada y lo de usar otro micro. Se va a seguir investigando&lt;br /&gt;
*Se planteo un idea de usar un circuito analogico con 3 estados para conectar los motores directamente a los puertos de la USB4butia&lt;br /&gt;
&lt;br /&gt;
== 24/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Rodrigo, Pablo, Jorge, Andres, Daniel, John, Rafael, Aylen, Fiorella, Faivel, Guille, Humberto&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunión a las 18:26&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se trajeron las piezas de formacril, se probaron las dos alternativas de barandas y se discutio. Se decidio que la mejor alternativa de barandas cortas con topes es mejor, pues muestra mas robustez frente a la de baranda larga y el laptop queda mas estable.&lt;br /&gt;
** El tope serian dos piezas universales butia, (No esta bueno que estas piezas sean de tope)&lt;br /&gt;
** Se decidio que el largo ideal de los tornillos para las piezas es de 4 x 0.7 de 20 mm.&lt;br /&gt;
*Motores: Se hizo una prueba con un prisionero y dio muy buen resultado.&lt;br /&gt;
*colocar el prisionero en la rueda directamente?&lt;br /&gt;
&lt;br /&gt;
====Firmware====&lt;br /&gt;
*Seguir investigando sobre los micros buscar uno micro que sea Economico, Mercado Local, Chico y se pueda hacer PWM.&lt;br /&gt;
*Replantearse la idea de implementar serial por sofware y la de pwm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
*Se resolvió quitar el Cristal de 32.768 que libera dos pines en la placa de los cuales uno es el PWM que se buscaba obtener&lt;br /&gt;
*El botón de bootloader permanece en la placa&lt;br /&gt;
*Colocar 2 puertos en la USB4butia compatibles con el el conector de los servos para los PWM.&lt;br /&gt;
*USB4butia simple y utilizar los hackpoints para controlar opción estable.&lt;br /&gt;
*Se hablo de hacer una placa usb4butia avanzada en dos capas y se planteo la interrogante de que es mejor: Si hacer la placa usb4butia doble capa avanzada con mas pines de datos y quizás con potencia, o mantenes la usb4butia con una capa agragando un modulo motor con otro microcontrolador.&lt;br /&gt;
*Crear una whish lista sobre la USB4butia&lt;br /&gt;
&lt;br /&gt;
== 17/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Rodrigo, Pablo, Jorge, Andres, Daniel, John, Rafael&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunion a las 18:26&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
* se habló del módulo motor y la elección del pic, parece que utilizar&lt;br /&gt;
el micro con menos prestaciones es la opción más adecuada.&lt;br /&gt;
* como colocar los motores de CC : correa/directo&lt;br /&gt;
** se decidió que ya que tenemos motores con un buen par, no tiene&lt;br /&gt;
mucho sentido tener una correa.&lt;br /&gt;
** Surge el tema de donde colocar los motores para que siga siendo&lt;br /&gt;
ax12 y CC compatible, una opción para no cambiar las distribuciones&lt;br /&gt;
actuales es colocar los motores de CC atrás y permitir cambiar de&lt;br /&gt;
lugar la rueda loca  para el lado opuesto al que está ahora. Hay que&lt;br /&gt;
tener ojo de que no obstaculice la conexión de puertos actual lo cual&lt;br /&gt;
es el problema que tiene ahora.&lt;br /&gt;
** Otro tema es como amurar la rueda a los motores, el motor que&lt;br /&gt;
compramos es de eje cilíndirco, hay otros con un perfil lo cual&lt;br /&gt;
permite que se pueda diseñar una rueda con un prisionero. Otra opción&lt;br /&gt;
es perforar el eje del motor y ponerle una espina para amurar la&lt;br /&gt;
rueda.&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
*resolver que hacer con PWM: hackpoints, puertos&lt;br /&gt;
** PWM, mantener por hackpoint y generar módulo de firmware para PWM&lt;br /&gt;
por software utilizando Timer1 (inteligente, interrumpir solo cuando&lt;br /&gt;
es necesario).&lt;br /&gt;
** Generar informe con opciones de mantener o quitar botón de programación&lt;br /&gt;
* Módulo GPIO: no es equivalente al resistencia? Aporta algo?&lt;br /&gt;
** Evaluar quitar módulo port (porque no aporta nada)&lt;br /&gt;
** Evaluar agregar módulo de GPIO, permite por lo menos avisar al&lt;br /&gt;
usuario que está realizando una acción que puede dañar el equipo.&lt;br /&gt;
* Gadgets de sensore en DX, que hacer, definir ids o usar módulo&lt;br /&gt;
lector de voltaje, en general utilizar el de voltaje&lt;br /&gt;
** Crear módulos de temperatura y magnético, para laboratorios de física.&lt;br /&gt;
* chequear si el sensor de campo mag es analogico o digi&lt;br /&gt;
&lt;br /&gt;
== 10/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Guillermo, Alan, , Fiorella, Pablo, Jorge, Andres, Faviel,  John&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunion a las 18:26&lt;br /&gt;
&lt;br /&gt;
====Documentación====&lt;br /&gt;
*Sensores de resistencia y voltage (John y Guille)&lt;br /&gt;
*Sensor de flexión ya esta documentado por Enrique&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se estan haciendo los acrílicos en formacril, fecha aproximada 24&lt;br /&gt;
*Módulo motor hecho con carcasa de linterna utilizando una ficha butia, carcasa de un enchufe, arrancador de tubo y zunchos.&lt;br /&gt;
**Se discutio sobre utilizarlo con una correa o  adicionarle una rueda, se decidio adicionarle la rueda y colocar el modulo en el lugar actual de las ruedas, manteniendo la estructura de los AX12, incorporándolo al butia por fuera. (Butia PUNK)&lt;br /&gt;
*Se habló de hacer un banco de prueba de motores para obtener datos útiles como el par, rpm , etc ...&lt;br /&gt;
*Se probaron los tornillos de plástico y dan buen resultado ya que protege el acrílico, son mas fácil de enroscar, mas amigables para los niños&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
*Se discutió sobre los cambios de la USB4butia, estudiar lo de hacer una USB4butia solo para controlar motores y evaluar Modulito con microcontrolador propio para manejar motores, PIC16F628A buscar compilador GNU, buscar otro PIC de 8 patas&lt;br /&gt;
*Evaluar de quitar el clock de 37 khz y utilizar el pin 16 que es el CCP2 y asi evitar de quitar el boton de programacion&lt;br /&gt;
*Se hablo sobre sacar el boton de programacion, se decidio quitarlo y cambiar el bootloader y agregar dos puertos pwm (Si es necesario)&lt;br /&gt;
*Se discutió lo de quitar el bus AX12, se decidió que no porque permite agregar motores con control más complejo de forma fácil.&lt;br /&gt;
*Sacar los pines de programación ... ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
*Serial por software (si se va hacer el modulo motor con pic propio)&lt;br /&gt;
&lt;br /&gt;
== 03/01/2013 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Rafa, Pablo, Pancho, Jorge, John&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se dibujaron barandas nuevas con el tope , y se hicieron prototipos en goma eva para presentar en el butiá. Se presentó junto a la magallanes. Se discutió y se decidió hacer las barandas un poco más altas. Diseñar y construir 2 juegos de barandas: unas más largas con tope flotando y otras más cortas sin tope.&lt;br /&gt;
*Se mostró la nueva rueda butiá con agujero en el medio&lt;br /&gt;
*Se habló del modulo motor se agregan dos piezas de acrílico para mantener la estructura de los AX12 y no tener que hacer un butia distinto para la versión con otros motores. Hay dos opciones, una posee lengüetas como los AX12 y van en el mismo lugar con las ranuras existentes para los AX12 y la otra serían las fichas universales con el sistema de encastre butia.&lt;br /&gt;
*Estudiar agujeros para &amp;quot;ensanguchar&amp;quot; las dos planchas de acrílicos, agregar un tornillo más alineado con los que ya están con la medida de los AX12&lt;br /&gt;
*Se acomodó la ojiva del encastre butiá centrándola para que quede un poquito mas separdo de los rectángulos&lt;br /&gt;
*Se le agrega al logo la palabra SAM&lt;br /&gt;
*Ejemplo de logos para autoadhesivos&lt;br /&gt;
*Se van hacer arcilicos y autoadhesivos.&lt;br /&gt;
*Se va a probar el logo calado otra vez &lt;br /&gt;
&lt;br /&gt;
== 27/12/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Daniel, Guillermo, Alan John, Fiorella, Aylen, Rodrigo, Enrique, Rafael, Pablo&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 18:41&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Acrílico había quedado mal grabado el logo la última vez, quedó una línea entrecortada.&lt;br /&gt;
** Se va a pedir devuelta con los logos bien grabados. Pablo trae planos el 3 de enero. Al pedir los nuevos acrílicos preguntar opciones de:&lt;br /&gt;
*** Pintar logos luego de grabarlos&lt;br /&gt;
*** Mejorar calidad del grabado para que no queden manchados.&lt;br /&gt;
*** Incrementar ancho de línea para que queden mejor marcados los logos.&lt;br /&gt;
** Pablo va a mandar a hacer pegotines calados de logos para manejar otra alternativa&lt;br /&gt;
** Se discute si poner nombre 2.0 o &amp;quot;sam&amp;quot;. Mayoría eligió Sam (2 en charrúa)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Se vio prototipo con motores de cargadores USB a dínamo, utilizando hack points.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Salió paquete de TortuBots v18, faltan paquetes Debian actualizar changelog (Aylen)&lt;br /&gt;
* Alan corrigió bug de memory leak de TortuBots, ahora no se bloquea en la XO. Está probado.&lt;br /&gt;
* PyBot (librería python para acceder a placa butiá) está casi listo, falta testear.&lt;br /&gt;
* Validación al tratar de grabar o escribir en hackpoint configurado para entrada o salida respectivamente. Hacerlo en api y agregarlo a TortuBots cuando trata de hacer una operación incorrecta. (Alan)&lt;br /&gt;
&lt;br /&gt;
====Firmware====&lt;br /&gt;
* Módulo de Firmware de hackpoint no tiene que cambiar el modo del pin (Aylen)&lt;br /&gt;
&lt;br /&gt;
== 10/12/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
&lt;br /&gt;
John, Aylen, Pablo, Gonzalo, Guillermo, Andrés, Diego, Rafael, Luis, Rodrigo, Marcelo&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:50&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Falta documentar prototipo con motores de linternas (Pancho)&lt;br /&gt;
* Piezas para anexar sensores: Pablo muestra 3 piezas, genérica de 2 lados, de 1 lado y una cortita. &lt;br /&gt;
** También se hizo pieza para reemplazar motores AX12. &lt;br /&gt;
** Se llega a un acuerdo de como tienen que ser las placas de sensores&lt;br /&gt;
* Se decide cambiar las piezas por piezas únicas para armado y reemplazo de AX12.&lt;br /&gt;
* Barandas, se van a cambiar por unas que empiezan finitas en la parte frontal y terminan gruesas en la parte trasera como guardabarros. En la parte delantera, tienen tope para aguantar una laptop.&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Motores &amp;quot;argentinos&amp;quot;  no tienen certificado de origen (motor chino, engranajes argentinos)&lt;br /&gt;
* Guille va a mandar un mail a Fede para que averigüe en Brasil por alternativas de motores CC.&lt;br /&gt;
* Rodrigo, Gonzalo, van a armar prototipo con motores de cargadores USB a dínamo.&lt;br /&gt;
&lt;br /&gt;
== 3/12/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
&lt;br /&gt;
John, Aylen, Pablo, Gonzalo, Guillermo, Francisco, Andrés, Daniel, Rafael, Alan, Luis&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Hay que definir los componentes para construir una serie de robots, de la mano de Antel (esperando h-bridge)&lt;br /&gt;
** Definir que motores de CC usar, de AP&amp;amp;S, modelo SP6-50, similar a AX12 ($80 argentinos), faltan definir los de Ignis (MR83-100, con pocas revoluciones y poco par), Pablo trae 2 de cada uno para probar.&lt;br /&gt;
* Ida a Triex sugerida por Daniel. Hay varios interesados, coordinar por mail.&lt;br /&gt;
* John, Andrés, definiendo USB4Motores, placa USB4All genérica, con H-bridge integrado.&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Motor de linterna recargable, funciona bien, Gonzalo va a comprar lintenrnas para armar un Butiá.&lt;br /&gt;
* Documentación de alternativas de motores: Daniel, Pablo y Francisco (documentar motores descartados - Daniel, motores de linternas recargables, Soportes Discos duros y contra chata. Motores a usar) Rafa va a mandar link de como crear usuario y stub de documento.&lt;br /&gt;
* Edgardo está armando el H-Bridge para controlar motores (Edgardo está armando)&lt;br /&gt;
* Se vieron acrílicos con logo&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
* Se solucionó problema en firmware (se estaba usando memoria inexistente)&lt;br /&gt;
* Andrés, Aylen, John: Trabajando en Módulo PWM por software en firmware.&lt;br /&gt;
* John - Falta módulo GPIO&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
* Guille, John - Documentar en wiki como crear sensores nuevos.&lt;br /&gt;
* Gonzalo, mirando como funciona sensor de color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Alan está escribiendo API en Python para Butia, falta contemplar varias placas USB&lt;br /&gt;
* Firmware update activity , está pronta la actividad 90%&lt;br /&gt;
* Andrés - Actualizar butialo a 2.0 (no dio el tiempo)&lt;br /&gt;
&lt;br /&gt;
====Organización====&lt;br /&gt;
* Andrés comenta sugerencias del sumo.uy&lt;br /&gt;
** Agregar agujeros para tornillos&lt;br /&gt;
** Quejas de sensor de distancia, no se puede enganchar&lt;br /&gt;
** Robot Butiá triangular - Omni&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 26/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Luis, Marcelo, Guillermo R., Pablo Margenat, Gonzalo, Rafael Sisto, Andrés Aguirre, Aylen, Enrique, Diego, Martín , John, Javier, Alan, Fiorella&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Hay que definir los componentes para construir una serie de robots&lt;br /&gt;
** Definir que motores de CC usar (Quién va a definir esto?)&lt;br /&gt;
* Ida a Triex sugerida por Daniel. Hay varios interesados, coordinar por mail.&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Comisión continua Falta probar con mosfets (esperando módulo PWM de firmware)&lt;br /&gt;
** Cambiar circuito de muestra buscando mosfets de menor amperaje (Diego)&lt;br /&gt;
* Soportes de motores&lt;br /&gt;
** Acrílico (prontos para el 29/11), demo para 3/12&lt;br /&gt;
** Pancho y Pablo: cortando chasis de disco, pensando alternativas.&lt;br /&gt;
** Transmisión, se propone probar goma en el motor y goma en la rueda, en vez de una correa.&lt;br /&gt;
* Alternativas de motores:&lt;br /&gt;
** Linternas con generadores, se pueden usar como motores (menos de $200 en supermercados), hay que escribir en la wiki&lt;br /&gt;
** Andrés, Enrique - Consultar a Eneka por motores de continua hechos en Argentina (cerca de $700), modelo MR4-100, ver si tiene suficiente torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
* Andrés, Aylen: Módulo PWM por software en firmware.&lt;br /&gt;
** (Andrés, Micho) Falta solucionar bug extraño cuando hay muchos módulos (posiblemente una asignación errónea de memoria), probar con Ida.&lt;br /&gt;
* Guille - Investigando como configurar de forma combinada pines de E/S como digitales y analógicos.(Se puede hacer)&lt;br /&gt;
** Faltan módulos GPIO y LED (Prontos, falta corregir bug).&lt;br /&gt;
* Pendiente Andrés - Liberar motores cuando se le mande orden velocidad cero.&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
&lt;br /&gt;
* Fibra óptica, se puede conseguir en Tilsit (6 metros con terminales, aprox U$ 35). Daniel va conseguir una nueva muestra actual para probar.&lt;br /&gt;
** Se consigue en el Clon por $65 una lámpara decorativa&lt;br /&gt;
** Luego de tener fibra, segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
* Sensores de efecto Hall (No se trató )&lt;br /&gt;
** Propuesta de Diego: sensor de imanes utilizando una bobina y con pin analógico.(No se trató )&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
* Alan: bloque para configurar hack points, pronto, falta configurar como entrada.&lt;br /&gt;
* Bloque LED está.&lt;br /&gt;
* Alan, falta bloque GPIO&lt;br /&gt;
* Alan está escribiendo API en Python para Butia (falta testear, branch pybot)&lt;br /&gt;
* Guille, haciendo paquete Debian (armado makefile estilo GNU)&lt;br /&gt;
* Rodrigo, el tortuga tiene un uso excesivo de CPU (hay que ver si es nuestro o de walter) cuando se usan muchos bloques. Reproducir problema. (No se habló)&lt;br /&gt;
* Firmware update activity , está pronta la actividad 90%&lt;br /&gt;
* Andrés - Actualizar butialo a 2.0&lt;br /&gt;
&lt;br /&gt;
== 19/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Guillermo R., Pablo Margenat, Rafael Sisto, Andrés Aguirre, Alan Aguiar , Rodrigo, Aylen, Gonzalo, Enrique, Diego&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
&lt;br /&gt;
* Comisión continua Falta probar con mosfets (esperando módulo PWM de firmware)&lt;br /&gt;
** Cambiar circuito de muestra buscando mosfets de menor amperaje (Diego)&lt;br /&gt;
* Soportes de motores&lt;br /&gt;
** Se hizo modelo, está pedido el acrílico (prontos para el 29/11), demo para 3/12&lt;br /&gt;
** Pancho y Pablo: cortando chasis de disco&lt;br /&gt;
* Buscar alternativas de motores:&lt;br /&gt;
** lectoras de CD, disketeras, discos duros (Diego está consiguiendo con Integra)&lt;br /&gt;
** Andrés está consultando en Eneka por motores de continua hechos en Argentina (cerca de $700), serían similares a los secadores de pelo, pero con reducción.&lt;br /&gt;
* Comision PaP - Se sigue trabajando para un prototipo, se propone controlar con circuito casero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
&lt;br /&gt;
* Guille - Investigando como configurar de forma combinada pines de E/S como digitales y analógicos.&lt;br /&gt;
* Andrés - Liberar motores cuando se le mande orden velocidad cero.&lt;br /&gt;
* Andrés, Aylen: Módulo PWM por software en firmware.&lt;br /&gt;
* Andrés: Notificar placa como dispositivo serial al PC (avanzando).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
&lt;br /&gt;
* Fibra óptica, se puede conseguir en Tilsit (6 metros con terminales, aprox U$ 35). Daniel va conseguir una nueva muestra actual para probar.&lt;br /&gt;
* Enrique - Segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
* Sensores de efecto Hall&lt;br /&gt;
** Propuesta de Diego: sensor de imanes utilizando una bobina y con pin analógico.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Alan: bloque para configurar hack points.&lt;br /&gt;
* Tortubots, tema pendiente: Generar un evento a los plugins cuando finalice la ejecución de los bloques (por ejemplo, para liberar cámara, parar motores, etc).&lt;br /&gt;
* Migración TurtleBlocks a android, falta librería GTK, trancado por ese tema&lt;br /&gt;
* Alan está escribiendo un API en python con funcionalidad similar a bobot (ventaja: no requiere lua ni dependencias de binarios adicionales, para arm no requeriría link a binarios extra, no requiere comunicación por sockets.)&lt;br /&gt;
* normalizar velocidades de 0 a 100. Se descarta porque no hay un problema concreto en que pueda beneficiar. En principio sirve para buscar la curiosidad de los alumnos.&lt;br /&gt;
* Separar paleta, ya está.&lt;br /&gt;
* Guille, haciendo paquete Debian.&lt;br /&gt;
* Rodrigo, el tortuga tiene un uso excesivo de CPU (hay que ver si es nuestro o de walter) cuando se usan muchos bloques. Reproducir problema.&lt;br /&gt;
* Guille, Aylen: Firmware update activity&lt;br /&gt;
** Actividad con un botón para actualizar (Rodrigo)&lt;br /&gt;
&lt;br /&gt;
====Documentación====&lt;br /&gt;
* Rafael: Revisar documentación de entregables a Antel&lt;br /&gt;
&lt;br /&gt;
====Resumen de Comisiones====&lt;br /&gt;
Soportes de motores: Pablo y Francisco&lt;br /&gt;
&lt;br /&gt;
motores: John, Edgardo y Enrique&lt;br /&gt;
&lt;br /&gt;
motores PaP: Andrew, Daniel&lt;br /&gt;
&lt;br /&gt;
motores continua: Gonzalo, Rodrigo,&lt;br /&gt;
&lt;br /&gt;
Firmware : Aylen, John, Andrew, Guille&lt;br /&gt;
&lt;br /&gt;
Firmware Update Activity: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
Módulo Voltaje y resistencia: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
== 12/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Guillermo Reisch, Diego, Daniel, John Pereira, Pablo Margenat, Rafael Sisto, Francisco Puignau, Andrés Aguirre, Martín Giachino, Alan Aguiar&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Comisión continua - trajo demo con motores distintos y quedó bien el seguidoor de líneas.&lt;br /&gt;
** Falta probar con mosfets&lt;br /&gt;
* Soportes de motores&lt;br /&gt;
** Falta soporte para gomitas, propuesta de hacer 2 ruedas de acrílico más chicas para sostener.&lt;br /&gt;
** Falta soporte para rueda, &lt;br /&gt;
*** Proponen utilizar el mismo plato del soporte de gomitas, eje con rulemanes&lt;br /&gt;
*** Otra alternativa, usar motor de disco duro como rulemán (módulo independiente). (Guillermo va a traer discos duros para desarmar)&lt;br /&gt;
** Buscar alternativas de motores: secador de pelo (12v), lectoras de CD, disketeras&lt;br /&gt;
* Comision PaP - utilizar motor de impresora con driver. (para lunes 19/11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
&lt;br /&gt;
* módulo firmware para bus pines digitales pronto, PWM se va a manejar por software&lt;br /&gt;
* firmware para sensor de voltaje pronto&lt;br /&gt;
* Guille - Investigando como configurar de forma combinada pines de E/S como digitales y analógicos.&lt;br /&gt;
* Andrés, Aylen: Módulo PWM por software en firmware.&lt;br /&gt;
* Andrés: Notificar placa como dispositivo serial al PC. &lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
&lt;br /&gt;
* Demo de Módulo voltaje y resistencia&lt;br /&gt;
** Algunos detalles por corregir&lt;br /&gt;
* Fibra óptica, Daniel va a conseguir una muestra para el lunes siguiente&lt;br /&gt;
* (no se habló) Enrique - Segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
* Se creó bloque de sensor de voltaje &lt;br /&gt;
* Separar paleta, normalizar velocidades de 0 a 100 (Alan)&lt;br /&gt;
* Alan, el tortuga tiene un memory Leak (hay que ver si es nuestro o de walter) cuando se usan muchos bloques&lt;br /&gt;
* Alan, quitar compatibilidad para V1&lt;br /&gt;
* Guille, Aylen: Firmware update activity - postergado para próxima reunión.&lt;br /&gt;
&lt;br /&gt;
====Resumen de Comisiones====&lt;br /&gt;
Soportes de motores: Pablo y Francisco &lt;br /&gt;
&lt;br /&gt;
motores: John, Edgardo y Enrique &lt;br /&gt;
&lt;br /&gt;
motores PaP: Andrew, Daniel&lt;br /&gt;
&lt;br /&gt;
motores continua: Gonzalo, Rodrigo, &lt;br /&gt;
&lt;br /&gt;
Firmware : Aylen, John, Andrew, Guille &lt;br /&gt;
&lt;br /&gt;
Firmware Update Activity: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
Módulo Voltaje y resistencia: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
== 05/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Gonzalo Tejera, Guillermo Reisch, Enrique Madruga, Daniel Cancela, John Pereira, Pablo Margenat, Rafael Sisto.&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
* resumen, software/hardware/mecanica etc...&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Enrique averiguó motores alza-cristales: son caros (cerca de los $ 1000)&lt;br /&gt;
* Daniel mandó mail a SEMPRE, va a relevar que tipo de motores (otra chatarra) se pueden conseguir&lt;br /&gt;
* Comisión continua - va a avanzar con el módulo de relés&lt;br /&gt;
* Comisión continua - motores de secador de pelo (12v), lectoras de CD, disketeras&lt;br /&gt;
* Comisión continua - Preguntar a &amp;quot;Lechuga&amp;quot; qué motores usaron &lt;br /&gt;
* Comision PaP - utilizar motor de impresora con driver. (para lunes 19/11)&lt;br /&gt;
* Reducciones - 2 alternativas, correas o engranajes impresos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Aylen, agregar módulo firmware para bus pines digitales y PWM (pin 17). Si puede estar para esta semana, mejor.&lt;br /&gt;
* John - Otra alternativa para manejar motores, utilizar el puerto ax12 y un pic conversor a otro tipo de motores.&lt;br /&gt;
* Aylen - falta firmware para sensor de voltaje (estaría pronto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
* sensor distancia auto chino - Enrique consultó en comercio electrónico y superan los $1000, seguir consultando alternativas.&lt;br /&gt;
* Fibra óptica, intentar utilizar fibra óptica de cotillón (adornos de colores)&lt;br /&gt;
** Daniel para el lunes se comprometió en traer un par de tramos  (quizás se consigue en SEMPRE)&lt;br /&gt;
** Enrique - Segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
* Módulo voltaje y resistencia (demo lunes 12)&lt;br /&gt;
** Se decidió utilizar jumper en vez de switch&lt;br /&gt;
** Se creó módulo en kicad&lt;br /&gt;
* Firmware update activity  (trabajando...)&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Alan, crear bloque de sensor de voltaje &lt;br /&gt;
* Alan, hablar con Andrés y Rodrigo - El tortuga tiene un memory Leak (hay que ver si es nuestro o de walter) cuando se usan muchos bloques&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Chata va a comenzar a llevar logo de Antel&lt;br /&gt;
&lt;br /&gt;
====Gestión====&lt;br /&gt;
* Intentar convertir las reuniones en talleres&lt;br /&gt;
&lt;br /&gt;
====Resumen de Comisiones====&lt;br /&gt;
motores: John, Edgardo y Enrique &lt;br /&gt;
&lt;br /&gt;
motores PaP: Andrew, Daniel&lt;br /&gt;
&lt;br /&gt;
motores continua: Gonzalo, Rodrigo, &lt;br /&gt;
&lt;br /&gt;
Firmware : Aylen, John, Andrew, Guille&lt;br /&gt;
&lt;br /&gt;
Firmware Update Activity: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
Módulo Voltaje y resistencia: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
== 29/10/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
margenat, sisto, andrew, madruga, chino, john, santiago, gonchi, pancho, aylen, rodrigo&lt;br /&gt;
&lt;br /&gt;
====Minutas====&lt;br /&gt;
* hora de comienzo: 19:25 (19:00)&lt;br /&gt;
* motores...&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
====motores====&lt;br /&gt;
* Otra discusión sobre PaP. Andrés se va a encargar de los motores PaP.&lt;br /&gt;
* Motores de alza-cristales/limpia-vidrios parece una buena idea. Se consiguen en plaza, son reciclables, tienen la reducción.&lt;br /&gt;
* Pablo propone pieza para mantener la estructura del AX-12 y mantener la estética&lt;br /&gt;
&lt;br /&gt;
====hardware====&lt;br /&gt;
* ver los pines que están sin utilizar.&lt;br /&gt;
* averiguar sensor distancia auto chino&lt;br /&gt;
* sensor enrique de fibra óptica para el butiá, sensor antena&lt;br /&gt;
&lt;br /&gt;
==== mecánica ====&lt;br /&gt;
* pablo mostró la nueva chata butiá.&lt;br /&gt;
&lt;br /&gt;
==== gestión ====&lt;br /&gt;
* se agrega a gonchi a comisión motores de continua.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 18/10/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Gonzalo, Jorge, Luis, Martin(Chino), Aylen, John, Rodrigo, Diego (Antel), Guille, Daniel Cancela(montacargas) y Pablo(Estudiante nuevo)&lt;br /&gt;
&lt;br /&gt;
====Minuta====&lt;br /&gt;
* Reunión del día 18/10/2012&lt;br /&gt;
* Hora de comienzo: 14.50&lt;br /&gt;
* Asisten: Gonzalo, Jorge, Luis, Martin(Chino), Aylen, John, Rodrigo, Diego (Antel), Guille, Daniel Cancela(montacargas) y Pablo(Estudiante nuevo)&lt;br /&gt;
* Presentación del proyecto a la gente nueva&lt;br /&gt;
* Motores&lt;br /&gt;
* Modulo voltaje, &lt;br /&gt;
* Fin reunión 17.15&lt;br /&gt;
&lt;br /&gt;
====motores====&lt;br /&gt;
* discusión por motores nuevamente&lt;br /&gt;
* Comisión motores no hizo mucho. Se presentó precio de servos 28u$s de 15kg, 16u$s de 6,8kg. Se va a seguir averiguando en otros lados.&lt;br /&gt;
* NO steppers (daniel va a averiguar algo sobre steppers)&lt;br /&gt;
* Hay que conseguir los motores de destornillador.&lt;br /&gt;
&lt;br /&gt;
====hardware====&lt;br /&gt;
* modulo voltaje y resistencia (guille, egardo, enrique)&lt;br /&gt;
* bornera o jack? (jack hace corto,[los jack machos truchos, los buenos NO HACEN CORTO {Guille}])&lt;br /&gt;
* protección? volver al diodo que no pusimos&lt;br /&gt;
* egardo y guille hoy van a encargarse del hardware&lt;br /&gt;
* conseguir conectores bosch mas chicos o cables mejores (guille) llevar el cable de ax12 original&lt;br /&gt;
&lt;br /&gt;
====software====&lt;br /&gt;
* activity cambiar id (rodrigo)&lt;br /&gt;
* ayle john chino van a agregar funcionalidades al modulo ax12 para actividad de id&lt;br /&gt;
* (chequear wiki de mtbutia que estan haciendo algo parecido)&lt;br /&gt;
* Tortuga con varios hilos (elemichele, alan el hombre tortuga, andres) quiere hacer un tortuga con varios hilos&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
* firmware modulo voltaje y resistencia listo&lt;br /&gt;
* a FUA agregar un browse para poder grabar un .hex propio&lt;br /&gt;
* agregar consultar versión y la id de placa&lt;br /&gt;
* pasaje a serial jorge&lt;br /&gt;
* discusión sobre versionado de firmware y hardware&lt;br /&gt;
* gonchi propone agregar resistencia para versionado de placa&lt;br /&gt;
* versionado del firmware&lt;br /&gt;
* john va a revisar codigo, hotplug en motores&lt;br /&gt;
* git migrar pnp a master, ya estaría pronto&lt;br /&gt;
* hackpoint (andres)&lt;br /&gt;
&lt;br /&gt;
====gestión====&lt;br /&gt;
* Diego Antel propone: taller utu-antel en la teja segunda quincena enero (john y jorge)&lt;br /&gt;
* antel pide un butia mas (hay que discutir esto)&lt;br /&gt;
* Daniel plantea tirar lineas a ute (manejando como se manejó con ANTel)&lt;br /&gt;
* comisión conseguir openmoko (gonchi jorge)&lt;br /&gt;
* openmoko??????? es probable dijo pablo sigue en camino.&lt;br /&gt;
* Chino va a compartir la documentación para antel. (NO METER MANO SIN CONSULTARLO A ÉL)&lt;br /&gt;
* Pedido por parte de edgardo, chino y enrique para cambiar la reunión&lt;br /&gt;
* Se propone reunion los LUNES 18:30&lt;br /&gt;
&lt;br /&gt;
== 11/10/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Rodrigo, John, Edgardo, Enrique, Gonzalo.&lt;br /&gt;
&lt;br /&gt;
====Minuta====&lt;br /&gt;
* Acta de la reunión realizada el 11/10/2012&lt;br /&gt;
* Motores reciclados&lt;br /&gt;
* firmware: actualizador y mejoras&lt;br /&gt;
* devolución de robots&lt;br /&gt;
&lt;br /&gt;
====hardware====&lt;br /&gt;
* Andrés opina que los servos no cumplen con lo propuesto por el proyecto butiá 2.0 ya que no se pueden reciclar.&lt;br /&gt;
* Gonzalo opina que los motores stepper no son aptos.&lt;br /&gt;
* Se decidió comenzar a investigar motores de corriente continua y servos que se consigan en uruguay.&lt;br /&gt;
* Rodri va a averiguar el costo de servos con gran torque en el mercado local y de corriente continua en casas del estilo repuestos de auto. Incluso se puede ver si la reducción de alguno de los respuestos de auto no es de utilidad.&lt;br /&gt;
* Luego se hará una prueba con motores del tipo stepper para mantener una alternativa de reciclado que es abundante en Uruguay.&lt;br /&gt;
* Por otro lado se priorizó la construcción de los módulos para leer voltaje y resistencia. Esto sería una alternativa a lo que la XO trae para leer del puerto de audio, pero independiente de la computadora. Tanto Guzmán como Enrique hoy día están haciendo muchos sensores interesantes que pueden prototiparse rápido de esta manera, además de dar continuidad al proyecto Física con XO. La idea es comenzar con una primer versión para tener algo para pasarle a Guzmán lo antes posible. La idea es que a futuro incluya protección pero si los tiempos no dan realizar la primer versión simple sin protección que de hecho es lo que tiene la XO hoy día.&lt;br /&gt;
&lt;br /&gt;
====firmware/software====&lt;br /&gt;
* aplicación cambiar el id, cambiar id de los motores (rodrigo)&lt;br /&gt;
* aplicación FUA (inc hex) rompemos compatibilidad para la v1&lt;br /&gt;
* hotplug en motores &lt;br /&gt;
* hackpoint módulo firmware&lt;br /&gt;
* pasaje a dispositivo serial (toribio compatibilidad) por defecto esta activado el control de energía de la XO definir versionado de firmware&lt;br /&gt;
&lt;br /&gt;
====mecánica:====&lt;br /&gt;
* fichas, metodos conexión, eles, rivetes, compatibilidad con mecano, mejorar la compatiblidad con lego compatibilidad con otras computadoras? Compatibilidad lego ser menos dependiente de las cruces dejar solo agujeros con separación lego y más grandes. De 4.6 mm a 5mm explorar motores continua y servo (enrique servo + edgardo) comisión de encastre (pablo, rodrigo)y sin espacio para la mano baranda cuadrada con agujeritos computadora sobre la baranda pinza: 1 o 2 motores, ver si no es muy complicado usar 1 motor.&lt;br /&gt;
* Git migrar pnp a master&lt;br /&gt;
&lt;br /&gt;
====gestión:====&lt;br /&gt;
* a fin de año tiene que devolver el robot (prestamo por un año)&lt;br /&gt;
* Se definió la comisión de motores: Rodrigo, John, Edgardo y Enrique&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Actas_Reuniones_Butia&amp;diff=4432</id>
		<title>Actas Reuniones Butia</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Actas_Reuniones_Butia&amp;diff=4432"/>
				<updated>2013-05-06T06:14:31Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* 20/03/2013 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== 03/04/13 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Faivel, Lucio, Enrique, Jorge, John, Andrés, Juan Pablo Devone, Guille, Pablo, Alan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-las reuniones se harán cada 15 días.&lt;br /&gt;
-usar 2 pines para detección. &lt;br /&gt;
-&amp;quot;desde arriba&amp;quot; es lo mismo: se llama a motors y y el módulo se encarga de&lt;br /&gt;
resolver si tiene conectado motores de continua o AX-12.&lt;br /&gt;
-el shield se detectan al comienzo -&amp;gt; no es hotplug&lt;br /&gt;
-si hay ax-12 y el shield: se utilizan los motores del shield para el&lt;br /&gt;
Butiá y los ax-12 para (en el futuro) usar un brazo u otra cosa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20/03/2013 ==&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
* Se discute la alternativa elegida la reunión anterior de conectar a los hack-points y rj45 como previo a módulo motor.&lt;br /&gt;
** Se manda mail para discutir alternativas a futuro sobre objetivos y motores de chata CC.&lt;br /&gt;
&lt;br /&gt;
== 13/03/2013 ==&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
*Control de motores CC:&lt;br /&gt;
**Módulo hardware para pwm, se descarta pwm hablado en reunión anterior (utilizando pic de usb4all), se va a hacer puente H con control binario, como paso intermedio a placa enchufada a puerto rj45. Aylen va a tener algo para mostrar jueves 14&lt;br /&gt;
&lt;br /&gt;
*Hardware para controlar motores:&lt;br /&gt;
**Opción de identificación a rj45, con shield y cable. Se enchufa H-Bridge a los hackpoints, Rodrigo y John generan un prototipo para jueves 14.&lt;br /&gt;
**Shield con autoidentificacion, idea de Guille, se puede manejar a futuro, por ejemplo para módulo Bluetooth.&lt;br /&gt;
====Software====&lt;br /&gt;
*Software para controlar motores CC&lt;br /&gt;
**Alan adapta software, si detecta módulo de motores CC, utiliza hack points para controlar motores.&lt;br /&gt;
&lt;br /&gt;
== 28/02/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
* Barandas al revés: no se cambia, el usuario debería redefinir el adelante del robot.&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
* puente h, llegaron unos micros que se pueden utilizar&lt;br /&gt;
** Se discuten alternativas: &lt;br /&gt;
** 1-implementar control de motores utilizando hack-points como primera alternativa - aylen empieza el desarrollo del firmware. &lt;br /&gt;
** Se va a diseñar un conector estandar para conectar los hack-points al módulo motores. Se discuten alternativas de como usar los pines:&lt;br /&gt;
*** a- Utilizar 2 pines por motor, utilizando transistores para puentear los estados del L293d&lt;br /&gt;
*** b- utilizar 3 pines por motor, evitando más componentes eléctricos, sacrificando hack-point&lt;br /&gt;
** 2-implementar protocolo ax-12 con un pic independiente (John estaba trabajando con esto), luego de la versión 2.0.&lt;br /&gt;
&lt;br /&gt;
== 14/02/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
&lt;br /&gt;
* se hicieron pruebas con el sensor de distancia a partir de un comportamiento extraño que encontró daniel. Lo raro es que el sensor no se comporta como debería para diferentes distancias da el mismo valor de voltaje. El resultado es que se aprovecha la mitad del rango del sensor en lugar de poder aprovechar todo. Probamos si era un tema de voltaje y alimentando con una fuente externa mediante un hub sigue dando el problema. Probamos conectarlo directamente a una fuente de corriente y medir con tester y funciona correctamente al parecer es un problema de ruido.&lt;br /&gt;
&lt;br /&gt;
* Mejorar la serigrafía de los sensores especificando el pinout de los sensores de distancia al conectarse al PCB.&lt;br /&gt;
&lt;br /&gt;
* Agregar logo butiá a los sensores.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
* Vamos a agregar a turtlebots que se deahabilite el control automático de energía para que no se suspenda el USB, tenemos lo que nos mandaron de la lista de sugar-dev. Hay que estudiar porque parece que el turtlebot ya trae un código para esto pero esta fallando, en el log se ven unos errores al intentarlo en la clase activity.&lt;br /&gt;
&lt;br /&gt;
====Otros====&lt;br /&gt;
* Se resolvió poner en la wiki mejor documentación en la parte de construcción, en particular falta poner el conector rj45 y especificar su pinout&lt;br /&gt;
* El sábado 23 es el primer taller del año en colón.&lt;br /&gt;
&lt;br /&gt;
== 7/02/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Pablo,  Andres, John, Faivel, Humberto, Guille, Enrique, Javier, Rafael, Nicolás, Edgardo, Mario, Lucio&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunión a las 18:50&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
* Se está preparando versión de acrílicos final de Butiá SAM.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Bloque nuevo de casteo para adaptar el valor del sensor a un rango conocido, y los bloques de usurio a bloques conocido. En paleta extra, agrega un bloque nuevo.&lt;br /&gt;
** Problema: que pasa cuando se levanta devuelta el archivo, despues de reiniciar el programa? Hay que probar&lt;br /&gt;
* Bloque módulo user 1,2,3&lt;br /&gt;
* Bloque python de tortuga no funciona, no almacena el código, si no referencia al archivo. Corregir (Walter?)&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
* Es complicado agregar un nuevo módulo de firmware, por más que sea parecido a los anteriores.&lt;br /&gt;
** Agregar módulo genérico, al instanciarlo por sw, pasarle parametro el rango de identificación. (Descartado por la siguiente opción)&lt;br /&gt;
** Agregar módulos de usuario en fw, que sean genéricos, permitiendo así compartir el sensor con otras placas. Mantiene estructura actual de firmware. Cuando se instancia se define si es digital o análogo. Se genera un alias al instanciar en código. Tiene metodo getValue y setValue.&lt;br /&gt;
* Puente H, se le va a poner un micro, se está trabajando&lt;br /&gt;
** Generar entrada en wiki para discutir como conectar motores (placa con cantidad variable de motores, 2 motores, etc)&lt;br /&gt;
** El h-bridge diseñado va a permitir conectar a los hack-points o al puerto.&lt;br /&gt;
** Módulo usando un pin de los puertos y 2 hack-points&lt;br /&gt;
** Módulo utilizando un puerto con 2 pines de datos.&lt;br /&gt;
* Implementar módulo de PWM&lt;br /&gt;
&lt;br /&gt;
== 31/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Pablo,  Andres, John, Faivel, Humberto, Guille, Enrique, Javier&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunión a las 18:09&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se realizo la prueba de colocar la rueda en el eje del motor con un prisionero directo a la rueda y dio muy buen resultado. De momento parece ser la mejor idea y queda muy prolijo.&lt;br /&gt;
*Se le agrego los agujeros para trasladar la placa chica de acrílico para dejar espacio para los motores de continua&lt;br /&gt;
*Se le agrega una ficha butia para ensamblar los motores al butia&lt;br /&gt;
*Parece que con esa modificación el puerto USB de la placa queda muy cerca de la rueda loca y queda tocando con el cable USB.&lt;br /&gt;
** Se discutio si se rota 180 la placa USB4butia quedando el USB hacia la otra direccion y los 4 conectores para sensores hacia la rueda, igual va a tocar con la rueda pero los cables de los sensores son mas flexibles y el conector no sobresale tanto o también lo de rotar todo el modulo que contiene placa, pilas y chasis chico de acrilico 180 o  Intercambiar la placa con las pilas. Se decidio intercambiar la placa con las pilas.&lt;br /&gt;
*Se discutió sobre simetrizar los agujeros para amurar de la placa, pero se decidió que no porque pierde compatibilidad con los butias anteriores&lt;br /&gt;
* Se probo colocarle una rueda con el sistema del prisionero al motor de DX, el sistema de la ficha no es compatible con este pues tienen diametros distintos, se quiere llegar a una ficha mas universal por lo que se discutieron varias ideas sobre eso, quedamos en que se va a seguir investigando.&lt;br /&gt;
*Se dise;o el topecito para la parte de enfre con el logo de butia&lt;br /&gt;
&lt;br /&gt;
====Firmware y Hardware====&lt;br /&gt;
*Se siguieron plantenado ideas sobre la USB4butia avanzada y lo de usar otro micro. Se va a seguir investigando&lt;br /&gt;
*Se planteo un idea de usar un circuito analogico con 3 estados para conectar los motores directamente a los puertos de la USB4butia&lt;br /&gt;
&lt;br /&gt;
== 24/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Rodrigo, Pablo, Jorge, Andres, Daniel, John, Rafael, Aylen, Fiorella, Faivel, Guille, Humberto&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunión a las 18:26&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se trajeron las piezas de formacril, se probaron las dos alternativas de barandas y se discutio. Se decidio que la mejor alternativa de barandas cortas con topes es mejor, pues muestra mas robustez frente a la de baranda larga y el laptop queda mas estable.&lt;br /&gt;
** El tope serian dos piezas universales butia, (No esta bueno que estas piezas sean de tope)&lt;br /&gt;
** Se decidio que el largo ideal de los tornillos para las piezas es de 4 x 0.7 de 20 mm.&lt;br /&gt;
*Motores: Se hizo una prueba con un prisionero y dio muy buen resultado.&lt;br /&gt;
*colocar el prisionero en la rueda directamente?&lt;br /&gt;
&lt;br /&gt;
====Firmware====&lt;br /&gt;
*Seguir investigando sobre los micros buscar uno micro que sea Economico, Mercado Local, Chico y se pueda hacer PWM.&lt;br /&gt;
*Replantearse la idea de implementar serial por sofware y la de pwm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
*Se resolvió quitar el Cristal de 32.768 que libera dos pines en la placa de los cuales uno es el PWM que se buscaba obtener&lt;br /&gt;
*El botón de bootloader permanece en la placa&lt;br /&gt;
*Colocar 2 puertos en la USB4butia compatibles con el el conector de los servos para los PWM.&lt;br /&gt;
*USB4butia simple y utilizar los hackpoints para controlar opción estable.&lt;br /&gt;
*Se hablo de hacer una placa usb4butia avanzada en dos capas y se planteo la interrogante de que es mejor: Si hacer la placa usb4butia doble capa avanzada con mas pines de datos y quizás con potencia, o mantenes la usb4butia con una capa agragando un modulo motor con otro microcontrolador.&lt;br /&gt;
*Crear una whish lista sobre la USB4butia&lt;br /&gt;
&lt;br /&gt;
== 17/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Alan, Rodrigo, Pablo, Jorge, Andres, Daniel, John, Rafael&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunion a las 18:26&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
* se habló del módulo motor y la elección del pic, parece que utilizar&lt;br /&gt;
el micro con menos prestaciones es la opción más adecuada.&lt;br /&gt;
* como colocar los motores de CC : correa/directo&lt;br /&gt;
** se decidió que ya que tenemos motores con un buen par, no tiene&lt;br /&gt;
mucho sentido tener una correa.&lt;br /&gt;
** Surge el tema de donde colocar los motores para que siga siendo&lt;br /&gt;
ax12 y CC compatible, una opción para no cambiar las distribuciones&lt;br /&gt;
actuales es colocar los motores de CC atrás y permitir cambiar de&lt;br /&gt;
lugar la rueda loca  para el lado opuesto al que está ahora. Hay que&lt;br /&gt;
tener ojo de que no obstaculice la conexión de puertos actual lo cual&lt;br /&gt;
es el problema que tiene ahora.&lt;br /&gt;
** Otro tema es como amurar la rueda a los motores, el motor que&lt;br /&gt;
compramos es de eje cilíndirco, hay otros con un perfil lo cual&lt;br /&gt;
permite que se pueda diseñar una rueda con un prisionero. Otra opción&lt;br /&gt;
es perforar el eje del motor y ponerle una espina para amurar la&lt;br /&gt;
rueda.&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
*resolver que hacer con PWM: hackpoints, puertos&lt;br /&gt;
** PWM, mantener por hackpoint y generar módulo de firmware para PWM&lt;br /&gt;
por software utilizando Timer1 (inteligente, interrumpir solo cuando&lt;br /&gt;
es necesario).&lt;br /&gt;
** Generar informe con opciones de mantener o quitar botón de programación&lt;br /&gt;
* Módulo GPIO: no es equivalente al resistencia? Aporta algo?&lt;br /&gt;
** Evaluar quitar módulo port (porque no aporta nada)&lt;br /&gt;
** Evaluar agregar módulo de GPIO, permite por lo menos avisar al&lt;br /&gt;
usuario que está realizando una acción que puede dañar el equipo.&lt;br /&gt;
* Gadgets de sensore en DX, que hacer, definir ids o usar módulo&lt;br /&gt;
lector de voltaje, en general utilizar el de voltaje&lt;br /&gt;
** Crear módulos de temperatura y magnético, para laboratorios de física.&lt;br /&gt;
* chequear si el sensor de campo mag es analogico o digi&lt;br /&gt;
&lt;br /&gt;
== 10/01/2013 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Guillermo, Alan, , Fiorella, Pablo, Jorge, Andres, Faviel,  John&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
Empieza reunion a las 18:26&lt;br /&gt;
&lt;br /&gt;
====Documentación====&lt;br /&gt;
*Sensores de resistencia y voltage (John y Guille)&lt;br /&gt;
*Sensor de flexión ya esta documentado por Enrique&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se estan haciendo los acrílicos en formacril, fecha aproximada 24&lt;br /&gt;
*Módulo motor hecho con carcasa de linterna utilizando una ficha butia, carcasa de un enchufe, arrancador de tubo y zunchos.&lt;br /&gt;
**Se discutio sobre utilizarlo con una correa o  adicionarle una rueda, se decidio adicionarle la rueda y colocar el modulo en el lugar actual de las ruedas, manteniendo la estructura de los AX12, incorporándolo al butia por fuera. (Butia PUNK)&lt;br /&gt;
*Se habló de hacer un banco de prueba de motores para obtener datos útiles como el par, rpm , etc ...&lt;br /&gt;
*Se probaron los tornillos de plástico y dan buen resultado ya que protege el acrílico, son mas fácil de enroscar, mas amigables para los niños&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
*Se discutió sobre los cambios de la USB4butia, estudiar lo de hacer una USB4butia solo para controlar motores y evaluar Modulito con microcontrolador propio para manejar motores, PIC16F628A buscar compilador GNU, buscar otro PIC de 8 patas&lt;br /&gt;
*Evaluar de quitar el clock de 37 khz y utilizar el pin 16 que es el CCP2 y asi evitar de quitar el boton de programacion&lt;br /&gt;
*Se hablo sobre sacar el boton de programacion, se decidio quitarlo y cambiar el bootloader y agregar dos puertos pwm (Si es necesario)&lt;br /&gt;
*Se discutió lo de quitar el bus AX12, se decidió que no porque permite agregar motores con control más complejo de forma fácil.&lt;br /&gt;
*Sacar los pines de programación ... ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
*Serial por software (si se va hacer el modulo motor con pic propio)&lt;br /&gt;
&lt;br /&gt;
== 03/01/2013 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Rafa, Pablo, Pancho, Jorge, John&lt;br /&gt;
&lt;br /&gt;
====Mecánica====&lt;br /&gt;
*Se dibujaron barandas nuevas con el tope , y se hicieron prototipos en goma eva para presentar en el butiá. Se presentó junto a la magallanes. Se discutió y se decidió hacer las barandas un poco más altas. Diseñar y construir 2 juegos de barandas: unas más largas con tope flotando y otras más cortas sin tope.&lt;br /&gt;
*Se mostró la nueva rueda butiá con agujero en el medio&lt;br /&gt;
*Se habló del modulo motor se agregan dos piezas de acrílico para mantener la estructura de los AX12 y no tener que hacer un butia distinto para la versión con otros motores. Hay dos opciones, una posee lengüetas como los AX12 y van en el mismo lugar con las ranuras existentes para los AX12 y la otra serían las fichas universales con el sistema de encastre butia.&lt;br /&gt;
*Estudiar agujeros para &amp;quot;ensanguchar&amp;quot; las dos planchas de acrílicos, agregar un tornillo más alineado con los que ya están con la medida de los AX12&lt;br /&gt;
*Se acomodó la ojiva del encastre butiá centrándola para que quede un poquito mas separdo de los rectángulos&lt;br /&gt;
*Se le agrega al logo la palabra SAM&lt;br /&gt;
*Ejemplo de logos para autoadhesivos&lt;br /&gt;
*Se van hacer arcilicos y autoadhesivos.&lt;br /&gt;
*Se va a probar el logo calado otra vez &lt;br /&gt;
&lt;br /&gt;
== 27/12/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Daniel, Guillermo, Alan John, Fiorella, Aylen, Rodrigo, Enrique, Rafael, Pablo&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 18:41&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Acrílico había quedado mal grabado el logo la última vez, quedó una línea entrecortada.&lt;br /&gt;
** Se va a pedir devuelta con los logos bien grabados. Pablo trae planos el 3 de enero. Al pedir los nuevos acrílicos preguntar opciones de:&lt;br /&gt;
*** Pintar logos luego de grabarlos&lt;br /&gt;
*** Mejorar calidad del grabado para que no queden manchados.&lt;br /&gt;
*** Incrementar ancho de línea para que queden mejor marcados los logos.&lt;br /&gt;
** Pablo va a mandar a hacer pegotines calados de logos para manejar otra alternativa&lt;br /&gt;
** Se discute si poner nombre 2.0 o &amp;quot;sam&amp;quot;. Mayoría eligió Sam (2 en charrúa)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Se vio prototipo con motores de cargadores USB a dínamo, utilizando hack points.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Salió paquete de TortuBots v18, faltan paquetes Debian actualizar changelog (Aylen)&lt;br /&gt;
* Alan corrigió bug de memory leak de TortuBots, ahora no se bloquea en la XO. Está probado.&lt;br /&gt;
* PyBot (librería python para acceder a placa butiá) está casi listo, falta testear.&lt;br /&gt;
* Validación al tratar de grabar o escribir en hackpoint configurado para entrada o salida respectivamente. Hacerlo en api y agregarlo a TortuBots cuando trata de hacer una operación incorrecta. (Alan)&lt;br /&gt;
&lt;br /&gt;
====Firmware====&lt;br /&gt;
* Módulo de Firmware de hackpoint no tiene que cambiar el modo del pin (Aylen)&lt;br /&gt;
&lt;br /&gt;
== 10/12/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
&lt;br /&gt;
John, Aylen, Pablo, Gonzalo, Guillermo, Andrés, Diego, Rafael, Luis, Rodrigo, Marcelo&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:50&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Falta documentar prototipo con motores de linternas (Pancho)&lt;br /&gt;
* Piezas para anexar sensores: Pablo muestra 3 piezas, genérica de 2 lados, de 1 lado y una cortita. &lt;br /&gt;
** También se hizo pieza para reemplazar motores AX12. &lt;br /&gt;
** Se llega a un acuerdo de como tienen que ser las placas de sensores&lt;br /&gt;
* Se decide cambiar las piezas por piezas únicas para armado y reemplazo de AX12.&lt;br /&gt;
* Barandas, se van a cambiar por unas que empiezan finitas en la parte frontal y terminan gruesas en la parte trasera como guardabarros. En la parte delantera, tienen tope para aguantar una laptop.&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Motores &amp;quot;argentinos&amp;quot;  no tienen certificado de origen (motor chino, engranajes argentinos)&lt;br /&gt;
* Guille va a mandar un mail a Fede para que averigüe en Brasil por alternativas de motores CC.&lt;br /&gt;
* Rodrigo, Gonzalo, van a armar prototipo con motores de cargadores USB a dínamo.&lt;br /&gt;
&lt;br /&gt;
== 3/12/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
&lt;br /&gt;
John, Aylen, Pablo, Gonzalo, Guillermo, Francisco, Andrés, Daniel, Rafael, Alan, Luis&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Hay que definir los componentes para construir una serie de robots, de la mano de Antel (esperando h-bridge)&lt;br /&gt;
** Definir que motores de CC usar, de AP&amp;amp;S, modelo SP6-50, similar a AX12 ($80 argentinos), faltan definir los de Ignis (MR83-100, con pocas revoluciones y poco par), Pablo trae 2 de cada uno para probar.&lt;br /&gt;
* Ida a Triex sugerida por Daniel. Hay varios interesados, coordinar por mail.&lt;br /&gt;
* John, Andrés, definiendo USB4Motores, placa USB4All genérica, con H-bridge integrado.&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Motor de linterna recargable, funciona bien, Gonzalo va a comprar lintenrnas para armar un Butiá.&lt;br /&gt;
* Documentación de alternativas de motores: Daniel, Pablo y Francisco (documentar motores descartados - Daniel, motores de linternas recargables, Soportes Discos duros y contra chata. Motores a usar) Rafa va a mandar link de como crear usuario y stub de documento.&lt;br /&gt;
* Edgardo está armando el H-Bridge para controlar motores (Edgardo está armando)&lt;br /&gt;
* Se vieron acrílicos con logo&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
* Se solucionó problema en firmware (se estaba usando memoria inexistente)&lt;br /&gt;
* Andrés, Aylen, John: Trabajando en Módulo PWM por software en firmware.&lt;br /&gt;
* John - Falta módulo GPIO&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
* Guille, John - Documentar en wiki como crear sensores nuevos.&lt;br /&gt;
* Gonzalo, mirando como funciona sensor de color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Alan está escribiendo API en Python para Butia, falta contemplar varias placas USB&lt;br /&gt;
* Firmware update activity , está pronta la actividad 90%&lt;br /&gt;
* Andrés - Actualizar butialo a 2.0 (no dio el tiempo)&lt;br /&gt;
&lt;br /&gt;
====Organización====&lt;br /&gt;
* Andrés comenta sugerencias del sumo.uy&lt;br /&gt;
** Agregar agujeros para tornillos&lt;br /&gt;
** Quejas de sensor de distancia, no se puede enganchar&lt;br /&gt;
** Robot Butiá triangular - Omni&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 26/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Luis, Marcelo, Guillermo R., Pablo Margenat, Gonzalo, Rafael Sisto, Andrés Aguirre, Aylen, Enrique, Diego, Martín , John, Javier, Alan, Fiorella&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Hay que definir los componentes para construir una serie de robots&lt;br /&gt;
** Definir que motores de CC usar (Quién va a definir esto?)&lt;br /&gt;
* Ida a Triex sugerida por Daniel. Hay varios interesados, coordinar por mail.&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Comisión continua Falta probar con mosfets (esperando módulo PWM de firmware)&lt;br /&gt;
** Cambiar circuito de muestra buscando mosfets de menor amperaje (Diego)&lt;br /&gt;
* Soportes de motores&lt;br /&gt;
** Acrílico (prontos para el 29/11), demo para 3/12&lt;br /&gt;
** Pancho y Pablo: cortando chasis de disco, pensando alternativas.&lt;br /&gt;
** Transmisión, se propone probar goma en el motor y goma en la rueda, en vez de una correa.&lt;br /&gt;
* Alternativas de motores:&lt;br /&gt;
** Linternas con generadores, se pueden usar como motores (menos de $200 en supermercados), hay que escribir en la wiki&lt;br /&gt;
** Andrés, Enrique - Consultar a Eneka por motores de continua hechos en Argentina (cerca de $700), modelo MR4-100, ver si tiene suficiente torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
* Andrés, Aylen: Módulo PWM por software en firmware.&lt;br /&gt;
** (Andrés, Micho) Falta solucionar bug extraño cuando hay muchos módulos (posiblemente una asignación errónea de memoria), probar con Ida.&lt;br /&gt;
* Guille - Investigando como configurar de forma combinada pines de E/S como digitales y analógicos.(Se puede hacer)&lt;br /&gt;
** Faltan módulos GPIO y LED (Prontos, falta corregir bug).&lt;br /&gt;
* Pendiente Andrés - Liberar motores cuando se le mande orden velocidad cero.&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
&lt;br /&gt;
* Fibra óptica, se puede conseguir en Tilsit (6 metros con terminales, aprox U$ 35). Daniel va conseguir una nueva muestra actual para probar.&lt;br /&gt;
** Se consigue en el Clon por $65 una lámpara decorativa&lt;br /&gt;
** Luego de tener fibra, segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
* Sensores de efecto Hall (No se trató )&lt;br /&gt;
** Propuesta de Diego: sensor de imanes utilizando una bobina y con pin analógico.(No se trató )&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
* Alan: bloque para configurar hack points, pronto, falta configurar como entrada.&lt;br /&gt;
* Bloque LED está.&lt;br /&gt;
* Alan, falta bloque GPIO&lt;br /&gt;
* Alan está escribiendo API en Python para Butia (falta testear, branch pybot)&lt;br /&gt;
* Guille, haciendo paquete Debian (armado makefile estilo GNU)&lt;br /&gt;
* Rodrigo, el tortuga tiene un uso excesivo de CPU (hay que ver si es nuestro o de walter) cuando se usan muchos bloques. Reproducir problema. (No se habló)&lt;br /&gt;
* Firmware update activity , está pronta la actividad 90%&lt;br /&gt;
* Andrés - Actualizar butialo a 2.0&lt;br /&gt;
&lt;br /&gt;
== 19/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Guillermo R., Pablo Margenat, Rafael Sisto, Andrés Aguirre, Alan Aguiar , Rodrigo, Aylen, Gonzalo, Enrique, Diego&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
&lt;br /&gt;
* Comisión continua Falta probar con mosfets (esperando módulo PWM de firmware)&lt;br /&gt;
** Cambiar circuito de muestra buscando mosfets de menor amperaje (Diego)&lt;br /&gt;
* Soportes de motores&lt;br /&gt;
** Se hizo modelo, está pedido el acrílico (prontos para el 29/11), demo para 3/12&lt;br /&gt;
** Pancho y Pablo: cortando chasis de disco&lt;br /&gt;
* Buscar alternativas de motores:&lt;br /&gt;
** lectoras de CD, disketeras, discos duros (Diego está consiguiendo con Integra)&lt;br /&gt;
** Andrés está consultando en Eneka por motores de continua hechos en Argentina (cerca de $700), serían similares a los secadores de pelo, pero con reducción.&lt;br /&gt;
* Comision PaP - Se sigue trabajando para un prototipo, se propone controlar con circuito casero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
&lt;br /&gt;
* Guille - Investigando como configurar de forma combinada pines de E/S como digitales y analógicos.&lt;br /&gt;
* Andrés - Liberar motores cuando se le mande orden velocidad cero.&lt;br /&gt;
* Andrés, Aylen: Módulo PWM por software en firmware.&lt;br /&gt;
* Andrés: Notificar placa como dispositivo serial al PC (avanzando).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
&lt;br /&gt;
* Fibra óptica, se puede conseguir en Tilsit (6 metros con terminales, aprox U$ 35). Daniel va conseguir una nueva muestra actual para probar.&lt;br /&gt;
* Enrique - Segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
* Sensores de efecto Hall&lt;br /&gt;
** Propuesta de Diego: sensor de imanes utilizando una bobina y con pin analógico.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Alan: bloque para configurar hack points.&lt;br /&gt;
* Tortubots, tema pendiente: Generar un evento a los plugins cuando finalice la ejecución de los bloques (por ejemplo, para liberar cámara, parar motores, etc).&lt;br /&gt;
* Migración TurtleBlocks a android, falta librería GTK, trancado por ese tema&lt;br /&gt;
* Alan está escribiendo un API en python con funcionalidad similar a bobot (ventaja: no requiere lua ni dependencias de binarios adicionales, para arm no requeriría link a binarios extra, no requiere comunicación por sockets.)&lt;br /&gt;
* normalizar velocidades de 0 a 100. Se descarta porque no hay un problema concreto en que pueda beneficiar. En principio sirve para buscar la curiosidad de los alumnos.&lt;br /&gt;
* Separar paleta, ya está.&lt;br /&gt;
* Guille, haciendo paquete Debian.&lt;br /&gt;
* Rodrigo, el tortuga tiene un uso excesivo de CPU (hay que ver si es nuestro o de walter) cuando se usan muchos bloques. Reproducir problema.&lt;br /&gt;
* Guille, Aylen: Firmware update activity&lt;br /&gt;
** Actividad con un botón para actualizar (Rodrigo)&lt;br /&gt;
&lt;br /&gt;
====Documentación====&lt;br /&gt;
* Rafael: Revisar documentación de entregables a Antel&lt;br /&gt;
&lt;br /&gt;
====Resumen de Comisiones====&lt;br /&gt;
Soportes de motores: Pablo y Francisco&lt;br /&gt;
&lt;br /&gt;
motores: John, Edgardo y Enrique&lt;br /&gt;
&lt;br /&gt;
motores PaP: Andrew, Daniel&lt;br /&gt;
&lt;br /&gt;
motores continua: Gonzalo, Rodrigo,&lt;br /&gt;
&lt;br /&gt;
Firmware : Aylen, John, Andrew, Guille&lt;br /&gt;
&lt;br /&gt;
Firmware Update Activity: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
Módulo Voltaje y resistencia: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
== 12/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Guillermo Reisch, Diego, Daniel, John Pereira, Pablo Margenat, Rafael Sisto, Francisco Puignau, Andrés Aguirre, Martín Giachino, Alan Aguiar&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Comisión continua - trajo demo con motores distintos y quedó bien el seguidoor de líneas.&lt;br /&gt;
** Falta probar con mosfets&lt;br /&gt;
* Soportes de motores&lt;br /&gt;
** Falta soporte para gomitas, propuesta de hacer 2 ruedas de acrílico más chicas para sostener.&lt;br /&gt;
** Falta soporte para rueda, &lt;br /&gt;
*** Proponen utilizar el mismo plato del soporte de gomitas, eje con rulemanes&lt;br /&gt;
*** Otra alternativa, usar motor de disco duro como rulemán (módulo independiente). (Guillermo va a traer discos duros para desarmar)&lt;br /&gt;
** Buscar alternativas de motores: secador de pelo (12v), lectoras de CD, disketeras&lt;br /&gt;
* Comision PaP - utilizar motor de impresora con driver. (para lunes 19/11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
&lt;br /&gt;
* módulo firmware para bus pines digitales pronto, PWM se va a manejar por software&lt;br /&gt;
* firmware para sensor de voltaje pronto&lt;br /&gt;
* Guille - Investigando como configurar de forma combinada pines de E/S como digitales y analógicos.&lt;br /&gt;
* Andrés, Aylen: Módulo PWM por software en firmware.&lt;br /&gt;
* Andrés: Notificar placa como dispositivo serial al PC. &lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
&lt;br /&gt;
* Demo de Módulo voltaje y resistencia&lt;br /&gt;
** Algunos detalles por corregir&lt;br /&gt;
* Fibra óptica, Daniel va a conseguir una muestra para el lunes siguiente&lt;br /&gt;
* (no se habló) Enrique - Segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
* Se creó bloque de sensor de voltaje &lt;br /&gt;
* Separar paleta, normalizar velocidades de 0 a 100 (Alan)&lt;br /&gt;
* Alan, el tortuga tiene un memory Leak (hay que ver si es nuestro o de walter) cuando se usan muchos bloques&lt;br /&gt;
* Alan, quitar compatibilidad para V1&lt;br /&gt;
* Guille, Aylen: Firmware update activity - postergado para próxima reunión.&lt;br /&gt;
&lt;br /&gt;
====Resumen de Comisiones====&lt;br /&gt;
Soportes de motores: Pablo y Francisco &lt;br /&gt;
&lt;br /&gt;
motores: John, Edgardo y Enrique &lt;br /&gt;
&lt;br /&gt;
motores PaP: Andrew, Daniel&lt;br /&gt;
&lt;br /&gt;
motores continua: Gonzalo, Rodrigo, &lt;br /&gt;
&lt;br /&gt;
Firmware : Aylen, John, Andrew, Guille &lt;br /&gt;
&lt;br /&gt;
Firmware Update Activity: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
Módulo Voltaje y resistencia: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
== 05/11/2012 ==&lt;br /&gt;
====Participantes====&lt;br /&gt;
Gonzalo Tejera, Guillermo Reisch, Enrique Madruga, Daniel Cancela, John Pereira, Pablo Margenat, Rafael Sisto.&lt;br /&gt;
&lt;br /&gt;
====minutas====&lt;br /&gt;
* Empieza reunion a las 19:30&lt;br /&gt;
* resumen, software/hardware/mecanica etc...&lt;br /&gt;
&lt;br /&gt;
====Motores====&lt;br /&gt;
* Enrique averiguó motores alza-cristales: son caros (cerca de los $ 1000)&lt;br /&gt;
* Daniel mandó mail a SEMPRE, va a relevar que tipo de motores (otra chatarra) se pueden conseguir&lt;br /&gt;
* Comisión continua - va a avanzar con el módulo de relés&lt;br /&gt;
* Comisión continua - motores de secador de pelo (12v), lectoras de CD, disketeras&lt;br /&gt;
* Comisión continua - Preguntar a &amp;quot;Lechuga&amp;quot; qué motores usaron &lt;br /&gt;
* Comision PaP - utilizar motor de impresora con driver. (para lunes 19/11)&lt;br /&gt;
* Reducciones - 2 alternativas, correas o engranajes impresos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Aylen, agregar módulo firmware para bus pines digitales y PWM (pin 17). Si puede estar para esta semana, mejor.&lt;br /&gt;
* John - Otra alternativa para manejar motores, utilizar el puerto ax12 y un pic conversor a otro tipo de motores.&lt;br /&gt;
* Aylen - falta firmware para sensor de voltaje (estaría pronto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Sensores====&lt;br /&gt;
* sensor distancia auto chino - Enrique consultó en comercio electrónico y superan los $1000, seguir consultando alternativas.&lt;br /&gt;
* Fibra óptica, intentar utilizar fibra óptica de cotillón (adornos de colores)&lt;br /&gt;
** Daniel para el lunes se comprometió en traer un par de tramos  (quizás se consigue en SEMPRE)&lt;br /&gt;
** Enrique - Segunda versión de sensor: emisor y receptor en mismo lado (fibra formando un círculo), posiblemente utilizando sensor de grises&lt;br /&gt;
* Módulo voltaje y resistencia (demo lunes 12)&lt;br /&gt;
** Se decidió utilizar jumper en vez de switch&lt;br /&gt;
** Se creó módulo en kicad&lt;br /&gt;
* Firmware update activity  (trabajando...)&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
* Alan, crear bloque de sensor de voltaje &lt;br /&gt;
* Alan, hablar con Andrés y Rodrigo - El tortuga tiene un memory Leak (hay que ver si es nuestro o de walter) cuando se usan muchos bloques&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
* Chata va a comenzar a llevar logo de Antel&lt;br /&gt;
&lt;br /&gt;
====Gestión====&lt;br /&gt;
* Intentar convertir las reuniones en talleres&lt;br /&gt;
&lt;br /&gt;
====Resumen de Comisiones====&lt;br /&gt;
motores: John, Edgardo y Enrique &lt;br /&gt;
&lt;br /&gt;
motores PaP: Andrew, Daniel&lt;br /&gt;
&lt;br /&gt;
motores continua: Gonzalo, Rodrigo, &lt;br /&gt;
&lt;br /&gt;
Firmware : Aylen, John, Andrew, Guille&lt;br /&gt;
&lt;br /&gt;
Firmware Update Activity: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
Módulo Voltaje y resistencia: Guille, Aylen&lt;br /&gt;
&lt;br /&gt;
== 29/10/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
margenat, sisto, andrew, madruga, chino, john, santiago, gonchi, pancho, aylen, rodrigo&lt;br /&gt;
&lt;br /&gt;
====Minutas====&lt;br /&gt;
* hora de comienzo: 19:25 (19:00)&lt;br /&gt;
* motores...&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
====motores====&lt;br /&gt;
* Otra discusión sobre PaP. Andrés se va a encargar de los motores PaP.&lt;br /&gt;
* Motores de alza-cristales/limpia-vidrios parece una buena idea. Se consiguen en plaza, son reciclables, tienen la reducción.&lt;br /&gt;
* Pablo propone pieza para mantener la estructura del AX-12 y mantener la estética&lt;br /&gt;
&lt;br /&gt;
====hardware====&lt;br /&gt;
* ver los pines que están sin utilizar.&lt;br /&gt;
* averiguar sensor distancia auto chino&lt;br /&gt;
* sensor enrique de fibra óptica para el butiá, sensor antena&lt;br /&gt;
&lt;br /&gt;
==== mecánica ====&lt;br /&gt;
* pablo mostró la nueva chata butiá.&lt;br /&gt;
&lt;br /&gt;
==== gestión ====&lt;br /&gt;
* se agrega a gonchi a comisión motores de continua.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 18/10/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Gonzalo, Jorge, Luis, Martin(Chino), Aylen, John, Rodrigo, Diego (Antel), Guille, Daniel Cancela(montacargas) y Pablo(Estudiante nuevo)&lt;br /&gt;
&lt;br /&gt;
====Minuta====&lt;br /&gt;
* Reunión del día 18/10/2012&lt;br /&gt;
* Hora de comienzo: 14.50&lt;br /&gt;
* Asisten: Gonzalo, Jorge, Luis, Martin(Chino), Aylen, John, Rodrigo, Diego (Antel), Guille, Daniel Cancela(montacargas) y Pablo(Estudiante nuevo)&lt;br /&gt;
* Presentación del proyecto a la gente nueva&lt;br /&gt;
* Motores&lt;br /&gt;
* Modulo voltaje, &lt;br /&gt;
* Fin reunión 17.15&lt;br /&gt;
&lt;br /&gt;
====motores====&lt;br /&gt;
* discusión por motores nuevamente&lt;br /&gt;
* Comisión motores no hizo mucho. Se presentó precio de servos 28u$s de 15kg, 16u$s de 6,8kg. Se va a seguir averiguando en otros lados.&lt;br /&gt;
* NO steppers (daniel va a averiguar algo sobre steppers)&lt;br /&gt;
* Hay que conseguir los motores de destornillador.&lt;br /&gt;
&lt;br /&gt;
====hardware====&lt;br /&gt;
* modulo voltaje y resistencia (guille, egardo, enrique)&lt;br /&gt;
* bornera o jack? (jack hace corto,[los jack machos truchos, los buenos NO HACEN CORTO {Guille}])&lt;br /&gt;
* protección? volver al diodo que no pusimos&lt;br /&gt;
* egardo y guille hoy van a encargarse del hardware&lt;br /&gt;
* conseguir conectores bosch mas chicos o cables mejores (guille) llevar el cable de ax12 original&lt;br /&gt;
&lt;br /&gt;
====software====&lt;br /&gt;
* activity cambiar id (rodrigo)&lt;br /&gt;
* ayle john chino van a agregar funcionalidades al modulo ax12 para actividad de id&lt;br /&gt;
* (chequear wiki de mtbutia que estan haciendo algo parecido)&lt;br /&gt;
* Tortuga con varios hilos (elemichele, alan el hombre tortuga, andres) quiere hacer un tortuga con varios hilos&lt;br /&gt;
&lt;br /&gt;
====firmware====&lt;br /&gt;
* firmware modulo voltaje y resistencia listo&lt;br /&gt;
* a FUA agregar un browse para poder grabar un .hex propio&lt;br /&gt;
* agregar consultar versión y la id de placa&lt;br /&gt;
* pasaje a serial jorge&lt;br /&gt;
* discusión sobre versionado de firmware y hardware&lt;br /&gt;
* gonchi propone agregar resistencia para versionado de placa&lt;br /&gt;
* versionado del firmware&lt;br /&gt;
* john va a revisar codigo, hotplug en motores&lt;br /&gt;
* git migrar pnp a master, ya estaría pronto&lt;br /&gt;
* hackpoint (andres)&lt;br /&gt;
&lt;br /&gt;
====gestión====&lt;br /&gt;
* Diego Antel propone: taller utu-antel en la teja segunda quincena enero (john y jorge)&lt;br /&gt;
* antel pide un butia mas (hay que discutir esto)&lt;br /&gt;
* Daniel plantea tirar lineas a ute (manejando como se manejó con ANTel)&lt;br /&gt;
* comisión conseguir openmoko (gonchi jorge)&lt;br /&gt;
* openmoko??????? es probable dijo pablo sigue en camino.&lt;br /&gt;
* Chino va a compartir la documentación para antel. (NO METER MANO SIN CONSULTARLO A ÉL)&lt;br /&gt;
* Pedido por parte de edgardo, chino y enrique para cambiar la reunión&lt;br /&gt;
* Se propone reunion los LUNES 18:30&lt;br /&gt;
&lt;br /&gt;
== 11/10/2012 ==&lt;br /&gt;
&lt;br /&gt;
====Participantes====&lt;br /&gt;
Rodrigo, John, Edgardo, Enrique, Gonzalo.&lt;br /&gt;
&lt;br /&gt;
====Minuta====&lt;br /&gt;
* Acta de la reunión realizada el 11/10/2012&lt;br /&gt;
* Motores reciclados&lt;br /&gt;
* firmware: actualizador y mejoras&lt;br /&gt;
* devolución de robots&lt;br /&gt;
&lt;br /&gt;
====hardware====&lt;br /&gt;
* Andrés opina que los servos no cumplen con lo propuesto por el proyecto butiá 2.0 ya que no se pueden reciclar.&lt;br /&gt;
* Gonzalo opina que los motores stepper no son aptos.&lt;br /&gt;
* Se decidió comenzar a investigar motores de corriente continua y servos que se consigan en uruguay.&lt;br /&gt;
* Rodri va a averiguar el costo de servos con gran torque en el mercado local y de corriente continua en casas del estilo repuestos de auto. Incluso se puede ver si la reducción de alguno de los respuestos de auto no es de utilidad.&lt;br /&gt;
* Luego se hará una prueba con motores del tipo stepper para mantener una alternativa de reciclado que es abundante en Uruguay.&lt;br /&gt;
* Por otro lado se priorizó la construcción de los módulos para leer voltaje y resistencia. Esto sería una alternativa a lo que la XO trae para leer del puerto de audio, pero independiente de la computadora. Tanto Guzmán como Enrique hoy día están haciendo muchos sensores interesantes que pueden prototiparse rápido de esta manera, además de dar continuidad al proyecto Física con XO. La idea es comenzar con una primer versión para tener algo para pasarle a Guzmán lo antes posible. La idea es que a futuro incluya protección pero si los tiempos no dan realizar la primer versión simple sin protección que de hecho es lo que tiene la XO hoy día.&lt;br /&gt;
&lt;br /&gt;
====firmware/software====&lt;br /&gt;
* aplicación cambiar el id, cambiar id de los motores (rodrigo)&lt;br /&gt;
* aplicación FUA (inc hex) rompemos compatibilidad para la v1&lt;br /&gt;
* hotplug en motores &lt;br /&gt;
* hackpoint módulo firmware&lt;br /&gt;
* pasaje a dispositivo serial (toribio compatibilidad) por defecto esta activado el control de energía de la XO definir versionado de firmware&lt;br /&gt;
&lt;br /&gt;
====mecánica:====&lt;br /&gt;
* fichas, metodos conexión, eles, rivetes, compatibilidad con mecano, mejorar la compatiblidad con lego compatibilidad con otras computadoras? Compatibilidad lego ser menos dependiente de las cruces dejar solo agujeros con separación lego y más grandes. De 4.6 mm a 5mm explorar motores continua y servo (enrique servo + edgardo) comisión de encastre (pablo, rodrigo)y sin espacio para la mano baranda cuadrada con agujeritos computadora sobre la baranda pinza: 1 o 2 motores, ver si no es muy complicado usar 1 motor.&lt;br /&gt;
* Git migrar pnp a master&lt;br /&gt;
&lt;br /&gt;
====gestión:====&lt;br /&gt;
* a fin de año tiene que devolver el robot (prestamo por un año)&lt;br /&gt;
* Se definió la comisión de motores: Rodrigo, John, Edgardo y Enrique&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4422</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4422"/>
				<updated>2013-04-30T01:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Diseño */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
==Diseño==&lt;br /&gt;
Pybot consta de distintos módulos que se encargan de una parte específca:&lt;br /&gt;
&lt;br /&gt;
 baseboard.py        funciones inerentes a la placa USB4Butia&lt;br /&gt;
 com_usb.py          implementa la comunicación usb&lt;br /&gt;
 device.py              abstracción de un dispositivo (botón, motores) conectado a la placa&lt;br /&gt;
 drivers/&lt;br /&gt;
     hotplug/             drivers de módulos abiertos automáticamente por la placa&lt;br /&gt;
         button.py       driver del sensor botón&lt;br /&gt;
         light.py          driver del sensor de luz&lt;br /&gt;
         -----&lt;br /&gt;
     motores.py      driver del módulo de motores&lt;br /&gt;
     butia.py        driver del módulo butiá&lt;br /&gt;
     -----&lt;br /&gt;
 functions.py        funciones comunes entre el cliente y la usb4butia&lt;br /&gt;
 pybot_client.py     aplicación cliente&lt;br /&gt;
 pybot_server.py     aplicación servidor&lt;br /&gt;
 usb/                librería PyUsb&lt;br /&gt;
 usb4butia.py        módulo principal (core) que implementa las funciones&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en pybot_client.&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4421</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4421"/>
				<updated>2013-04-30T01:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
==Diseño==&lt;br /&gt;
Pybot consta de distintos módulos que se encargan de una parte específca:&lt;br /&gt;
&lt;br /&gt;
baseboard.py        funciones inerentes a la placa USB4Butia&lt;br /&gt;
com_usb.py          implementa la comunicación usb&lt;br /&gt;
device.py              abstracción de un dispositivo (botón, motores) conectado a la placa&lt;br /&gt;
drivers/&lt;br /&gt;
    hotplug/             drivers de módulos abiertos automáticamente por la placa&lt;br /&gt;
        button.py       driver del sensor botón&lt;br /&gt;
        light.py          driver del sensor de luz&lt;br /&gt;
        ...&lt;br /&gt;
    motores.py        driver del módulo de motores&lt;br /&gt;
    butia.py             driver del módulo butiá&lt;br /&gt;
    ...&lt;br /&gt;
functions.py          funciones comunes entre el cliente y la usb4butia&lt;br /&gt;
pybot_client.py     aplicación cliente&lt;br /&gt;
pybot_server.py   aplicación servidor&lt;br /&gt;
usb/                       librería PyUsb&lt;br /&gt;
usb4butia.py         módulo principal (core) que implementa las funciones&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en pybot_client.&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Software&amp;diff=4403</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Software&amp;diff=4403"/>
				<updated>2013-04-08T14:19:30Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TortuBots]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Butialo]] (Lua)&amp;lt;br&amp;gt;&lt;br /&gt;
[[PyBot]] (Python)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Python]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Software&amp;diff=4402</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Software&amp;diff=4402"/>
				<updated>2013-04-08T14:10:41Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: Página creada con 'TortuBots&amp;lt;br&amp;gt; Butialo (Lua)&amp;lt;br&amp;gt; PyBot (Python) Python&amp;lt;br&amp;gt;'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TortuBots]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Butialo]] (Lua)&amp;lt;br&amp;gt;&lt;br /&gt;
[[PyBot]] (Python)&lt;br /&gt;
[[Python]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Python&amp;diff=4401</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Python&amp;diff=4401"/>
				<updated>2013-04-08T13:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta disponible para programar el comportamiento del robot butiá una API en el lenguaje de programación Python. &amp;lt;br&amp;gt;&lt;br /&gt;
También puede accederse en ésta sección a diferentes ejemplos de su uso.&lt;br /&gt;
 &lt;br /&gt;
* [[API|API Butiá en Python]]&lt;br /&gt;
* [[PyBot|Nueva API en Python]]&lt;br /&gt;
* [[ejemplos|Ejemplos en python usando la API Python]]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4400</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4400"/>
				<updated>2013-04-08T03:27:07Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
También es posible utilizando [[PyBot]].&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&amp;lt;br&amp;gt;&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pyBot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente pybot_client.py.&lt;br /&gt;
&lt;br /&gt;
==Uso de la API en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==Importando la API==&lt;br /&gt;
&lt;br /&gt;
Para importar el cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot import pybot_client&lt;br /&gt;
&lt;br /&gt;
No es necesario importar &amp;quot;pybot&amp;quot; ya que solo vamos a utilizar el cliente.&lt;br /&gt;
&lt;br /&gt;
Para ver las todas las funciones entrar a: [[PyBot]].&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4399</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4399"/>
				<updated>2013-04-08T03:11:53Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Antes de empezar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&amp;lt;br&amp;gt;&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pybot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente pybot_client.py.&lt;br /&gt;
&lt;br /&gt;
==Uso de la API en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==Importando la API==&lt;br /&gt;
&lt;br /&gt;
Para importar el cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot import pybot_client&lt;br /&gt;
&lt;br /&gt;
No es necesario importar &amp;quot;pybot&amp;quot; ya que solo vamos a utilizar el cliente.&lt;br /&gt;
&lt;br /&gt;
==Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4398</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4398"/>
				<updated>2013-04-08T03:09:39Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Usando Pybot localmente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en pybot_client.&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4397</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4397"/>
				<updated>2013-04-08T03:03:58Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4396</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4396"/>
				<updated>2013-04-08T02:51:51Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Funciones USB4Butiá - Pybot Client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en [[Pybot_client | Pybot client]].&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4395</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4395"/>
				<updated>2013-04-08T02:37:23Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Usando Pybot localmente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Si no estamos en la carpeta donde está la librería PyBot podemos usar este truco para poder importar Pybot sin problemas desde cualquier lado:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Esa es la ruta por defecto cuando el .XO se instala en Sugar, puede variar en otras computadoras. El paquete .deb instala TurtleBots en '/usr/share/sugar/activities' por lo que la ruta debe ser:&lt;br /&gt;
&lt;br /&gt;
    sys.path.insert(0, '/usr/share/sugar/activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en [[Pybot_client | Pybot client]].&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4394</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4394"/>
				<updated>2013-04-08T02:33:14Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* butiaAPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&amp;lt;br&amp;gt;&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pybot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente [[PyBot_client]].&lt;br /&gt;
&lt;br /&gt;
==Uso de la API en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==Importando la API==&lt;br /&gt;
&lt;br /&gt;
Para importar el cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot import pybot_client&lt;br /&gt;
&lt;br /&gt;
No es necesario importar &amp;quot;pybot&amp;quot; ya que solo vamos a utilizar el cliente.&lt;br /&gt;
&lt;br /&gt;
==Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot_client&amp;diff=4393</id>
		<title>PyBot client</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot_client&amp;diff=4393"/>
				<updated>2013-04-08T02:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: Página blanqueada&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4392</id>
		<title>PyBot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot&amp;diff=4392"/>
				<updated>2013-04-08T02:26:34Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: Página creada con 'Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.  ==Usand...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de pybot server o utilizando directamente la biblioteca usb4butia.&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot localmente==&lt;br /&gt;
&lt;br /&gt;
Cuando se va a ejecutar Pybot y quién lo usa en la misma máquina, no es recomendable tener una arquitectura cliente-servidor. Para ese caso se dispone de una alternativa: usar directamente el módulo usb4butia dentro de Pybot.&lt;br /&gt;
&lt;br /&gt;
Importando el módulo:&lt;br /&gt;
&lt;br /&gt;
    from pybot import usb4butia&lt;br /&gt;
&lt;br /&gt;
Instanciando la clase:&lt;br /&gt;
&lt;br /&gt;
    robot = usb4butia.USB4Butia()&lt;br /&gt;
&lt;br /&gt;
A partir de este momento tenemos las mismas llamadas que en [[Pybot_client | Pybot client]].&lt;br /&gt;
Por ejemplo, para obtener la versión del Firmware:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
El módulo USB4Butia nos provee algunas propiedades &amp;quot;privadas&amp;quot; que pueden resultar útiles:&lt;br /&gt;
&lt;br /&gt;
   robot._bb                               # Lista de placas detectadas&lt;br /&gt;
   robot._drivers_loaded                   # Diccionario de drivers&lt;br /&gt;
   robot._debug                            # Bandera de debug, por defecto es False&lt;br /&gt;
   robot._get_all_drivers()                # Función para cargar los drivers&lt;br /&gt;
   robot._get_driver()                     # Función para obtener un driver específico&lt;br /&gt;
   robot._hotplug                          # Lista de módulos hotplug&lt;br /&gt;
   robot._modules                          # Lista de módulos&lt;br /&gt;
   robot._openables                        # Lista de módoulos &amp;quot;openables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Usando Pybot server==&lt;br /&gt;
&lt;br /&gt;
Levantamos el servidor desde una consola (debemos estar dentro de la carpeta pybot):&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
En este caso con la bandera de DEBUG para ver la salida del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Luego nos encargamos del cliente:&lt;br /&gt;
&lt;br /&gt;
    from pybot impoty pybot_client&lt;br /&gt;
&lt;br /&gt;
Instanciamos el cliente:&lt;br /&gt;
&lt;br /&gt;
    robot = pybot_client.robot()&lt;br /&gt;
&lt;br /&gt;
A partir de ahora tenemos las mismas funciones que en la versión local, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
    version = robot.getFirmwareVersion()&lt;br /&gt;
&lt;br /&gt;
==Funciones USB4Butiá - Pybot Client==&lt;br /&gt;
&lt;br /&gt;
Funciones útiles:&lt;br /&gt;
   robot.close()                            # cierra todas las placas instanciadas&lt;br /&gt;
   robot.find_butias()                      # busca placas conectadas y las instancia&lt;br /&gt;
   robot.getBatteryCharge()                 # devuelve el nivel de carga de la batería (si no hay motores-&amp;gt; -1)&lt;br /&gt;
   robot.getFirmwareVersion()               # devuelve la versión del firmware dentro del PIC&lt;br /&gt;
   robot.getVersion()                       # devuelve la versión del módulo butiá (arduino: 20, usb4butia:22)&lt;br /&gt;
   robot.getButiaCount()                    # devuelve la cantidad de placas conectadas&lt;br /&gt;
   robot.getModulesList()                   # devuelve la lista de dispositivos conectados (en todas las placas)&lt;br /&gt;
   robot.isPresent(device)                  # chequea si un dispositivo en particular está conectado&lt;br /&gt;
   robot.loopBack(data)                     # envía una string 'data' a la placa y devuelve lo mismo&lt;br /&gt;
   robot.reconnect()                        # no hace nada en usb4butia / en el cliente hace un reconnect del socket&lt;br /&gt;
   robot.refresh()                          # actualiza la lista de placas conectadas&lt;br /&gt;
   robot.callModule(modulename, board_number, number, function, params)  #llamada a un módulo&lt;br /&gt;
&lt;br /&gt;
Sensores&lt;br /&gt;
   robot.getButton(port)                    # obtiene el valor del sensor botón conectado en el puerto port&lt;br /&gt;
   robot.getDistance(port)                  # obtiene el valor del sensor de distancia conectado en el puerto port&lt;br /&gt;
   robot.getGray(port)                      # obtiene el valor del sensor de grises conectado en el puerto port&lt;br /&gt;
   robot.getLight(port)                     # obtiene el valor del sensor de luz conectado en el puerto port&lt;br /&gt;
   robot.getResistance(port)                # obtiene el valor del sensor de resistencia conectado en el puerto port&lt;br /&gt;
   robot.getTemperature(port)               # obtiene el valor del sensor temperatura conectado en el puerto port&lt;br /&gt;
   robot.getVoltage(port)                   # obtiene el valor del sensor volyaje conectado en el puerto port&lt;br /&gt;
   robot.setLed(port, on)                   # si on es 1, prende el LED, si es 0, apaga el LED conectado en el puerto port&lt;br /&gt;
&lt;br /&gt;
Hack pins&lt;br /&gt;
   robot.modeHack(pin, mode)                # establece el modo del pin: si mode es 0 es entrada y 1 salida&lt;br /&gt;
   robot.setHack(pin, value)                # establece el valor del pin: pin en GND si es 0 y en +5v si es 1&lt;br /&gt;
   robot.getHack(pin)                       # lee el valor del pin: pin&lt;br /&gt;
&lt;br /&gt;
Motores&lt;br /&gt;
   robot.set2MotorSpeed(leftSense, leftSpeed, rightSense, rightSpeed)   #sense is 0 or 1, speed is between 0 and 1023&lt;br /&gt;
   robot.setMotorSpeed(idMotor, sense, speed)                           #idMotor 0 for left motor, 1 for right&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4391</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4391"/>
				<updated>2013-04-08T00:14:24Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Uso de la butiaAPI en Pippy y Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&amp;lt;br&amp;gt;&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pybot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente [[PyBot_client]].&lt;br /&gt;
&lt;br /&gt;
==Uso de la API en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4390</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4390"/>
				<updated>2013-04-08T00:08:06Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura parcial del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4389</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4389"/>
				<updated>2013-04-08T00:05:53Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises, el cuál tiene dos funciones: getVersion y getValue&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función &amp;quot;setMode&amp;quot; recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4388</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4388"/>
				<updated>2013-04-08T00:02:44Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;br /&gt;
&lt;br /&gt;
Como se puede observar, la función setMode recibe como primer argumento el &amp;quot;dev&amp;quot; y luego el resto de los parámetros: el número de &amp;quot;pin&amp;quot; y el &amp;quot;value&amp;quot; que es el modo.&lt;br /&gt;
Se guarda en &amp;quot;msg&amp;quot; la lista con el &amp;quot;código de operación&amp;quot; SET_MODE y se le agregan los otros parámetros.&lt;br /&gt;
&lt;br /&gt;
    msg = [SET_MODE, pin, value]&lt;br /&gt;
&lt;br /&gt;
Esto se le envía al módulo con la función &amp;quot;send&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    dev.send(msg)&lt;br /&gt;
&lt;br /&gt;
Luego se leen 2 bytes: el primero, como en todas las funciones es el mismo &amp;quot;código de operación&amp;quot; que fue enviado y el segundo&lt;br /&gt;
es en este caso, el código de error (si es -1, hubo un error).&lt;br /&gt;
&lt;br /&gt;
    raw = dev.read(2)&lt;br /&gt;
&lt;br /&gt;
Y solo se retorna el segundo byte que es el el importante:&lt;br /&gt;
&lt;br /&gt;
    return raw[1]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Pybot_driver_hackp_setmode.png&amp;diff=4387</id>
		<title>Archivo:Pybot driver hackp setmode.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Pybot_driver_hackp_setmode.png&amp;diff=4387"/>
				<updated>2013-04-07T23:54:27Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4386</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4386"/>
				<updated>2013-04-07T23:53:43Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;br /&gt;
&lt;br /&gt;
Esta es una captura del código del driver de los hack points (hackp):&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_hackp_setmode.png|Captura parcial del código del driver de hackp]]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Pybot_driver_grey.png&amp;diff=4385</id>
		<title>Archivo:Pybot driver grey.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Pybot_driver_grey.png&amp;diff=4385"/>
				<updated>2013-04-07T23:39:02Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: Captura del código del driver de grises&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Captura del código del driver de grises&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4384</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4384"/>
				<updated>2013-04-07T23:35:03Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver del sensor de grises:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:pybot_driver_grey.png|Captura del código del driver de grises]]&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot_client&amp;diff=4383</id>
		<title>PyBot client</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=PyBot_client&amp;diff=4383"/>
				<updated>2013-04-07T23:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: Página creada con ' Esta es la nueva versión de la ButiaAPI. Ya que todo el código de PyBot es python, se incluyó el cliente dentro de la librería sin prejuicio de que se use por separado.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Esta es la nueva versión de la ButiaAPI. Ya que todo el código de PyBot es python, se incluyó el cliente dentro de la librería sin prejuicio de que se use por separado.&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4382</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4382"/>
				<updated>2013-04-07T23:13:04Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Antes de empezar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&amp;lt;br&amp;gt;&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pybot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente [[PyBot_client]].&lt;br /&gt;
&lt;br /&gt;
==Uso de la butiaAPI en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4381</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4381"/>
				<updated>2013-04-07T23:06:16Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Drivers en PyBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&amp;lt;br&amp;gt;&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&amp;lt;br&amp;gt;&lt;br /&gt;
Este es el ejemplo del driver de botón:&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4380</id>
		<title>Pybot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Pybot&amp;diff=4380"/>
				<updated>2013-04-07T23:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: Página creada con '  == Drivers en PyBot ==  Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos qu...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Drivers en PyBot ==&lt;br /&gt;
&lt;br /&gt;
Los drivers de PyBot son escritos en python. Dentro de la carpeta /drivers se encuentran todos aquellos que no son PNP (plug and play). Los módulos que son abiertos automáticamente por la placa, por ejemplo cuando uno conecta un sensor de grises,&lt;br /&gt;
van dentro de /drivers/hotplug.&lt;br /&gt;
Cada función en el driver se define como una función Python utilizando el &amp;quot;def&amp;quot; y recibe como primer parámetro el dispositivo (&amp;quot;dev&amp;quot;) con el cual se va a comunicar.&lt;br /&gt;
Este es el ejemplo del driver de botón:&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4379</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4379"/>
				<updated>2013-04-07T22:59:45Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Antes de empezar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pybot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente [[PyBot_client]].&lt;br /&gt;
&lt;br /&gt;
==Uso de la butiaAPI en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4378</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4378"/>
				<updated>2013-04-07T22:58:46Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Antes de empezar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo un servidor.&lt;br /&gt;
En el caso de [[bobot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [[pybot]] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde el cliente [PyBot_client].&lt;br /&gt;
&lt;br /&gt;
==Uso de la butiaAPI en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4377</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4377"/>
				<updated>2013-04-07T22:52:03Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Motores */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo el servidor.&lt;br /&gt;
En el caso de [bobot] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [pybot| pybot server] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde la butiaAPI.&lt;br /&gt;
&lt;br /&gt;
==Uso de la butiaAPI en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.set2MotorSpeed(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setMotorSpeed(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setMotorSpeed(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setMotorSpeed(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4376</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4376"/>
				<updated>2013-04-07T22:50:25Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Funciones Varias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo el servidor.&lt;br /&gt;
En el caso de [bobot] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [pybot| pybot server] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde la butiaAPI.&lt;br /&gt;
&lt;br /&gt;
==Uso de la butiaAPI en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack'''&lt;br /&gt;
&lt;br /&gt;
Módulo loopBack: modulo de ayuda presente en el butiá que&lt;br /&gt;
envía un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
print datoRet&lt;br /&gt;
&amp;gt; hola&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''abrirMotores:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.abrirMotores()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setVelMotor(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setVelMotor(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setVelMotor(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setVelMotor(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setVelMotor(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4375</id>
		<title>API</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=API&amp;diff=4375"/>
				<updated>2013-04-07T22:44:05Z</updated>
		
		<summary type="html">&lt;p&gt;AlanJAS: /* Módulos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de [[bobot|bobot server]] utilizando directamente la biblioteca [[bobot]] o mediante diferentes APIs de programación como C, Java, Python.&lt;br /&gt;
&lt;br /&gt;
==Antes de empezar==&lt;br /&gt;
&lt;br /&gt;
Para utilizar la API es necesario tener corriendo el servidor.&lt;br /&gt;
En el caso de [bobot] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua&lt;br /&gt;
&lt;br /&gt;
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    ./lua bobot-server.lua DEBUG&lt;br /&gt;
&lt;br /&gt;
En el caso de usar [pybot| pybot server] se debe ejecutar:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py&lt;br /&gt;
&lt;br /&gt;
Para habilitar el DEBUG:&lt;br /&gt;
&lt;br /&gt;
    python pybot_server.py DEBUG&lt;br /&gt;
&lt;br /&gt;
Luego de iniciado el servidor, podemos conectarnos desde la butiaAPI.&lt;br /&gt;
&lt;br /&gt;
==Uso de la butiaAPI en Pippy y Python==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra.&lt;br /&gt;
Para ello, en Pippy agregamos:&lt;br /&gt;
&lt;br /&gt;
    import sys&lt;br /&gt;
    sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')&lt;br /&gt;
&lt;br /&gt;
La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO.&lt;br /&gt;
En otras computadoras puede variar.&lt;br /&gt;
Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.&lt;br /&gt;
&lt;br /&gt;
Luego de tener eso, procedemos a usar la API.&lt;br /&gt;
&lt;br /&gt;
==butiaAPI==&lt;br /&gt;
&lt;br /&gt;
Descripción de las funciones y algunos ejemplos.&lt;br /&gt;
&lt;br /&gt;
'''Instanciar la clase:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot = butiaAPI.robot()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Versión del Firmware:'''&lt;br /&gt;
Devuelve la versión del firmware de la placa con el que estamos trabajando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    ver = robot.getFirmwareVersion()&lt;br /&gt;
    print ver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar:'''&lt;br /&gt;
Cierra la comunicación con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Conexión/Desconexión con el servidor:'''&lt;br /&gt;
Conecta o Reconecta con el servidor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.reconnect()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cerrar cliente y servidor:'''&lt;br /&gt;
Cierra el servidor y el cliente&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    robot.closeService()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Módulos == &lt;br /&gt;
&lt;br /&gt;
'''listarModulos:'''&lt;br /&gt;
&lt;br /&gt;
devuelve la lista de los modulos disponibles en el firmware de la placa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
modulos = robot.listarModulos()&lt;br /&gt;
print modulos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''llamarModulo:'''&lt;br /&gt;
&lt;br /&gt;
Operacion de llamada de una funcion de un modulo (CALL)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.llamarModulo(modulename, function , params = &amp;quot;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
telnet localhost 2009 &lt;br /&gt;
DESCRIBE nombre_de_modulo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A futuro hay que exportar este servicio en la API&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funciones Varias ==&lt;br /&gt;
&lt;br /&gt;
'''isPresent'''&lt;br /&gt;
&lt;br /&gt;
Retorna si esta presente el modulo&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.isPresent (moduloname)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''abrirLback'''&lt;br /&gt;
&lt;br /&gt;
Abrir módulo loopBack: modulo de ayuda presente en el butia (open)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.abrirLback()&lt;br /&gt;
datoRet = butiabot.loopBack(&amp;quot;hola&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''loopBack:'''&lt;br /&gt;
 &lt;br /&gt;
envia un mensaje a la placa y espera recibir exactamente lo que fue enviado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.loopBack(data)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Motores ==&lt;br /&gt;
&lt;br /&gt;
Operaciones solicidatas al driver motores.lua	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''abrirMotores:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.abrirMotores()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelocidadMotores'''&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(self, sentidoIzq = &amp;quot;0&amp;quot;, velIzq = &amp;quot;0&amp;quot;, sentidoDer = &amp;quot;0&amp;quot;, velDer = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sentido: 0: adelante, 1: atras&lt;br /&gt;
velocidad: 0..1023 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detiene los 2 motores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - gira a la izquierda&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;) - va hacia atrás&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - va hacia adelante&lt;br /&gt;
&lt;br /&gt;
robot.setVelocidadMotores(&amp;quot;1&amp;quot;, &amp;quot;500&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;500&amp;quot;) - gira a la derecha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''setVelMotor'''&lt;br /&gt;
&lt;br /&gt;
robot.setVelMotor(self, idMotor = &amp;quot;0&amp;quot;, sentido = &amp;quot;0&amp;quot;, vel = &amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
idMotor: 0: motor derecho, 1: motor izquierdo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia adelante:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setVelMotor(&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setVelMotor(&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va hacia atrás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
robot.setVelMotor(&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
robot.setVelMotor(&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;500&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensores ==&lt;br /&gt;
&lt;br /&gt;
port es el número de puerto donde se encuentra conectado el sensor&lt;br /&gt;
&lt;br /&gt;
getButton(port)&lt;br /&gt;
	&lt;br /&gt;
getLight(port)&lt;br /&gt;
&lt;br /&gt;
getDistance(port)&lt;br /&gt;
	&lt;br /&gt;
getGray(port)&lt;br /&gt;
&lt;br /&gt;
getTemperature(port)&lt;br /&gt;
&lt;br /&gt;
getResistance(port)&lt;br /&gt;
&lt;br /&gt;
getVoltage(port)&lt;br /&gt;
&lt;br /&gt;
setLed(level)&lt;br /&gt;
level is 0: off or 1: on&lt;br /&gt;
&lt;br /&gt;
== Carga de batería ==&lt;br /&gt;
&lt;br /&gt;
Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt.&lt;br /&gt;
La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el&lt;br /&gt;
valor devuelto es -1.	&lt;br /&gt;
&lt;br /&gt;
'''Carga de la Batería'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
carga = robot.getBatteryCharge()&lt;br /&gt;
print carga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlanJAS</name></author>	</entry>

	</feed>