jueves, 23 de enero de 2014

Arduino + GSM


Arduino da la posibilidad de utilizar "Shields" (escudos) para ampliar la conectividad con dispositivos, redes o medios existentes. En este caso, el Shield GSM, cuenta con un controlador SIM900 que le permite conectarse a la red de telefonía celular (Movistar, Claro o Personal) para realizar o recibir llamadas, enviar o recibir mensajes de texto (SMS) y conectarse a internet para enviar o recibir información de la web.
Esto aumenta el potencial de la automatización y control de dispositivos ya que ahora el alcance no esta limitado a nuestra propia red (Lan o Wireless), sino que a través de una red de terceros (con los mismos planes y costos que los abonos para teléfonos móviles) se puede acceder a información sobre el estado de algunas variables que estén fuera de nuestro alcance.

viernes, 17 de enero de 2014

Internet de las cosas == Internet of things (IOT)


   La web que se viene no solo esta pensada para brindar servicios de 'Internet' a las personas, sino que el desafío es proveer a las 'cosas' de una conexión a Internet, a través de la cual puedan brindar en tiempo real información sobre su posición, y/o estado y/o cualquier otra propiedad que pueda resultar de interés para transformar una 'nube' de datos en conocimiento y acción. Es decir que este cúmulo de información puede resultar útil para aumentar el conocimiento de alguien o algo!, y también para que alguien o 'algo' (otra cosa) pueda tomar una acción o decisión en función de ese conocimiento. Esto podría implicar beneficios en la seguridad de los bienes valiosos, ya que sería mas fácil encontrar un objeto robado, pero mas allá de eso podría proveer mejoras directas en la calidad de vida de las personas, no solo por lo que ya se podría dejar en manos de las 'cosas', sino también por las ventajas que serían transmitir ciertos parámetros (datos) a alguien que les resulten valiosos (información) y que los pueda procesar y en base a ellos  tomar una decisión acertada (conocimiento). Por ejemplo un paciente podría transmitir datos sobre un parámetro vital de su organismo (frecuencia cardíaca, presión, temperatura) y que alguien (o algo) a partir de esos datos pueda advertirle sobre un riesgo para la salud de esa persona.
Al final de cuentas parece que se trata de acortar el camino entre los 'sensores electrónicos' y los 'actuadores' y/o 'actores';Pero para que todo esto sea posible hace falta una estructura que soporte la conectividad y el manejo de los datos. Un buen ejemplo de esto último es el sitio web https://xively.com/


Xively Cloud Services™ empowers you to harness the power of the IoT to quickly and easily transform your connected product vision into market reality.

Algo así como que "te da el poder de aprovechar el poder de la IOT (Internet of the things) para transformar de manera fácil y rápida tu visión de productos conectados en una realidad del mercado".
Un poco mas modesto que eso es el proyecto de poner en la web datos sobre el 'estado' de algo (temperatura y humedad de un espacio abierto o cerrado) y poder visualizarlo desde cualquier dispositivo con navegador web. Por ejemplo temperatura y humedad de mi oficina y del patio al que da mi ventana. 




Para eso es necesario uno (o dos) sensores de temperatura y humedad (DHT11) conectados a un Hardware "inteligente" (Arduino Mega 2560)  y la posibilidad de conectarse y enviarlos a la web (Ethernet Shield).



Estos componentes mas el software básico y las librerías que acompañan a cada uno de ellos  y lo que aporta xively.com son suficientes para elaborar un programa que permita enviar en forma permanente los datos obtenidos a la plataforma web y que puedan ser visualizados en forma on-line a través de una dirección web publica. Por ejemplo en mi caso se pueden visualizar los datos en https://xively.com/feeds/48055798

En este proyecto personal queda pendiente algo que transforme este cúmulo de datos en una herramienta para la toma de decisión y la acción; por ejemplo encender o apagar el aire acondicionado cuando la diferencia de temperatura este dentro o fuera de un rango definido, pero eso quedará para el próximo proyecto.


jueves, 14 de noviembre de 2013

Arduino - Arrays

Arrays

A diferencia de las variables (comunes) que solo pueden almacenar un valor único a la vez, y cada vez que se le asigna un nuevo valor se le borra el anterior, los arrays son un caso especial de variables que pueden almacenar un conjunto de valores, y modificar solo uno, o algunos, o incluso todos los valores contenidos en el mismo en cualquier momento y según nuestra conveniencia. También sería posible evitar el uso de arrays, y en vez de ello crear ‘muchas’ variables (comunes) con distintos nombres; pero esto en algunos casos no resultará cómodo para utilizar.
La traducción de array es literalmente ‘colección’, ya que se utiliza para ‘juntar’ varios objetos de un mismo tipo. En otras materias, como matemáticas, se conoce con el nombre de Matriz (y generalmente se usan las de 2 dimensiones, por su facilidad para representarlas en un plano, ya que tienen ancho y alto (lo mismo que un plano) y cada elemento de la matriz se identifica por un par de números que indican la fila y la columna en que se ubica el elemento. También podría tener la matriz 3 dimensiones (cubo) y en ese caso cada elemento de la matriz se identificará con 3 valores ordenados (que indicaran la posición relativa del elemento dentro de la Matriz), x ej: A(1,8,76) habría que encontrarlo dentro de la matriz A, en la fila 1, columna 8, “nivel” o “capa” 76.

En el caso de Arduino es todavía más simple; ya que utilizaremos un caso de matriz de una sola dimensión (en este caso se llama vector) , aunque es el mismo término que se utiliza en física para representar magnitudes (definida por su módulo (o longitud), su dirección (u orientación) y su sentido (que distingue el origen del extremo)) en el caso de la informática un vector es “una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo”  y solo sería posible conocer su módulo o longitud, pero no tienen en este caso los vectores dirección (orientación) {Es decir que da igual si se representan de manera horizontal, vertical u oblicua} ni tienen un sentido definido {es decir que da lo mismo recorrerlos de cualquier extremo al otro}

Finalmente (y llevado a la práctica) se podría definir (declarar) en Arduino un array o vector de las siguientes formas:


  int myInts[6];
//se define que tendrá 6 elementos aunque todavía esta ‘vacía’)
  int myPins[] = {2, 4, 8, 3, 6};
//se define la colección de valores numéricos enteros (la longitud  queda implícita)
  int mySensVals[6] = {2, 4, -8, 3, 2};
//igual al anterior, pero con algún entero negativo, y con un tamaño (longitud) predefinido,
  char message[6] = "hola";
//en vez de números almacena caracteres individuales (y arma una palabra!)


Los Arrays o vectores son zero indexed, esto significa que, al referirse a una matriz o vector, el primer elemento de la matriz está en el índice 0. Por lo tanto:
mySensVals[0] == 2, mySensVals[1] == 4, y sucesivos.

Esto también significa que en una matriz con 10 elementos, el índice 9 es el último elemento. Por lo tanto:
int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    contiene 11
     // myArray[10]   es invalido y contiene información aleatoria (de otra dirección de memoria)     

                Para mayor información y ejemplos ver la fuente: http://arduino.cc/es/Reference/Array


Consigna

1. Escribir un programa en Arduino que genere 60 números aleatorios en un minuto y los almacene en un vector. Al finalizar la generación de números, deberá mostrar la lista de números generados en el Monitor Serial.2.    Construir un dado virtual con 7 leds y un pulsador, para que al presionar el pulsador se genere una secuencia aleatoria para ‘lanzar el dado’ y a continuación quede fijo el número aleatorio que corresponda al dado. Ejemplo en youtube: ‘Arduino led dice’ by  Eddie Maas http://www.youtube.com/watch?v=bVJLSnqbyEc






Antecedentes:
Analizar los programas de ejemplos: Button (http://arduino.cc/es/Tutorial/Button)

Punto Extra: Modificar el dado (y el programa) , para que en vez de usar 7 salidas digitales para los leds, mantenga el mismo funcionamiento pero con solo 4 salidas digitales.





domingo, 1 de julio de 2012

UNLaR - Recuperatorio de Simulación


6/7 -> ya esta subido en otro sitio: bajar aqui


Les adjunto el enunciado y ejercicio resuelto bajar aqui Los alumnos que aprobaron esta instancia (y que están en condiciones de regularizar) son:

  • Guzman, Gabriel
  • Simonetti, Marcelo
  • Troncoso, Emilio
  • Fuentes Bazan, Rodrigo
  • Peralta, Alejandro
  • Corzo Barrera, Cesar
  • Millicay, Alejandro
  • Miranda, Patricia
  • Ovejero, Yanina
  • Caliva, Sebastian
Mas adelante les comunicaremos la lista definitiva de alumnos regulares y su calificación definitiva.

lunes, 25 de junio de 2012

Parcial de Simulación



Les adjunto el enunciado y una resolución posible de la evaluación parcial.  Bajar aqui. De esta forma pueden tener mayor claridad o (percepción) de la nota. Ya subiré la lista de aprobados y desaprobados (que deberan recuperar esta instancia)

Agregado: Lista de alumnos aprobados (no deben recuperar)

Gonzalez, Federico
Rivera, Karla
Falón, Fabián
Rodriguez, Brenda
Contreras, Fernando
Gonzalez, Mario
Chanampe, Nerea
Romera, Jorge
Romero, Juan
Ibañez, Nancy

El recuperatorio es el Miércoles 27/6 a las 15 hs.

miércoles, 30 de mayo de 2012

Sucesiones.



UNLaR – Programacion II – Primer parcial 2012.
La sucesión de Fibonacci:

 Esta sucesión tiene la particularidad de que cada termino de la misma es igual a la suma de los dos términos anteriores, es decir que f2 = f1 + f0 y donde f0 = 0 y f1 = 1., con lo que resultan los valores: 1, 1, 2, 3, 5, 8, 13 y así sucesivamente. También es una sucesión la conformada por los números 2, 4, 8, 16, 32, donde cada termino f(i+1) = 2 * f(i), y f(0) = 1.
 Se pide:
·         Generar un programa en el que se pueda ingresar la formula general de cualquier sucesión, el o los valores de los términos iniciales  f(0) (y f(1) si fuera necesario) y el rango de términos de la sucesión que se desea mostrar y graficar.
·         Mostrar en cualquier objeto visual solo los términos de la sucesión entre el rango indicado. (por ejemplo los términos del 5to al 8vo de la sucesión)
·         Graficar los valores obtenidos para el rango indicado.


Para ver un ejemplo terminado: descargar aqui


jueves, 24 de mayo de 2012

Controles ListBox, ListView, Chart


Para descargar el material de clase sobre los controles ListBox, ListView y Chart haga click aqui.