Mostrando entradas con la etiqueta tecnologia. Mostrar todas las entradas
Mostrando entradas con la etiqueta tecnologia. Mostrar todas las entradas

miércoles, 30 de abril de 2014

Lenguaje de Programación C

C es un lenguaje de programción creado en 1972 por Dennis M. Ritchie y también Kernighan, en los Laboratorios Bell (La electrónica moderna se desarrolló en gran parte en estos laboratorios). 

Es un lenguaje que permite acceder al hardaware por lo que es usado ampliamente en la creación de sistemas operativos (GNU-Linux, Windows, OSX)  y en sistemas embebidos que usan microprocesadores (celulares, dvds, etc). 

Se creo pensando en que sirva para cualquier plataforma o arquitectura y en lo posible facilmente portable, por ejemplo que el código que sirve para leer un dvd en un computador sirva para el reproductor de dvd conectado al televisor.

Es un lenguaje de programación estructurada, por lo que tiene subrutinas (llamadas también funciones o métodos), bloques condicionales y bucles. Se espera que cada linea de código se ejecute inmediatamente después de la anterior a menos que se llame a un subrutina. Esto a diferencia que en ensamblador existe el comando goto que permite ir a cualquier linea del programa pero puede causar errores si no se llega a la linea correcta.  El llamado a subrutinas permite también realizar programación funcional.   
Para la programación orientada a objetos (POO) se creo C++. Actualmente JAVA que imita bastantes características de C++ es más usado en POO.


Entre las principales características de cualquier programa escrito en C están:

  • La inclusión de bibliotecas( librerías , cabeceras):

#include <stdio.h> /*añade un librería que se encuentra en la carpeta por default, suelen ser las mas usadas*/ 
#include "micarpeta/milibreria" /*añade una librería que se encuentra en otra carpeta del programador.*/

  • La definición de contantes y macros:
#define hola hello //reemplaza todos los "hello" por "hola" en todo el código a continuación. 
#define pi  3.141592 //reemplaza la palabra pi por su valor numérico.
#if, #else, #elif, #endif    /*sirven para crear bloques condicionales para que el codigo sea distinto segun ciertas condiciones de la pataforma pero se encuentre en un solo archivo de codigo fuente*/ 
#ifdef, #ifndef   /*comprueba si se ha definido una constante o nombre, se usa para lo mismo que las cuatro anteriores. */


  • La declaración de funciones:

void main(); /*Una función que no devuelve ningún valor y no necesita ningún valor de entrada. */
int suma(int sumando_a, int sumando_b); /*Una función que devuelve un valor entero y necesita como argumentos dos valores enteros.*/


  • La declaración de variables: 
Se declaran usando la sintaxis: tipo nombre;


int a; //una variable numérica entera. 
char b; //una variable numérica de 0 a 256 usada generalmente para representar texto en ascii. 
float c; //una variable numérica decimal. 

Si se declaran antes de la función main() son llamadas variables globales, las declaradas dentro de cada función son variables locales. Una buena practica es colocar nombres distintos a las globales de las locales para corregir errores con mayor facilidad.


  • El código de las funciones :
Ejemplo: Para la función "suma" declarada arriba el código sería:

int suma(int sumando_a, int sumando_b){ 
int resultado=sumando_a+sumando_b; /*Se puede asignar valor a las variables en su declaración */ 
return resultado; /*toda función no declarada como void necesita tener al menos un sentencia return */  
}
Recordar: Toda sentencia termina con " ; ".


  • La función principal main():
Todo programa escrito en C, necesita por lo menos la función main() para ejecutarse (funcionar).


  • La función if: 
Se usa para realizar condicionantes: Si x entonces y, caso contrario z. No necesariamente se usa el caso contrario. 
  
if (a<b) {  
//Lo que tiene que suceder si en efecto "a" es menor a "b" 
} 
else { 
// Lo que tiene que suceder si "b" es menor o igual a "a" 
}

  • La función switch:
Se usa si una variable puede tener múltiples valores y cada valor necesita una distinta acción a realizar.

switch (x){ 
case 1: //Lo que debe suceder si x es 1;  break; 
case 2: //Lo que debe suceder si x es 2;  break; 
default: // Lo que debe suceder si x no es 1 ni 2;  break;  
}
  • La función while:
Se usa para repetir un bloque de sentencias (lineas de programa) hasta que se cumpla una condición. Se puede usar while(1) para crear un bucle infinito. (La mayoría de programas embebidos corren desde que se prende el equipo hasta su apagado)   

int y=0; 
while(y<10){ 
//Esto se repetirá 10 veces; 
y++; /*Una forma de hacer y=y+1, en este caso se suma al después de la linea, ++y suma antes de realizar el resto de lo que se encuentre en la misma linea. Existen ademas y--, --y */ 
}

  • La función for:
Se usa para repetir un bloque de sentencias un numero definido de veces o para cambiar secuencialmente de valor una variable. El uso de arreglos hace inevitable el uso de la función for.

for (int i=0; i<10; i++){ 
//Esto se repetirá 10 veces 
}

El código de ejemplo de la función while y la función for hacen exactamente lo mismo pero con for resumimos en una linea lo escrito en tres con while. La función while en la practica se usa para condiciones mas complejas.


  • Comentarios
Si todo lo que esta despues de // si ocupa solo una linea o dentro de /* */ para comentarios de varias lineas.
Es una buena practica iniciar el programa con: 

/* Nombre del archivo: 
Proyecto o Programa principal al que pertenece:
Descripción básica:  
Autor:
Licencia: 
Fecha de creación:
Fecha de modificación: 
Logotipo en Ascii "|\/| (()) ~|~ [[-" ;-D, existen verdaderos artistas en esto. No es necesario pero le da un toque de dedicación y originalidad.   */

miércoles, 16 de octubre de 2013

Impresora 3D, Parte III: Software de Terceros

Para obtener un objeto impreso en 3D se necesita moldearlo en el computador con algún programa dedicado a ello como  Blender, y se pueden lograr cosas como estas:


E incluso en Blender se puede realizar también animación y realizar vídeos como:

Una vez que se tiene el modelo realizado en computadora es necesario transformarle en coordenadas que puedan ser enviadas como instrucciones a la impresora 3D, para esto es necesario guardarlo en formato .stl (desde cualquier programa de modelado 3D), en Blender se  logra seleccionando el submenú "Export" del menú "File":


Un lugar donde se puede encontrar una gran cantidad de modelos en 3d en formato .stl es  www.thingiverse.com.


Con el archivo .stl en mano es hora de usar otro programa para transformarlo en código G, que es un estándar de máquinas de prototipo rápido y de control numérico computarizado (CNC). Un programa que es muy usado por su facilidad de uso y que es gratis es Slic3r, además que  está diseñado para crear código G listo para ser usado en impresoras 3D.
Logo de Slic3r, para no confundirse con 3D Slicer.
 El código G son instrucciones que indican a la maquina principalmente la posición requerida y la velocidad a la cual debe moverse. Además indica la temperatura, cambio de herramienta (por ejemplo en Impresoras 3D que imprimen a colores, o que imprimen en múltiples materiales), etc.

Código G visto en Notepad++

En el extracto de arriba se pueden ver comandos que empiezan con las letras G y M, explicado cada uno brevemente:
M107: Enciende un ventilador de disipación de calor.
M104: Indica la temperatura del extrusor, S200 coloca la temperatura en 200 C.
G28: Mueve el extrusor a una posición predeterminada de origen. 
M109: Hace lo mismo que M104.
G90: Indica que las distancias usadas para el espacio(X, Y, Z) son absolutas.
G21: Indica que las coordenadas están dadas en milímetros.
G92:  Coloca en el software las coordenadas en 0, E0 coloca las coordenadas del extrusor en 0.
M82: Indica que las distancias dadas para el extrusor (E) son absolutas.
G1: Indica que se debe hacer un movimiento y las coordenadas de destino. Lo que esta después de F es velocidad, después de X coordenada X y así sucesivamente con Y, Z y E.

Nuestro propio software lo que realizara es la interpretación del código G y su transmisión vía comunicación serial con un microcontrolador.
En el microcontrolador se recibirán ordenes para mover adecuadamente los motores y controlar la temperatura. El detalle de esto en el próximo articulo.


No viene mal que ya descarguen y jugueteen con alguno de estos programas.

sábado, 7 de septiembre de 2013

Impresora 3D: Parte I; Introducción

Una impresora 3D básicamente es un mecanismo que da forma en la vida real a objetos modelados por computadora.
La impresora que construimos (está en construcción), para realizar su objetivo tiene un extrusor, el cual calienta el material con el que se imprime y lo deposita como un filamento. El extrusor es movido en las tres dimensiones de largo, ancho y altura a través del giro de varillas roscadas acopladas a motores de pasos.
¿Cómo conseguir la impresión de la figura deseada? Fácil, moviendo los pasos necesarios de cada motor para alcanzar la posición indicada, soltar un poco de material y repetir este proceso en cada punto de la figura.

¿Cómo mover los pasos necesarios de cada motor? Pues mediante un simple cálculo y una regla de tres.

Finalmente
Para indicar al motor que se mueva el número de pasos calculado se le debe enviar una orden, indicando la dirección y otra que se repite tantas veces como pasos tiene que dar el motor. El motor en sí necesita de una secuencia correcta, la cual es generada por el microcontrolador, para que el movimiento sea en orden.
Estas secuencias pueden ser las siguientes (video borroso, pero se entiende):
 
Ahora explicaré unos breves conceptos de electrónica y microcontroladores para los que no conocen del tema.
La electrónica digital basa su operación en el concepto de estados binarios, es decir se puede estar encendido o apagado. Por general, y debido a que todo se modela matemáticamente es conveniente colocar el estado de encendido como un 1 y el estado de apagado como 0. A la unidad que posee esta característica de estar en uno u otro estado se le llama bit. El microcontrolador que usamos, el PIC 16F887, procesa datos de 8 bits, que van desde el 00000000 hasta el 11111111, pasando por el 00000001, 00000010, etc. Que representan los números en base decimal del 0 al 255.

Los datos binarios al igual que sus similares decimales se pueden sumar, restar, multiplicar y dividir, pero además se pueden realizar operaciones lógicas, es más el microcontrolador en sí mismo esta constituido de compuertas lógicas, las cuales están hechas a su vez de transistores.

A los microcontroladores actualmente se les encuentra en muchos aparatos eléctricos pues su capacidad de ser programados les permite cumplir una inmensa cantidad de tareas, ya sea una secuencia de luces, reproducción de audio y video o una incontable lista de actividades posibles de realizar con un poco de imaginación y conocimiento.  En el próximo artículo se contara más sobre estos dispositivos que marcan sin duda el salto al mundo digital. 

miércoles, 12 de diciembre de 2012

Algoritmos

Lo primero que se me viene a la mente al escuchar algoritmo es cualquier objeto, un algo, con ritmo, más específicamente un par de zapatos bailando claqué.

Después recuerdo algunos fragmentos de códigos de programación, entonces se llega al concepto "un conjunto de pasos y reglas que se deben cumplir en orden para logra cumplir el objetivo de una actividad". (Vamos que para bailar también se sigue un conjunto de pasos y reglas)
Lo que hace que me quede con el concepto de pasos ordenados y no con la imagen de los zapatos (De nuevo, zapatos y pasos también tienen relación)
El distinguir entre estos conceptos se llama inteligencia, pues se ha realizado un proceso de datos almacenados, memoria, que junto con los datos ingresados se llega a obtener datos de salida , los cuales en parte vuelven a la memoria y otros simplemente salen ese instante y no son almacenados.

Algunos Algoritmos

Este mismo proceso ha seguido un algoritmo:

-Entrada de datos.
-Comparación con datos en memoria.
-Generación de nuevos datos.
-Comparación con datos generados.
-Decisión.
-Salida.

Entonces se ve que los algoritmos forman parte de lo que llamamos inteligencia. Pero se pueden realizar proceso repetitivos "sin pensar" que igual cumplen pasos ordenados y cumplen un objetivo. Por ejemplo pestañear, respirar, cambiar el canal de la televisión "zapping",  etc. Entonces no basta que un proceso lleve de por si un algoritmo sino que en ese algoritmo existan decisiones. El tomar decisiones nos hace diferentes de una computadora llamadas "máquinas inteligentes" pero en realidad solo ejecutan algoritmos diseñados anteriormente por personas. 

Y claro que una computadora puede tomar decisiones (El comando IF -THEN, ELSE (Si-pasa algo-Entonces-sucede esto-, Caso contrario-sucede esto otro-)existe en todo lenguaje de programación) pero las toma sobre datos de entrada o datos procesados en un tiempo establecido, es decir si el proceso dura más de lo establecido el programa deja de correr y la decisión no se puede tomar, y los pasos siguientes se pueden cambiar de  acuerdo a los datos de entrada pero ya están allí de cierta forma fijados. 

Nosotros somos hasta cierto punto predecibles pero hay un gran porcentaje de acciones humanas que aún siendo bien pensadas no están dentro de lo predecible y peor aún si son acciones efectuadas por un grupo de personas el resultado se vuelve más impredecible todavía. Ejemplo: Un partido de fútbol.

Y que hay por ejemplo de videojuegos como  FIFA y PES, acaso estos juegos de computadora no logran simular el trabajo en equipo, acaso estos programas no recrean todas las incidencias posibles en un partido de fútbol, acaso no forman jugadores distintos mediante parámetros dados que mejoran con práctica y entrenamiento tal como sucede en la vida real.
La respuesta es si, logran todo eso mediante Inteligencia Artificial, que no son más que algoritmos complejos y otros no tanto pero que sirven para resolver problemas complejos. Es más parece que nada estuviera realmente establecido, pero lo está y te vas dando cuenta a medida que más tiempo dedicas a estos juegos, pero lo que hace que mucha gente (hay hasta torneos profesionales) los siga jugando es justamente lo que esa gente aporta, la libertad de jugar como ellos mejor saben, lo que vuelve a cada partido distinto del otro a pesar de ser en el interior el mismo código de computadora. Se puede lograr más realismo, más diferenciación entre jugadores pero eso requiere mucha más memoria en la que entren más datos o bien algoritmos más complejos, que igual terminan requiriendo más memoria.

Entonces pareciera que con más memoria una computadora podría ser más inteligente, de cierta manera así es pero si el algoritmo no es bueno, no toma decisiones adecuadamente y entre múltiples opciones,  la mayor memoria no sirve de mucho.      
Inteligencia Artificial. Por el momento no supera a la de Homero.
Mediante algoritmos se puede describir y efectuar cualquier actividad, incluso la toma de decisiones si existen múltiples opciones, y la elección de cada opción lleva a caminos muy diferentes.
El uso de algoritmos en toma de decisiones o clasificación de objetos es aplicable, pero el seguimiento y comprobación de funcionamiento se vuelve tan complejo que no se puede determinar si realmente es válido para dicha actividad.

El decidir entre varias opciones para algunos es la libertad, pero esta también implica la responsabilidad sobre aquella decisión. Si algún día logramos que una máquina decida por nosotros también debemos darle responsabilidad. La libertad es también inseparable de inteligencia por definición ya que ambas son decidir entre opciones, y el escoger la opción correcta sin que nada más que nuestro razonamiento nos obligue a elegirla y conscientes que somos responsables de aquella elección nos hace inteligentemente libres.    

Nota: La palabra Algoritmo viene del nombre del matemático persa Al-Juarismi, padre del álgebra  uno de los primeros en buscar soluciones generales a problemas de distintas áreas de la vida cotidiana que requerían de hacer cuentas matemáticas
En su libro Compendio de cálculo por complexión y comparación trata sobre métodos generales de solución de ecuaciones con x y x al cuadrado siguiendo pasos ordenados.

Esta entrad iba a tratar sobre álgebra, pero los algoritmos son mucho más aplicables, no requieren para la explicación de su concepto de símbolos matemáticos y al igual que el álgebra trata sobre abstracciones que a su vez se basan sobre hechos mismos.
Al sumar x+y según el álgebra no es posible reducir, se les supone de distintos tipos, x: manzanas, y: duraznos o x: perros y y: libros. Según los algoritmos x, y son la mismas variables que en el álgebra pero pueden pertenecer al mismo tipo, es decir ambos son números y si se pueden sumar, pues ya no son desconocidos. Si resultan no ser del mismo tipo no se pueden sumar pero quedan juntos, tal como uno se imagina al ver expresado un más(+) entre dos objetos.

domingo, 18 de noviembre de 2012

MOTOR


Todo en el universo está en movimiento y la mayoría de ellos son rotacionales.

Los electrones alrededor del núcleo atómico, los movimientos moleculares.
Los remolinos y huracanes, las olas del mar. 
El planeta Tierra girando sobre su propio eje, alrededor del Sol. La Luna girando alrededor nuestro.
Nuestro Sistema Solar girando junto a la Vía Láctea, nuestra galaxia girando alrededor de otras.

Con tantos giros no es sorpresa que la rueda haya sido uno de los principales instrumentos utilizados desde hace muchísimos años atrás. Y es que rodar es la forma más fácil de desplazarse pues supone un solo punto de contacto a la vez, esto es menos fricción.

Y quisimos hacer rodar más cosas y necesitábamos algo que gire a según nuestra voluntad, que le podamos iniciar o parar el movimiento según nos convenga, que cambie de velocidad, que cambie de dirección, que logre mover cosas que nuestras fuerzas no permiten, que muevan gigantes, que creen remolinos, que nos lleven al cielo, que nos lleven a las profundidades del mar y las montañas.

 Muchas civilizaciones ya tenían herramientas para hacerlo, pero empleaban animales y propios humanos para lograr el movimiento. Hasta ahora perdura el pedal, que logra el movimiento mediante fuerza humana, lo usamos  principalmente en las bicicletas.
Pero queríamos algo más, algo que se moviera solo, que nos ahorre los trabajos duros. Quisimos y algunos franceses, italianos e ingleses y otros europeos lo inventaron, lo lograron mediante dos formas de alimentación de energía: eléctricos y térmicos. Esto fue a finales del siglo XVIII y en el siglo XIX, cuando principalmente se usaba el carbón como combustible para lograr vapor de agua, el vapor como ocupa más espacio que el líquido lograba mover pistones (Las jeringuillas (inyecciones) utilizan el fenómeno al contrario, mueves el pistón y reduces el espacio que ocupa el líquido). El movimiento coordinado de pistones genera el movimiento circular, era el inicio de una nueva era, la era Industrial.

Esquema básico de la máquina de vapor.

Durante el siglo XX principalmente se usaron los motores térmicos pues la electricidad era apenas conocida y era más fácil construir motores que necesitaban combustible, con cámaras (cavidades) para la explosión o quema de estos. En cambio los eléctricos necesitan de enrollar grandes cantidades de cable, lo que sin los primeros motores hubiese sido una tarea muy larga.  Además con el descubrimiento del petróleo, y su refinamiento en combustibles, el uso de motores se volvió en algo por defecto en las actividades humanas. Tal vez la aplicación de uso de motores más popular de esta época es el automóvil. 

Motor de Combustión de 4 tiempos, en el tercer tiempo usan tambíen electricidad.
Sin embargo los motores térmicos son poco eficientes en el uso de energía, la mayoría se transforma en calor no usado. Sin embargo debido a su desarrollo siguen siendo más usados pues se logra hacerlo funcionar más tiempo con litros de combustible que un eléctrico con una batería.
El problema como ven no es el motor sino la alimentación del motor, claro que en sistemas fijos no se necesita baterías sino que se conectan directamente a la red de energía.

Lastimosamente una batería no dura lo suficinete ni para motores tan simples como el de la foto.
Para que un motor eléctrico sea menos contaminante debe usar electricidad generada ecologicamente, porque si se usa electricidad generada térmicamente no hay gran diferencia en cuanto a contaminación evitada. 

Como un motor, se puede definir como un conversor de energía, convierte energía eléctrica o térmica en energía cinética, se usan prácticamente los mismos motores para la conversión inversa, es decir movimiento en energía eléctrica, donde es más factible. También se puede hacer el proceso inverso en los motores térmicos pero debido a las leyes de la termodinámica  y la poca eficiencia en un sentido, hacen que la energía aprovechable obtenida en la salida sea casi nula.

Un motor eléctrico además para su control requiere de dispositivos eléctricos de mucho menor coste y tamaño que los engranajes necesarios para controlar un motor térmico.
Tan pequeño o tan grande según se necesite.
Esquema básico de un motor eléctrico.

Motor en inglés es motor mismo o engine, pero engine también se refiere a otras máquinas y engineer quiere decir oficio relativo a las máquinas, y en español es ingeniero.

El motor es una de las herramientas que marcaron el inicio de la revolución industrial y tecnológica, y dio el nombre a una profesión, por eso se le dedica esta entrada en el blog y muy pronto aplicaciones del motor eléctrico y como controlarlos en el foro proyectos. 


Además un motor eléctrico puede reducirse hasta escalas nanométricas y algunas universidades ya buscan aplicaciones a los nano motores:

jueves, 6 de septiembre de 2012

Bienvenido

Bienvenido.



 Aquí puedes exponer tus ideas, proyectos y todo lo que se te ocurra para construir un mundo mejor, las ideas serán llevadas a votación y las elegidas recibirán apoyo de todos los que conformamos MOTE, una organización de emprendedores capaces de ver el futuro en el presente.

 Por que hay tiempo para todo y mientras estudias, trabajas o realizas cualquier otra actividad te vienen a la cabeza ideas para cubrir ciertas necesidades. Ideas a las que no tomamos en serio y se nos olvidan al día siguiente.

La pregunta es entonces: ¿Por qué no darles una oportunidad a esas ideas?

 Mira a tu alrededor y recuerda que todo fue descubierto algún día, algunas cosas hasta por accidente, y que falta mucho por descubrir.


Para darte una idea del (que queríamos pero no esta listo) funcionamiento del sitio puedes visitar:
Solve for x  de Google.
CD3WD un proyecto para dar información y educación a países subdesarrollados.

KicstarterPlataforma de financiamineto por crowdsourcing para proyectos creativos.  
TedTalksVídeos de grandes charlas para inspirar la curiosidad.
MOTE


 Eso como idea del sitio web, sin embargo como organización se pretende encontrar las vías legales para que tus ideas aquí presentadas  puedan ser desarrolladas hasta alcanzar una fase de producción, dándote los derechos de autor a ti y a todos los que colaboraron con tu idea para que inicies tu propia empresa con tu propio producto.

"Progresemos juntos porque no existe mañana sin el hoy y no existiría el hoy sin el ayer." 
Elkien T. Uzeas.