Blogia
Las Pequeñas Paranoyas de Motagirl

Tech/Geek/Craft

Matlab Party

Recién salido del horno de mi práctica de Señales y Sistemas:

MATLAB no se aclara consigo mismo...

Dell XPS M1330 (Parte III - Instalando Ubuntu/Partición de Almacén)

(Parte I - Unpacking e Instalación de Windows XP)

(Parte II - Drivers en XP)

 

Bien. Sábado por la mañana, he dormido de maravilla, tengo un sandwich de nocilla en la mano y mucho karma positivo. Todo parece correcto para continuar con la operacion.

Inserto el disco de Ubuntuu 8.04, y comienzo con la instalación (antes hago una verificación de disco y un chequeo de memoria).

Elijo el particionado manual. Hay:

- /dev/sda1  (fat 16) -131 MB

- /dev/sda2 (ntfs) - 52427 MB  (Windows xP )

- /dev/sda3  - 20974 MB

- /dev/sda6  - 326543 MB 

Formatearemos la sda3 como "sistema ext3 transaccional", estableciendo el punto de montaje " / ".

Necesitamos, además, una partición de intercambio (swap). ¿Qué tamaño debe tener? Si la RAM tiene menos de 1 GB, la swap debe ser del mismo tamaño. Si la RAM es de entre 2 y 4 GB, la swap debe ser más o menos la mitad de ésta. Y, como mucho, el tamaño máximo que debería tener una partición swap es 2 GB, porque no siempre el sistema será capaz de manejarla.

En mi caso, le daré un tamaño de 1GB, así que le "quitamos" un cacho a la sda6 para crear una partición lógica sda5 al final, que formatearemos como espacio de intercambio.

La particion de 300GB, la sda6, la formatearemos más adelante como ntfs desde windows.

La tabla de particionees queda tal que así:

- /dev/sda1  (fat 16) -131 MB

- /dev/sda2 (ntfs) - 52427 MB  (Windows xP )

- /dev/sda3 (ext3) - 20974 MB

- /dev/sda6  - 325540 MB 

- /dev/sda5 (swap) - 1003 MB

 

Aceptamos  todo, pide reiniciar.... y ahi lo tenemos: grub se ha configurado a sí mismo y podemos entrar sin problemos a windows y ubuntu :)

Ahora bien, ¿qué pasa con esos 300 gigas que se han perdido en el limbo de los discos duros? Pues nada, hacemos uso de gparted y los formateamos como fat32, para poder acceder a ellos desde windows y formatearlos como ntfs (si, es una solucion cutre pero es la unica que se me ha ocurrido :P)

Desde windows, vemos una unidad C de 52 GB y una unidad D de 303 GB. Creo un par de archivillos desde cada SO en la particion de 300, para comprobar que efectivamente funciona bien, y listo!

Ahora, el modo pijadilla para que la particion de windows y la de datos se monten al iniciar: instalar (sudo apt-get install) ntfs-3g, fuse-utils y ntfs-config. Desmonta ambas particiones si estaban montadas. Ahora, entra  Aplicaciones > Herramientas de sistema > Herramienta de configuración NTFS >  Activa el soporte de escritura interno y externo> escribe un punto de montaje (rollo "/media/Datos" y "/media/windous") y a correr.

El siguiente paso, comprobar que todo funciona correctamente. Una vez que estamos seguros de que todo está en su sitio y que no vamos a necesitar formatear o toquetear cosas raras, ya podemos empezar con las cosas divertidas: instalar software y customizar ambos sistemas. Y después, a meter los datos del antiguo pc :D

Otra pijadilla: Por defecto, Windows alojará Mis Documentos en la misma partición que él está instalado. En teoría esto no es lo que queremos puesto que la partición de 300 GB está para eso, para los datos (música, fotos, documentos etc). Para indicarle que la queremos en otro sitio, vamos Mis Documentos, hacemos clic derecho  > Propiedades. En el campo Destino, indicamos "D:Mis Documentos" , aceptamos y ya está listo :D

 

Y ale, si todo ha ido bien, Perseo y Aleph estarán preparados para poder sustituir a Adel y Sirio :)

 

Dell XPS M1330 (Parte II - Drivers en XP)

(Dell XPS M1330 - Parte I - Unpacking e Instalación de Windows XP)

Bueno, esta "Parte II" de mi aventura con el M1330 va dedicada a los controladores y a Windows XP.

Debido a que Dell no ofrece soporte de ningun tipo para XP con los XPS, hay que buscarse un poco las castañas para encontrar algunos controladores. Me he tirado todo el día de foro en foro y de tutorial en tutorial para conseguir todos los drivers que necesitaba, he visto errores de todos los colores y he reiniciado unos seis millones de veces.

Especialmente, los más chungos de encontrar han sido los de la gráfica (una Nvidia GeForce) y los de audio (la página del fabricante ni siquiera existía), pero tambien ocurrían cosas curiosas, como controladores que supuestamente estaban instalados pero los dispositivos no tiraban, o dispositivos no identificados, o "comportamientos erráticos".

Finalmente, he elaborado una lista con los controladores que a mi me han funcionado y un par de tutoriales majetes. A saber:

 

--- Tutoriales:

- M1330.es

- DellComunity Forum/Laptop/General Hardware: Install Windows XP on Dell XPS M1330

 

--- Drivers:

- Intel Mobile Chipset Driver: R153997  (ftp Dell)

- Ricoh Memory Card Driver: R141246 (ftp Dell)

- Creative Labs Laptop Integrated Webcam: R173082 (ftp Dell)

- Dell Touchpad / Pointing Stick: R175658 (ftp Dell)

- Broadcom 59XX 10/100 Ethernet Controller: R155246 (ftp Dell)

- NVIDIA-GeForce 8400M GS: nv_gfgo_101.34-2kxp32 (softpedia)

- SigmaTel HD Audio Codec-Driver: R158235 (ftp Dell)

- Bluetooth/Wireless Driver: R127314 (ftp Dell)

- UPEK TouchStrip Reader  (lector de huellas) : 2.12_package.zip (upek.com)  -- No lo he probado, pero supongo que funciona

- Intel Serial ATA driver: 7kim06ww.exe (ftp IBM)

- Microsoft UAA Bus Driver for High Definition Audio Support: B888111 WXPS2 (ftp Microsoft)

 

 

El siguiente paso debería ser instalar todo el software que utilizo habitualmente, pero prefiero esperar a....

Parte III: Instalando Ubuntu/Partición de Almacén

 

Dell XPS M1330 (Parte I - unpacking e instalación Windows XP)

He sido mamá!

La criatura, de un agradable color azul medianoche, midió 13.3" y pesó aproximadamente 1.5kg. Aquí podeis ver unas fotos de una madre orgullosa (yo) con su encantador retoñito y los trastitos que venían con él:

- Mi pequeño y yo (disculpad mi peinado, que acabo de dar a luz):

Dell XPS M1330 y yo

 

- Funda de regalo:

Fundita

- Adaptadores, cables de red etc etc (con notas en flickr)

Cables, drivers...

- Mi nuevo chiquitín con su hermano mayor:

Perseo y Adel

 

 

Desgraciadamente, las cosas no son perfectas y sabía que habría problemas en el parto (concretamente, con la Vista del bebé) así que contaba con someterla a una delicada operación de neorocirugía en el mismo momento de su nacimiento.

¿Cuál es el objetivo final?

Desterrar Windows Vista (para siempre), instalando a cambio Windows XP y Ubuntu, además de realizar una partición de datos.

Allá vamos:

15:00- Abro paquete, saco PC, cables, libretos y demás parafernalia.

15.15- ¡Encendido! Todo correcto, pero: el disco hace un clic-clac que según Dell es perfectamente normal y la unidad óptica al insertar/extraer un disco suena como a gato. Según foros y tal, es muy normal. Eso espero ¬¬

15:20: Confirmación de que no me voy a llevar bien con Vista.

15.30: Windows Vista consigue que mi teléfono móvil se quede colgado con una transferencia bluetooth. Eso es lo que llaman daños colaterales, no? ¬¬

15.45 - Leo guías y más guías, me decanto por la más completa y "recomendada", la de http://m1330.es

17:00 - Formateo todo (adios Vista, adios MediaDirect, adios Recovery Partition). El disco es de 400 gigas, así que dejo 48 para Windows, 20 para Linux, y el resto para datos.

17.30- comienza la instalación de Windows XP

17:50- termina la instalación de Windows XP. Hace unos chasquidos muy raros que antes no hacía.

18.00- Instalo drivers.FSM bendiga el sistema de drivers de DeLL

18:10- Por fin, ya detecta la tarjeta de red, asi que puedo conectar y bajar un archivo que hace falta para algo raro del disco duro (SATA vs AHCI)

18:30- Sigo instalando drivers mientras me como un sandwich de philadelphia

18:40- Me pego el susto de la era al descubrir que los botones iluminados de audio, sonido y extraer cd son ópticos xD

18.45: Muchas cosas no funcionan, encuentro un pack lleno de drivers para el m1330 y los instalo todos a saco.

19:00 - Todos los drivers instalados, y reiniciando

19:05: La gráfica hace cosas raras, de los drivers de audio ni rastro y hace unos crujidos sospechosos.

19:15: Necesito un descanso, mañana seguiré.

 

Y bien, hasta aquí mi aventura. Seguiré ojeando por webs y tal a ver qué encuentro, y mañana más.

Ideas, ayudas y palmadas en la espalda, en los comentarios :P

 

Pd: bueno, olvidé decirlo pero la idea es que quede con XP y Ubuntu ^^

 

Sigue la aventura en...

- Dell XPS M1330 - Parte II - Drivers en XP

- Dell XPS M1330 - Parte III - Instalando Ubuntu / Partición de Almacenamiento

Sabiduría Camisetil

Porque ellas jamás mienten:

 

Use The Best...
Linux for Servers
Mac for Graphics
Palm for Mobility
Windows for Solitaire

(visto en una camiseta)

 

 

xkcd - fetishes

 

Como bien le he dicho a Janzo cuando me la ha enviado: "acojona. pero más me acojona haberla pillado".

Podeis ver el original aqui, y algunas "pistas" en la wikipedia, como El Teorema de Incompletitud de Gödel, los Principia Mathematica de Russell/Whitehead y por supuesto, algo de autorreferencia.

Ley de Hofstadter

 

 

Ley de Hofstadter: Siempre toma más tiempo del que se preveía, aún cuando se toma en cuenta la Ley de Hofstadter.

 

(visto, como no, en Gödel, Escher, Bach: Un Eterno y Grácil Bucle)

GMT en Skype con PSP

Mirad qué GMT* más simpaticuno ha sacado el Skype cuando me he conectado desde la PSP:

GMT -46529.6!! Franja horaria de Marte, como mínimo.

Lo vio outime, que se copió vilmente y también lo posteó :P

*Para desubicados: El GMT varía entre GMT -12 (más o menos en el Pacífico) y GMT +12 (Australia), siendo GMT+1 la hora española.

Endianness

¿Creíais que se habían acabado? Pues no, os engañé! Hoy os traigo aún más pruebas de la absurdidad de los Arquitectos de Computadoras ^^

Algunos sí, y otros no, sabréis que hay dos maneras de organizar en una memoria los datos de más de un byte: Big Endian y Little Endian. A esto se le llama "Endianness":

- Little Endian: Usada por el DEC PDP 11, el VAX y los 80x86. En esta ordenación, la dirección de un dato es la dirección del byte menos significativo. Es decir, tomando el ejemplo de la wikipedia, que si queremos almacenar el valor hexadecimal 0x4A3B2C1D, se almacenará "1D 2C 3B 4A"

- Big Endian: Usada por el IBM 360/370 y los Motorola, por ejemplo. Para los computadores que siguen esta ordenación, la dirección de un dato es la dirección del byte más significativo. O sea, que en el ejemplo anterior, el valor a almacenar sería "4A 3B 2C 1D"

 

ç

Ahora bien, ¿por qué se llaman respectivamente "Big Endian" ("de grande a final") y "Little Endian" ("de pequeño a final"). Pues por algo tan sumamente encantador como puede ser el libro Los Viajes de Gulliver. En esta obra, hay un grave conflicto armado entre Lilliputienses y Blefuscanos. ¿La razón? Los lilliputienses abren los huevos hervidos únicamente desde el extremo pequeño y, los blefuscanos, sólo desde el grande.

¿Por qué? Inicialmente, todos abrían los huevos por el lado ancho, pero el abuelo del rey de Lilliput, cuando era pequeño, se cortó abriendo un huevo y emitió un decreto que promulgaba por ley que todos los lilliputienses tenían que abrir los huevos por el lado pequeño  (Concretamente: "Se ha calculado que, en distintos períodos, once mil personas han preferido la muerte a cascar los huevos por el extremo más estrecho").

Y sí, eso es motivo de guerra entre ellos. Primero, Gulliver está de lado de Lilliput, luego se pasa al bando de Blefuscu, vuelve a luchar por Lilliput y después es ascusado de alta traición.  Luego se intenta firmar un tratado de paz entre ambas naciones, para lo que necesitan un traductor (ya que a pesar de ser naciones hermanas, cada una habla una lengua distinta). Aunque el tratado se firma por fuerza y no acaba de cuajar. Finalmente, Gulliver se harta de todo y se vuelve a su casa, y que cada uno abra los huevos como le de la gana O_oU

(Podeis leer el capitulo en el que se habla de los huevos en Wikisource)

Y para acabar, pregunta: ¿Tú por qué lado abres los huevos duros?  Yo por el grande, siempre se les queda aire ahi y es más fácil. Aunque mi profesora de Dibujo Técnico de bachillerato nos contó la manera de ponerlos en el cazo para que estuvieran perfectamente equilibrados y salieran bonitos y lustrosos. La pega es que nos lo contó a base de ovoides, tangentes y demás, y no recuerdo nada :P

 

 

Segmentación de DLX

Este ha sido mi fantásticomaravilloso plan de esta noche. Iba a explicarlo y así se me queda mejor, pero es que veo triple, especialmente los cablecillos del esquema T_T  Os tendréis que conformar con la versión críptica megaguay :/

1. Ciclo de búsqueda de instrucción

IF/ID.IR ← Mem[PC];
IF/ID.NPC, PC ← ( if (Regs[IF/ID.IR6..10] op 0) {IF/ID.NPC+(IF/ID.IR16)16 ## IF/ID.IR16..31} else {PC+4});

2. Ciclo de decodificación de la instrucción/carga de registros
ID/EX.A ← Regs [IF/ID.IR6..10]; ID/EX.B ← Regs [IF/ID.IR11..15];
ID/EX.IR ← IF/ID.IR
ID/EX.Inm ← (IF/ID.IR16)16 ## IF/ID.IR16..31

3. Ciclo de ejecución / dirección efectiva

Referencia a memoria
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUoutput ←ID/EX.A + ID/EX.Inm;
EX/MEM.cond ← 0;
EX/MEM.B ← ID/EX.B;

Instrucción ALU
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUoutput ←ID/EX.A func ID/EX.B;
O
EX/MEM.ALUoutput ←ID/EX.A op ID/EX.Inm;
EX/MEM.Cond ← 0;

Salto/ bifurcación
EX/MEM.ALUoutput ←ID/EX.NPC + ID/EX.Inm;
EX/MEM.cond ←(ID/EX.A op 0);

4. Paso de acceso a memoria / completar salto:

Instrucción Load/Store
MEM/WB.IR←EX/MEM.IR;
MEM/WB.LMD ←Mem [EX/MEM.ALUoutput];
O
Mem[EX/MEM.ALUoutput]←EX/MEM.B,

Instrucción ALU
MEM/WB.IR←EX/MEM.IR;
MEM/WB.ALUoutput ←EX/MEM.ALUoutput;


5. Paso de postescritura (write-back)

Instrucciones ALU
Regs[MEM/WB.IR16..20] ←MEM/WB.ALUoutput;
O
Regs[MEM/WB.IR11..15] ←MEM/WB.ALUoutput;


Instrucciones load/store
Regs[MEM/WB.IR11..15] ←MEM/WB.LMD;

Disfrutad mientras podais de mis rayadas de Arquitectura de Computadores a altas horas de la madrugada (5.13 en estos momentos), mañana empiezo con  Programación Orientada a Objetos y ahí si que no hay de dónde sacar... espero xD

Origen del nombre DLX

En primer lugar, ¿qué es DLX?

DLX es una arquitectura de microprocesadores RISC de carga-almacenamiento, muy sencilla. Está basada en observaciones sobre las primitivas más frecuentes utilizadas en los programas  y suele utilizarse mucho para comparativas de rendimiento y cosas así.

En segundo lugar, y motivo de este post: ¿De dónde viene ese nombre?

En principio es algo que no llama la atención, "DLX", bah, qué chorrada.

Pues no, es un claro ejemplo de aburrimiento épico: Resulta que viene de hacer la media aritmética de nombres de una serie de máquinas próximas* a DLX, expresado en números romanos:

AMD 29K , DECStation 3100,  HP 850,  IBM 801, Intel i860, MPS M/102, MIPS M/1000, Motorola 88K, RISC I, SGI 4D/60SPARCStation-1, Sun-4/110 y Sun-4/260.

O sea: 29 + 3100 + 850 + 801 + 860 + 102 + 1000 + 88 + 1 + (4 + 60) + 1 + (4 + 110) + (4 + 260) = 7274

7274 / 13 = 559.53 , que aproximando es 560, que en números romanos es DLX.

 

*No sé exáctamente a qué se refieren con "próximas". ¿En el tiempo, quizás?

Ley de Rendimientos Decrecientes

Según mis apuntes de Arquitectura de Computadores:

"La mejora incremental en la aceleración conseguida por una mejora adicional en el rendimiento de una parte del cálculo disminuye tal y como se van añadiendo mejoras"

Ayer dediqué más de 15 minutos de mi vida a intentar comprender esa frase.

Ahora, por fin, creo que lo he conseguido.

Bill Gates BSOD

Estaba leyendo "Las 21 Leyes Básicas de la Programación" en SoyGik,  y al llegar al punto

"8. La probabilidad de hacer el ridículo en una demostración pública de tu software es directamente proporcional al número de gente viéndola, creciendo además de manera exponencial el riesgo cuanto mayor sea la cantidad de dinero invertido en dicha aplicación."

, no he podido evitar acordarme de este video:

 

 

woohoo!! Es una conferencia de  COMDEX (una de las convenciones de negocios de computadores más grandes del mundo -que ya no se realiza-) en abril de 1998, donde que Bill Gates y su ayudante Chris Camposella intentaban mostrar lo sencillísimo que era Windows 98 de usar. Concretamente, la idea era enchufar un scanner para demostrar que Windows 98 soportaba dispositivos Plug and Play.

Al menos Bill se lo toma con humor diciendo  "That must be why we’re not shipping Windows 98 yet." (o sea, "esto debe de ser la razon por la que todavía no vendemos Windows 98")

Porcierto, creo que este video es el más claro ejemplo de "situación en la que no me gustaría estar" xD

 

The NeoCube

Uoooo quiero uno de estos, y lo quiero ahora!

Traduzco de su propia web, que yo estoy perra para inventar y mejor que se han vendido ellos no lo voy a hacer yo XD

"El NeoCube es un elemento de entretenimiento sin igual. Está compuesto por 216 imanes de tierras-raras, individuales y muy potentes. Esto te permite crear y recrear una increíble cantidad de formas y patrones. El NeoCube es  literalmente un  puzzle con billones de soluciones, que te dará horas y horas de entretenimiento sin igual"

Vale, dicho así suena a chufa (salvo la frikada de que esté hecho de lantánidos y/o actínidos xD), así que lo realmente revelador es ver el video:

 

 

Este es solo uno de ejemplo, pero hay muchos más en videos relacionados.

Y como pone en la descripción (en youtube): "NeoCube, quizá el objeto más guay que todavía es legal poseer" xD

¿El precio? 40 dólares + gastos de envio desde los EEUU

WARNINGS: Puede dañar dispositivos electrónicos si entran en contacto, al igual que no deben acercarse a personas con marcapasos.  Nos recomiendan no acercarlo a discos duros ni similares (obvio) y no quemarlo (¿qué pasará?). Y lo más interesante: "Si se desprende el material metálico que recubre las bolas, deje de usarlo.  El material NdFeB  que forma las bolas es relativamente nuevo, y sus efectos a largo plazo sobre el contacto con la piel son todavía desconocidos"

uooooo y encima peligrosillo XD Quiero uno!!!

Robot hexapodo convertido en plotter

maeghith ha puesto este video en un post sobre impresoras, tinta, y hojas de alineación, como respuesta a mi ’genial’ idea de hacer impresoras a base de plastidecores.

 

Como  podeis ver, es un simpático robotito con 6 patitas al que se le ha añadido un rotring. Según pone, los archivos dxf (de autocad, por ejemplo) se convierten en movimientos de translación del robot y se le transmiten secuencialmente.

uaaaaaahhh!!! qué monadaaaaaaa   (ojitos) es que es monísmo TT_TT

Scorbot + ACL (con video)

(Entrada BETA hasta que se añada el video del evento xD)

EDIT: Ya hay video! Aunque es de la primera prueba que hicimos. Se ve como funciona bien hasta que tiene que dejar las piezas en la cinta, donde hay un pequeño problema "lógico" xD Como bonus final, se nos oye disertando sobre la sentencia MOVED XD

 

Automatización, gran asignatura. Pocas otras han conseguido que los alumnos se queden una hora de clase más sin rechistar XD Y es que hoy , además, teníamos una buena razón: la práctica consistía en hacer unos miniprogramitas para que un brazo robótico hiciera cosas. Concretamente el robot, un Scorbot ER-IX, tenía que coger piezas de un plano inclinado para ponerlas en una mesa giratoria y, cuando estuvieran todas, moverlas a una cinta transportadora a distancias fijas.

No es difícil, pero había un problemilla fundamental: no tenía ni la más remota idea de programar con ACL (Lenguaje de Control Avanzado). Pero contaba con una poderosa arma de nivel-5: Un manual de 200 páginas sobre cómo utilizarlo. (y que colgaría aquí, pero como no estoy segura sobre la legalidad de esto.... a quien le interese que lo pida :3)

Ahí va una mini mini mini explicación de cómo utilizarlo (por si algún día vuestra vida depende de un bicho de estos)

En primer lugar, varias cosas importantes: El tamaño máximo de nombre de variable es 5 caracteres, las etiquetas de salto tienen que ser números, no valen caracteres raros (tildes, eñes...), ni tabuladores, y las líneas de comentarios deben empezar con asterisco y no ser excesivamente largas. Además, las distancias se miden en décimas de milímetro (cuando son lineales) y en pasos de encoder (las que son radiales).

Una vez aprendido eso (a base de "BUG DETECTED" ¬¬)... creo que va a ser más rápido si copio mi propio programa y lo explico línea a línea XD

BRICONSEJO: aparte de esta versión "plana"(lo rojo, nada mas), en mi pc trabajé con una versión "user-friendly" en la que sí que usé tabuladores y comentarios verdadosos.

Cabecera: sirve para asignar a los distintos programas (AUT10 .. AUT13) los códigos 70..73

$pr 70 AUT10
$pr 71 AUT11
$pr 72 AUT12
$pr 73 AUT13

Programa AUT11: Moverá la mesa giratoria (que se encuentra en el eje 7 del robot) una cantidad fija, concretamente 5000 pasos de encoder.

HERE asigna a la variable mes la posicion actual. Con SHIFT
BY se le indica cuánto debe moverla, y con MOVED se realiza el movimiento de un modo secuencial ( o sea, que hasta que no se mueve no se pasa a la siguiente linea). Y END tiene que estar siempre al final de cada programa.
PROGRAM AUT11
****************
HERE mes
SHIFT mes BY 7 5000
MOVED mes
END

Programa AUT12: Mueve la cinta transportadora 3000 décimas de milímetro (esta vez, el movimiento es lineal) La cantidad es negativa porque la cinta se movia "hacia acá" y no "hacia allá" xD


PROGRAM AUT12
***************
HERE mes
SHIFT mes BY 8 -3000
MOVED mes
END

Programa AUT13: Igual que el AUT11, pero la mesa gira en el sentido contrario


PROGRAM AUT13
****************
HERE mes
SHIFT mes BY 7 -5000
MOVED mes
END

Programa AUT10: El programa principal.

DEFINE: permite declarar una variable, en nuestro caso, pieza, que usaremos para contar el número de piezas (ya que a priori es desconocido). Con SET le asignamos el valor 0. LABEL define una etiqueta a la que saltaremos posteriormente (para hacer bucles, basicamente).

 


PROGRAM AUT10
*************
DEFINE pieza
SET pieza = 0
LABEL 1

IF IN[2]=1 comprueba la entrada 2 (que es un sensor colocado en el plano) para saber si hay más piezas (cuando vale 1). Si la hay, aumenta el contador de piezas, e invoca al programa AUT01 (dado por el profesor. el robot coge una pieza y la mueve a la mesa) con GOSUB. Cuando el programa AUT01 acaba de ejecutarse, se vuelve al mismo sitio desde el que se invocó. Se invoca al AUT11, el que os he contado arriba, que mueve la mesa giratoria. Luego. con el GOTO 1, se vuelve a donde pone LABEL 1 y se repite ese cacho.


IF IN[2] = 1
SET pieza = pieza + 1
GOSUB AUT11
GOSUB AUT01
GOTO 1
ELSE

Cuando no hay piezas se entra en el ELSE. Como en el paso anterior hemos ido aumentando el contador piezas hasta que sabemos cuántas piezas tenemos que mover, este paso tendremos que realizarlo ese mismo número de veces. Por eso, mientras el contador diga que hay más de 0 piezas es que nos queda alguna por mover. Le restamos uno, e invocamos con GOSUB al programa AUT02 (también proporcionado por el profesor, coge una pieza de la mesa giratoria y la translada a la cinta transportadora) y luego al AUT13 para desplazar la mesa en el sentido contrario (y estar preparados para coger la pieza siguiente.
LABEL 2
IF pieza > 0
SET pieza = pieza - 1
GOSUB AUT02
GOSUB AUT13

Aquí controlamos el movimiento de la cinta una vez hemos movido la pieza. La cinta tiene un sensor a una determinada distancia de la zona donde caen las piezas: la cinta tiene que estar en marcha hasta que la pieza llega allí (para que las piezas queden todas a la misma distancia) Para ello, consultamos el sensor de la entrada 1: si vale 0 es que la pieza no ha llegado todavía al sensor, así que la cinta debe seguir avanzando (invocamos al AUT12), y estamos en ese feliz bucle hasta que se detecta la pieza. Entonces, movemos una vez más: para que salga del rango del sensor y cuando comparemos con la siguiente pieza NO valga 1, y volvemos a repetir desde LABEL 2.
LABEL 3
IF IN[1] = 0
GOSUB AUT12
GOTO 3
ELSE
GOSUB AUT12
GOTO 2
ENDIF
ENDIF
ENDIF

CLRBUFB
END

Cuando ya no quedan piezas, se sale de todos los IF y ELSE (con los ENDIF) , limpiamos el bufer "porsiaca" (CLRBUFB) y terminamos con un END como una casa :D

Despues de escribir el programilla, se le envía a la parte de control del sistema, donde se comprueba su sintaxis y se cargan en el bicho :) Luego se le da la orden RUN AUT10 y a correr!!

WARNING: Me encantaría decir que el programa va perfecto... pero sólo he podido probar la mitad porque a los del grupo de antes se les ha roto la mesa giratoria por un choque bastante brutal con la pinza del bicho :/ Pero tendremos la esperanza xD (Y eso que jamás he visto usar un botón del pánico tantas veces en tan poco tiempo xD)

Y eso es todo, creo. Si Skelv cuelga el video, lo añadiré a esta entrada =^_^= (por eso es beta)

C-Jump

¿Cansado de los mismos juegos de tablero de siempre? ¿Harto del parchis?  ¿El Monopoly te produce alergia? ¿Te sabes todas las respuestas del Trivial? ¿Buscas un juego familiar que ponga tus neuronas a tope? ¡C-Jump es la solución!

Sí, me temo que es lo que parece. ¡Un juego de tablero de ski basado en la programación en C!

Este juego, pensado para que los niños a partir de 11 años aprendan los fundamentos de la programación, porque nos enseña las bases de la programación de un modo guay!! (sic)

Superado el LOL inicial, veamos el  modo de juego (O lo que yo he entendido): Cada jugador puede tener una o varias fichas que pueden ir por distintos trozos del programa (no pienses en hilos de ejecución, no pienses en hilos de ejecucion!!). Se lanza el dado, y el número obtenido corresponde al valor de la x. El jugador se mueve el número de casillas indicado por el que marcó el dado operado por la casilla. Por ejemplo, si sacas un 4 y estás en una casilla "x++", avanzas 5.  Las fichas, que representan esquiadores (O_o) solo pueden parar en las casillas con "{" o "}". El jugador entrará en los ifs cuando cumple la condición del bucle, si no  tendrá que pasar por el lado del else. Lo mismo para los loops y los whiles. Dentro de un bucle, el jugador puede caer en un "continue" (sigue en el bucle) o en un "break" (sale de él). Cuando se cae en un "goto", tiene que saltar a la  casilla "jump:".  Las casillas de switch van controladas por el valor del lanzamiento del dado. Gana el que llega a la casilla "finish" sin pasarse.  Y si caes en el "return". ... tienes que volver a empezar!!!  :O

Porcierto, pone que está basado en esquiadores porque "la analogía entre el ski/snowboard y la programación es perfecta!"  (a mi que me lo expliquen)

No podemos dejar pasar el FAQ, en el que responden a preguntas filosóficas como  "¿Es "while (x>0)" un bucle infinito?" o "¿Por qué este juego incluye la infame sentencia "goto"?

¿Te ha gustado? ¿Quieres que tus hijos acaben como tú, o en su defecto, como yo? (xD) Pues puedes comprarlo aqui por 25$ + 12$ (de gastos de envío), y empezar a generar niños geeks, como el de la foto, a partir de YA.

 

(via piratizarros)

 

Cuidado con las bombillas de bajo consumo

Cuidado con las bombillas de bajo consumo

 

Bueno, después de una maravillosa casi-semana de vacaciones blogueriles que me han sentado fenomenal, en las que si alguien me preguntaba por el blog mi respuesta mayormente era "yo no tego blog"....vuelvo magicamente para salvaros la vida.

Pues sí, hijos míos, esta noche Peibol y yo hemos tenido un pequeño accidente: nos ha "reventado" una bombilla de bajo consumo cuando íbamos a empezar a cenar. Digamos que ha empezado a salir un gas misterioso de dentro la bombilla, un gas blanquito y que olía a yodo, que picaba en los ojos y que no molaba nada respirar. Inmediatamente hemos abierto las ventanas y nos hemos llevado la cena a otra parte.

Nada más llegar a casa, he buscado en internet algo sobre el misterioso gas..... y esto, entre otras cosas, es lo que he encontrado:

(…) algunos expertos advirtieron a los consumidores que deberán extremar los cuidados a la hora de deshacerse de las bombillas (de bajo consumo) que se hayan fundido o roto para evitar la contaminación con el mercurio venenoso que contienen. La Agencia del Medio Ambiente del Reino Unido reconoció que tanto el comercio como las autoridades tienen que hacer mayores esfuerzos para informar al público de cómo hay que reciclar ese tipo de bombillas

(…) Según consejos del Ministerio británico del Medio Ambiente, si se rompe una bombilla de baja energía, hay que evacuar la habitación de personas durante un cuarto de hora como mínimo. (…) Según el toxicólogo David Ray, de la Universidad de Nottingham, citado por la BBC, una bombilla de baja energía tiene entre 6 y 8 miligramos de mercurio, cantidad que es por sí «muy pequeña». El peligro estriba en su acumulación en el cuerpo y especialmente en el cerebro por exposición repetida a ese metal (…)

Así que ya sabeis: cuidado con estas bombillas cuando se rompen.

Sólo algo que me preocupa: hemos ventilado, pero cuando se ha roto la bombilla... mi cena estaba debajo!!! :/

 

PS: parezco un horrible mail en cadena de esos de "reenvía esto a las personas que realmente te importan si tienes corazon" ¬¬

 

 

Código Fuente de Windows Vista

Ahora hago chas y me saco de la manga otro mágico post de relleno. Es lo que tienen los puentes, que me convierten en un ente vaguete y amorfo (en realidad estoy demasiado ocupada).

Me encantan los includes, la función  BSOD y  los printfs comentados xD

(visto en Bocabit)

 

Automatizacion: Control de una puerta de garaje con Arduino (DIY)

(Antes de nada, los credits: Mi grupo éramos Héctor, Aitor y yo misma =^_^=)

El pasado jueves estuvimos en clase de Automatización jugando con Arduino. ¿Qué es Arduino? Arduino es,copypasteando de la wikipedia, una plataforma de hardware de fuente abierta basada en una sencilla placa con entradas y salidas (E/S), analógicas y digitales, y en un entorno de desarrollo que implementa el lenguaje Processing/Wiring. Está basado en el procesador Atmega8, un chip sencillo y de bajo coste que permite el desarrollo de múltiples diseños. Hay más info y múltiples ejemplos en su web.

Tengo que decir que es la primera vez que trabajaba con algo así, y que me ha encantado la experiencia. ¿Por que? Porque, para empezar, es tremendamente sencillo de utilizar: Sólo hay que escribir el código en C un poco modificado, enchufar la placa al pc por usb, volcarle el programa, montar el circuito y ale, a correr. Pega: necesitas una placa, pero rondan los 30 euros (visto lo visto, no es tanto); aproximadamente la mitad si montas los componentes por separado (aunque te sale una placa más grande)

Concretamente, el modelo que hemos utilizado en clase ha sido una Arduino Diecimila, que aquí podeis ver en mi manita:

Arduino Diecimila

(haciendo clic en la imagen podeis acceder a ella en flickr, le he puesto unas cuantas notas explicando más o menos qué es cada cosa)

Al principio, el profesor nos sugirió que pensáramos nosotros un posible uso de la placa para escribir el código (sin circuito). Y me costó mucho, muchísimo pensar algo xD Pero cuando empezamos a utilizarla "fisicamente"... miles de ideas vinieron a mi ^^ Y eso da gustito :) (Aquí es cuando inserto un "gracias al señor mapache", por pasarme enlaces interesante con ejemplos, como este o este)

En esta práctica, la idea era diseñar e implementar un sistema de control para una puerta de garaje. En nuestro sistema, tenemos un botón para abrir la puerta, otro para cerrarla y además un detector de presencia, que para no montar más lio de cables, sustituimos/simulamos con un tercer botón. Además, en la puerta hay conectados dos finales de carrera, para indicar si la puerta está cerrada o abierta completamente. Se usan, además, dos relés para abrir y cerrar, y unas cuántas resistencias para no quemar nada (y mira que nos gusta xD) Bueno, y por supuesto, la puerta del garaje, el motor, el piñon-cremallera.... también eran bastante necesarios jaja.

O sea:

  • Una placa de pruebas de laboratorio.
  • Una fuente de alimentación a 7,5 V. para alimentar el motor de la puerta de garaje.
  • Dos relés de placa de circuito impreso de 5V.
  • Una placa Arduino.
  • Un cable USB para conectar y alimentar la placa Arduino a través del PC.
  • Tres pulsadores.
  • Cinco resistencias de 2K2 ohmios.
  • Cables de conexión.
  • Multímetro.

Este es el esquema de conexión de las entradas:

Conexión entradas

Y este es el esquema de conexión de las salidas:

 

Conexion Salidas

Y aquí, podeis verlo todo montadito (slalvo la puerta con su motor y finales de carrera):

Circuito montado


Y para acabar, este es el código. Tengo que decir que tardé exactamente 10 minutos en diseñarlo y escribirlo, más otros 5 de "solución de minibugs" xD Y además, se autoexplica a sí mismo:

//Entradas
int PulsadorVerde = 3;
int PulsadorRojo = 4;
int PulsadorPresencia = 5;
int FinCarrera_Abierto = 6;
int FinCarrera_Cerrado = 7;

//Salidas
int Rele_Abrir = 12;
int Rele_Cerrar = 13;


void setup (void) {
pinMode(PulsadorVerde, INPUT);
pinMode(PulsadorRojo, INPUT);
pinMode(PulsadorPresencia, INPUT);
pinMode(FinCarrera_Abierto, INPUT);
pinMode(FinCarrera_Cerrado, INPUT);
pinMode(Rele_Abrir, OUTPUT);
pinMode(Rele_Cerrar, OUTPUT);
}



void loop (void) {

if (digitalRead (PulsadorRojo) == HIGH) {
while ((digitalRead(PulsadorPresencia) == LOW) && (digitalRead(FinCarrera_Cerrado) == HIGH)&& (digitalRead (PulsadorVerde) == LOW)){
// Al pulsar el rojo, mientras no hay presencia, no se pulse el verde y no se ha cerrado

digitalWrite (Rele_Abrir, LOW);
delay (500);
digitalWrite (Rele_Cerrar, HIGH);
}
}

delay (100);

if (digitalRead (PulsadorVerde) == HIGH){
while ((digitalRead(FinCarrera_Abierto) == HIGH) && (digitalRead (PulsadorRojo) == LOW)){
//Al pulsar el verde,mientras no se pulse el rojo y no se haya abierto
digitalWrite (Rele_Cerrar , LOW);
delay (500);
digitalWrite (Rele_Abrir, HIGH);
}
}

//Estado de reposo , no hay nada pulsado, o hay presencia
digitalWrite (Rele_Abrir, LOW); //hay presencia, se corta la energía al motor
digitalWrite (Rele_Cerrar, LOW);
delay (100);

}

 

Sencillo, verdad? :)

El código se escribe en un software especial para esto, que se puede descargar desde la propia página de arduino y corre sobre Windows, Mac y Linux. Este software te informa de si tu código es o no correcto, te permite pasarlo a la placa, enviarle órdenes y seguro que hace más cosas. Para pasar el código a la placa, simplemente se instalan los drivers que van con el software, se conecta la placa por usb al pc, se elige el puerto correcto (en mi caso, el COM4) y le dices "alah, vuélcalo" . Y a correr!

Cosa graciosa: el programa "inicial - por defecto" que lleva la placa es simplemente apagar y encender el LED que lleva incorporado. Pero lo hace a una velocidad bastante graciosa y suena como cuando se cocinan palomitas xD

Como bonus-colofón final, el video del artilugio funcionando (Dirigido por Hector, filmado por Aitor, y las manos que aparecen son mías XD)

Seguro que me he dejado algo por explicar/contar/agujeros de conocimiento. Si se os ocurre algo, preguntad en los comments, que para eso están =^_^=



Arduino - puerta de garaje
Cargado por motagirl2

 

Actualizado: Nuevo video, made by Héctor: