sábado, 26 de abril de 2008

Software imprescindible e interesante

Estando está web tan relacionada con la robótica me parece necesario mencionar los editores de lenguaje PBasic y Arduino:
PBasic (editor, disponible para Windows, Mac y Linux).
Arduino (basado en el lenguaje C)
Ambos editores son interesantes para los aficionados a la robótica. El PBasic está basado en el lenguaje Basic y es sencillo de usar (ambos son gratuitos). Arduino, por el contrario, es más complejo. Podeís ver mi manual de programación para PBasic:

Como aficionado a la astronomía que soy, todo un clásico: Stellarium. Indicándole tu posición te indica el cielo que ves en tiempo real. Al observar una estrella de cerca se aprecia como se mueve. Un programa muy recomendable, con un portatil, no serían necesarios mapas estelares. Gratuito.

Stellarium (para Windows, Mac y Linux)


Para navegar por Internet, aparte del típico Explorer, Mozilla una solución muy buena y recomendable que cada vez gana más adeptos. Gratuito.

Mozilla Firefox


Gimp es un programa gratuito para la edición de fotografías. Quizá no sea el Photoshop pero es muy bueno para ser gratuito.

Gimp

Autocad es un programa de diseño 2D y 3D, magnífico, pero desgraciadamente de pago. Yo lo uso y permite virgerias interesantes.

Autocad

Para ver videos, nada como VLC o Real player. En mi opinión el primero no tiene rival. Reproduce practicamente todos los formatos existentes. Ambos gratuitos.

VLC

Real player

Para acabar, quiero añadir algunas revistas que yo compro y me parecen dignas de mención, a pesar de no estar relacionadas con la electrónica etc., pero si con la ciencia:

Grand Prix-- Revista de F-1, el martes después de cada gran premio (2,5€)
Espacio--Astronomía, astronaútica... Mensual (3,9 €)
Avion Revue--- Aeronaútica, aviación... Mensual (3.5 €)
CAR--- Automóviles y motos en menor medida. Mensual (2 €)
Popular Science--- Ciencia y avances. Mensual, recien estrenada (1 €, precio de lanzamiento).

Ordenador desmontado: ¿cómo es un ordenador por dentro?

Hace poco, pensé que sería interesante desmontar un ordenador viejo, más que nada para ver como era exactamente. Tenía un ordenador viejo que no usaba (tenía 10 años) así que decidí desmontarlo.

Al principio tiene su dificultad, hay que tratar de hacerlo sin romper nada y por ello es necesario contar con buenas herramientas. Se va quitando la carcasa, después se desatornilla cada una de sus partes y se llega a la estructura sobre la que se sujeta todo.

Soporte/estructura interna

Voy a enseñaros varias imagenes, cada una con la descripción de lo que aparece (el ordenador es viejo, así que los actuales serán un poco diferetes de este).

Ésta es la placa madre o placa base, donde se conectan todos los dispositivos, es decir, como si nuestro sistema nervioso. Aquí se conectan el disco duro, procesador, memoria RAM etc. Gestiona las comunicaciones y trasmisiones de datos entre todos los dispositivos de un ordenador, coordina todas las actividades.

Es la placa madre otra vez. Arriba a la izquierda (lo blanco) es donde se insertan los módulos de la memoria RAM (generalmente no hay uno solo sino varios). En el centro un poco ladeado hacia la derecha está el socket, donde se coloca el procesador. Es cuadrado. En la parte de abajo e izquierda hay numeros buses para la conexión de otros dispositivos (la targeta de video por ejemplo).


Aquí se aprecia más claramente el socket donde se coloca el procesador (en este caso es Intel). Como se puede apreciar hay un gran número de pines (patitas) que insertará el procesador. Esta es una de las partes más calurosas (generada por el paso de electrones por ella, la electricidad).

La placa base por la parte de atras, se aprecian las miles de soldaduras.


Con el procesador colocado en el socket.

El procesador por separado (parece demasiado pequeño para ser el cerebro del ordenador, ¿no? Esto demuestra el gran avance en miniaturización de CI y electrónica en general). Aquí se realizan todos los cálculos y operaciones necesarias a una velocidad muy alta (más de millones por segundo).


Esto es el lector de disco flexible (ya he dicho que era viejo, no tiene lector de CD o DVD). Su misión es leer los disquetes, unidades de almacenamiento anteriores a los CDs.

Estas son dos targetas, la de arriba de video y la de abajo para conectar diferentes puertos (entre ellos el serie). Este ordenador no tenía targeta de sonido, dada su antigüedad, cuando había que pedirlas aparte. Estas targetas tienen funciones específicas que descargan de trabajo a otras partes y permiten la interacción con otros dispositivos (por ejemplo para conectarlo a un monitor con la targeta de video).

Esta es la fuente de alimentación, que proporciona energía a todo el ordenador, convirtiendo la de 230 voltios (la electrónica no funciona con esos voltajes ni tipo de corriente). Tiene un ventilador que puede reutilizarse para otras funciones (yo lo he hecho).

Este es el disco duro, me parece de 40 Gb. Aquí se almacena toda la información. En un disco similar a un CD, se graba la información que después puede ser leida mediante un lector láser.


Foto de la placa madre con el procesador, targeta de video etc. conectado.
Espero que os haya enseñado algo o al menos parecido interesante aunque obviamente parecerá muy superficial para los más avanzados. En realidad lo he hecho para aquellos más noveles.

Tengo otro ordenador viejo (unos 5 años) que intentaré poner a funcionar de nuevo y después overclockearlo. Ya os contaré.

viernes, 25 de abril de 2008

Guía de programación

GUÍA PARA PROGRAMAR BS2 (PBasic)
Para aprender a programar se necesita mucho esfuerzo, por lo que nos os preocupéis si no entendéis al principio, poco a poco lo iréis comprendiendo.
Para programar, además de escribir y descargar el programa en el robot, hay que configurar el hardware según lo que vayamos a utilizar. Es decir, cada vez que hagamos un programa, es posible que haya que modificar los cables, poner algunas resistencias… Para que lo entendáis mejor, primero explicaré como es la protoboard, placa con la que trabajaremos. También pondré todos los conceptos en recuadros para tenerlos todos agrupados.

Este será el índice:

1- Placa de educación y Protoboard
2- Cómo se programa (comandos, fases y cómo usar el programa)
3- Diferentes elementos utilizados (hardware), cómo se programan y cómo se colocan
4- Conceptos y definiciones

Placa de educación y Protoboard:

La placa de educación es la placa que vamos a utilizar como ``cerebro´´ de nuestro robot. Ella es la encargada de procesar toda la información y actuar en consecuencia según su programación. El programa se descarga en ella y todos los sensores y actuadores (motores, vibradores…) deberán estar conectados a ella. Es la parte más importante, por lo que se deberá tener cuidado con ella. La placa es la CPU, es un microcontrolador, ya que es donde se procesa la información pero no contacta con los seres humanos (no directamente, no tiene teclado…).

Diferentes placas (Basic Stamp, Arduino)

Placa Basic Stamp BS1

Para empezar habrá que distinguir las diferentes partes:

Conexión a la pila de 9 voltios: Ahí se conecta directamente una pila de 9 voltios, aunque también se pueden conectar 4 de 1.5 voltios, aunque el computo total sea inferior en voltaje (4x1.5 = 6 voltios). Se suelen utilizar 6 voltios al usar motores, para no dañarlos, por lo que hay que utilizar una sujeción para las pilas y conectar todas en esos dos puntos.

Conexión con el cable serial: En tu ordenador de sobremesa (en los portátiles no suele haber, por lo que es necesario comprar un adaptador) hay un puerto en la parte trasera del ordenador con unas pestañas llamado cable serial (y puerto serial). Para conectar la placa y el ordenador será imprescindible un cable serial, que se conectará entre ellos y se utilizará para descargar programas en la placa y para ver que entradas suceden en la placa (la información enviada por los sensores).

Botón de reset: Este botón se utiliza en caso de que sea necesario resetear la placa.

Puntos para conectar el resto del hardware, Protoboard (patitas): Aquí se aprecian muchos agujeros de pequeño tamaño. Aquí es donde se colocarán los cables, leds, motores, sensores, resistencias etc. Tiene varias partes: La parte central (color blanco), la parte lateral (negra) y la parte superior (negra también). En la parte superior se encuentran las tomas de tierra (Vss), salidas reguladas a +5 voltios (Vdd), y las entradas a -5 voltios (Vin). En la parte lateral se encuentran los pines, del 1 al 15, de modo que el pin 0 = P0, pin 1= P1… Los agujeros centrales blancos están interconectados por filas. Por lo que será lo mismo colocarlo en cualquiera de las cuatro casillas. Dependiendo del lo que vayamos a utilizar habrá que usarlo con diferentes conexiones y formas. Es posible que a veces tengamos que utilizar resistencias para no dañarlo (con los LEDs), capacitores para entregar los picos de potencia (motores)…

Todas las conexiones de hardware que hagamos pueden ser representadas con un esquema eléctrico como éste:





Si conocéis los símbolos eléctricos, podréis deducir todo el hardware fácilmente sin la necesidad de una foto.

Cómo se programa (comandos, fases y cómo usar el programa):

El programa que se utiliza es el Basic Stamp, con lenguaje PBasic, muy parecido al Basic tan conocido. Este programa se puede descargar de la página web de parallax (ver conocimientos previos para el enlace). Al iniciar este programa veréis esto:


Una pantalla en blanco en la cual hay que escribir el programa. Lo primero será ir a directive y señalar que placa vamos a usar (BS1, BS2…) y en que lenguaje de PBasic (2.0, 2.5…). En principio poned BS2. Una vez echo esto, el programa reconocerá en azul los comandos característicos.
Para programar se debe seguir un orden:

1. Variables
2. Entradas y salidas
3. Programa principal
4. Resto del programa

Lo mejor es seguir este orden para no perderse aunque los dos últimos pueden cambiar su posición (dependiendo del caso). Hay muchos comandos por lo que sólo explicaré algunos de ellos, si se quieren conocer todos, se puede ir dentro del programa a help y allí encontrarás toda la información sobre como usarlos y para que sirven (en inglés). Si seguís leyendo encontraréis la descripción de muchos comandos. Cuando los escribáis, es recomendable poner comentarios para que otros puedan comprenderlos. Para ello, se pondrá una coma alta (`) y así el programa pasará a la siguiente línea cuando llegue ahí.

Variables: Para declarar variables hay que hacer varias cosas, lo primero es darle un nombre a la variable (de hasta 32 caracteres), como por ejemplo ``num´´. Después se escribe VAR y después el tamaño de la variable: Las variables pueden ser declaradas en 4 tamaños diferentes: bit (1 bit), nib (nibble - 4 bits), byte (8 bits), & word (16 bits)
Se debería siempre declarar sus variables en el tamaño más pequeño que sea apropiado para los datos que contendrá. El Stamp2 tiene un límite de 208 bits para guardar variables. Estos están agrupados en 13 palabras (de 16 bits cada una). Estos bits pueden ser usados en cualquier combinación de tamaños anteriores. Por ejemplo, su programa puede tener 10 variables
word (160 bits), 10 variables nibble (40 bits), y 8 variables bit (8 bits), o cualquier otra combinación mientras que el valor total no exceda los 208 bits.

Entradas y salidas: Las patitas o pines pueden ser entradas o salidas, dependiendo de si la placa recibe información (entrada) o la envía (salida). Serían salidas los motores, LEDs… y entradas los sensores. Las salidas se declaran con el comando output seguido del número del pin (con un espacio). Ej: OUTPUT 4. La entrada se hace de la misma manera pero con el comando input.
Programa principal y secundarios: El programa principal contiene la parte del programa que siempre se realiza, y los secundarios son las subrutinas o partes que suceden en caso de que ocurra un suceso determinado. Para cada programa hay que crear una etiqueta, es decir, ponerle un nombre y : para identificar esa parte del programa. Una vez acabado, se puede poner el comando goto y la etiqueta a donde se quiera ir. Se puede poner el mismo nombre de la parte ya finalizada si es la parte principal o se quiere crear un bucle (no sale de esa parte) u otro nombre de otra parte del programa.

Con este programa veréis parte de lo mencionado, aunque habrá cosas que todavía no se han comentado:

' {$STAMP BS2}
x VAR Word `crea una variable de tamaño 16 bits
OUTPUT 0 `el led conectado
OUTPUT 1 `el motor izquierdo conectado
OUTPUT 2 `el motor derecho conectado
INPUT 3 `el bumper izquierdo conectado
INPUT 4 `el bumper derecho conectado
leds: `crea una etiqueta para el led
FOR x=1 TO 3 `crea un bucle que se repetirá 3 veces para encender los leds
LOW 0 `enciende el led
PAUSE 250 `espera 250 milisegundos
HIGH 0 `apaga el led
PAUSE 250 `espera 250 milisegundos
NEXT `vuelve al principio del bucle
revisar: `crea una etiqueta para mirar el estado de los bumpers
IF IN3=0 AND IN4=1 THEN giro1 `si el bumper izq. esta pulsado y el der. no entonces gira
IF IN3=1 AND IN4=0 THEN giro2 `si el izq. no está pulsado y el der. si entonces gira
IF IN3=0 AND IN4=0 THEN vuelta `si el izq. está pulsado y el der. también entonces da la vuelta
IF IN3=1 AND IN4=1 THEN avanzar `si el izq. y el der. no están pulsados entonces avanza
GOTO revisar
avanzar: `avanza el robot al no haber obstáculo alguno
FOR x=1 TO 200
PULSOUT 1,1000
PULSOUT 2,500
PAUSE 10
NEXT
GOTO revisar
giro1: `gira hacia la derecha al haber obstáculo en la izquierda
FOR x=1 TO 50
PULSOUT 1,
PULSOUT 2,
PAUSE 10
NEXT
GOTO revisar
giro2: `gira hacia la izquierda al haber obstáculo en la derecha
FOR x=1 TO 50
PULSOUT 1,
PULSOUT 2,
PAUSE 10
NEXT
GOTO revisar
vuelta: `retrocede para después girar hasta darse la vuelta
FOR x=1 TO
PULSOUT 1,500
PULSOUT 2,1000
PAUSE 10
NEXT
FOR x=1 TO 150
PULSOUT 1,500
PULSOUT 2,500
PAUSE 10
NEXT
GOTO revisar

Para descargar el programa deberemos conectar la placa al ordenador y después pinchar en Run, si el programa tiene fallos de sintaxis, te será indicado antes de ser descargado, por lo que tendrás que corregirlo.


Diferentes elementos utilizados (hardware), cómo se programan y cómo se colocan:

Una vez ya explicado esto, pasaré a describir todos los componentes que se pueden utilizar, la forma de utilizarlos y como colocarlos.
Los elementos que se pueden utilizar (y que describiré, ya que son demasiados para describir todos): LEDs, motores, algunos sensores (fotorresistor, bumper o pulsador…), algunos CI (circuitos integrados)… Estos son los más importantes, y a partir de ellos se pueden deducir como funcionarán otros sensores etc.

LED: Un LED es un diodo emisor de luz. Consume poca energía, pero tiene una polarización, es decir, una parte positiva y otra negativa, algo a tener en cuenta cuando se conecte a la placa, ya que podría no funcionar. Esto se diferencia gracias a que una pata es más larga que la otra. Para utilizar un LED es necesario colocar una resistencia de 470 ohms, ¼ watt.
Tendrá que estar conectado a una patita, tener una resistencia, el LED y por último a Vdd (+5 voltios). Hay que recordar que dentro de cada fila, todos están conectados entre sí. En cuanto a la programación, habrá que utilizar varias cosas: Pause, outnúmero (de la patita) o low y high.


Ej:

output 0 `se declara que P0 es una salida
titilar: `etiqueta
out0 = 0 ` P0 es igual a 0 (encendido)
pause 1000 `espera 1 segundo
out0 = 1 `P0 es igual a 1 (apagado)
pause 1000 `espera otro segundo
goto titilar `vuelve a la etiqueta titilar


La instrucción pause es obligatoria ya que deja tiempo al microcontrolador, y se indica en milisegundos (1000 milisegundos = 1 s). Esto también se puede hacer cambiando la instrucción de out0 = 0 o 1 por low (estado bajo, 0) o high (estado alto, 1). Con esto conseguimos poner en estado alto o bajo al led, es decir, encenderlo o apagarlo. Quedaría así:

titilar:
low 0 `enciende el led
pause 1000
high 0 `apaga el led
pause 1000
goto titilar `vuelve a titilar para que lo continúe haciendo todo el rato (bucle)

Bumper o pulsador: Estos dos se configuran de la misma manera. Como aquí se aprecia, deben tener una conexión a una patita en una de sus cuatro pestañas, en esa misma línea una resistencia hasta Vdd (+ 5 voltios) y de la pestaña que se encuentra debajo a Vss. Se pueden utilizar cables conectores si se necesita más longitud.
Para programar se utiliza como si fuera un sensor, es decir, se obtienen 1 y 0 como resultados.

output 0
output 1
Input 2 `declara P2 como entrada
Input 3
out0=1
out1=1
revisar:
if in2=0 then titular `si por la patita P2 entra un 0 entonces ir a la etiqueta titilar
if in3=0 then doble_titilar `si por la patita P3 entra un 0 entonces ir a doble_titilar
goto revisar
titilar:
low 0
pause 200
high 0
pause 200
goto revisar
doble_titilar:
low 0
low 1
pause 200
high 0
high 1
pause 200
goto revisar

Este programa lo que hace es mirar si están pulsados alguno de los dos bumpers, y si está uno presionado (el P2) entonces se encenderá un LED, si lo están los dos, se encenderán ambos LEDs. Aquí se aprecia muy bien la utilización de LEDs y sus comandos. Así como la utilización de pulsadores (0 = no pulsado, 1 = pulsado). IF…THEN es una condicional, si algo sucede se va a cierta etiqueta.

Servos: Un servo se distingue por que es posicionable y de corriente continua CC, es decir, en vez de girar continuamente podemos pararlo en un punto.
E servo tiene tres cables: negro, rojo y blanco. Cada uno de estos debe ir a un punto determinado. El negro a Vss, el rojo a Vin y el blanco a una patita. El dibujo es erróneo, por lo que habrá que tener cuidado con no equivocarse o podrá funcionar muy lentamente o no funcionar el servo. También se aprecia un capacitor (también tiene polaridad), que proporciona los picos de potencia para mover el motor, aunque no siempre es necesario. Los servos pueden modificarse para que tengan rotación completa.

x var word `crea una variable de tamaño una palabra
output 1
inicio:
for x = 1 to 100 `crea un bucle que se repite 100 veces
pulsout 1,500 `envía un pulso a la P1 de 500
pause 10
next ` vuelve a for
pause 500
for x = 1 to 100
pulsout 1,1000
pause 10
next
pause 500
goto inicio

Es necesario crear una variable debido a la instrucción For, ya que para usarlo es necesario su uso. For crea un bucle, que se repite cuantas veces queramos, ya que si solo enviamos un pulso no se movería prácticamente nada el servo. La instrucción next hace que vuelva a For hasta cumplirse todas las repeticiones establecidas (100 en este caso). El pause es también necesario. La instrucción pulsout sirve para enviar pulsos de salida al servo. El número que acompaña a pulsout (1 en este caso) es la patita a la que se le enviará (P1), la coma y después un número entre 500 y 1000. 500 sería girar en un sentido a la máxima velocidad, 1000 en el sentido contrario a la máxima velocidad y 750 sería no moverse. No es progresivo, es decir, no aumenta x velocidad cada y número. “Pulsout 1” (pulsar la salida 1) hace exactamente lo que su nombre indica. Crea un pulso único de salida en el pin de E/S P1. El número “500” es un valor que determina la duración del pulso. Ésta duración es medida en microsegundos. Pulsout tiene una duración de 2 microsegundos, por lo tanto un valor de 500, nos dará un pulso con una longitud de 500 veces 2 microsegundos, o 1000 microsegundos (que es igual a 1 milisegundo, el valor requerido por el servo). Un valor de 1000 creará un pulso con una longitud de 1000 x 2 microsegundos = 2 milisegundos, el ancho de pulso requerido por el servo para moverse al otro extremo. Con este programa conseguimos que el servo se mueva hacia un lado y luego hacia otro.
Fotorresistor: Es un sensor que detecta luz. También funciona con 1 y 0. Tiene que conectarse a Vss y a un punto de la parte central (blanca), en esa misma línea de la parte central, tiene que ir una resistencia a Vdd y otra a una patita.

Para programarlo se usan comandos ya conocidos, aunque aprenderemos unos nuevos.

n var bit
n=0 `se fija el valor de 0 a la variable n
este_lugar:
n=0
low 5
debug ? n `se muestra en la pantalla del ordenador la información enviada por el sensor _ y se imprime
pause 1000
high 5
n=1
debug ? n
pause 1000
goto este_lugar

En este programa hay una variable de un bit (0 o 1). También hay constantes (n=0), la cual fija el valor de n como 0. Debug lo que hace es mostrar la información recibida por el sensor en la pantalla del ordenador e ? significa imprimir, n indica que variable se debe mostrar. El comando debug es muy útil para comprobar si funciona un sensor.

x var word
n var bit
output 1
cerrar_la_puerta:
for x = 1 to 100
pulsout 1,500
pause 10
next
pause 10
ver_si_hay_alguien:
n=in7 `asigna a n el valor de la entrada P7
if n=1 then abrir_la_puerta
pause 100
goto ver_si_hay_alguien
abrir_la_puerta:
for x = 1 to 100
pulsout 1,1000
pause 10
next
pause 10
n=in7
if n =0 then cerrar_la_puerta
goto abrir_la_puerta

Con este programa repasamos el uso de motores, variables, constantes y condicionales.
Crea dos variables de diferentes tamaños, cierra la puerta mediante el uso de un servo, mira si hay alguien y si lo hay abre la puerta; después de abrirla comprueba que no haya nadie y la cierra, y así sucesivamente.

CI (circuito integrado): Un circuito integrado es un circuito electrónico miniaturizado con alguna función concreta. Veremos dos: Temporizador 555 y X9313 (potenciómetro digital).



Este CI tiene 8 pines. Es un multivibrador astable, circuito que sin “intervención externa”, (de otros circuitos o dispositivos), emitirá continuamente una secuencia de pulsos, que se alternaran entre altos y bajos. La velocidad a la que parpadea está controlada por una especie de resistencia, un potenciómetro. Es una resistencia de valor variable. Con el conseguimos que el Basic Stamp pueda hacer varias cosas a la vez, ya que en condiciones normales, no puede.


En cuanto a la programación tiene sus peculiaridades:

x var word
low 1
inicio:
high 1 for x = 1 to 500
debug ? x
next
pause 3000
low 1
pause 2000
goto inicio

Este programa serviría para hacer titilar al LED, ya que sólo es necesario poner a P1 en estado alto.
Ahora usaremos pulsin. Pulsin es la contraparte de entrada a pulsout. En lugar de generar un pulso de salida de una longitud predeterminada, pulsin se fija en un pin de entrada particular y mide la longitud de un pulso entrante, y almacena ese valor en una variable.

x var word
high 1
inicio:
pulsin 0,1,x
debug ? x
goto inicio


Este programa lo que hará será hacer titilar al led con el Temporizador 555 y medir después cuanto tarda en ponerse de estado bajo a alto y viceversa.
pulsin 0,1,x: Mire un pulso de entrada en P1. Espere que ese pulso vaya de bajo a alto. Tan pronto como lo haga, comienza a “cronometrarlo”, y continúa controlando el pin. Tan pronto como el pulso vuelve a bajar, detiene el cronómetro y regresa un valor en la variable llamada “x”. Este valor es en incrementos de dos microsegundos. Por lo que multiplicando por dos podemos saber cuanto tiempo ha tardado. Por ello, pulsin es un comando detector de entrada.

El X9313 también es un CI. Este CI es un potenciómetro digital, es decir, se controla su valor como resistencia de forma digital, no es necesario girar o pulsar un botón, sino que lo controlamos con el programa. Tiene 31 posiciones diferentes con diferentes resistencias. Con este CI podemos controlar al temporizador 555 de forma digital.

x var word
y var word
output 0
output 1
output 2
output 3
high 0
low 3
low 2
for x = 1 to 32
high 1
low 1
next
high 2
for y = 1 to 2
high 1
low 1
next
bucle:
goto bucle

Todos los comandos que aquí aparecen ya están vistos y explicados, pero es necesario explicar porque se utilizan. En principio este programa debería hacer titilar al led bastante rápido. Primero se crean dos variables del mismo tamaño y se declaran las entradas. Cada entrada tiene una función:

output 0 '555 reset, es decir, conectado al 555.
output 1 ‘incremento, es decir, donde se enviarán los pulsos
output 2 ‘arriba / abajo (up/down), para enviar una señal alta o baja (1 o 0)
output 3 'chip select, selecciona el X9313

En P0 está conectado el 555, y si se envía un pulso se enciende y comienza a trabajar y también se apaga (habría que ponerle en estado alto -high- para encenderlo). En P3 está conectado el X9313, y si se envía un pulso sería posible utilizarlo, habría que ponerlo en estado bajo (low) para encenderlo. P1 será donde enviemos los pulsos para modificar la resistencia de este CI. Y en P2 determinamos si los pulsos que enviaremos serán altos (para subir) o bajos (para bajar).

high 0
low 3
low 2

En esta parte, lo primero que se hace es encender el 555, después selecciona el X9313 y después hace que todos los pulsos que enviemos vayan hacia abajo (low), hasta llegar a 0 para empezar desde ahí.

for x = 1 to 32
high 1
low 1
next
high 2
for y = 1 to 2
high 1
low 1
next

Esta parte sirve para que el X9313 vaya a la primera posición (0 ohms) ya que es posible que se encuentre en otra. Después va a la posición 2 hacia arriba debido a que hemos puesto high 2, que puede ser cambiada si quieres modificar la velocidad de parpadeo de los leds conectados al 555.
Después de esto el programa se detiene y ya no hace más.

x var word
y var word
output 0 '555 reset
output 1 ‘incremento
output 2 ‘arriba/abajo (up/down)
output 3 'chip select
high 0 ‘enciende el titilador
inicio:
low 2 ‘hace que el cursor vaya hacia “abajo” (down)
low 3 ‘selecciona (o habilita) el X9313 para recibir datos
for x = 1 to 32 ‘fija el valor del cursor en “0” lentamente
high 1
low 1
pause 200
next
high 2 ‘hace que el cursor vaya hacia “arriba” (up)
for y = 1 to 32 ‘hace que el cursor aumente 32 posiciones discretas
high 1
low 1
debug ? y
pause 200 ‘pausa por un corto período de tiempo, para que sea visible.
Next
goto inicio ‘repite todo

Este programa lo que haría es hacer que el led titilara a diferentes velocidades, cada vez más lentamente, debido a que hemos puesto una pausa.

Envío de órdenes a través del ordenador en tiempo real:
Con esto conseguiréis que el robot os obedezca cuando hacéis una determinada acción en el ordenador, esta información será enviada por el cable serial que deberá permanecer conectado.
Con este programa lo entenderéis mejor:

' {$STAMP BS2}
' {$PBASIC 2.5}
comando VAR Nib
ava VAR Byte
OUTPUT 4
OUTPUT 11
main:
DEBUG CLS, "¿Qué quieres que haga? 8 = avance, 2 = retroceso, 4 = izquierda y 6 = derecha"
DEBUGIN DEC1 comando
IF (comando = 8) THEN av
IF (comando = 2) THEN re
IF (comando = 4) THEN izq
IF (comando = 6) THEN der
av:
FOR ava = 1 TO 50
PULSOUT 4, 1000
PULSOUT 11, 500
PAUSE 10
NEXT
GOTO main
re:
FOR ava = 1 TO 50
PULSOUT 11, 1000
PULSOUT 4, 500
PAUSE 10
NEXT
GOTO main
izq:
FOR ava = 1 TO 50
PULSOUT 4, 1000
PULSOUT 11, 1000
PAUSE 10
NEXT
GOTO main
der:
FOR ava = 1 TO 50
PULSOUT 4, 500
PULSOUT 11, 500
PAUSE 10
NEXT
GOTO main

Vemos tres cosas nuevas. Al ser un dato introducido por el teclado la condición se pone entre paréntesis: IF (comando = 8) THEN av. Debug CLS lo que hace es mostrar información en la pantalla del ordenador para que tu sepas que debes hacer. Debugin DEC1 comando lo que hace es enviar información al robot a través del ordenador, dec1 indica que va a ser decimal de una cifra en dato introducido y comando es la variable utilizada.

Con todos los comandos explicados y cómo usarlos, creo que seríais capaces de elaborar numerosos programas para diferentes finalidades.

Descripciones de comandos:

BIFURCACIÓN

IF...THEN
IF condición THEN direcciónEtiqueta
Evalúa la condición y, si es verdadera, se dirige al punto del programa marcado por direcciónEtiqueta.
• Condición es una expresión, tal como “x=7”, que puede ser evaluada como verdadera o falsa.
• DirecciónEtiqueta es una etiqueta que especifica donde ir en el caso que la condición sea verdadera.

BRANCH
BRANCH indicador, [dirección0, dirección1, …direcciónN]
Se dirige a la dirección especificada por el indicador (si está en el rango).
• Indicador es una variable / constante que especifica a cuál de las direcciones listadas dirigirse (0-N).
• Direcciones son las etiquetas que especifican a qué lugar dirigirse.

GOTO
GOTO direcciónEtiqueta
Se dirige al punto del programa especificado por direcciónEtiqueta.
• DirecciónEtiqueta es una etiqueta que especifica a qué lugar dirigirse.

GOSUB
GOSUB direcciónEtiqueta
Guarda la dirección de la instrucción siguiente a GOSUB, luego se dirige al punto del programa especificado por direcciónEtiqueta.
• DirecciónEtiqueta es una etiqueta que especifica a qué lugar dirigirse.

RETURN
Regresa de una subrutina. Regresa el programa a la dirección (instrucción) inmediatamente siguiente al
GOSUB más reciente.

REPETICIÓN

FOR...NEXT
FOR variable = inicial to final {paso} …NEXT
Crea un bucle repetitivo que ejecuta las líneas de programa entre FOR y NEXT, incrementando o disminuyendo el valor de la variable de acuerdo al paso, hasta que el valor de la variable iguala al valor final.
• Variable es una variable tipo nib, byte, o word usada como contador.
• Inicial es una variable o una constante que especifica el valor inicial de la variable.
• Final es una variable o una constante que especifica el valor final de la variable. Cuando el valor de la variable supera el valor final, end, el bucle FOR . . . NEXT detiene su ejecución y el programa continúa en la instrucción siguiente a NEXT.
• Paso es una variable o constante opcional que fija el valor en que aumenta o disminuye la variable en cada bucle de FOR / NEXT. Si inicial es mayor que final, PBASIC2 interpreta que paso es negativo, aunque
no se use un signo menos.

FUNCIONES NUMÉRICAS
LOOKUP
LOOKUP índice, [valor0, valor1,... valorN], variable
Busca el valor especificado por el índice y lo guarda en la variable. Si el índice excede el máximo valor de índice de la lista, la variable no es afectada. Un máximo de 256 valores puede ser incluido en la lista.
• Índice es una constante, expresión o variable tipo bit, nibble, byte o word.
• Valor0, valor1, etc. son constantes, expresiones o variables tipo bit, nibble, byte o word.
• Variable es una variable tipo bit, nibble, byte o word.

LOOKDOWN
LOOKDOWN valor, {comparador,} [valor0, valor1,... valorN], variable
Compara un valor con los de la lista en función del comparador y guarda la ubicación (índice), en la variable.
• Valor es una constante, expresión o variable tipo bit, nibble, byte o word.
• Comparador es =, <>, >, <, <=, =>. (= es la opción por defecto).
• Valor0, valor1, etc. son constantes, expresiones o variables tipo bit, nibble, byte o word.
• Variable es una variable tipo bit, nibble, byte o word.

RANDOM
RANDOM variable
Genera un número pseudo-aleatorio.
• Variable es una variable tipo byte o word en el rango de 0..65535.

DIGITAL I/O (ENTRADA/SALIDA DIGITAL)

INPUT
INPUT pin
Convierte al pin especificado en entrada (escribe un 0 en el bit correspondiente de DIRS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

OUTPUT
OUTPUT pin
Convierte al pin especificado en salida (escribe un 1 en el bit correspondiente de DIRS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

REVERSE
REVERSE pin
Si el pin es de salida, lo hace de entrada. Si el pin es de entrada, lo hace de salida.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

LOW
LOW pin
Convierte al pin en salida y la pone en estado bajo (escribe un 1 en el bit correspondiente de DIRS y un 0 en el
bit correspondiente de OUTS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

HIGH
HIGH pin
Convierte al pin en salida y la pone en estado alto (escribe un 1 en el bit correspondiente de DIRS y OUTS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

TOGGLE
TOGGLE pin
Invierte el estado de un pin.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

PULSIN
PULSIN pin, estado, variable
Mide un pulso de entrada (resolución de 2 μs).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• estado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• variable es una variable tipo bit, nibble, byte o word.
Las mediciones se toman en intervalos de 2uS y el tiempo máximo es de 0.13107 segundos.

PULSOUT
PULSOUT pin, período
Genera un pulso de salida (resolución de 2 μs).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• período es una constante, expresión o variable tipo bit, nibble, byte o word, en el rango de 0..65535 que especifica la duración del pulso en unidades de 2uS.

BUTTON
BUTTON pin, presionado, retardo, velocidad, espaciotrabajo, estado, etiqueta
Elimina el rebote, realiza auto-repetir, y se dirige a la etiqueta si un botón es activado.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• presionado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• retardo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255.
• velocidad es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255.
• espaciotrabajo es una variable tipo byte o word. Se inicia con 0 antes de ser usada.
• estado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• etiqueta es la etiqueta a la que debe saltar el programa cuando se presiona el botón.

SHIFTIN
SHIFTIN dpin, cpin, modo, [resultado{\bits} { ,resultado{\bits}... }]
Convierte los bits recibidos de serie a paralelo y los almacena.
• dpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de datos.
• cpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin del reloj (clock).
• modo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..4 que especifica el modo de transmisión. 0 o MSBPRE = msb primero, pre-reloj, 1 o LSBPRE = lsb primero, prereloj,
2 o MSBPOST = msb primero, post-reloj, 3 o LSBPOST = lsb primero, post-reloj.
• resultado es una variable tipo bit, nibble, byte o word donde el dato recibido es guardado.
• bits es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 1..16 que especifica el número de bits a recibir en resultado. El valor predeterminado es 8.

SHIFTOUT
SHIFTOUT dpin, cpin, modo, [datos{\bits} {, datos{\bits}... }]
Envía los datos en forma serial.
• dpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de datos.
• cpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin del reloj (clock).
• Modo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1 que especifica el modo de transmisión. 0 o LSBFIRST = lsb primero, 1 o MSBFIRST = msb primero.
• datos es una constante, expresión o variable tipo bit, nibble, byte o word que contiene el dato a ser enviado.
• bits es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 1..16 que especificael número de bits a enviar. El valor predeterminado es 8.

COUNT
COUNT pin, período, resultado
Cuenta el número de ciclos en un pin, por un período de milisegundos, y guarda ese número en resultado.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• período es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535.
• resultado es una variable tipo bit, nibble, byte o word.

XOUT
XOUT mpin, zpin, [casa\clavecomando{\ciclos} {, casa\clavecomando{\ciclos}... }]
Genera códigos de control de línea X-10. Se usa con los módulos de interface TW523 o TW513.
• mpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de modulación.
• zpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de cruce por cero.
• casa es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el código de casa A..P.
• clavecomando es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica las claves 1..16 o es uno de los comandos mostrados en BASIC Stamp Manual Version 1.9. Estos comandos incluyen encender y apagar luces.
• ciclos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 2..65535 que especifica el número de veces que se transmite un comando. (Predeterminado es 2).

SERIAL I/O(E/S SERIAL)

SERIN
SERIN rpin{\fpin}, baudmodo, {petiqueta,} {tiempoespera, tetiqueta,} [datosentrada]
Recibe datos asincrónicamente (como en RS-232).
• rpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..16.
• fpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• baudmodo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535.
• petiqueta es una etiqueta a la cual saltar en caso de error de paridad.
• tiempoespera es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 que representa el número de milisegundos a esperar por un mensaje entrante.
• tetiqueta es una etiqueta a la cual saltar en caso de demora.
• Datosentrada es un conjunto de nombres de variables, expresiones o constantes, separados por comas que pueden tener los formatos disponibles para el comando DEBUG, excepto los formatos ASC y REP.
Además, los siguientes formatos están disponibles:
1. STR vector de bytes\L{\E}
2. SKIP L
3. WAITSTR vector de bytes{\L}.
4. WAIT (valor {,valor...}) Esperar por una secuencia de hasta seis bytes.

SEROUT
SEROUT tpin{\fpin}, baudmodo, {pausa,} {tiempoespera, tetiqueta,} [datossalida]
Envía datos asincrónicamente (como en RS-232).
• tpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..16.
• fpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• baudmodo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..60657.
• pausa es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 que especifica un tiempo (en milisegundos) de retardo entre los bytes transmitidos. Este valor sólo puede ser especificado si no se da un valor a fpin.
• tiempoespera es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 representa el número de milisegundos a esperar para la señal de transmisión del mensaje. Este valor sólo puede ser especificado si se da un valor a fpin.
• tetiqueta es una etiqueta a la cual saltar si se sobrepasa el tiempoespera. Se especifica con fpin.
• datossalida es un conjunto de constantes, expresiones y nombres de variables separados por comas y opcionalmente precedido por modificadores disponibles en el comando DEBUG.

ANALOG I/O (E/S ANALÓGICA)

PWM
PWM pin, duty, ciclos
Puede ser usado para generar voltajes de salida analógicos (0-5V) usando un capacitor y un resistor. Genera una salida por modulación de ancho de pulso, y luego el pin vuelve a ser entrada.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• duty es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255.
• ciclos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255 que representa la cantidad de ciclos de 1ms a enviar a la salida.

RCTIME
RCTIME pin, estado, variable
Mide un tiempo de carga/descarga RC. Puede ser usado para medir potenciómetros.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• estado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• Variable es una variable tipo bit, nibble, byte o word.

SONIDO

FREQOUT
FREQOUT pin, milisegundos, freq1 {,freq2}
Genera una o dos ondas sinusoidales de las frecuencias especificadas (0 – 32.767 hz.).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• milisegundos es una constante, expresión o variable tipo bit, nibble, byte o word.
• freq1 y freq2 son constantes, expresiones o variables tipo bit, nibble, byte o word en el rango de 0..32767 que representan las frecuencias correspondientes.

DTMFOUT
DTMFOUT pin, {tiempoencendido, tiempoapagado,}[tono{,tono...}]
Genera pulsos telefónicos DTMF.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• tiempoencendido y tiempoapagado son constantes, expresiones o variables tipo bit, nibble, byte o Word en el rango de 0..65535.
• tono es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

ACCESO A EEPROM

DATA
{puntero} DATA {@ubicación,} {WORD} {datos}{(tamaño)} {, { WORD} {datos}{(tamaño)}...}
Almacena datos en la EEPROM antes de descargar el programa PBASIC.
• puntero es un nombre opcional de una constante no definida o variable tipo bit, nibble, byte o word al que se le asigna el valor del primer lugar de memoria en el que los datos son almacenados.
• ubicación es una constante, expresión o variable tipo bit, nibble, byte o word opcional que designa el primer lugar de memoria en el que los datos son escritos.
• word es una llave opcional que hace que los datos sean almacenados en la memoria como dos bytes separados.
• datos es una constante o expresión opcional a ser escrita en la memoria.
• tamaño es una constante o expresión opcional que designa el número de bytes de datos definidos o no, para escribir o reservar en la memoria. Si datos no es especificado, entonces se reserva una cantidad de espacio indefinido, y si datos es especificado, se reserva la cantidad especificada por tamaño.

READ
READ ubicación, variable
Lee un byte de la EEPROM y lo almacena en variable.
• ubicación es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..2047.
• Variable es una variable tipo bit, nibble, byte o word.

WRITE
WRITE ubicación, datos
Escribe un byte en la EEPROM.
• ubicación es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..2047.
• datos es una constante, expresión o variable tipo bit, nibble, byte o word.

TIEMPO

PAUSE
PAUSE milisegundos
Hace una pausa en la ejecución por 0–65535 milisegundos.
• milisegundos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535.

CONTROL DE ENERGÍA

NAP
NAP período
Descansa por un corto período. El consumo de energía es reducido a 50 uA (sin cargas conectadas).
• período es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..7 que representa intervalos de 18ms.

SLEEP
SLEEP segundos
Duerme por 1-65535 segundos. El consumo de energía es reducido a 50 uA.
• segundos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 que especifica el número de segundos a dormir.

END
END
• Duerme hasta que se interrumpa y reinicie la alimentación o se conecte a la PC. El consumo de energía es reducido a 50 uA.

DEPURACIÓN DEL PROGRAMA

DEBUG
DEBUG datosalida{,datosalida...}
Envía variables a ser vistas en la PC.
• datosalida es una cadena de texto, constante o variable tipo bit, nibble, byte o word. Si no se especifican modificadores DEBUG muestra caracteres en ascii sin espacios ni separación de oraciones a continuación del valor.

Conceptos y definiciones:

CPU:
Central Processing Unit (Unidad de procesamiento Central).Este término se refiere específicamente al circuito integrado (contenido dentro de la caja de la computadora), que hace los “verdaderos cómputos”. Sin embargo, a veces el término es usado (aunque incorrectamente), para incluir todo lo que está dentro
de la caja, incluyendo el disco rígido, la disquetera, el CD ROM, la fuente y la motherboard.

Microcontrolador:
Es un circuito integrado que contiene muchas de las mismas cualidades que una computadora de escritorio, tales como la CPU, la memoria, etc., pero no incluye ningún dispositivo de “comunicación con humanos”, como monitor, teclados o mouse. Los microcontroladores son diseñados para aplicación de control de máquinas, más que para interactuar con humanos.

PCB:
Printed Circuit Borrad (Plaqueta de circuito impreso). Los circuitos electrónicos complejos requieren muchas conexiones eléctricas entre componentes. Una PCB es simplemente una pieza rígida, normalmente de fibra de vidrio, que tiene muchos cables de cobre sobre su superficie (o algunas veces dentro). Estos cables llevan las señales
entre los componentes del circuito.

LED:
Light Emitting Diode. (Diodo Emisor de Luz). Es un tipo especial de diodo semiconductor, que cuando es conectado a un circuito electrónico con un resistor limitador de corriente, emite luz visible. Los LED usan muy poca energía y son ideales
para ser conectados a dispositivos tales como el Stamp.

Esquema:
Un diagrama eléctrico que muestra conexiones entre componentes que no necesariamente se ve, como el circuito físico. Usamos diagramas esquemáticos debido a que ellos ayudan a entender el flujo de la señal, a través de circuitos complejos.

Programa:
Una secuencia de instrucciones que son ejecutadas por una computadora o un microcontrolador, en una secuencia específica, para realizar una tarea. Los programas son escritos en diferentes tipos de lenguajes, tales como “C”, Fortran o BASIC.

Error:
Un error en su programa o hardware. Aplicar “debug” (depurar) en su programa es revisar y eliminar errores en su código. También puede haber errores de hardware tales como un LED puesto al revés, que causa que el sistema no funcione.

Descarga:
Después que un programa de un microcontrolador ha sido creado en la PC, es enviado
desde la PC por un cable y cargado en la memoria del microcontrolador. El
programa es ejecutado dentro del Stamp.

Remark:
(Comentario) en un programa, no es ejecutado como comando. Es ignorado por el microcontrolador. El propósito de un comentario es permitir a los humanos entender más fácilmente qué están haciendo los comandos en el programa.

Sensor:
Un sensor es un dispositivo de entrada usado para detectar o medir presencia física. Los ejemplos incluyen sensores que detectan luz, calor, temperatura, curvamiento y compuestos químicos (tales como monóxido de carbono).

Analógico:
Un valor variable continuo. En lugar de 1 ó 0 (+5 volt), los valores analógicos pueden estar en cualquier valor intermedio de ambos extremos. Debido a que los microcontroladores solamente entienden entradas si son valores digitales, nuestros sensores y los circuitos de intercomunicación, necesitan convertir valores analógicos (voltajes) a sus equivalentes digitales.

Binario:
El sistema de numeración usado por todos los microcontroladores (así como los sistemas de computadoras). Normalmente usamos el sistema decimal (de 0 a 9). Los sistemas electrónicos digitales sólo trabajan (en los sistemas más básicos) con dos dígitos: 0 y 1.

Variable:
Una variable es un símbolo que contiene un cierto valor. Ese valor puede ser cambiado bajo el control del programa y por lo tanto, el valor de las variables puede cambiar, pero su nombre no. Las variables pueden guardar ciertas piezas de información ahora, para ser usadas posteriormente en el programa.

Capacitor:
Un capacitor almacena energía eléctrica. Es usado en nuestro circuito como una pequeña batería para entregar los picos de corriente (medidos en Amperes), requeridos cuando el motor del servo empieza a girar. El capacitor ayuda a entregar esta energía de “arranque”, permitiéndole al circuito funcionar “suavemente”, minimizando los picos, que pueden hacer funcionar erráticamente al microcontrolador

Milisegundo:
Los sistemas de microcontroladores y computadoras, operan a velocidades muy altas. Como humanos, estamos acostumbrados a usar para mediciones de tiempo, el rango de segundos, o en el caso de competencias atléticas, décimas o centésimas de segundos. Un milisegundo es 1 / 1000 de segundo, es decir hay 1000 milisegundos en 1 segundo. Esto se ve como una pequeña cantidad de tiempo, pero es realmente bastante largo en el mundo de la microelectrónica de las computadoras. De hecho, su computadora personal (la que está usando para escribir éstos programas en PBASIC), está probablemente operando en millonésimas de segundos.

Diagrama de Tiempo:
Las computadoras funcionan con una serie de pulsos, normalmente entre 0 y 5 volts. Un diagrama de tiempo es simplemente una forma de visualizar los pulsos. Usted “lee” un diagrama de tiempo de izquierda a derecha. En nuestro diagrama de ejemplo, vemos que el voltaje, (en nuestro pin de salida P1) comienza a 0 volts. Después de un corto período de tiempo vemos que P1 pasa a estado alto por una duración de 1 a 2 milisegundos y luego regresa a 0 volt. Después de aproximadamente 10 milisegundos, P1 vuelve a subir. Salvo que se indique en el diagrama, usted puede asumir que el proceso se repite indefinidamente, es decir que cuando llega al extremo derecho del diagrama, regresa al extremo izquierdo, y comienza otra vez.

Inicialización:
La primera parte de muchos programas es llamada a veces la “rutina de inicialización”. Esto significa que esta porción del programa ajusta todos los parámetros que el programa usará.

Automatización:
En este experimento el término automatización significa que algo está siendo hecho sin “intervención humana”. En nuestro ejemplo (la puerta automática del supermercado), esto no es exactamente cierto. Aunque no presionamos físicamente ningún botón, estamos, con nuestra presencia, “presionando el botón detector de luz”. Esto sin embargo, parece ser completamente automático, debido a que no tenemos que pensar en otra cosa que caminar hacia la puerta. En un sentido estricto, automatización es la habilidad de los microcontroladores de hacer que las cosas sucedan sin interacción de nuestra parte.

Espacio de programa:
Los microcontroladores pueden tener varios tipos de memoria que son usadas para llevar a cabo su tarea. En el caso del BASIC Stamp 2, estamos limitados a 2048 bytes de almacenamiento de memoria (EEPROM). Esta cantidad de espacio es usada para almacenar datos y programas. Si usted escribe un programa que obtiene datos automáticamente en un período de tiempo (tal como una estación meteorológica remota), usted querrá hacer su programa tan pequeño y eficiente como sea posible para permitirle tanto lugar como pueda para almacenar datos.

EEPROM:
Esta es la sigla de ‘electrically erasable, programmable, read only memory”(memoria sólo de lectura, eléctricamente borrable y programable). Aunque es un desarrollo sofisticado en la “industria de la memoria”, es bastante simple de usar. Podemos grabar nuestros programas y datos en la EEPROM con comandos muy simples. Luego, cuando la alimentación es quitada, el programa y los datos son retenidos. ¿En qué se diferencia la EEPROM de los otros tipos de memoria de “estado sólido”? en que pueden ser muy fácilmente borradas (“automáticamente”) y rescritas, una y otra vez.

Debug (comando):
Una herramienta muy útil para “ver” qué está haciendo su programa dentro del Stamp. El comando Debug tiene una gran flexibilidad propia. Revise el apéndice para una descripción completa de cada una de las características disponibles.

Constante:
Un valor o parámetro que es fijado absolutamente a un valor específico. Hay otras formas de fijar las constantes a un valor predeterminado, (tales como usando el comando con), esto lo hace más fácil de cambiar en el futuro. En muchos casos, las variables usadas en un programa son dinámicas, debido a que pueden cambiar constantemente su valor durante la ejecución del programa.

Circuito Integrado:
Normalmente llamados “CI”, son circuitos electrónicos que han sido miniaturizados y combinados dentro de un pequeño encapsulado. Muchos tipos diferentes de CI han sido creados para un sinnúmero de aplicaciones. El temporizador ‘555’ que usaremos en este experimento es un miembro de la familia de CI “lineales”. El CPU Stamp es un “CI digital”.

8 pin dip:
Esto se refiere al estilo de encapsulado del CI. El ‘555’ tiene 8 pines, y éstos están dispuestos en dos líneas al costado del encapsulado (Dual Inline Package).

Multivibrador astable:
Es un nombre extravagante para un circuito que sin “intervención externa”, (de otros circuitos o dispositivos), emitirá continuamente una secuencia de pulsos. ¿Recuerda cuando creamos el chorro de pulsos para controlar el servo en los Experimentos 3 y 4? Lo mismo ocurre con éste circuito, excepto que el ‘555’ alternará entre alto y bajo, sin que nosotros tengamos que escribir un programa. Es una versión en hardware del comando de software “Pulsout”.

Potenciómetro:
Es simplemente un resistor que cambia su valor a medida que es rotado (o en algunos casos deslizado). Recuerde que los resistores tienen dos conectores. Un potenciómetro tiene tres conectores. El conector central es el cursor que se desliza sobre un elemento resistivo. Cuanto más acerca el cursor a uno de sus extremos, menos resistencia hay entre el cursor y ése extremo. Los potenciómetros vienen en muchos valores diferentes, tales como 5K, 10k, 100k, 1 M ohms, y más. También vienen en muchas configuraciones físicas diferentes para acomodarse a diferentes diseños de productos. Todos operan esencialmente de la misma forma; un movimiento mecánico en el cursor cambia el valor resistivo del dispositivo.

Reset:
Como se mencionó, es un pin de control en el CI temporizador ‘555’. Si conectamos este pin a P1 en el Stamp, y P1 es configurado como una “entrada”, entonces la circuitería del ‘555’ puede operar (aunque tal vez aleatoriamente). En éste caso, tenemos dos entradas (p1 en el Stamp y ‘reset’ en el ‘555’) conectadas juntas. Un pin configurado como entrada en el Stamp tenderá a “flotar” a nivel alto. Esta es una ”condición flotante” y no se garantiza que sea un verdadero valor “alto”. Cuando convertimos a P1 en salida y la fijamos en nivel “alto”, ésta también lleva a nivel alto al pin 4 del ‘555’y no nos da una condición “flotante”.

Microfaradio:
Una unidad de medida para la cantidad de “carga” que puede ser almacenada en un capacitor. Similar al valor de “ohm” para los resistores, el microfaradio (para los capacitores), está disponible en un amplio rango de valores. 1 microfaradio es igual a 1/1.000.000 de un Faradio. Analizaremos los capacitores en un experimento posterior, pero por ahora, es necesario comprender que a menor valor, menor capacidad de carga tiene el capacitor, lo que da como resultado una oscilación más rápida en el circuito del 555.

Decisión Económica:
A medida que usted comience a crear sus propios circuitos, sean o no productos comerciales, el costo del “hardware electrónico” puede subir rápidamente, principalmente si hace esto como un pasatiempo fuera de una clase normal. Se vuelve realmente importante decidir cuál es la mejor aproximación para resolver una tarea particular. Algunas veces, la mejor y la más barata, no es la misma opción. Como descubriremos muchas veces, usted será capaz de resolver una tarea de ambas formas. Puede que le lleve más tiempo realizarlo en software, pero (si no contamos su tiempo), será casi siempre la decisión más barata.

X9313:
Muchos números diferentes y combinaciones de letras son usados en la industria de los semiconductores, para referirse a componentes individuales. Estos son simplemente números de referencia para tipos específicos de dispositivos. Este CI en particular es fabricado por una compañía llamada “Xicor”.

Óhmetro:
Es un dispositivo que realmente mide el valor de un resistor en particular. Trabaja haciendo circular una corriente a través del resistor, y midiendo la caída de voltaje sobre él. En muchos casos, usted necesita apagar su circuito si va a usar un óhmetro. En el caso del X9313, sin embargo, usted puede dejar encendido el circuito, siempre y cuando solamente toque los tres terminales (que representan los terminales del potenciómetro) con las puntas. De hecho, para poder medir el valor del cursor en cualquier punto, la alimentación debe estar aplicada. Este es un caso especial y no es una circunstancia normal de medición.

Esta guía está elaborada a partir del manual: ¿Qué es un microcontrolador?

--------------------------------------------------------------------------------
Autor: Sergio Porres González http://roboticamaselectronica.blogspot.com/
Este documento ha sido realizado para orientar a posibles personas interesadas en la programación de un robot, sobre todo para aquellos iniciados. Si alguien quiere publicarlo, que contacte con su autor: sergioporresgonzalez@gmail.com
--------------------------------------------------------------------------------

martes, 22 de abril de 2008

Diferentes pruebas en concursos de robótica

Una manera muy interesante de poner en práctica nuestros conocimientos de electrónica y mecánica es construir y programar un robot para participar en un concurso. En España hay numerosos concursos repartidos por toda la geografía. Aquí teneis varios ejemplos:

Concurso de microbots de la Universidad de Deusto
Concurso Madridbot
Concurso de la Universidad de Alcalá
Concurso Robolid (Valladolid)
Concurso AESS Barcelona
Concurso JET Terrassa


En estos concursos hay diferentes pruebas y dan numerosos premios a los ganadores, a veces en metálico y otras veces también componentes. Las pruebas más comunes son: Sumo, minisumo, rastreadores (velocistas), relevos, laberinto, bailarines... Dependiendo de a que prueba quieras presentarte, hay ciertas reglas y requisitos para cumplir. Cuanto mejor se adapte tu robot a la prueba (más adecuado sea a la prueba), mejor resultado se obtendrá. Por tanto, antes de idear un robot hay que pensar que es lo que requiere la prueba (más tarde analizaré cada una de ellas). Hay que diseñar el robot en función de nuestros conocimientos y presupuesto. Por supuesto, hay que tratar de aprovechar las reglas al máximo, obteniendo el mayor rendimiento posible.

Sumo y minisumo:

En estas pruebas hay dos robots en un ring y éste está rodeado por una línea blanca. El primer robot que se salga fuera del ring pierde. En la categoría sumo hay limitaciones de 3 kg. y 20x20 cm de máximo. En minisumo, en cambio, son 10x10 cm y 500 gr. Esta modalidad es muy interesante dado que lo mejor probablemente sea construir la estructura del robot. En esta prueba es determinante la potencia de los motores, un centro de gravedad bajo y unas ruedas adherentes. Para este concurso es necesario detectar la línea que limita el ring, detectar al contrario y unos motores (con un driver) para el empuje. Dependiendo de lo que queramos podemos usar diversos sensores. Para más información podeis ver este manual para la construcción de un robot de sumo:

http://roboticamaselectronica.blogspot.com/2008/03/manual-cmo-construir-y-programar-un.html


Rastreadores (velocistas):

En este caso, lo normal es tener que seguir una línea blanca sobre suelo negro o viceversa. Hay circuitos con curvas muy cerradas en los cuales es necesario una buena capacidad de giro. Sin embargo hay otros muy rectos en los que primará la velocidad. En esta modalidad es más o menos fácil hacer un robot que funcione (lo cual no significa que vaya a ganar, ni mucho menos).



Relevos:

En esta categoría, hay un circuito y los robots tienen que comunicarse entre si para darse el relevo (generalmente por radio frecuencia). En el concurso de Deusto, tenían que seguir una línea, darse la vuelta al final de ésta, volver y al llegar detectar un cubo antes de mandar la señal al otro robot (que tenía que hacer lo mismo). El uso de radiofrecuencia encarece el robot, pero para la modalidad descrita es interesante el robot Moway.


Bailarines:

En esta modalidad se requiere que el robot baile, algo en teoría sencillo (programar movimientos). Pero incorporándole un sensor de sonido (que detecte tono y volumen) es posible modificar su baile en función de la música. Si sabeis tocar algún instrumento musical, os lo recomiendo, le dará un toque decisivo a vuestro robot.

Laberinto:

En esta modalidad hay que conseguir salir de un laberinto. Es posible que el laberinto sea desconocido o que sea conocido pero te coloquen en cualquier parte y tengas que salir en el mínimo tiempo posible. Para ello se usan algoritmos de árbol y hay que introducirle al robot las coordenadas de donde se encuentra y adonde tiene que ir. Para ello hay que grabar el laberinto en la memoria. Hay un resumen muy bueno acerca de la programación de un robot para laberinto en Todomicrostamp.


Libre:

En esta prueba se puede presentar cualquier robot. El jurado tendrá en cuenta el diseño, utilidad, imaginación... En fin, una prueba para cualquier cosa que se nos ocurra y que este automatizada, aunque por lo general, no es muy habitual en los concursos.


viernes, 18 de abril de 2008

Robots

Existen una gran cantidad de robots ya montados, con diferentes placas. Se pueden adquirir, por ejemplo, los robots de Parallax, en MSE, Bilbao. También hay una gran cantidad de sensores. Los robots más importantes y conocidos son: El Boe-bot, el Scribbler y el Sumo-bot.

Scribbler:

Es un robot muy compacto y característico por su color azul. Es ideal para niños o principiantes ya que su programación es muy sencilla ya que no utiliza lenguaje textual sino con dibujos. Es muy fácil de programar y manejar, pero también es restringido su uso. No se le pueden añadir muchos sensores ya que está atornillado y tiene sus limitaciones en cuanto a velocidad y potencia de sus motores se refiere. Es el robot más barato (80 €) y sólo es recomendable para el aprendizaje, aunque es posible que pudiese participar en la modalidad de seguidor de líneas aunque no con muy buenos resultados. No tiene muchos sensores (3 sensores de luz, 2 sensores infrarrojos para detectar obstáculos y 2 sensores infrarrojos para la detección de líneas en el suelo.


Boe-bot:

Este robot es posiblemente el más interesante y con más posibilidades de transformación. Se le pueden añadir muchos sensores debido a que utiliza la placa BS2, la cual está situada en la parte superior y tiene fácil acceso. Este robot tiene dos partes: la estructura y la placa. Estas dos cosas pueden comprarse por separado. Tiene unos cuantos sensores y puede utilizarse para todo con la adecuada adaptación. En la modalidad de seguidor de líneas se utiliza mucho aunque también se ve alguno en la de sumo. Es un robot de precio asequible y con muchas posibilidades por lo que sería uno de los más recomendables.


Sumo-bot:

Este robot está especialmente preparado para la modalidad de mini-sumo. Es más caro (164 €). No tiene tanta capacidad de adaptación como el boe-bot y debido a su elevado precio es menos recomendable. En mi opinión sería más interesante comprar los sensores y la placa y construirte tu propio robot a utilizar este.


Otros robots son The Toddler robot (robot bípedo) , picbot 2 y 3 (plataformas con una gran cantidad de sensores), moway, penguin bot (bípedo) , RCX y NXT (Lego).

Aquí tenéis el enlace a la página web dónde podréis encontrar varios de estos robots.
Moway:
El robot Moway es un pequeño robot de bajo coste (80 €) fácilmente programable mediante una interfaz gráfica. Se necesita una pequeña targeta para programarlo que cuesta 20 € más. Además se le pueden incorporar módulos de radiofrecuencia para programarlo o para que se comunique con otros robots. Cada módulo cuesta 25 € y se acopla fácilmente al Moway. Tiene sensores infrarrojos delanteros para detectar objetos, en la base para detectar líneas y un sensore de luz.



RCX y NXT:

Estos robots han sido elaborados por LEGO Mindstorms en colaboración con el MIT. Ambos están pensados para pequeños o iniciados, ya que se programan por un sistema de ladrillos, una interfaz gráfica. El NXT (la versión nueva) cuesta 250 €, el RCX, el antiguo, ya no se vende. Tienen varios sensores (sobre todo el nuevo). El RCX tiene 2 servos, 2 bumpers y un sensor infrarrojo. El NXT tiene 3 servos, un bumper, un sensor ultrasónico, uno de luz y otro de sonido. Además tiene bluetooth y numerosos sensores que pueden comprarse por separado (acelerómetros, por ejemplo). Estos robots tienen la ventaja de que pueden realizarse numerosos proyectos gracias a la gran cantidad de piezas LEGO. Pueden mezclarse además con los productos LEGO Technic.

RCX

NXT

Robots ``artesanales´´:



Robot Barcineitor



Robot LEGO Mindstorms de Sergio

Robot de Alex para sumo

Robot de Iñaki para seguidor de líneas

Hay infinidad de sensores dependiendo del uso que se les vaya a dar. También hay muchos complementos disponibles. Hay sensores para medir distancias, receptores GPS, sensores de sonido, sensores de reflexión, sensores de luz, sensores de obstáculos infrarrojos y ultrasonidos, sensores de temperatura, brújulas... Hay una gran cantidad donde elegir, y hay que escoger en función de nuestras necesidades (por ejemplo, la longitud a la que vaya a estar el objeto con un sensor ultrasónico) y del presupuesto.
Como complementos podemos encontrar unas ruedas más gruesas e incluso unas ruedas de oruga. También podemos comprar más motores para otorgarle una potencia mayor. Haré algún artículo sobre sensores disponibles y sus usos, así como mi propia valoración.

Conocimientos previos

Acerca de su funcionamiento:

Los robots son como ordenadores, es decir, computadoras. Son máquinas capaces de realizar numerosas tareas con una precisión inalcanzable para el ser humano y sin cometer fallos debido al cansancio u otros factores. Eso sí, por el momento no son capaces de pensar (como los seres humanos) o aprender, sino que lo que hacen es tomar decisiones lógicas. Es decir, dependiendo de cómo estén programados actuarán en consecuencia a estímulos externos. Por ejemplo, si un robot está programado para que cuando detecte un ruido superior a 60 dB emita un pitido, al gritar alguien cerca éste pitará, pero no porque lo haya pensado, sino porque según su programación es lo que debe hacer. Si nadie grita, no emite ningún pitido: una decisión lógica. Los aparatos electrónicos y por consecuencia los ordenadores, microcontroladores, robots… funcionan con un sistema binario, es decir, trabajan con 1 y 0. Con tan solo dos estados se puede conseguir que los ordenadores actuales hagan infinidad de cálculos. La ventaja de los computadores reside en la velocidad con la que trabajan con estos 1 y 0. Trabajan con bits, unidad que puede tener estos dos estados. 1 y 0 significan que pasa corriente o no, es decir un 1 será un pulso de corriente y un 0 no tendrá corriente eléctrica, tensión alta y tensión baja. Por esto las computadoras basan su trabajo en la electricidad. Los ordenadores realizan operaciones con estos dos estados. No explicaré como funciona o como se realizan estas operaciones debido a su complejidad (álgebra de Boole) ni tampoco hablaré sobre los transistores, osciladores, silicio etc. Que se utilizan en los procesadores, memoria… de las computadoras.
Por ello se debe tener en cuenta a la hora de programar el funcionamiento binario de los robots mediante los bits (aunque últimamente se habla del qubit (aún en desarrollo), capaz de poseer los dos estados a la vez).

Acerca de su hardware:

Los robots tienen varias partes, yo los clasificaría en dos: La parte estructural y la parte electrónica. La parte estructural es la parte a la cual pertenece la estructura del robot, es decir: ruedas, tornillos, placas metálicas, materiales… que forman toda su estructura y sobre la cual se colocara la parte electrónica. Esta parte puede ser construida sin necesidad de comprar nada utilizando piezas de LEGO, Mecano u artesanalmente con madera, metal, plástico etc. La parte eléctrica incluiría los sensores, motores, cables, leds… y por supuesto el controlador. El controlador es la única parte insustituible y más importante, ya que es el que maneja los motores y sensores dependiendo de la programación que tenga. Se pueden utilizar numerosos controladores o placas, pero nosotros utilizamos las placas Basic Stamp, concretamente la BS2, ya que hay varios modelos que varían algo entre sí. Otros controladores serían las placas Arduino o algún PIC. Para conectar la placa al ordenador y transmitir así el programa se conecta con un cable serial (también se puede poner un adaptador para el USB). El ordenador es necesario para escribir el programa y después enviarlo al robot (se escribe en el editor PBasic). Aparte de la placa el robot puede tener sensores (dependiendo de cual sea su aplicación hay una gran cantidad) y motores. Dependiendo de la información captada por los sensores el robot tomará decisiones lógicas. Además dependiendo del hardware que se vaya a utilizar (sensores, motores…) se deberá modificar algo la placa. Los sensores, motores y en definitiva todo lo controlado por el controlador está conectado a él, y dependiendo de que sea, deberá conectarse de un modo u otro. Para ello se emplearán leds, resistencias, capacitores, potenciómetros e incluso circuitos integrados (CI). La placa BS2 del Basic Stamp tiene muchos puntos de conexión y habrá que conectar cada cosa en el lugar correcto. La energía la extraerá de una pila de 9 voltios o de 4 de 1.5 voltios.

Los diferentes sensores y robots los comentaré más adelante, al igual que las partes de la placa y su función.

BS2 rev B


Acerca de su software:

Para programarlo se utiliza el programa Basic Stamp, el cual se puede descargar de la página web de Parallax. Utiliza un lenguaje PBasic con unos comandos determinados aunque muy similares a los de otros programas como el lenguaje Basic. Como ya hemos dicho, una vez ya escrito el programa sólo habrá que descargarlo en el robot. Habrá que tener en cuenta el modelo de la placa (BS1, BS2…) ya que hay pequeñas diferencias en la programación entre ellas.

Una vez explicado esto ya podéis aprender a programar.

--------------------------------------------------------------------------------

Autor: Sergio Porres González http://roboticamaselectronica.blogspot.com/

Este documento ha sido realizado para orientar a posibles personas interesadas en la programación de un robot, sobre todo para aquellos iniciados. Si alguien quiere publicarlo, que contacte con su autor: sergioporresgonzalez@gmail.com

--------------------------------------------------------------------------------

miércoles, 16 de abril de 2008

¿Qué es la robótica? Aplicaciones

La robótica es una rama de la ingeniería. Pero la parte más atractiva de ella es que mezcla muchos aspectos diferentes. Es necesaria la programación, la electrónica, la mecánica y por supuesto una gran cantidad de esfuerzo y dedicación. Las ideas probablemente sean lo más importante en un futuro (sino lo son ya) por lo que las personas con más imaginación y creatividad serán fundamentales en este campo aún por desarrollar. En mi opinión, la robótica tendrá una gran importancia en no mucho tiempo, sufriendo una revolución e implantación masiva como la que sufrió el ordenador en todos los hogares.


Las aplicaciones actuales de la robótica son grandes pero en parte por la falta de conocimiento por parte de la mayoría de la población aún no se ha implantado completamente. Bueno, en realidad si lo ha hecho, pero la mayoría de la gente no lo sabe. ¿Como funciona el microondas, o el mando a distancia, o la parte electrónica de un coche? Realmente todo está robotizado (responde de cierta forma a un estímulo determinado), aunque generalmente esto se considera como electrónica. Un robot se suele llamar a algo que se mueve.

Ultimamente la domótica es cada vez más interesante y ya se implanta en algunas casas nuevas. En tareas de precisión y peligrosas es más que necesario (para la desactivación de bombas) y a medio plazo será fundamental para la exploración del espacio (ya se usan algunos en Marte, como el rover Opportunity).


Como conclusión, considero que dado el grado de avance tecnológico que hay en la actualidad en breves no nos parecerá tan extraño tener un robot deambulando por casa (con alguna función útil, por supuesto).

Aprender a programar

Actualmente millones de personas usan el ordenador a diario pero no muchas saben programar. El campo de la programación abre muchas puertas y un mundo de posibilidades mucho mayor. Por lo general no suele ser sencillo, pero con constancia se puede llegar a dominar un lenguaje. En seguida publicaré algunos consejos y guías para programar. De momento mirar estas dos webs:

http://www1.ceit.es/asignaturas/Informat1/AyudaInf/Index.htm#Office

Tiene varios manuales, tanto sobre Linux, ofimática como diferentes lenguajes (Visual Basic, C, CSS, html...). De la Universidad de Navarra, muy recomendable. Es parecido a 1º en la uni...

Este es de HTML, también de la Universidad de Navarra.
http://www.tecnun.es/asignaturas/Informat1/Ayudainf/CursoHTML/Curso01.htm