Monday, January 6, 2020

InMoov Finger Starter

Now that I got the calibrator working (at least for the time being) I have moved on to the actual Finger tutorial. I did have a bit of surface adhesion problems while printing but once that was resolved the steps were easy enough to follow.

There are a few things that are worth mentioning.

The tutorial uses metric drill bits to re-drill the holes int he printed parts. Unfortunately I did not have the exac ones, so I had to use approximate replacements:

3mm  -- may need to use a 1/8" (3.2mm)
3.5mm -- may need to use 9/64" (3.6mm)
1.5mm -- may need to use 1/16" (1.6mm)

The instructions also suggest using 3mm filament pieces on the joints but I did not have any. I used M3 bolts instead with nuts to secure them because my slightly larger drill bits had left the holes a bit too large. Since this is just a prctice finger I think it's OK for now, but I'll have to revisit this issue or at least cut the excess off the bolt length.




Even a single servo will probably need more power than what the Arduino board can provide. Be sure to use a battery or other power source. I could not find any specific details on how much current the recommended HK15298B can draw but the best clue that I found online suggests it can be around 2 A, which is a LOT. An average AA battery (don't quote me on this) can provide only about 50mA so instead I found an old power adapter, cut the tip and used it to power the servo.




Once I programmed the Arduino with the provided script, another little speedbump I ran into is that upon the first try the servo did not move. The trick to solve that was to make sure that the power adapter I used and the Arduino shared the same ground. In my particular case I was using USB to power the board, so I just used a wire to connect the ground pin to the ground wire of the power adapter for the servo using a breadboard.

I also noticed that the servo can mechanically move 180 degrees but in reality it only moves 90 degrees. This is something that I overlooked when looking at the list of compatible servos from the InMoov website (It's clearly stated there) and I wasted like an hour trying to figure out why the board did not turn it all the way. My bad.

In the end it all worked out, although I still need to think about the buzzing noise made by the servo when it's at the max position pulling the finger. It makes the same noise even if there's no load, so I suspect it may be related to the low(ish) voltage fro my power adapter, maybe it will work better once I provide at least 6V.




InMoov Calibrator

I have decided to start the journey of building the famous InMoov robot. I have started with the basic Finger Starter and the very first thing to do is calibrate the printer to ensure that the parts will fit together properly.

I am using an Ender 3 printer, Cura and PETG filament. Upon my first attempt the pieces were so tight that once I was able to forcefully put them together I could not pull them apart.


Calibrator with 0.0mm horizontal expansion

After a bit of searching, I found that others with the same issue had been able to fixing by changing the Horizontal Expansion setting in Cura. They suggested different values, so I had to try for myself. That setting affects the "holes" in the print, negative values means the holes are more "loose". I tried -0.2, -0.4, -0.1, -0.05 and -0.08 mm in that order. Here's some pictures with the results.

Calibrator with -0.2mm horizontal expansion
Printing with -0.2mm left the pieces fit but a little too loose. Then I still went on to try -0.4mm to see how much different it was and the result was as follows.

Calibrator with -0.4mm horizontal expansion
This time the holes were even bigger, by too much. So I moved the other way and tried -0.1mm.

Calibrator with -0.1mm horizontal expansion
That one fit almost perfectly but I still ha dto try to get better results, so I went for -0.05mm.

Calibrator with -0.05mm horizontal expansion

This time the sides fit tight but not too much, the problem was the center rectangle that I could not take apart after trying for a few minutes. So I finally tried -0.08mm...

Calibrator with -0.08mm horizontal expansion
And here I stopped trying! It fit slightly better than -0.1mm and I could remove the pieces easily.

Conclusion: If you are having trouble with the calibrator pieces not fitting, I'd try the Horizontal Expansion setting on your slicer first, your perfect number will be most likely different than mine but somewhere between -0.1mm and -0.2mm is a good place to start.










Friday, November 15, 2019

Programming languages for Web Development

A web application is usually built with 5 types of files corresponding to different programming languages. 

Client side

These files are copied to the users computers via web browser and displayed/run there.

HTML

What's for:
Setting the basic site structure, like what part is text, what's a table, what's a picture, etc...

File extension:
.html

Code looks like:

<html>
  <header>
    <title>This is title</title>
  </header>
  <body>
    Hello world
  </body>
</html>



JavaScript

What's for:
Writing functions that run on the user's side, like get the local time, display alerts, set a timer, etc..

File extension:
.js

Code looks like:

function initCountdown() {
  var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
  var today = new Date();
  var secondDate = new Date(2017,7,27);
  var diffDays = Math.round(Math.abs((today.getTime() -  secondDate.getTime())/(oneDay)));
  document.getElementById("countdown").text = diffDays;
  alert(document.getElementById("countdown").text);
}


CSS

What's for:
Making the app pretty. Font type, color, size, image borders, alignment, some animations, background, etc...

File extension:
.css

Code looks like:
.on-the-day-section .two-column-holder ul li p {
padding: 0 2%;
font-family: "Lato", sans-serif;
font-size: 12.5px;
font-size: 1.25rem;
color: #828282;
text-align: center;
}


Server side

These files are executed privately on the web server

SQL

What's for:
Read and write from/to a database

File extension
.sql

Code looks like:
select first_name
, last_name
, email
, phone
from customers
where name = 'Homer'


PHP/Python/Java/Go, etc..

What's for:
Middle-man between users and database, depending on language it handles security, authentication, serving files, etc...

File extension:
Various (.php, .py, .java, .go, etc...)

Code looks like:
Various, but similar to the JavaScript example.

Sunday, April 13, 2014

Que es eso de "formatear" y "particion"???

Tal vez de pasada has escuchado a un par de aficionados a las computadoras hablando y por ahí mencionaron las palabras "partición" y "formatear". Por si acaso te has preguntado que es eso, aquí esta la explicación "con manzanitas". 

Cuando compramos un disco duro nuevecito de paquete no trae absolutamente nada, es como un cuaderno nuevo. Es mas, es como un cuaderno completamente en blanco, sin cuadricula ni renglones ni nada. Ahora supongamos que este cuaderno lo vamos a necesitar para una sola cosa, eso quiere decir que no necesitamos ninguna división y que el cuaderno tendrá una sola sección. Las particiones de un disco duro son como las secciones del cuaderno, siempre vamos a necesitar por lo menos una. Pero ademas de decidir cuantas secciones va a tener el cuaderno (cuantas particiones va a tener el disco duro) también necesitamos renglones o cuadricula para escribir ordenadamente. Para el disco duro, el formato seria como estos renglones o cuadricula. Y de la misma manera que existen diferentes tipos de renglones y cuadriculas en los cuadernos, también existen diferentes formatos para los discos duros que determinan como se almacena la información, si hay algún tamaño máximo que los archivos pueden tener y otros detalles. Estos son los formatos mas comunes:

  • NTFS(New Technology File System): Es el formato (o mas correctamente llamado "Sistema de Archivos") que usa Windows.
  • HFS+(Hierarchical File System): Es el sistema de archivos(o formato) que usan las Mac.
  • FAT32(File Allocation Table 32): En versiones viejitas de Windows era lo que se usaba, ahora se usa mayormente en tarjetas de memoria o memorias USB porque aunque tiene sus limitaciones, es lo mas compatible con diferentes sistemas operativos, por ejemplo, puedes meter una memoria en una computadora con Mac y luego en otra con Windows y las dos la leerían y escribirían sin problemas.

Y... por que habríamos de querer mas de una en un disco duro? Las razones mas populares son:

  • Tener mas de un Sistema Operativo: Los sistemas operativos mas populares utilizan diferentes sistemas de archivos, y para tenerlos instalados en la misma computadora se requiere tenerlos en particiones o discos duros diferentes.
  • Separar los archivos del usuario de los archivos del sistema: Esto es especialmente útil para aquellos que tienen la costumbre de reinstalar su sistema operativo a cada rato. Como para eso es necesario borrar todo lo que hay en la partición, es muy conveniente tener todos los archivos que si se quieren conservar en una partición diferente, donde estén seguros.
  • Combinación de las dos cosas anteriores: Como Windows no puede escribir una partición para Mac y viceversa, a veces es una buena idea crear una tercera partición que sea FAT32 para poner los archivos en un solo lugar y que se puedan leer y escribir fácilmente sin importar el Sistema Operativo en el que estemos en ese momento.

Otra manera de imaginarse las particiones es como si fueran discos duros diferentes, es decir, se puede tomar un disco duro de 500 GB y dividirlo en 2 particiones de 250 GB cada una y a los ojos del sistema operativo parecería que la computadora tiene dos discos duros de ese tamaño en vez de uno. Por ultimo, tal vez te hayas imaginado que "formatear" significaba "borrar todo", esto no es necesariamente cierto. Darle formato a un disco duro es como borrarle los renglones al cuaderno y volvérselos a poner, pero la diferencia es que en el disco duro la formateada hace parecer que el disco duro esta en blanco de nuevo y la computadora nada mas escribe "encima" de lo que había antes. En otras palabras cuando uno formatea, un efecto secundario es que la información "se esconde", por eso es que la mayoría de las veces en vez de realmente borrar todo lo que tiene el disco duro(que es mas tardado), la gente solo lo "reformatea" y empieza a poner las cosas nuevas encima de lo que había antes.

Saturday, April 12, 2014

Que es un Sistema Operativo?


Ah! Otro de esos conceptos que nos hacen esconder la cabeza en la tierra... Hoy veremos que no hay que ser un experto en computación para saber qué es un sistema operativo.

Si fuéramos a una tienda de partes de computadora y compráramos todo nuevecito de paquete (Procesador, RAM, Disco Duro, etc...) y la armáramos nosotros, al momento de prenderla no haría NADA (con excepción de mostrar una pantalla con la marca de la motherboard), solo aparecería un mensaje diciendo "No hay sistema operativo" y ya. Con las computadoras de marca esto no sucede porque desde la fabrica le ponen en el disco duro el sistema operativo y cuando uno la compra parece que siempre estuvo ahí. Digamos que el sistema operativo es el programa mas indispensable que necesita una computadora para funcionar, lo primero que hace tu computadora en cuanto la prendes, antes de darte el control a ti.

Si comparáramos a una persona con una computadora, cuando un bebe nace, ya viene con un sistema operativo "preinstalado" que controla las funciones básicas de su cuerpo, como respirar, los latidos de su corazón y todas esas cosas que ya nació "sabiendo". La diferencia es que una computadora requiere que el fabricante o el usuario instalen (le enseñen) un sistema operativo para que haga lo mas esencial. Ya con el bebe realizando sus funciones sencillas, con el tiempo uno le va enseñando a hablar, caminar, dibujar, escribir, etc... y a una computadora que ya tiene un sistema operativo instalado ya le puedes instalar otra cosas, como un messenger, algo para usar Twitter, iTunes para sincronizar tu iPhone, etc... hay una infinidad de otros programas que le puedes poner DESPUÉS de que ya hay un sistema operativo que los coordine.

Bueno, y ahora que ya quedo claro lo esencial que es un sistema operativo, agregare que en estos tiempos en los que las computadoras son muchísimo mas poderosas que hace dos décadas, los sistemas operativos ya no nada mas traen "lo básico". Con el paso de los años la gente que hace los sistemas operativos les han ido poniendo mas cosas, de manera que ahora, volviendo a la comparación con un bebe, los chamacos ya nacen hablando, escribiendo y hasta jugando fútbol. OJO: no porque tu sistema operativo ya viene con cierto programa pre-instalado no quiere decir que es la mejor opción, tu puedes después instalar uno que haga lo mismo pero mejor o que te guste mas.

Hay muchos sistemas operativos, pero los mas conocidos y que seguro has escuchado mencionar por ahi son:

Windows

Hecho por Microsoft, este es el que viene pre-instalado en la mayoría de las computadoras personales y muy probablemente lo que estas usando ahorita. La versión mas reciente es Windows 8.1 y se espera que Windows 9 salga en Abril del 2015. Otras versiones mas viejitas de Windows son Windows 7, Windows Vista y Windows XP.

Mac OS

Hecho por Apple. Este viene pre-instalado en todas las Macs. La versión mas reciente es Mac OS 10.9, tambien conocido como "Mavericks". Algunas versiones mas viejitas son Snow Leopard (10.6), Lion (10.7) y Mountain Lion (10.8).

Linux

Este es mas bien como una familia de sistemas operativos, muy parecidos entre si. Muy poca gente los usa pero son bastante populares en servidores que las empresas usan para cosas especificas, por ejemplo para ser el lugar donde "vive" una pagina de Internet. Como en su mayoría son de "Código Abierto" (el que sepa programación le puede hacer los cambios que quiera), hay muchos sabores diferentes, muchos de ellos gratis. Dos de los mas conocidos (o menos desconocidos) para "uso personal"son Ubuntu y Fedora. Las empresas usan otros sabores, por ejemplo Red Hat Enterprise Linux y SUSE Linux Enterprise Server

Android

Estamos en el futuro! Ya casi todo mundo trae en la bolsa una computadora con la que (entre otras cosas) hace llamadas. Uno de los sistemas operativos que hacen funcionar muchos de estos modernos teléfonos y otros aparatos móviles es el cada vez mas famoso Android, de Google. La versión mas reciente es 4.4, "Kit Kat". Cabe mencionar que cada versión tiene nombre de algo dulce, como Honeycomb(3.2), Ice Cream Sandwich(4.0) y Jelly Bean(4.1).

iOS

Hecho por Apple, es el sistema operativo con el que funcionan el iPhone, iPod Touch y iPad. La versión mas reciente es 7.

Hay muchos, muchos mas sistemas operativos por ahí, algunos realmente sencillos y que no hacen mucho. Algunos los puedes ver fácilmente (como los ejemplos de arriba), otros nunca los veras pero hacen funcionar muchos aparatos electrónicos. Pero bueno, si antes no sabias, ahora ya puedes decir que sabes lo que es un sistema operativo.

Tu procesador y sus Gigahertz (GHz)


Uy, que miedo... Gigahertz!!! Seguramente una que otra persona lee esa palabra y su cerebro se cierra creyendo que todo lo que tenga que ver con eso va a ser complicadisimo e imposible de comprender. Hoy vamos a ver que no lo es.

Separemos la palabra en dos: "Giga" y "Hertz".

  • Giga: Cuando mi madre me mandaba por las tortillas, usualmente las compraba por kilo. Dicho mas correctamente, por kilogramo. "Kilo" no es mas que un múltiplo (1000) de la unidad de medida, en este caso el gramo. En otras palabras, cuando llegaba a la tortilleria y pedía "un kilo", estaba pidiendo 1000 gramos de tortilla. "Giga" es un múltiplo también pero mas grande (1,000,000,000), o sea que un Gigahertz es igual a mil millones de hertz. Bueno, y ahora que son los hertz?
  • Hertz: Así como metro es la unidad de medida de distancia, litro es de volumen y segundo es de tiempo, Hertz es la unidad de medida de frecuencia. No entres en panico todavia! Frecuencia no es mas que una palabra elegante para decir "veces que pasa algo durante cierto tiempo". En general, un Hertz simplemente quiere decir "veces por segundo". Pongamos un ejemplo sencillito: si una persona esta aplaudiendo rápido, digamos 5 veces por segundo, esta aplaudiendo a una frecuencia de 5 Hertz. Así de fácil.


Entonces... que es lo que pasa 2,000,000,000 veces por segundo en tu procesador de 2 GHz??? Todos los procesadores tienen un "reloj" que les marca el paso para que hagan sus operaciones. Los gigahertz del procesador son nada mas y nada menos que el numero de "tic tacs" por segundo del "reloj". Entre mas "tic tacs" por segundo(mas GHz), mas cosas hace tu procesador en menos tiempo.

Felicidades! Ya sabes que son los gigahertz del procesador. Ahora nada mas una advertencia para cuando andes en busca de una computadora nueva: No siempre el procesador de mas GHz va a ser el mejor, aun hay mas cosas que considerar pero otro día escribiré acerca de eso. Por lo pronto dejare aquí una tablita que encontré con los múltiplos de 10 para el que quiera repasarlos (y recordar el tiempo en el que vio esto en la escuela).


Monday, November 11, 2013

How NASA fixed a computer on another planet

I just love it when something that sounds like science fiction is actually true. In 1997 the Mars Pathfinder landed on Mars but after a few days it started having trouble: the computer was "crashing" and resetting, preventing the pathfinder from finishing its daily tasks, which it resumed until the next day.

If you are interested on the technical details, you may find them HERE, in the words of someone who actually was involved in the mission. If you are curious but want a quick and simple explanation, I'll try to provide it here the way I (as a noob) understood it.

Super quick overview of the system:
The Pathfinder was controlled by a Real Time Operating System (RTOS), a software that has as one of its main characteristics the ability to schedule the tasks that will run in order of priority and even "pause" them if something with high priority comes along.  

The CPU was connected to a Bus, which is a sort of "pathway" shared by different devices, one of them called ASI/MET, used for gathering meteorological data. The access to this Bus was controlled by the RTOS in two tasks with the highest priority in the entire system.

What went wrong:
One of the fun things of RTOSs is that sometimes a variable is used by two different tasks but you have to make sure only one of them is changing it at a time. You can protect the access to this variables using yet another variable called "semaphore" that a task can "take" when it's going to access the variable and "release" when it's done with it. If a task needs access to a variable but the semaphore is "in the hands" of another task, the task is put on hold until it can take it. 

Now, imagine that a low priority task takes a semaphore but then it gets "paused" before it can release it because the RTOS needs to run a higher priority task. And then other higher priority tasks keep getting in the way so that the poor little task that has the semaphore never gets a chance to continue. Finally, imagine that a super important task has to run but it needs the semaphore... yeah, that's a problem.

In a nutshell, that's what was causing the problem with the Pathfinder. The low priority task that controlled the ASI/MET took (and didn't get the chance to return) a semaphore that was also needed by one of the high priority tasks that controlled the Bus, preventing it from completing. When the other task that controlled the Bus tried to run, it saw that the first one didn't complete, it figured something was terribly wrong and declared the error that started the reset of the entire system.

How it was fixed:
Once NASA figured out what the problem was, after carefully making sure that wouldn't break something else, they enabled a feature in the RTOS called "Priority Inheritance". This feature pretty much allows the priority of a task to be "bumped up" if it's holding a semaphore that a higher priority task needs. To apply the change they didn't transmit to the Pathfinder an entire new copy of the software, they just sent the pieces that needed to change and then the system "patched" itself. 

And that was it... easy... right?