Menú principal

sábado, 13 de febrero de 2016

Cruce de semáforos con Arduino

Este ejercicio se trata de realizar un cruce de semáforos con Arduino, de tal forma que la secuencia tiene que ser:
verde1-rojo2 durante 3 segundos
ambar1-rojo2 durante 500ms
rojo1-verde2 durante 3 segundos
rojo1-ambar2 durante 500ms

A continuación os dejaré un vídeo donde podréis ver el funcionamiento, el esquema electrónico y el programa resuelto.

Vídeo de funcionamientohttps://youtu.be/cIxb1l1drLw

Programa resuelto:

int leds[] = {3, 4, 5, 6, 7, 8}; //verde1=3, ambar1=4...
int tiempo1 = 3000;
int tiempo2 = 500;
int i;

void setup() {
  for (i = 0; i < 6; i++)
  {
    pinMode(leds[i], OUTPUT);
  }
}

void loop() {
  digitalWrite (leds[2], HIGH);//ro1
  digitalWrite (leds[3], HIGH);//ver2
  delay(tiempo1);
  digitalWrite (leds[3], LOW);//apaga ver2
   digitalWrite (leds[2], LOW);

  digitalWrite (leds[4], HIGH);//ambar2
  digitalWrite (leds[2], HIGH);//rojo1
  delay(tiempo2);
  digitalWrite (leds[4], LOW);//amabar2
  digitalWrite (leds[2], LOW);//ro1

  digitalWrite (leds[0], HIGH);//ver1
  digitalWrite (leds[5], HIGH);//rojo2
  delay(tiempo1);
  digitalWrite (leds[0], LOW);//ver1
  digitalWrite (leds[5], LOW);//rojo2

  digitalWrite (leds[1], HIGH);//amb1
  digitalWrite (leds[5], HIGH);//roj2
  delay(tiempo2);
  digitalWrite (leds[1], LOW);
  digitalWrite(leds[5], LOW);
}

Esquema electrónico:

jueves, 11 de febrero de 2016

Printbot controlado desde Android

Hola, he realizado un programa para que desde la app que nos proporciona bq (Robopad++) podamos controlar nuestro robot bq desde cualquier Android. Lo he realizado en Bitbloq, os dejo el programa a continuación. Si tenéis alguna pregunta ya sea de esta entrada o de otras no dudéis en dejármela en los comentarios. También os dejo un vídeo con la demostración de como me ha ido a mi.

Video: https://www.youtube.com/watch?v=UiO6ncGKMsE

Programa en Bitbloq


El primer bloque sera lo que permitirá que nuestro robot se pueda conectar mediante bluetooth a nuestro Android y que reconozca las ordenes que le mandamos. Los pequeños bloques que están al lado del otro (color rosa) son funciones que estan sin desplegar ya que ya han sido enseñadas en otra de mis entradas (sigue lineas o esquiva obstaculos). Asi que ya solo queda las función de relacionar los botones de la aplicación (Robopad++) con las funciones que queremos que haga el robot al pulsar estos.




miércoles, 10 de febrero de 2016

Mejorar cara en Gimp

El retocar la cara de las personas cada vez esta más de moda, se utiliza en las revistas, en la publicidad... hasta llegar al extremo de ver a esa misma actriz en la vida real y no reconocerla.

Hoy os enseñare un pequeño truco con el gimp para mejorar el torso. Utilizaré la siguiente imagen:


En primer lugar tendremos que abrir la foto en el Gimp y a continuación iremos a Selecciona-Activar mascara rapida (Mayus+Q), saldra la imagen con un filtro rojo.

Depués seleccionaremos el pincel que mas nos guste con el color blanco he iremos pintando la cara donde la queramos mejorar.


Ahora quitaremos la mascara rapida (Seleccionar-Activar mascara) y nos saldrá el contorno que hemos seleccionado. Aplicaremos un filtro (Filtros - Difuminar - Desenfoque Gaussiano) y le damos a aceptar. Podremos observa que la piel esta mas suave y con menos imperfecciones.

En cuanto a los labios, con la herramienta de clonado (anteriormente explicada) podremos hacerles más pequeños y dejarles a nuestro gusto. Os dejo como me ha quedado a mí.



Calcular IMC de una persona

Calcular el índice de masa corporal utilizando la formula: peso/altura^2.
Estos datos deberán ser introducidos por el usuario.

SOLUCIÓN:

#include <stdio.h>
#include <stdlib.h>

int main()
{
//Declaramos dos vectores de 5 elementos que almacenaran los pesos y alturas
    int peso[5];
    float altura[5];
//En IMC guardaremos el Indice de Masa Corporal correspondiente a cada indice
    float IMC[5];
    int i;
//Aqui introducimmos una enumeracion que nos dara mas legibilidad al programa
    enum{pedro, pablo, maria, juan, pilar};//Asigna 0 a pedro, 1 a pablo...

    for(i=0; i<5; i++)
    {
        //Pedimos los datos de nuestros 5 amigos
        printf("Intro altura (en metros): ");
        scanf("%f", &altura[i]);
        printf("Intro tu peso (en kg): ");
        scanf("%d", &peso[i]);
        //Calculamos el IMC de cada uno y lo visualizamos
        IMC[i]= peso[i]/(altura[i]*altura[i]);
        printf("El IMC es: %f\n\n", IMC[i]);
    }
//Aqui visualizamos un dato empleando la enum para ver en un ejemplo la mayor legibilidad
    printf("el indice de masa corporal de pablo es %f\n", IMC[pablo]);//como poner IMC[1]

}

martes, 9 de febrero de 2016

Formatos / Manipulación de imagen

FORMATOS DE IMAGEN

Gif:
  • Tiene la posibilidad de ser animado y puede tener zonas transparentes.
  • Está bastante comprimido.
  • Sirve para web, no tiene mucha calidad y admite menos de 256 colores.
  • Suele ser muy usado para logotipos.


Png:
  • Tiene una tasa de compresión superior al formato GIF (+10%)
  • Admite la posibilidad de emplear un numero de colores superior a 256
  • Se puede incorporar en cualquier programa. 


Jpg:
  • No puede ser animado, ni tiene zonas transparentes.
  • Admite hasta 16 millones de colores.
  • Es el formato más común junto con gif para páginas web


Tif:
  • Tasa de compresión superior al formato GiF
  • Posibilidad de emplear un número superior de colores a 256
  • Formato muy extendido porque lo genera tanto Windows como MAC y normalmente uno de sus usos más habituales es mandarlo a imprenta.





TRATAMIENTO / MANIPULACIÓN

Uno de los programas más utilizados para el tratamiento de imágenes es el GIMP, por eso os enseñare las técnicas más elementales del este.

Eliminar un objeto una foto

Eliminar un objeto de una foto puede parecer complicado, pero con la herramienta que ofrece el Gimp para clonar se hace en tan solo dos minutos. Procedimiento: http://programeva.blogspot.com.es/2016/02/como-eliminar-un-objeto-de-una-foto-gimp.html

Eliminar el reflejo de gafas

Algunas veces ya sea por el flash de la cámara o por la luz, se hacen reflejos en las gafas. Gimp nos ofrece una serie de herramientas para eliminar este reflejo. Procedimiento: http://programeva.blogspot.com.es/2016/02/quitar-reflejo-de-las-gafas-con-gimp.html

Eliminar ojos rojos

¿Quién no ha salido alguna vez en una foto con los ojos rojos? Normalmente esto se produce al utilizar el flash en sitios oscuros. Gimp nos da una solución muy rápida para remediarlo, un filtro. Procedimiento: http://programeva.blogspot.com.es/2016/02/elimina-ojos-rojos-con-gimp.html





Elimina ojos rojos con Gimp

Hay dos técnicas para eliminar los ojos rojos de una foto con Gimp y hoy os enseñare una de ellas, para ello utilizaré esta imagen:


Esta forma es la más sencilla, simplemente es aplicar un filtro, vamos a Filtros-Realzar-Quitar ojos rojos y nos saldrá una ventana emergente en la que podremos variar el umbral de variación (normalmente es el 50), le damos a aceptar y ya estaría.



Quitar reflejo de las gafas con Gimp

Para quitar el reflejo de las gafas hay varios métodos para utilizar en Gimp como puede ser el parche o el tampón de clonar... pero hoy os enseñare otra técnica.

En primer lugar abriremos nuestra imagen en Gimp y haremos zoom para ver más grandes las gafas, yo en mi caso voy a utilizar esta imagen:

A continuación con el lazo magnético seleccionamos el ojo que no tiene el reflejo.

         
Después arrastraremos la parte seleccionada al cristal que tiene reflejo, iremos a Herramientas-Herramientas de transformación-Voltear (Mayus+F) y haremos click en la parte seleccionada. Si vemos que no ha quedado muy centrada podremos utilizar la herramienta mover para ajustar bien la selección.





Como eliminar un objeto de una foto (GIMP)

Hoy aprenderemos a eliminar un objeto de una foto fácilmente gracias a la herramienta de clonación que nos ofrece el GIMP.

En primer lugar tenemos que abrir nuestra foto en GIMP en nuestro caso será esta:


Después de esto seleccionamos la herramienta clonado que  se encuentra en la caja de herramientas.
                                   

A continuación pulsamos Ctrl y hacemos click en la zona mas cercana del objeto que queremos eliminar, en este caso el balón, soltamos Ctrl y vamos pinchando sobre el balón. El resultado es el siguiente:


viernes, 5 de febrero de 2016

Cambiar número de un vector

A continuación os enseño otro ejercicio muy básico de vectores consiste en visualizar el vector cambiando datos de este.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int vector[5]={0,1,2,3,4};//inicializa el vector

    //Para visualizar el contenido utilizamos un for
    for(i=0; i<5; i++)
        printf("%d, ",i);
    //La salida será: 0, 1, 2, 3, 4

    //Podemos cargar cualquier valor en cualquier posicion
    vector[3]= 17; //el cuarto elemento (ojo no es el 3º) pasa a valer 17

    //Si volvemos a imprimir el vector completo
    for(i=0; i<5; i++)
        printf("%d, ",i);
    //La salida ahora sera: 0, 1, 2, 17, 4

}

Guardar el cuadrado de números en vector

Este ejercicio consiste en calcular y almacenar el cuadrado del indice del vector. Es muy sencillo y se reduce a asignar a cada elemento del vector empleando un bucle el cuadrado del indice.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int cuadrado[10];
    int i;

    for(i=0; i<10; i++)
    {
        cuadrado[i]= i*i;
    }

    for(i=0; i<10; i++)
    {
        printf("El cuadrado de %d es %d\n", i, cuadrado[i]);

    }

}


Recorrer un vector con puntero

Hoy os muestro un ejemplo donde podéis ver la estrecha relación que hay entre vectores y punteros. En los vectores al tener los elementos contiguos en memoria podemos acceder a cada uno de ellos solo con incrementar un puntero. El puntero se incrementara automáticamente en en tantos bytes como sea necesario: si tenemos un puntero entero y le aumentamos en una unidad se incrementa en 4 bytes para apuntar al siguiente entero, mientras que si por ejemplo tenemos un puntero double esto supondría un incremento en 8 bytes debido a que este es el tamaño del double.

A continuación os mostraré un ejercicio que consiste en visualizar el vector utilizando un puntero que se incrementa y va apuntando automáticamente al siguiente elemento del vector.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int vector[5]={0,1,2,3,4};
    int *p;
    int i;

    p=&vector[0];//puntero apunte a la dirección del primer elemento del vector

    for(i=0; i<5; i++)
    {
        printf("%d \n\n", *p);
        p++;//El puntero se incrementa para apuntar al siguiente entero
    }
}