Cómo conectar Arduino con una Raspberry


En este tutorial de Zagur, vamos a ver como es posible  conectar de una forma muy sencilla a través del puerto serie  una   placa   Arduino  con  una Raspberry Pi utilizando Python para hacer esta comunicación.

El resultado va a ser  reproducir una melodía con un zumbador  conectado a Arduino por medio de un servicio (Apache, por ejemplo)que correrá en la Rasberry Pi.

Para hacer posible el ejemplo conectaremos primero Arduino en nuestro PC,  cargaremos el software en él y luego lo conectaremos a la Rasberry Pi.

El código de Arduino es realmente sencillo, y el montaje no requiere mucho tiempo, ya que solo es conectar el zumbador piezoléctrico en el pin 8 (cable rojo) y en el pin GND (cable negro).

Ahora cargamos este programa en nuestro Arduino,

#include «pitches.h»
// Notas en la melodía
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// Duración de las notas: 4 (negra), 8 (semicorchea), etc
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4};

void setup () {
Serial.begin(9600); //Inicializamos el puerto serial a 9600 baudios
}

void loop() {
if (Serial.available()) { //Si está disponible el puerto serie
char c = Serial.read(); //Guardamos la lectura en una variable char

if (c == ‘w’) { // Si escribo w  entonce  haremos sonar una melodía y reiniciamos  apache (en la RPi)

for (int thisNote = 0; thisNote < 8; thisNote++) {

int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// parar el tono que se esta reproduciendo:
noTone(8);
}
}
}
}

 

 

Este código resumidamente lo que hace es que comprobar mediante el   condiciona   if (c == ‘w’)   si la variable que Raspberry Pi le envía es igual  el carácter ‘w’ ( o el carácter que se desee siempre  que lo defina en este código) , entonces ejecutará la melodía hasta que finalice    por medio del bucle for{} .

Junto a esto, abriremos un fichero nuevo y lo llamaremos pitches.h que contendrá las notas musicales  que se puede descargar aquí.

 

Una vez hemos cargado este código en Arduino, el siguiente paso es preparar la Raspberry Pi.

Aquí tendremos que hacer un pequeño programa en Python que nos permitirá mandarle comandos a la placa Arduino. Para eso, tendremos que instalar una librería de Python en Raspberry Pi mendiante el comando.

aptget install pythonserial  
 Una vez instalado, conectamos Arduino a nuestra Rasberry Pi y creamos un fichero llamado RaspDuino.py. En él añadiremos lo siguiente:
import os
 
arduino = serial.Serial(‘/dev/ttyACM0’, 9600)
 
print(«Starting!»)
 
continuar = True
while continuar:
        comando = raw_input(‘Introduce un comando: ‘) #Input
        arduino.write(comando) #Mandar un comando hacia Arduino
 
        if comando == ‘w’:
                print(‘Reiniciando apache…’)
                resultado = os.system(«service apache2 restart»)
        elif comando == ‘exit’:
                continuar = False
arduino.close() #Finalizamos la comunicacion

 

Este código también es sencillo. En primer lugar creamos un bucle para que nos vaya pidiendo siempre el “Introduce un comando“, y todo lo que vayamos escribiendo, se enviará al Arduino y de modo  que dependiendo del código qeu tenga Arduino hará una cosa u otra. En el ejemplo si enviamos ‘w‘ ejecutará la melodía en el Arduino y además, ejecutaremos en la Raspberry Pi, “service apache2 restart“. Si escribimos “exit” saldrá del bucle while y se acabará el programa.

Para ejecutar este fichero ya sólo queda ejecutar el fichero en python: python RaspDuino.py

 

 

Fuente   aqui

Anuncio publicitario

Cómo instalar wordpress en Ubuntu


En este momento, WordPress es el CMS más popular (gestor de contenidos) en Internet permitiendo configurar fácilmente blogs y sitios web flexibles  gracias a  que esta basado en  un motor MySQL con el procesamiento de PHP. WordPress ha visto una adopción increíble y es una gran opción para conseguir un sitio web en funcionamiento de forma rápida.
En esta guía, nos centraremos en conseguir una instancia de WordPress creado con un servidor web Apache en Ubuntu 14.04.

Antes de empezar esta guía, hay algunos pasos importantes que usted necesita para completar en su servidor.Estaremos procediendo a través de estos pasos como un usuario no root con privilegios sudo, por lo que tendrá que tener uno disponible. Además, usted necesita tener un LAMP (Linux, Apache, MySQL y PHP) pila instalada en la instancia de VPS.

Cuando haya terminado con estos pasos, puede continuar con esta guía.

1- Crear una base de datos MySQL y usuario de WordPress
WordPress utiliza una base de datos relacional para gestionar y página de la tienda y la información del usuario.  Tenemos instalado MySQL, que puede proporcionar esta funcionalidad, pero tenemos que hacer una base de datos y un usuario de WordPress para trabajar.

Para empezar, inicie sesión en la raíz de MySQL cuenta (administrativa) mediante la emisión de este comando:

mysql -u root -p

Se le pedirá la contraseña que estableció para la cuenta root de MySQL al instalar el software. A continuación, se dará una línea de comandos de MySQL.

En primer lugar, podemos crear una base de datos independiente que WordPress puede controlar. Usted puede llamar a esto lo que usted quisiera, pero yo le llamándolo wordpress ya que es descriptiva y simple. Escriba este comando para crear la base de datos:
CREATE DATABASE wordpress;

Cada declaración de MySQL debe terminar en punto y coma (;), a fin de comprobar para asegurarse de que esto está presente si está ejecutando en cualquier problema.

A continuación, vamos a crear una cuenta separada de usuario de MySQL que vamos a utilizar exclusivamente para operar en nuestra base de datos nueva. Creación de bases de datos de una sola función y cuentas es una buena idea desde el punto de vista de gestión y seguridad.

Voy a llamar a la nueva cuenta de que estoy haciendo wordpressuser y voy a asignarle una contraseña de password Definitivamente usted debería cambiar la contraseña de su instalación y puede nombrar el usuario lo desea. Este es el comando que necesita para crear el usuario:
CREATE USER [email protected] IDENTIFIED BY ‘password’;

En este punto, usted tiene una base de datos y una cuenta de usuario, cada uno hecho específicamente para WordPress. Sin embargo, estos dos componentes no tienen ninguna relación todavía. El usuario no tiene acceso a la base de datos.

Vamos a arreglar que al acceder a nuestra cuenta de usuario el acceso a nuestra base de datos con este comando:
GRANT ALL PRIVILEGES ON wordpress.* TO [email protected];

Ahora el usuario tiene acceso a la base de datos. Tenemos que eliminar los privilegios para que la instancia actual de MySQL sabe acerca de los recientes cambios de privilegios que hemos hecho:

 FLUSH PRIVILEGES;

Estamos listos ahora. Podemos salir de la línea de MySQL escribiendo:

 exit

Ahora debe volver a su símbolo del sistema regular.

2- Descargar WordPress
A continuación, vamos a descargar los archivos de WordPress reales desde la web del proyecto.

Por suerte, el equipo de WordPress siempre vincula la versión estable más reciente de su software a la misma URL, por lo que puede obtener la versión más actualizada de WordPress escribiendo esto:

 cd ~ wget http://wordpress.org/latest.tar.gz

Esto descargará un archivo comprimido que contiene el contenido del directorio archivadas de los archivos de WordPress en nuestro directorio home.

Podemos extraer los archivos para reconstruir el directorio de WordPress que necesitamos escribiendo:

 tar xzvf latest.tar.gz

Esto creará un directorio llamado wordpress en su directorio personal.

Mientras estamos descargando cosas, también hay que conseguir algunos paquetes más que necesitamos. Podemos conseguir éstos directamente de los repositorios por defecto de Ubuntu después de que actualizamos nuestro índice local de paquetes:

 sudo apt-get update sudo apt-get install php5-gd libssh2-php

Esto le permitirá trabajar con imágenes y también le permitirá instalar plugins y porciones de actualización de su sitio utilizando sus credenciales de inicio de sesión SSH.

 

3- Configurar WordPress
La mayor parte de la configuración que vamos a hacer será a través de una interfaz web más adelante. Sin embargo, nosotros tenemos que hacer un poco de trabajo de la línea de comandos antes de que podamos conseguir este en funcionamiento.

Comience moviendo en el directorio de WordPress que acaba de desempaquetar:

 cd ~/wordpress

Un archivo de configuración de ejemplo que la mayoría coincide con la configuración que necesitamos se incluye por defecto. Sin embargo, tenemos que copiarlo en el archivo de configuración predeterminado ubicación para obtener WordPress para reconocer el archivo. Hágalo ahora escribiendo:

 cp wp-config-sample.php wp-config.php

Ahora que tenemos un archivo de configuración para trabajar, vamos a abrirlo en un editor de texto:

 nano wp-config.php

Como se  ha dicho antes, este archivo es casi totalmente adecuado para ya nuestras necesidades. Las únicas modificaciones que tenemos que hacer son los parámetros que sostienen nuestra información de base de datos.

Tendremos que encontrar la configuración para DB_NAME DB_USER y DB_PASSWORD para que WordPress para conectar y autenticar la base de datos que hemos creado correctamente.

Rellene los valores de estos parámetros con la información de la base de datos que ha creado. Debe tener un aspecto como este:
// ** Configuración MySQL – Usted puede obtener esta información de su proveedor de alojamiento web ** //
/ ** El nombre de la base de datos para WordPress * /
define (‘DB_NAME’, ‘wordpress’);

/ ** MySQL base de datos de nombre de usuario * /
define (‘DB_USER’, ‘wordpressuser’);

/ ** MySQL contraseña de base de datos * /
define (‘DB_PASSWORD’, ‘contraseña’);

Estos son los únicos valores que usted necesita cambiar.

Cuando haya terminado, guarde y cierre el archivo.

4- Copiar archivos a la raíz de documentos
Ahora que ya hemos configurado nuestra aplicación, tenemos que copiarlo en la raíz de documentos de Apache, donde se puede servir a los visitantes de nuestro sitio web.

Uno de la manera más fácil y confiable de transferir archivos desde el directorio al directorio es con elrsync comandos. Esto preserva los permisos y tiene buenas características de integridad de datos.

La ubicación de la raíz del documento en la guía LÁMPARA Ubuntu 14.04 es /var/www/html/ Podemos transferir nuestros archivos de WordPress no escribiendo:

 sudo rsync -avP ~/wordpress/ /var/www/html/

Esto copiará seguridad de todo el contenido del directorio ha desempaquetado a la raíz del documento.

Ahora debemos pasar a la raíz del documento para hacer algunos cambios de permisos finales

 cd /var/www/html

Usted tendrá que cambiar la propiedad de nuestros archivos para mayor seguridad.

Queremos dar a la propiedad de usuario al usuario normal, no root (con privilegios sudo) que usted planea usar para interactuar con su sitio. Este puede ser tu usuario normal si lo desea, pero algunos puede sugerir que se crea un usuario adicional para este proceso. Le corresponde a usted que usted elija.

Para esta guía, vamos a utilizar la misma cuenta que hemos creado durante la configuración inicial del servidor guía, que llamamos demo Esta es la cuenta estoy realizando todas las acciones de esta guía como.

La propiedad del grupo que dará a nuestro proceso de servidor web, que es www-data Esto permitirá Apache para interactuar con el contenido según sea necesario.

Podemos asignar rápidamente estos valores de propiedad escribiendo:

sudo chown -R demo: www-data *

Esto configurará las propiedades de propiedad que estamos buscando.

Si bien se trata de propiedad y los permisos, también hay que mirar en la asignación de la propiedad correcta en nuestro directorio los archivos subidos. Esto nos permitirá subir imágenes y otros contenidos de nuestro sitio. Actualmente, los permisos son demasiado restrictivas.

En primer lugar, vamos a crear manualmente el uploads directorio bajo el wp-content directorio a nuestra raíz del documento. Este será el directorio padre de nuestro contenido:

 mkdir /var/www/html/wp-content/uploads

Tenemos un directorio ahora a los archivos de la casa cargado, sin embargo los permisos siguen siendo demasiado restrictivo. Tenemos que permitir que el propio servidor web para escribir en este directorio.Podemos hacer esto mediante la asignación de propiedad de grupo de este directorio para nuestro servidor web, así:

 sudo chown -R :www-data /var/www/html/wp-content/uploads

Esto permitirá que el servidor web para crear archivos y directorios bajo este directorio, lo que nos permitirá cargar contenido en el servidor.

5- Instalación completa a través de la interfaz web
Ahora que tiene sus archivos en su lugar y su software está configurado, puede completar la instalación a través de la interfaz web.

En su navegador web, vaya a nombre de dominio de su servidor o la dirección IP pública:
http: // server_domain_name_or_IP

Usted verá la página de configuración inicial de WordPress, donde se va a crear una cuenta de administrador inicial:

Config inicial WordPress

Complete la información para el la cuenta administrativa que desea hacer sitio y. Cuando haya terminado, haga clic en el botón de instalación en la parte inferior.

WordPress confirmará la instalación y, a continuación, le pedirá que inicie sesión con la cuenta que acaba de crear:

WordPress confirmar instalar

Pulse el botón en la parte inferior y luego complete la información de su cuenta:

Entrada WordPress

Se le presentará con la interfaz de WordPress:

Interfaz de administración de WordPress 

6 (Opcional) – Configurar permalinks bonitos para WordPress

Por defecto, WordPress crea dinámicamente las URL que se ven algo como esto:
http: // server_domain_name_or_IP / p = 1

Esto no es exactamente la interfaz más útil para los visitantes o los motores de búsqueda, por lo que la mayoría de los usuarios desea modificar esto. WordPress tiene la capacidad de crear vínculos permanentes «bonitas» que limpiar el URL en un formato más amigable humana.

Hay algunas cosas que tenemos que hacer para conseguir que esto funcione con Apache en Ubuntu 14.04.
Modificación de Apache para permitir URL reescrituras
En primer lugar, tenemos que modificar el archivo host virtual Apache para WordPress que permiten.htaccess anulaciones. Usted puede hacer esto mediante la edición del archivo de host virtual.

De forma predeterminada, esto es 000-default.conf pero su archivo podría ser diferente si ha creado otro archivo de configuración:

 sudo nano /etc/apache2/sites-available/000-default.conf

Dentro de este archivo, queremos configurar algunas cosas. Debemos establecer el ServerName y crear una sección de directorio donde permitimos que las anulaciones. Esto debe ser algo como esto:
<VirtualHost *: 80>
ServerAdmin webmaster @ localhost
DocumentRoot / var / www / html
ServerName server_domain_name_or_IP
<Directory / var / www / html />
AllowOverride All
</ Directory>
. . .

Cuando haya terminado, guarde y cierre el archivo.

A continuación, tenemos que activar el módulo de reescritura, lo que le permite modificar las direcciones URL. Usted puede hacer esto escribiendo:

 sudo a2enmod rewrite

Después de haber realizado estos cambios, reinicie Apache:

 sudo service apache2 restart

Crear un archivo .htaccess
Ahora que Apache está configurado para permitir reescrituras mediante .htaccess archivos, tenemos que crear un archivo real.

Es necesario colocar este archivo en la raíz del documento. Escribe esto para crear un archivo vacío:

 touch /var/www/html/.htaccess

Esta será creado con su nombre de usuario y grupo de usuarios. Necesitamos que el servidor web para ser el propietario del grupo, sin embargo, por lo que debemos ajustar la propiedad escribiendo:

 sudo chown :www-data /var/www/html/.htaccess

Ahora tenemos la propiedad correcta de este archivo.

Es posible que tengamos que ajustar los permisos sin embargo. Esto depende de cómo usted prefiere trabajar. WordPress generará las reglas de reescritura necesarias para usted. Si tiene permisos de escritura a este archivo, se puede poner en práctica las normas de forma automática. Si no lo hace, tendrá que editar manualmente este archivo para agregar las reglas correctas.

¿Qué configuración que elija dependerá de lo mucho que valora la comodidad sobre la seguridad. Permitir el acceso de escritura servidor web para este archivo será definitivamente más conveniente, pero algunos dicen que es un riesgo de seguridad innecesario.

Si quiere  que WordPress  actualize automáticamente este archivo con reglas de reescritura, puede asegurarse de que tiene los permisos correctos para hacerlo escribiendo:

 chmod 664 /var/www/html/.htaccess

Si desea actualizar este archivo de forma manual por el bien de un pequeño aumento de la seguridad, puede permitir que el servidor web de sólo lectura privilegios escribiendo:

 chmod 644 /var/www/html/.htaccess

Cambiar la configuración Permalink en WordPress
Cuando haya terminado de hacer los cambios a nivel de servidor, puede ajustar fácilmente la configuración de enlace permanente a través de la interfaz de administración de WordPress.

En el lado izquierdo, bajo la Settings del menú, puede seleccionar Permalinks

Enlaces permanentes de WordPress

Usted puede elegir cualquiera de los ajustes preconfigurados para organizar las direcciones URL, o puede crear el suyo propio.

Opciones perma WordPress

Cuando haya hecho su selección, haga clic en «Guardar cambios» para generar las reglas de reescritura.

Si ha permitido el acceso de escritura servidor web a su .htaccess archivo, debería ver un mensaje como este:

Actualización perma WordPress

Si no permite que el acceso de escritura servidor web a su .htaccess archivo, se le proporcionará con las reglas de reescritura que necesita añadir al archivo de forma manual.

Copie las líneas que WordPress y luego da editar archivo en el servidor:

 nano /var/www/html/.htaccess

Esto debe darle la misma funcionalidad.

Una vez  tenga instalado su servidor de wordpress  ,  el  trabajo no acaba mas que empezar pues por ejemplo pues configurar actualizaciones seguras y de fácil acceso para WordPress, puede  utilizar WPScan parqa pasar un Test de Plugins vulnerables y Temas ,administrar WordPress desde la línea de comandos, establecer sitios de WordPress múltiples ( no multisitio ) o establecer sitios de WordPress múltiples con varios sitios, etc    !mucha suerte!

 

Mas información aqui

Un termostato con pantalla de tinta electronica que hoy cuesta 50€ menos en el Black Friday de Amazon


Ya hemos hablado en este blog  de este innovador termostasto Netatmo – Termostato para Smartphone  que hoy en Amazon   aprovechando que es el Black Friday ,lo tienen   por 129€   ( 50€ de rebaja frente a su precio habitual)  y que sólo  podemos comprar   por unas   horas , con medidas  más que aceptables (es  un cubo de 83x83x22 mm diseñado por Starck y fabricado en  plexiglás translúcido), que ademas puede controlarse   también  por una aplicación tanto para Ios como para Android.

Este tipo de termostatos con conexión a Internet que permiten su manejo desde el móvil son muy prácticos y ofrecen muchas más funcionalidades que los termostatos tradicionales sobre todo  porque   consiguen un mayor ahorro y se amortizan rápido, pues  permite apagar una caldera al salir y encenderla por  ejemplo cuando vayas camino a casa, sin necesidad de haberlo programado con antelación.

Este  innovador termostato wifi   puede ser muy útil pues  según sus creadores, el termostato inteligente   permite ahorrar hasta un 25% de su consumo de energía ,reduciendo de esta forma  su huella de carbono. De  hecho gracias  a la app,cada mes, mediante  el Balance de Ahorro Energético personal  permite efectuar un seguimiento del consumo  ayudando  a programar su calefacción más eficazmente.

Una característica muy llamativa de  es que han utilizado una pequeña pantalla  de tinta electrónica e-ink   la cual le aporta eficiencia energética, autonomía extendida y una óptima legibilidad  para el termostato contribuyendo a que el termostato sea completamente portátil pues  éste esta auto-alimentado con 3 pilas AAA que aseguran una autonomía de al menos un año

2015-11-27_17h55_48

Puede  montarse en la pared o en modo inalámbrico en cualquier lugar y cambiarse de sitio cuando lo desee.La temperatura puede ajustarse directamente en el Termostato o bien a distancia, desde un smartphone, tablet u ordenador.

 

En la imagen de abajo podemos ver como es su  instalación:el rele del termostato Netatmo  se conecta a través de cables a la caldera reemplazando al  termostato convencional  (también sustituye a termostatos inalámbricos) ,controlando de este modo  la calefacción. Utiliza una señal  de  radio para conectar con el termostato, pero también puede acceder a este a través de la app gracias a su conexion wifi. Por tanto el relé Netatmo también proporciona conexión Wi-Fi a Internet y control remoto desde la aplicación.

netatmo

Puede utilizarse para reemplazar cualquier termostato de pared o inalámbrico, o bien como nuevo termostato, pero antes  de adquirir el termostato  deberia comprobar si es compatible con su sistema de calefaccion   caldera de gas, combustible o madera, o bomba de calor individuales y por supuesto contar  con cceso privado a Internet mediante wifi

En cuanto  a las funciones inteligentes , Netatmo – Termostato para Smartphone    establece un programa en función de los hábitos del usuario. Gracias a la función Auto-Adapt   el Termostato anticipa el inicio de los rangos de temperatura de la calefacción en función del aislamiento de su casa y la temperatura exterior:así alcanza la temperatura idónea en el momento preciso.

 

Aplicación movil

Aceso Google Play   aqui

Incluye esta app  las siguintes funcionalidades

PANEL DE CONTROL:
* Controla su sistema de calefacción directamente desde su Android para optimizar tu comodidad al mismo tiempo que ahorras en las facturas de energía.
* ¡Navegación sencilla e intuitiva! Establece la temperatura de tu hogar con un gesto fácil.
* Ahorra energía mientras está fuera.

PLANIFICACIÓN:
* Diga a tu termostato cómo vives, se adaptará y cuidará de su comodidad y le ayudará a ahorrar hasta un 25 % en facturas de energía.
* Modifica la planificación cuando quiera gracias a la navegación intuitiva.

OBSERVACIÓN Y SEGUIMIENTO A LARGO PLAZO:
* Registra la temperatura de su hogar.
* Analiza y comprende el consumo de enrgía con gráficos bonitos e intuitivos.

 

 

 

CAPTORES Y MEDIDAS
Temperatura (medida):
Rango: 0°C a 50°C
Precisión: -+ 0,1°C
Temperatura (punto de acceso):
Rango de punto de acceso: 5°C to 30°C
Incremento de la medición: 0,5°C
Unidades: °C
ESPECIFICACIONES INALÁMBRICAS
Compatible con Wi-Fi 802.11 b/g/n (2,4GHz).
Seguridad constante: Open//WEP/WPA/WPA2-personal (TKIP et AES). Conexión inalámbrica entre el termostato y el relé: radio de largo alcance
Conexión inalámbrica entre el Termostato y el relé: radio de largo alcance Alimentación y baterías
CONTENIDO DEL PAQUETE
Termostato
Soporte móvil + soporte mural
Relé
Adaptator de caldera
Adaptator de red
Placa de montaje
Cable USB
5 adhesivos de color
3 pilas AAA
Tornillos / Tornillos de anclaje
 Compatible con Android 4.0 y superior/ Windows Phone 8.0 y superiot

Compatible con Iphone 4/ 5/ 5c/ 5s/ 6/ 6Plus y Ipad mini/ iPad2/ iPad cuarta y tercera generación.

 

 

 

 

Mas información  aqui

Mejora de juegos Nintendo por NFC


Los amiibo son figuras y también  tarjetas interactivas para  usar con los nuevos  juegos que ha desarrollado Nintendo como pueden ser Mario Party 10,Splatoon,Super Mario maker,SuperSmash Bros,New style Boutique 2, etc

La idea es tocar  con estas tarjetas  o muñecos (con un amiibo )  el punto de contacto NFC   mientras  se está jugando a un juego compatible de Wii U o Nintendo 3DS , al igual que se hace cuando se paga  con tarjetas  NFC  en un supermercado ,   para  descubrir sorprendentes nuevas funciones que no eran posible directamente disfrutar desde el propio juego .

En algunos juegos, incluso podrá mejorar las habilidades de la figurita  amiibo a medida que juega, de modo que «creará» un personaje amiibo exclusivo. Asimismo también se puede cambiar el aspecto de personajes dentro del juego y ampliar las opciones de personalización con atuendos temáticos en los juegos compatibles y  en ciertos títulos compatibles, podrá acceder a nuevas misiones .

Así vemos como  los amiibo tienen diferentes efectos dependiendo del juego. Es posible que desbloqueen nuevos modos, armas o atuendos para personajes, o incluso que mejore las destrezas del amiibo para convertirlo en el aliado perfecto ¡o en el rival más mortífero!

Ejemplos de funcionalidades nuevas que aportan los amiibo:

  • En Animal Crossing: Happy Home Designer, al usar un amiibo de Animal Crossing, se puede diseñar la casa de ese personaje o invitarlo a visitar cualquiera de las casas o edificios públicos que haya diseñado.
  • En  New Style Boutique 2 – se pueden marcar tendencias pues al usar un amiibo compatible desbloqueará artículos especiales después de realizar algún encargo para un cliente, ¡entre los que es posible que encuentre caras famosas!
  • En Super Smash Bros. for Nintendo 3DS / Wii U, puede entrenar a los amiibo para ser los mejores aliados o los más feroces enemigos. Por ejemplo puede hacer que un amiibo entre en el combate y lucha con o contra él. Cuanto más luche, más subirá su nivel, y hasta es posible que aprenda tácticas de los luchadores con los que se enfrente.
  • Al usar un amiibo compatible en Super Mario Maker, Mario se transformará en ese personaje cuando consiga un champiñón ?. En Yoshi’s Woolly World, podrás usar un amiibo para desbloquear patrones de Yoshi basados en ese personaje. ¡Descubre qué aspecto tendría Yoshi como Mario, Kirby o Donkey Kong, entre otros!
  • Ponte a prueba en retos especiales con amiibo en Splatoon. Al tocar el Wii U GamePad con un amiibo de Splatoon, podrá emprender misiones con un toque especial y cuando las supere desbloqueará armas, equipo y minijuegos especiales.
  • En Mario Party 10, toque el punto NFC con cualquier amiibo compatible para que juegue en amiibo Party: su amiibo se convierte en una ficha sobre un tablero lleno de sorpresas por doquier.
  • En Animal Crossing: amiibo Festival, cuando uses una figura amiibo de Animal Crossing, podrás usar ese personaje como tu ficha sobre el tablero de juego. ¡También puedesusar tarjetas amiibo de Animal Crossing para jugar a divertidos minijuegos!

 

Como  era de esperar,  no todas las consolas  incluyen el lector y  grabaodr   de NFC, por lo que si no dispone de dicho lector ,p ara poder usar los ammibo , se deberá adquirir el lector aparte:Nintendo – Lector/Escritor NFC (Nintendo 2DS, 3DS) por  unos 16€ en Amazon.

 

Las consolas  que  soportan NFC  sin lector adicional son   Wii U y   New Nintendo 3DS y New Nintendo 3DS XL.

Wii U    New Nintendo 3DS y New Nintendo 3DS XL

Si embargo las consolas  Nintendo 3DS ,Nintendo 3DX XL    y Nintendo 2DS+, no soportan la tecnologia NFC ,por lo que para disfrutar de las posibilidades que ofrecen los ammibo ,tendrá que adquirir el lector grabador aparte  (Nintendo – Lector/Escritor NFC (Nintendo 2DS, 3DS), el cual  alimentándose por dos  pilas de 1,5V AA  lleva un lector /grabador de NFC que es capazar de transmitiendo ( o recibir) por infrarrojos los datos de las consolas 3DS y 2DS.

Nintendo 3DS y 2DS + lector/grabador de NFC

Este  nuevo accesorio Lector/grabador NFC pues  permite a todas las consolas de la familia Nintendo 2DS y Nintendo 3DS ser compatibles con las figuras Amiibo y las tarjetas Amiibo  (como decimos  no es necesario para las consolas New Nintendo 3DS que tienen la funcionalidad NFC integrada).

Para activar el accesorio en el menú de ajustes hay una opción de Amiibo y ahí se gestiona todo el proceso. Además, cada propio juego tiene su menú de configuración para los Amiibo.Por ejemplo en  Super Smash Bros  únicamente debe acceder a apartado Amiibo y ahí indica todo el proceso de conexión con la Nintendo.

Requiere la versión más reciente del sistema, pero la propia consola  avisa si debe actualizarla, tanto la versión del juego como la versión de la consola

 

2015-11-25_23h39_25

Como vemos con el accesorio actualizaremos las consolas  Ninetendo 2DS  y 3DS   a  la nueva era  de  las consolas  NFC , tecnología por la cual se  basan las funcionalidades Amiibo  para dar un mayor dinamismo  y variedad  a juegos como como Super Smash Bros 3DS, Animal Crossing Happy Home Designer, New Style Boutique 2, Code Name Steam… 

Mas información  aqui

 

Operando sobre un GNU/Linux mediante un navegador


eyeOS es una plataforma de nube privada con una interfaz de escritorio basada en la web, tambien  llamado «escritorio en la nube» por su similitud a un interfaz que  proporciona un escritorio completo desde la nube con gestión de archivos, herramientas de gestión de la información personal, herramientas colaborativas y aplicaciones de la compañía.

eyeOS es un proyecto iniciado en agosto del 2005 por Pau Garcia-Milà y Marc Cercós,cuya   primer hito fue la creación de un  nucleo propio  de nube privada  que lo ofrecieron libremente para que cualquier pudiera instalarlo y utilizarlo en sus servidores e intranets con Windows.

En marzo de 2006, abrieron el sitio eyeOS.info, un servicio gratuito online basado en su software original, adaptado para usarlo como un escritorio virtual en línea al que cualquiera pudiera acceder. El usuario puede almacenar cosas en él y usar las aplicaciones disponibles como un sistema operativo legítimo, desde cualquier parte del mundo y sin instalar software adicional.

Desde sus inicios como proyecto Open Source bajo licencia AGPL el producto ha ido avanzando y en 2012 cambió a un modelo de licencias privadas.

En el año 2014 Telefónica anunció la adquisición de eyeOS con el objetivo de reforzar en un futuro su oferta de servicios cloud móviles y fomentar el desarrollo de soluciones tecnológicas de software libre.

En este contexto,la tecnología de eyeOS permite tambien virtualizar no solo escritorios  Windows , tambien  escritorios completos Linux en formato VDI( Virtual Desktop  Interface ), accediendo simplemente desde un navegador HTML5 ,como pueden ser   Edge de  Microsoft  o Google Chrome.

Todas las  peticiones  se procesan en una granja OpenStack-KVM-Spice y otras muchas tecnologías OpenSource.

Como podeemos ver en el siguiente video , el rendimiento es sorprendente

Wereables infantiles


No solo los wereables son para adultos, presentamos en este post algunas propuestas de la industria para el cuidado ,motorización e incluso entretenimiento de los mas pequeños:

Mimo Smart Baby Monitor
Póngale este ‘body’ a su bebé y tendrá acceso a través de una aplicación instalada en su teléfono o tableta a una gran cantidad de información que incluye si el pequeño está dormido o despierto y en qué posición, cómo respira en cada momento, si está llorando o no… Además, todos esos datos se traducirán en informes sobre, por ejemplo, cómo ha dormido su bebé durante las últimas noches. Es compatible con iOS yAndroid,y  se puede meter en la lavadora.

mimo

Moff
Se trata de una pulsera de silicona creada por un grupo de emprendedores japoneses en kickstarter que se presenta con este lema: “ Todo lo que hagas se convierte en un juguete”. ¿Cómo? La pulsera recoge los movimientos del niño y se conecta por Bluetooth a una ‘app’ instalada en el teléfono de sus padres, ofreciendo sonidos en función de las acciones que se realicen.De esta forma, si el menor juega a que tiene una espada o toca la guitarra, esos son los sonidos que se reproducirán cada vez que mueva sus manos.Es pues una especie de  juguete portátil inteligente que prodeuce sonidos divertidos  por cada movimiento del niño.Incluso Moff juega bien con otros – dos Bandas Moff pueden sincronizar a nuestro Moff aplicación

Funciona con iOS y  Android:.

  • Para los usuarios de Android, la versión de Android 4.4+ es necesaria para la compatibilidad con el Moff Band.Apoyamos la mayor venta de dispositivos Android, incluyendo: Samsung Galaxy S4, S5, S6, Nota Edge / Motorola Moto G / Google NexusTM 4, 5, 6, 9 / Sony Xperia Z, Z1, Z3, Z4
  • Para los usuarios de Apple, Apple iOS 7.1+ es necesaria para la compatibilidad con el Moff Band. Apoyamos la mini de Apple iPhone 5 + / iPod Touch 5+ / iPad 4+ / iPad / iPad y Aire
  • Para una lista actualizada de los dispositivos compatibles, visite: support.moff.mobi

moif

Sproutling

Se trata de una especie de tobillera o  muñequera (según se mire )confeccionada pensando en la higiene del más pequeño (el sensor se puede sacar de la banda – silicona hipoalergénica – para que se pueda lavar con facilidad) por la que se puede monitorizar el sueño y la actividad de los bebés. Tambien permite  conocer otras variables corporales de los pequeños como pueden ser su ritmo cardíaco, temperatura, posición en la cuna y hasta su estado de ánimo.Ademas tiene en su interior un sensor de proximidad que detecta si se ha soltado de la pierna del bebé, y avisar en consecuencia.

Todas la información se transmite a una aplicación previamente descargada por los padres que presume de contar con una tecnología de aprendizaje que va asimilando hábitos, para entender qué situaciones están dentro de lo normal, y también está alerta por si los responsables llevan demasiado tiempo sin echar un vistazo al bebé. Ademas esta aplicación tiene la posibilidad de reconocer diferentes bandas Sproutling, es decir, podemos tener varios niños «cuantificados» al mismo tiempo.

Otra novedad es que esta tobillera es recargable de forma inalámbrica mediante  una estación de carga inalámbrica que a su vez contiene el sensor de luz ambiental.

Sobre autonomía, unos tres días con un uso normal.y se puede ajustar para seguir siendo útil a medida que el pequeño va creciendo. Se empezaó a vender en marzo de 2015 por 250$ , se vendieron todas la unidades  y ahora si se esat interesado hay que volver  a apuntarse para adquirirlo.

sproutling

Sus creadores lo denominan como el «monitor para bebés» más inteligente del mercado, pero realmente estamos ante una pulsera cuantificadora eso si adaptada  que nos cuenta el estado del niño, mandando cada actividad relevante hasta nuestro teléfono.Quizas lo relevante es qeu sea capaz de reconocer y cuantificar muchas cosas, como: el ritmo cardíaco del bebé, si está en movimiento, el estado de ánimo cuando se levanta, si la habitación tiene un ambiente demasiado luminoso o ruidoso, la temperatura de la misma, e incluso predecir cuándo se levantará siendo ademas  según su creadoes una buena herramienta para prevenir la muerte súbita del lactante, avisando de posiciones de sueño no deseadas.

Otro dispositivo similar, aunque a modo de ‘zapatito’, es Owlet.

Geochild
Se trata de una pulsera localizadora que pesa sólo nueve gramos y que incluye un pequeño GPS, lo que le garantizará la localización de sus hijos en entornos cerrados o abiertos. La pulsera se conecta por Bluetooth a los dispositivos móviles de los padres, donde es necesario tener instalada una ‘app’ que muestra la posición en un mapa. El alcance máximo es de 60 metros, la batería de polímero de litio recargable por inducción dura 14 horas y es sumergible. Compatible conAndroid e iOS.

Han incluido en una pulsera la potencia del nuevo protocolo Bluetooth Smart Low Energy y la eficiencia de un receptor GPS de última generación. De esta forma «siempre» tendremos localizado ( tanto en entornos abiertos como cerrados en una superficie de un campo de futbol. )  en un Mapa con total exactitud el posicionamiento en tiempo real de nuestro hijo. Le damos seguridad, Hemos desarrollado una aplicación sencilla pero a la vez inteligente, de forma que Vd no tendrá que preocuparse de nada, solamente configurará los parámetros de seguridad y desde ese momento la App le avisará si su hijo supera el limite de seguridad respecto su SmartPhone.

 

geochild

Sin duda su punto fuerte  es la ausencia de cuota mensuales, sin costes ocultos o mensuales  aun precio   muy contenido(60€).

Leap Band
Otra pulsera ‘wearable’ pensada para jugar, aunque de una manera que anima a los niños a realizar actividad física y que les enseña hábitos alimenticios saludables y de higiene.La experiencia incluye audio y la pulsera es resistente al agua, además de contar con una función que permite que los padres puedan controlar cuándo pueden o no jugar los niños de forma remota.A elegir en verde, azul o rosa, no lleva pilas sino que es recargable.

leapband

LG KizON
LG ya vende en Europa (no en España) este ‘wearable que se controla con una aplicación instalada en nuestro teléfono. Se trata de una especie de pulsera (aunque también se puede colgar de la ropa) con modem 2G y receptor GPS que se puede utilizar para conocer la localización de nuestros hijos o comunicarnos con ellos a través de la función ‘One StepDirect Call’. Disponible en azul o rosa, pesa 43 gramos y la batería ofrece 36 horas de autonomía.Un dispositivo similar es FiLIP 2, desarrollado por AT&T y vendido en EEUU y actualmente en España por Movistar

 

Dispositivo para conectar nuestro smartphone a la linea fija


El Gigaset MobileDock LM550 es un nuevo  dispositivo que permite a smartphones Android  poder conectarlos con el teléfono fijo de casa  gracias a Bluetooth 4.0,el cual   permite transmitir  y recibir  el audio del smartphone a  la red DCT de  telefonia convencional presente  ya en todos los hogares , haciendo posible recibir y contestar  llamadas de móvil en un teléfono inalámbrico DECT

Muchas  personas se encuentran con el problema de que después de cambiarse de operadora y adquirir un tiempo de permanencia con ella, comprueban  como en muchos lugares de su hogar pierden la cobertura  perdiendo incluso continuamente las llamadas, convirtiéndose en una tarea imposible mantener una conversación telefónica , excepto  que se sitúe en  un lugar en concreto para coger esa mínima  cobertura GSM que le permita hablar , eso si ,sin poderse mover de alli: este por ejemplo podría ser el tipo de personas a los que  le puede ser muy útil este accesorio

Por  tanto en el caso de la cobertura GSM sea insuficiente en los edificios es MobileDock la solución es ideal aunque habrá que colocar en un lugar donde la recepción sea buena, por ejemplo, en una ventana, y se deriva a partir de ahí las llamadas entrantes según el estándar DECT, hasta 50 metros de ancho en el sistema telefónico .

Otra  función muy interesante es la función de carga rápida con hasta 1.500 mA  para  que siempre que se salga  de la casa con la batería completamente cargada.

 

Ademas por si fuera  poco , el LM550 puede usarse como lugar de almacenamiento fijo  de  nuestro terminal,   haciendo también ,como se ha comentado, las veces de  estación de carga para su propio smartphone. De hecho ,para  proporcionar una solución ópticamente perfecta sin necesidad de cables, se incluye un cable microUSB corto incluido, que se conecta magnéticamente y se bloquea en la posición correcta.

Gracias al  reenvío de llamadas perdido ninguna llamada durante el tiempo de carga  se perderá – el usuario móvil fácilmente llama a DECT microteléfonos respuestas.,eso si  sin olvidar que como combina  hasta dos teléfonos al mismo tiempo con el teléfono fijo, las llamadas entrantes se desvían de manera directa a todos los terminales registrados o el auricular de elección – con la comodidad total de la telefonía fija y la calidad de voz DECT.

 

giga3

 

Para  controlar  este accesorio  se hace  través de la aplicación MobileDock que en Google Play está disponible. Con esta  aplicación, cada usuario puede decidir cuál de los teléfonos quieren aceptar la llamada. Una vez que el LM550 tenga  un teléfono Gigaset DECT de clase  C y Clase S esten conectados, las llamadas desviadas se mostrarán en el auricular con el nombre o número. Para ello, la identificación de llamadas debe estar habilitado en el teléfono inteligente. Para todos los demás sistemas de Gigaset DECT y sistemas de otros fabricantes desvío de llamadas se realiza sin un nombre como un simple indicador para las llamadas internas.

Asimismo quien no quiera utilizar el desvío de llamadas, se puede desactivar (el smartphone conectado se cargara de todos modos). Dos LEDs de estado indican si se hacen las conexiones Bluetooth y DECT.

 

 

giga

 

El consumo de energía de MobileDock gracias a la fuente de alimentación de bajo consumo que incorpora es muy baja( es de menos de 0,8 vatios) . En el modo inactivo, MobileDock es libre de radiación cuando la base y todos los terminales registrados soportan ECO DECT. La potencia de transmisión se ajusta dependiendo de la distancia a la estación base automáticamente al.

El MobileDock es compatible con todos los teléfonos inteligentes que tienen Android 4.4 o superior, y se basan en el estándar inalámbrico Bluetooth 4.0.

 

giga2

 

Seguramente con esa premisa, además de otras muchas ventajas, es con la que el fabricante Gigaset ha desarrollado MobileDock, un gadget que permite conectar hasta dos móviles simultáneamente con la red de teléfono fija de nuestra casa para que así podamos atender las llamadas recibidas en nuestro móvil a través del teléfono fijo con calidad de sonido DECT, que si además en inalámbrico, nos permitirá movernos por toda la casa sin problemas de cobertura y evitar que nos volvamos a perder más llamadas.

Por cierto este accesorio se puede comprar en Amazon  por unos 60€  pinchando en el siguiente enlace :Gigaset MobileDock LM550 – estaciones dock para móviles (Smartphone, Universal, Negro, Micro-USB, 4.0, 8,800 cm)

 

 

 

Mas informacion de  este accesorio ( en alemen )  aqui

TrackEye: Seguimiento en tiempo real de los ojos humanos utilizando una cámara web


 Los ojos son las características más importantes de la cara humana,así que el uso eficaz de los movimientos de los ojos como una técnica de comunicación en las interfaces de usuario a la computadora puede encontrar lugar en diversas áreas de aplicación.El seguimiento de los ojos y la información proporcionada por las características de los ojos tienen el potencial de convertirse en una interesante manera de comunicarse con un ordenador en un sistema de interacción persona-ordenador (HCI). Así que con esta motivación, el diseño de un software en tiempo real de seguimiento característica del ojo es el objetivo de este proyecto.

El propósito del proyecto lideraado por ,   y publicado en CodeProject es implementar un tiempo real eye tracker-función con las siguientes capacidades:

  • Cara en tiempo real el seguimiento con la escala y la rotación invariante
  • Seguimiento de las áreas de ojos individual
  • Seguimiento características oculares
  • Ojo dirección de la mirada hallazgo
  • Control remoto mediante movimientos oculares

La segunda versión de TrackEye soporta:

  • Dos algoritmos de detección de rostros diferentes: Haar Face Tracking y CAMSHIFT
  • Dos algoritmos de detección de ojos diferentes:  Análisis de Componentes Principales Adaptativo   y comparación de plantillas
  • Algoritmos de seguimiento pueden ser seleccionados por el usuario al comienzo del proceso a través de GUI.
  • Fuente de entrada seleccionable: Cámara Web o   Archivo de vídeo

 Tenga en cuenta que TrackEye fue escrito con OpenCV Biblioteca v3.1, así que asegúrese de usar durante la reconstrucción.

Instrucciones para ejecutar y reconstruir TrackEye

A continuación los links  del ejecutable  ,así como el codigo fuente para el seguimiento en tiempo real de los ojos humanos en las secuencias de vídeo de Interacción Persona-Ordenador utilizando una cámara web:

Instrucciones De Instalación

  1. Extraer archivo TrackEye_Executable.zip. Antes de ejecutar TrackEye_636.exe, copie los dos archivosSampleHUE.jpg y SampleEye.jpg a la carpeta C: \. Estos dos archivos se utilizan para los algoritmos CAMSHIFT y Plantilla-juego.
  2. No hay otros pasos a seguir por el usuario para ejecutar el software. No hay dependencias DLL como el software fue construido con las DLL estáticamente incluidos.

Ajustes por hacer para realizar una buena Seguimiento

Ajustes de Detección de la cara y de los ojos

Bajo TrackEye Menú -> Configuración de Tracker

  • Fuente de entrada: Video
  • Haga clic en Seleccionar archivo y seleccionar .. \ Avis \ sample.avi
  • Cara algoritmo de detección: Haar algoritmo de detección de rostros
  • Marque «Track también Eyes» checkBox
  • Ojo algoritmo de detección: Adaptativo PCA
  • Desactive la opción «Comprobar Diferencia»
  • Número de la base de datos de archivo: 8
  • Número de EigenEyes: 5
  • La distancia máxima permitida desde eyespace: 1200
  • Rostro ancho / ojo anchura plantilla: 0.3
  • ColorSpace tipo para utilizar durante PCA: CV_RGB2GRAY

Configuraciones para detección del Alumno

Compruebe «ojos de pista en los detalles» y luego seleccione «Detectar también pupilas». Haga clic en el botón «Parámetros de Ajuste»:

  • Introduzca «120» como el «Valor Umbral»
  • Haga clic en «Guardar configuración» y luego haga clic en «Cerrar»

Ajustes para la serpiente

Marque «Indique ojo límite utilizando serpientes activos». Haga clic en «Configuración de la serpiente» botón:

  • Seleccione ColorSpace de usar: CV_RGB2GRAY
  • Seleccione umbralización simple e introduzca 100 como el «Valor umbral»
  • Haga clic en «Guardar configuración» y luego haga clic en «Cerrar»

Fondo

Hasta ahora no ha habido mucho trabajo en la detección de ojos y antes de que el proyecto, los métodos anteriores se estudiaron cuidadosamente para determinar el método aplicado. Podemos clasificar los estudios relacionados con el ojo en dos categorías principales que se enumeran a continuación:

Enfoques basados ​​Equipo Especial

Este tipo de estudios de usar el equipo necesario que le dará una señal de algún tipo que es proporcional a la posición del ojo en la órbita. Varios métodos que están al día en uso son Electrooculografía, Infra-Rojo oculografía, esclerales bobinas de búsqueda. Estos métodos están completamente fuera de nuestro proyecto.

Imagen basada Enfoques

Los enfoques basados ​​en la imagen realizan detecciones ojo en las imágenes. La mayoría de los métodos basados ​​imagen tratar de detectar los ojos utilizando las características de los ojos. Los métodos utilizados hasta ahora son métodos basados ​​en el conocimiento, los métodos basados ​​en características (color, gradiente), sencilla comparación de plantillas, métodos de apariencia. Otro método interesante es «comparación de plantillas deformables», que se basa en la coincidencia de una plantilla geométrica ojo en una imagen del ojo, reduciendo al mínimo la energía del modelo geométrico.

Implementación de TrackEye

El proyecto ejecutado es en tres componentes:

  1. Detección de rostros: Realiza la detección de rostros invariante escala
  2. La detección de los ojos: Ambos ojos se detectan como resultado de este paso
  3. Extracción de características de los ojos: Características de los ojos se extraen al final de este paso

Detección De Rostro

Dos métodos diferentes se llevaron a cabo en el proyecto. Ellos son:

  1. Continuamente adaptativos Medios-Shift Algoritmo
  2. Método de detección de la cara Haar
Algoritmo de continuamente adaptativo Mean-Shift 

Adaptable Mean Shift algoritmo se utiliza para el seguimiento de rostros humanos y se basa en la técnica no paramétrica robusta para escalar gradientes de densidad de encontrar el modo (pico) de las distribuciones de probabilidad llamados el algoritmo medio turno. Como caras son rastreados en secuencias de vídeo, el algoritmo de cambio media se modifica para tratar con el problema de cambiar dinámicamente las distribuciones de probabilidad color. El diagrama de bloques del algoritmo se da a continuación:

Camshift Algoritmo

Haar-Cara Método de detección

El segundo algoritmo de detección de cara se basa en un clasificador de trabajo con características Haar-gusta (a saber, una cascada de clasificadores impulsado de trabajo con características Haar-similares). Primero de todo, se entrenó con unos pocos cientos de puntos de vista de muestra de una cara. Después de un clasificador está entrenado, que puede ser aplicado a una región de interés en una imagen de entrada. El clasificador emite una «1 «si la región es probable que muestran la cara y» 0 «en caso contrario. Para buscar el objeto en toda la imagen, se puede mover la ventana de búsqueda a través de la imagen y comprobar cada ubicación utilizando el clasificador. El clasificador está diseñado de modo que pueda ser fácilmente «cambiar de tamaño» con el fin de ser capaz de encontrar los objetos de interés en diferentes tamaños, lo que es más eficiente que cambiar el tamaño de la imagen en sí.

Detección de ojos

Dos métodos diferentes se llevaron a cabo en el proyecto:

  1. Plantilla de emparejamiento
  2. Adaptable EigenEye Método
Plantilla de emparejamiento

Plantilla-Matching es un método bien conocido para la detección de objetos. En nuestro método de correspondencia de plantilla, se crea un patrón de ojo norma manualmente y se le dio una imagen de entrada, los valores de correlación con los patrones estándar se calculan para los ojos. La existencia de un ojo se determina basándose en los valores de correlación. Este enfoque tiene la ventaja de ser simple de implementar.Sin embargo, a veces puede ser inadecuada para la detección del ojo ya que no puede tratar eficazmente con la variación en escala, pose y forma.

Método Adaptativo EigenEye

Adaptable EigenEye método se basa en el método conocidos EigenFaces . Sin embargo, como el método se utiliza para la detección de ojos lo nombramos como » EigenEye Método «. La idea principal es descomponer imágenes del ojo en un pequeño conjunto de características incluyen imágenes llamadas eigeneyes, que pueden ser considerados como los principales componentes de las imágenes originales. Estos eigeneyes funcionan como los vectores de la base ortogonal de un subespacio llamados eyespace. Sin embargo, sabemos que laeigenface método no es escalar invariante. Para proporcionar la invariancia de escala podemos cambiar el tamaño de la base de datos de los ojos una vez con la información obtenida por el algoritmo de detección de rostros ( EyeWidth / FaceWidth ? 0 . 35 ), podemos proporcionar una detección escala invariante utilizando sólo una base de datos.

Funciones OpenCV para el seguimiento de objetos y detección

OpenCV Biblioteca ofrece una gran cantidad de procesamiento de imágenes y de seguimiento de objetos y detección de bibliotecas. La función principal que se utiliza en estos proyectos y su uso se indican a continuación:

Código de ejemplo para el seguimiento Haar-Cara

  anular CTrackEyeDlg :: HaarFaceDetect (IplImage * img, CvBox2D * Facebox)
 {
     int escala = 2;
     IplImage * temp = cvCreateImage (cvSize (img-> ancho / 2, img-> Altura / 2), 8, 3);
     Pt1 CvPoint, pt2;
     int i;

     cvPyrDown (img, temperatura, CV_GAUSSIAN_5x5);
     WIN32 #ifdef
         cvFlip (temp, temp, 0);
     #terminara si
     cvClearMemStorage (almacenamiento);

     si (hid_cascade)
     {
         CvSeq * enfrenta = cvHaarDetectObjects (temp, hid_cascade, almacenamiento, 1. 2, 2,
                     CV_HAAR_DO_CANNY_PRUNING);

         NumOfHaarFaces = faces-> total;

         si (NumOfHaarFaces> 0)
         {
                 CvRect * r = (CvRect *) cvGetSeqElem (caras, 0, 0);
                 pt1.x = r-> x * escala;
                 pt2.x = (r-> x + r> ancho) * escala;
         WIN32 #ifdef
             pt1.y = img-> Altura - r-> escala y *;
             pt2.y = img-> Altura - (r> y + r> altura) * escala;
         #else
             pt1.y = r-> escala y *;
             pt2.y = (r> y + r> altura) * escala;
         #terminara si

         faceBox-> center.x = (float) (pt1.x + pt2.x) / 2 0.;
         faceBox-> center.y = (float) (pt1.y + pt2.y) / 2;
         faceBox-> Tamano.Width = (float) (pt2.x - pt1.x);
         faceBox-> size.height = (float) (pt1.y - pt2.y);
             }
     }
     cvShowImage ("Seguimiento", img);
     cvReleaseImage (y temporal);
 }

Código de ejemplo para CamShift Algoritmo

  // Las entradas para el algoritmo CamShift 
  IplImage * HUE = cvCreateImage (cvGetSize (SampleForHUE), IPL_DEPTH_8U, 1);
 extractHUE (SampleForHUE, HUE); // ** información HUE Extracto 

 int hist_size = 20;
 flotar rangos [] = {0, 180};
 flotar * pranges [] = {} rangos;
 hist = cvCreateHist (1, y hist_size, CV_HIST_ARRAY, pranges, 1);
 cvCalcHist (y HUE, hist); // Calcular el histograma de una parte HUE 

 hueFrame = cvCreateImage (cvGetSize (CameraFrame), IPL_DEPTH_8U, 1);
 backProject = cvCreateImage (cvGetSize (CameraFrame), IPL_DEPTH_8U, 1);
 extractHUE (CameraFrame, hueFrame);

 while (trackCONTROL! = 0)
 {
     extractHUE (CameraFrame, hueFrame);
     cvCalcBackProject (y hueFrame, backProject, hist); se forma // Probabilidad 
  // CvShowImage ("Tester2", backProject); 
  cvCamShift (backProject, SearchWin, cvTermCriteria (CV_TERMCRIT_EPS |
             CV_TERMCRIT_ITER, 15, 0 1), y un borrador, y Facebox).;
     SearchWin = comp.rect;
 }

Muestra Matching Plantilla Código

  // Coincidencia Plantilla para la detección de ojos 
  void Cara :: findEyes_TM (IplImage * faceImage, TrackingSettings * Ajustes)
 {
     CvSize faceSize;  faceSize = cvGetSize (faceImage);

     // Cargar plantilla de la base de datos de ojo 
  CString nomArchivo;
     // Nombre de la plantilla para el ojo izquierdo 
  fileName.Format ("% s \\% d.jpg ojo", Preferencias-> params-> DBdirectory, 0);
     IplImage * eyeImage_Left = cvLoadImage (nomArchivo, - 1);
     // Nombre de la plantilla para el ojo izquierdo 
  fileName.Format ("% s \\% d.jpg ojo", Preferencias-> params-> DBdirectory, 1);

     IplImage * eyeImage_Right = cvLoadImage (nomArchivo, - 1);

     IplImage * tempTemplateImg_Left;  IplImage * tempTemplateImg_Right;
     IplImage * templateImg_Left;  IplImage * templateImg_Right;

     si (eyeImage_Left == NULL || eyeImage_Right == NULL)
     {
         MessageBox (NULL, "plantillas no pueden ser cargados. \ N 
              Por favor revise su carpeta de ojo de base de datos "," Error ", MB_OK || MB_ICONSTOP);
         exit (1);
     }
     más
     {
         // Espacio Cambiar el color de acuerdo a los ajustes introducidos por el usuario 
  tempTemplateImg_Left = cvCreateImage (cvGetSize (eyeImage_Left), IPL_DEPTH_8U, 1);
         changeColorSpace (ajustes, eyeImage_Left, tempTemplateImg_Left);
         tempTemplateImg_Right =
                    cvCreateImage (cvGetSize (eyeImage_Right), IPL_DEPTH_8U, 1);
         changeColorSpace (ajustes, eyeImage_Right, tempTemplateImg_Right);

         flotar idealWidth = faceSize.width * Preferencias-> params-> relación;
         flotar conversionRatio = idealWidth / (float) tempTemplateImg_Left-> ancho;

         CvSize newSize;
         newSize.width = (int) idealWidth;
         newSize.height = (int) (tempTemplateImg_Left-> Altura * conversionRatio);

         templateImg_Left = cvCreateImage (newSize, IPL_DEPTH_8U, 1);
         cvResize (tempTemplateImg_Left, templateImg_Left, CV_INTER_LINEAR); // era NN 
  cvReleaseImage (y eyeImage_Left);
         cvReleaseImage (y tempTemplateImg_Left);

         templateImg_Right = cvCreateImage (newSize, IPL_DEPTH_8U, 1);
         cvResize (tempTemplateImg_Right, templateImg_Right, CV_INTER_LINEAR); // era NN 
  cvReleaseImage (y eyeImage_Right);
         cvReleaseImage (y tempTemplateImg_Right);
     }
     // ************************************************ ************* 
  // ************ Buscar faceImage para los ojos ************************ 
  // ************************************************ ************* 
  IplImage * GRAYfaceImage = cvCreateImage (faceSize, IPL_DEPTH_8U, 1);
     changeColorSpace (ajustes, faceImage, GRAYfaceImage);
     // CvCvtColor (faceImage, GRAYfaceImage, CV_RGB2GRAY); 
  // GRAYfaceImage-> origen = 1; 
  // ** Aviso a este origen imagen punto es la esquina inferior izquierda. 

     // ** Área de búsqueda Eye1 
  int x_left = 0;
     int y_left = 0;
     int width_left = (int) ((float) (faceSize.width / 2 0).);
     int height_left = (int) ((float) (faceSize.height));
     CvRect rect_Eye1 = cvRect (x_left, y_left, width_left, height_left);

     CvMat * Eye1Image = cvCreateMat (width_left, height_left, CV_8UC1);
     cvGetSubRect (GRAYfaceImage, Eye1Image, rect_Eye1);
     cvFlip (Eye1Image, Eye1Image, 0);

     // ** Área de búsqueda Eye2 
  int x_right = (int) ((float) (faceSize.width / 2 0).);
     int y_right = 0;
     int width_right = (int) ((float) (faceSize.width / 2 0).);
     int height_right = (int) ((float) (faceSize.height));
     CvRect rect_Eye2 = cvRect (x_right, y_right, width_right, height_right);

     CvMat * Eye2Image = cvCreateMat (width_right, height_right, CV_8UC1);
     cvGetSubRect (GRAYfaceImage, Eye2Image, rect_Eye2);
     cvFlip (Eye2Image, Eye2Image, 0);

     // OpenCV dice que el tamaño del resultado debe ser el siguiente: 
  Tamaño CvSize;
     size.height = Eye1Image-> Altura - templateImg_Left-> alto + 1;
     Tamano.Width = Eye1Image-> Ancho - templateImg_Left-> ancho + 1;
     IplImage * resultado1 = cvCreateImage (tamaño, IPL_DEPTH_32F, 1);
     IplImage * result2 = cvCreateImage (tamaño, IPL_DEPTH_32F, 1);

     // Ojo Izquierdo 
  cvMatchTemplate (Eye1Image, templateImg_Left, resultado1, Preferencias-> params-> tempMatch);
     // Ojo Derecho 
  cvMatchTemplate (Eye2Image, templateImg_Right, result2, Preferencias-> params-> tempMatch);

     // Encontrar la mejor ubicación partido - OJO IZQUIERDO 
  doble minValue1, maxValue1;
         CvPoint minLoc1, maxLoc1;
         cvMinMaxLoc (resultado1, y minValue1, y maxValue1, y minLoc1, y maxLoc1);
     cvCircle (resultado1, maxLoc1, 5, Preferencias-> programColors.colors [2], 1);
     // Transformar punto de volver a la imagen original 
  maxLoc1.x + = templateImg_Left-> Ancho / 2;
         maxLoc1.y + = templateImg_Left-> Altura / 2;
     Preferencias-> params-> eye1.coords.x = maxLoc1.x;
     Preferencias-> params-> eye1.coords.y = maxLoc1.y;
     Preferencias-> params-> eye1.RectSize.width = templateImg_Left-> ancho;
     Preferencias-> params-> eye1.RectSize.height = templateImg_Left-> altura;
     Preferencias-> params-> eye1.eyefound = true;

     // Encontrar la mejor ubicación partido - Ojo Derecho 
  doble minValue2, maxValue2;
         CvPoint minLoc2, maxLoc2;
         cvMinMaxLoc (result2, y minValue2, y maxValue2, y minLoc2, y maxLoc2);
     cvCircle (result2, maxLoc2, 5, Preferencias-> programColors.colors [2], 1);
     // Transformar punto de volver a la imagen original 
  maxLoc2.x + = templateImg_Left-> Ancho / 2;
         maxLoc2.y + = templateImg_Left-> Altura / 2;
     Preferencias-> params-> eye2.coords.x = maxLoc2.x + (int) faceSize.width / 2;
     Preferencias-> params-> eye2.coords.y = maxLoc2.y;
     Preferencias-> params-> eye2.RectSize.width = templateImg_Left-> ancho;
     Preferencias-> params-> eye2.RectSize.height = templateImg_Left-> altura;
     Preferencias-> params-> eye2.eyefound = true;

     cvCircle (Eye1Image, maxLoc1, 5, Preferencias-> programColors.colors [2], 1);
     cvCircle (Eye2Image, maxLoc2, 5, Preferencias-> programColors.colors [2], 1);
 }

Código de ejemplo de adaptación Método EigenEye

  Cara void :: findEyes (IplImage * faceImage, TrackingSettings * Ajustes)
 {
     IplImage ** imágenes = (IplImage **) malloc (sizeof (IplImage *) * numOfImages);
     IplImage ** eigens = (IplImage **) malloc (sizeof (IplImage *) * numOfImages);

     IplImage * averageImage;
     IplImage * proyección;

     CvSize faceSize;  faceSize = cvGetSize (faceImage);
     eigenSize newEigenSize;

     newEigenSize.width = faceSize.width * Preferencias-> params-> relación;

     newEigenSize.conversion = ((float) newEigenSize.width) / ((float) base de datos [0] -> ancho);
     newEigenSize.height = ((float) base de datos [0] -> altura) * newEigenSize.conversion;

     CvSize newSize;
     newSize.width = (int) newEigenSize.width;
     newSize.height = (int) newEigenSize.height;

     IplImage * tempImg = cvCreateImage (newSize, IPL_DEPTH_8U, 1);
     // ********** ********** Inicializaciones 
  for (int i = 0; i <Preferencias- /> params-> nImages; i ++)
     {
         imágenes [i] = cvCreateImage (newSize, IPL_DEPTH_8U, 1);
         cvResize (base de datos [i], imágenes [i], CV_INTER_LINEAR); // era NN 
  }
     cvShowImage ("eigen", imágenes [0]);
     cvReleaseImage (y tempImg);

     // Crear el espacio para Eigenfaces 
  for (i = 0; i <Preferencias- /> params-> nImages; i ++)
         eigens [i] = cvCreateImage (cvGetSize (imágenes [0]), IPL_DEPTH_32F, 1);

     averageImage = cvCreateImage (cvGetSize (imágenes [0]), IPL_DEPTH_32F, 1);
     proyección = cvCreateImage (cvGetSize (imágenes [0]), IPL_DEPTH_8U, 1);

     // ************************************************ ************* 
  // ************ Calcula los vectores propios y valores propios ************* 
  // ************************************************ ************* 
  Criterios CvTermCriteria;
     criteria.type = CV_TERMCRIT_ITER | CV_TERMCRIT_EPS;
         criteria.maxIter = 13;
         criteria.epsilon = 0. 1;

     // ** N estaba presente en lugar de numOfImages 
  cvCalcEigenObjects (Preferencias-> params-> nImages, imágenes, eigens,
                         0, 0, 0, y criterios, averageImage, vals);

     // ************************************************ ************* 
  // ************ Buscar faceImage para los ojos ************************ 
  // ************************************************ ************* 
  IplImage * GRAYfaceImage = cvCreateImage (faceSize, IPL_DEPTH_8U, 1);
     changeColorSpace (ajustes, faceImage, GRAYfaceImage);
     // CvCvtColor (faceImage, GRAYfaceImage, CV_RGB2GRAY); 
  // ** Aviso a este origen imagen punto es la esquina inferior izquierda. 
  GRAYfaceImage-> origen = 1;

     int MARGEN = Preferencias-> params-> MAXERROR;
     doble mínimo = MARGEN; doble distancia = MARGEN;

     // ** Búsqueda Eye1 Espacio 
  Preferencias-> params-> eye1.xlimitLeft = 0;
     Preferencias-> params-> eye1.xlimitRight = faceSize.width / 2 0 - imágenes [0] -> ancho -. 1;
     Preferencias-> params-> eye1.ylimitUp =
              (Int) (((float) faceSize.height) * 0 - 75 imágenes [0] -> Altura - 1.);
     Preferencias-> params-> eye1.ylimitDown = faceSize.height / 2;

     // ** Búsqueda Eye2 Espacio 
  . Preferencias-> params-> eye2.xlimitLeft = faceSize.width / 2 0;
     Preferencias-> params-> eye2.xlimitRight = faceSize.width - imágenes [0] -> Ancho - 1;
     Preferencias-> params-> eye2.ylimitUp =
          (Int) (((float) faceSize.height) * 0 - 75 imágenes [0] -> Altura - 1.);
     Preferencias-> params-> eye2.ylimitDown = faceSize.height / 2;

     Preferencias-> params-> eye1.initializeEyeParameters ();
     Preferencias-> params-> eye2.initializeEyeParameters ();
     Preferencias-> params-> eye1.RectSize.width = imágenes [0] -> anchura;
     Preferencias-> params-> eye1.RectSize.height = imágenes [0] -> altura;
     Preferencias-> params-> eye2.RectSize.width = imágenes [0] -> anchura;
     Preferencias-> params-> eye2.RectSize.height = imágenes [0] -> altura;

     IplImage * Image2Comp = cvCreateImage (cvGetSize (imágenes [0]), IPL_DEPTH_8U, 1);
     int x, y;
     // ** Buscar ojo izquierdo es decir eye1 
  for (y = Preferencias-> params-> eye1.ylimitDown; y <Preferencias- />params->eye1.ylimitUp; y + = 2)
     {
         for (x = Preferencias-> params-> eye1.xlimitLeft; x <Preferencias- />params->eye1.xlimitRight; x + = 2)
         {
             cvSetImageROI (GRAYfaceImage, cvRect
                  (x, y, imágenes [0] -> anchura, imágenes [0] -> altura));
             si (Preferencias-> params-> varianceCheck == 1)
             {
                 si (calculateSTD (GRAYfaceImage) <= (doble) (Preferencias-> params-> varianza))
                 {
                     cvResetImageROI (GRAYfaceImage);
                     continuar;
                 }
             }
             cvFlip (GRAYfaceImage, Image2Comp, 0);
             cvResetImageROI (GRAYfaceImage);
             // Decidir si se trata de un ojo o no 
  cvEigenDecomposite (Image2Comp, Preferencias-> params-> nEigens,
                                 eigens, 0, 0, averageImage, pesos);
             cvEigenProjection (eigens, Preferencias-> params-> nEigens,
                        CV_EIGOBJ_NO_CALLBACK, 0, pesos, averageImage, proyección);
             distancia = cvNorm (Image2Comp, proyección, CV_L2, 0);

             si (distancia <&& distancia mínima> 0)
             {
                 Preferencias-> params-> eye1.eyefound = true;
                 mínimo = distancia;
                 Preferencias-> params-> eye1.distance = distancia;
                 Preferencias-> params-> eye1.coords.x = x;
                 Preferencias-> params-> eye1.coords.y = y;
             }
         }
     }

     mínimo = MARGEN;  distancia = MARGEN;

     // ** Buscar ojo derecho es decir eye2 
  for (y = Preferencias-> params-> eye2.ylimitDown; y <Preferencias- />params->eye2.ylimitUp; y + = 2)
     {
         for (x = Preferencias-> params-> eye2.xlimitLeft; x <Preferencias- />params->eye2.xlimitRight; x + = 2)
         {
             cvSetImageROI (GRAYfaceImage,
                   cvRect (x, y, imágenes [0] -> anchura, imágenes [0] -> altura));
             si (Preferencias-> params-> varianceCheck == 1)
             {
                 si (calculateSTD (GRAYfaceImage) <= (doble) (Preferencias-> params-> varianza))
                 {
                     cvResetImageROI (GRAYfaceImage);
                     continuar;
                 }
             }
             cvFlip (GRAYfaceImage, Image2Comp, 0);
             cvResetImageROI (GRAYfaceImage);
             // ** Decidir si se trata de un ojo o no 
  cvEigenDecomposite (Image2Comp, Preferencias-> params-> nEigens,
                                 eigens, 0, 0, averageImage, pesos);
             cvEigenProjection (eigens, Preferencias-> params-> nEigens,
                                0, 0, pesos, averageImage, proyección);
             distancia = cvNorm (Image2Comp, proyección, CV_L2, 0);

             si (distancia <&& distancia mínima> 0)
             {
                 Preferencias-> params-> eye2.eyefound = true;
                 mínimo = distancia;
                 Preferencias-> params-> eye2.distance = distancia;
                 Preferencias-> params-> eye2.coords.x = x;
                 Preferencias-> params-> eye2.coords.y = y;
             }
         }
     }
     cvReleaseImage (y Image2Comp);

     // ** Limpiar 
  cvReleaseImage (y GRAYfaceImage);
     for (i = 0; i <Preferencias- /> params-> nImages; i ++)
         cvReleaseImage (e imágenes [i]);

     for (i = 0; i <Preferencias- /> params-> nImages; i ++)
         cvReleaseImage (y eigens [i]);

     cvReleaseImage (y averageImage);
     cvReleaseImage (y proyección);

     libres (imágenes);
     libres (eigens);
 }

Licencia:Este  traduccción del artículo, junto con cualquier código y archivos fuente asociado, está licenciado bajo la licencia de código abierto del proyecto (CPOL)

 

Fuente aqui

Monitorización de las pulsaciones cardiacas mediante un smartphone ( incluso si lo lleva en el bolso)


La adopción a gran escala de los teléfonos inteligentes en los últimos años ha creado muchas nuevas oportunidades para mejorar la vigilancia de la salud y la prestación de atención . Este nuevo proyecto liderado por el MIT   llamado  BioPhone  explora si los sensores de movimiento integrados  los teléfonos inteligentes  son lo suficiente  precisos para  capturar los parámetros fisiológicos de una persona durante posturas fijas , incluso mientras se lleva en una bolsa o en un bolsillo .

Si está cansado de seguidores de fitness portátiles que luchan por el espacio en la muñeca, esto  podría no ser un problema en el futuro próximo, usando el propio terminal  gracias  a la medicion de las señales biológicas deducidas desde el acelerómetro del teléfono inteligente, que dicen que puede capturar los pequeños movimientos de su cuerpo que resultan de los latidos de su corazón incluso cuando  se sube o baja el terminal  desde su pecho. 

Javier Hernández, un científico de investigación en el Media Lab del MIT y autor principal del artículo, dice que está destinado a capturar estos datos en los momentos en que no se está moviendo mucho, esto hace que sea más fácil para recoger esas pequeñas vibraciones y sin tener que dar cuenta de un montón de otros movimientos corporales y, a ser posible, los datos podrían ser utilizados para ayudar a determinar si usted está estresado, y luego ayudarle a lidiar con ella. Por ejemplo, el smartphone podría sugerir intentar algunos ejercicios de respiración o pregunta a un ser querido para darle una llamada.

El trabajo se basa en los esfuerzos en curso por Hernández y sus colegas para utilizar dispositivos móviles-y vestibles, en particular, para la medición de las tasas de corazón y la respiración en formas menos molestas con la esperanza de seguimiento de su nivel de estrés. Un proyecto anterior llamado Bioglass, por ejemplo, utiliza Google Glass para vigilar a estas señales biológicas examinado los datos del giroscopio, acelerómetro y cámara incorporada en el dispositivo de diadema (ver «Google Glass Ahora puede seguir su nivel de estrés» ).

Para tener una idea de la utilidad potencial de BioPhone, los investigadores tuvieron una docena de  participantes  estudiando sus habitos  como sentarse, pararse, acostarse antes y después de pedalear en una bicicleta estática con un teléfono Android en su bolsillo (para capturar los datos del acelerómetro del teléfono). Cuando ellos estaban de pie, los participantes también realizaron pruebas con una bolsa en la mano izquierda y se llevaron una sobre el hombro derecho, cada uno de los cuales tenía un teléfono inteligente de recogida de datos metido dentro.

Para todas las diferentes actividades, llevaban sensores para capturar ritmo cardíaco y respiratorio aprobado por la FDA, por lo que los datos obtenidos de los teléfonos inteligentes podría compararse con las mediciones que ya se sabe que son fiables.

En promedio, las tasas de corazón estimados mediante el análisis de los datos del smartphone estaban fuera por poco más de un latido por minuto, y la respiración estimaciones de tasas estaban apagadas por una cuarta parte de una respiración por minuto.

 

bio

Sin embargo, Emil Jovanov, profesor asociado en la Universidad de Alabama en Huntsville quien co-dirige un laboratorio centrado en el seguimiento de la salud móvil y de bienestar y dirige un laboratorio para el monitoreo fisiológico en tiempo real, dice que es «probablemente un tramo» para decir que la los investigadores pueden detectar con precisión los latidos del corazón de una persona desde un teléfono en un bolso o un bolsillo, debido a factores como el ruido de señal adicional resultante de las cosas tales como movimientos de las manos involuntarias.

«Los sensores son definitivamente de mucho mejor calidad que lo que solían ser en los primeros días de los teléfonos inteligentes», dice. «Sin embargo, su calidad no es todavía suficiente para aplicaciones sofisticadas.»

Hernández dice que todavía hay retos que superar. Él señala que los investigadores todavía tienen que encontrar la manera de medir el ritmo cardíaco y respiratorio de forma fiable cuando el smartphone está en diferentes lugares, como los pantalones bolsillo trasero contra el bolsillo de la camiseta o un bolso, que puede cambiar la forma en se recogen las señales biológicas arriba, en general, cuanto más lejos se obtiene desde el corazón, más difícil es conseguir una buena lectura.

 

io2
Para ello utilizan los sensores del smartphone, como el giroscopio y los acelerómetros, que se encargan de detectar pequeños movimientos de nuestro cuerpo producidos por los latidos y al respirar, imperceptibles a simple vista pero con suficiente fuerza como para ser captados por el móvil incluso teniendo éste guardado en un bolsillo

 

 

Fuente  aqui

Donde encontrar librerias dll o ocx que no tenemos en nuestro equipo


DLL es el acrónimo de Dynamic Linking Library (Bibliotecas de Enlace Dinámico), término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda del programa por parte del sistema operativo. Esta denominación se refiere a los sistemas operativos Windows siendo la extensión con la que se identifican los ficheros, aunque el concepto existe en prácticamente todos los sistemas operativos modernos

Ventajas

  • Las DLLs pueden verse como la evolución de las bibliotecas estáticas y de forma análoga contienen funcionalidad o recursos que utilizan otras aplicaciones.
  • Reducen el tamaño de los archivos ejecutables: Gran parte del código puede estar almacenado en bibliotecas y no en el propio ejecutable lo que redunda en una mejor modularización
  • Pueden estar compartidas entre varias aplicaciones: Si el código es suficientemente genérico, puede resultar de utilidad para múltiples aplicaciones (por ejemplo, la MFC es una biblioteca dinámica con clases genéricas que recubren la API gráfica de Windows y que usan gran parte de las aplicaciones).
  • Facilitan la gestión y aprovechamiento de la memoria del sistema: La carga dinámica permite al sistema operativo aplicar algoritmos que mejoren el rendimiento del sistema cuando se carguen estas bibliotecas. Además, al estar compartidas, basta con mantener una copia en memoria para todos los programas que la utilicen.
  • Brindan mayor flexibilidad frente a cambios: Es posible mejorar el rendimiento o solucionar pequeños errores distribuyendo únicamente una nueva versión de la biblioteca dinámica. Nuevamente, está corrección o mejora será aprovechada por todas las aplicaciones que compartan la biblioteca.

Sin embargo, no todo son ventajas

  •  En los sistemas Windows, las DLLs son muy comunes y muchos programas usan las mismas DLLs. Pero debido a la evolución, cada una de las DLLs evoluciona incorporándose mejoras pero modificándolas de tal forma que dejan de ser compatibles dando otros problemas como que la instalación de un programa reemplace una DLL con una nueva versión incompatible o que la desinstalación del programa borre una DLL compartida
  • En ambos casos, el resultado es que dejan de funcionar los programas que utilizaban la vieja versión. Estos problemas se denominaron el infierno de las DLLs.
  • Las versiones más modernas de Windows y los nuevos scripts de instalación MSI (sobre todo su característica de instalaciones residentes) abordan este problema. Sin embargo, el problema persiste cuando se utilizan otros instaladores (versiones antiguas) o se realizan modificaciones manuales.

 

dll

Pasos  para registrar o desregistar una librería dll en un equipo con windows:

 

  1. Las DLLs son una técnica de implementación de forma dinámica es decir que el ordenador sólo las carga cuando las llama el programa que las utiliza.,para agregar ciertos archivos .ocx y/o .dll, abra una ventana de comandos
  • En Windows 98/ME: Vaya a Inicio > Ejecutar escriba esto «command.com» (sin las comillas)
  • En Windows NT/2000/XP: Vaya a Inicio > Ejecutar escriba esto «cmd» (sin las comillas)
  • En Windows 7 o Windows 8:  Escriba  «cmd» directamente en buscar archivos o programas
  1. Navegue a través de los directorios hasta llegar a la carpeta que contiene el archivo DLL que desee instalar o registrar o tambiém   desinstalar  o desregistrar.
  2. El siguiente es el comando que necesitaras ejecutar para instalar/registrar:  regsvr32 [nombre.dll] ó [nombre.ocx].  Ejemplo: regsvr32 msvcp60.dll
  3. Para desinstalar/desregistrar un archivo DLL u OCX:  regsvr32 /u [nombre.dll] ó [nombre.ocx] 

Como fabricar un micrófono inalambrico


¿Está tratando de encontrar un micrófono inalámbrico para su PC o Mac? Bueno, usted no tiene que gastar tiempo y dinero para comprar uno ni tampoco hacer un complejo circuito electronico de RF .

Si tiene  un terminal Android   ( viejo o de ultima generacion )  sepa   que gracias  a la apliación  Wo mic ( disponible  gratuitamente en Google  Play aqui  ) ,puede  convertir su teléfono Android en  un micrófono para su ordenador.

womic

Se puede utilizar para el chat de voz, grabación, e incluso para reconocimiento de voz disponible en Windows 10. Si se acerca demasiado puedo producir  eco  casi imperceptible (* dependiendo de transporte y medio ambiente), al igual que los dispositivos de micrófono reales.

La conexión entre el PC y el teléfono Android puede ser a través de Bluetooth, USB o WiFi. En caso de conectarlo con un Mac solo se permite  conexión  vía Wifi.

transport

 

 

Habrá que descargarse también el cliente correspondiente para nuestro ordenador  (http://www.wirelessorange.com/womic/install.html.)

Luego en pantalla aparece la dirección IP del móvil, en el caso de que lo conectemos por WiFi (tienen que estar en la misma red local) y es lo único que hay que configurar.

Por otra parte, la razón de recomendar WO Mic es la cantidad de opciones como “fuentes” de sonido que tiene, entre las que también está por ejemplo la de grabar una conversación a partir de una llamada.

camcorder

Si desea una mejor calidad de audio, puede usar  «WO Mic Pro», que es su versión de pago.

Si no le importa  estar conectado por cable ,otra opción en Android es Microphone, una app   ( disponible  gratuitamente en Google  Play aqui  ) ,tan simple como que sirve para utilizar la toma de auriculares, la minijack de 3,5 mm, como puerto de salida de audio para conectarnos a uno de entrada en cualquier equipo, así de simple.

Si tenia un viejo terminal Android en desuso  , ya ve  como  pueden dar mucho de si  ( como por ejemplo osciloscopio,aparato de diagnostico para coches , mando a distancia,etc , etc)

 

mic

Vivir de la red con bitcoins


Bitcoin es una moneda virtual e intangible,es decir, no se puede tocar en ninguna de  sus formas como ocurre con las monedas o billetes que usamos a diairo , pero a cambio  puede utilizarse como medio de pago de la misma forma que éstos y  a lo largo de todo el mundo. Al igual que ocurre con el dinero que tenemos en nuestro banco los Bitcoin aumentan o disminuyen de nuestra cuenta personal según realicemos ingresos o gastos, la única diferencia es que no existe la posibilidad de acaparlos físicamente , como ocurre cuando, por ejemplo, cuando retiramos dinero de un cajero automático. 

 Sin lugar a dudas lo que hace distinto a Bitcoin frente a las monedas tradicionales y otros medios de pago virtual como Ama​zon Coins, es la descentralización pues el control lo realizan, de forma indirecta mediante sus transacciones, los propios usuarios a través de los intercambios P2​P .La falta de control imposibilita que cualquier autoridad manipule su valor o provoque inflación produciendo más cantidad. De hecho, su producción y valor se basa en la ley de la oferta y la demanda

Existen al menos cuatro formas de conseguir  Bitcoins:

  • Accediendo a alguno de los mercados de Bitcoin como MtGox o Bitcoin.com, que permiten intercambiar dinero convencional, euros o dólares, por Bitcoin.
  • Mediante el intercambio de bienes con otros usuarios, es decir  mediante  compra/venta   pagando con Bitcoins.
  • La “minería” que consiste en utilizar parte de los recursos de nuestro ordenador en la resolución de problemas matemáticos extremadamente complejos a cambio de Bitcoins.Actualmente unas 25.000 personas realizan esta tarea y se generan unos 25 Bitcoins cada 10 minutos, por lo que esta práctica para conseguir divisa virtual cada vez es más complicada, a no ser que pertenezca a alguna de las colonias de mineros que circulan por la red.
  • Ofreciendo servicios como freelancer, consultor,programador, probador,diseñador,grafista,traductor,etc.  Veámos  algunas de las muchas formas de conseguirlos  a lo largo de todo el mundo:

faradam

Faradam es un nuevo servicio de micropagos con bitcoins dirigido a trabajadores independientes o Freelancers, el cual permite cobrar por minuto sus servicios. Solo debes colocar su tarifa, compartirla con sus cliente y poner a funcionar el cronómetro de la herramienta.

 Una vez que el temporizador es arrancado, se empieza a cobrar por minuto en la tasa escogida por el usuario, pudiéndose apagar o detener a voluntad de las partes. Una vez apagado el temporizador, los fondos son transferidos a la dirección Bitcoin del proveedor de servicios, con una tarifa de 1% cobrada por Faradam por todas las transacciones. Esta herramienta puede ser utilizada por consultores, abogados, profesores, doctores o cualquier otra persona que quiera cobrar por el tiempo de sus servicios en línea

bug

Cobalt ofrece el servicio de verificación para encontrar fallos en la seguridad de aplicaciones, mediante un programa de bug bounty o una auditoria colectiva de seguridad al producto, dependiendo de los intereses del cliente.

En Cobalt, se recompensa a los investigadores por pensar como hackers  y encontrar vulnerabilidades de seguridad. Tan sólo debe entrar  en la página y bajar hasta la sección llamada “Our Security Researchers” donde encontrarás el vínculo Join us as a Researcher. Ingresa tu usuario, email y contraseña, confirma tu email y ya estarás listo para empezar a detectar errores y ser pagado por ello.

recruiters

 

Bitcoin Recruiters está conformado por un grupo de expertos en reclutamiento digital que buscan ayudar a introducir talentosos individuos interesados en Bitcoin en algunos de los mejores empleos con Bitcoin en las mejores compañías de todo el mundo. No contratan para ninguna compañía fuera del ecosistema Bitcoin y los miembros son todos inversores de startups Bitcoin, razón por la cual se hacen llamar expertos del área.

Si bien la mayoría de los trabajos están enfocados en tecnología, también hay una alta demanda de personas con habilidades de venta, mercadeo, manejo de proyectos, finanzas, legales, así como diseño y “branding” o manejo de marca.

Al crear un perfil en Bitcoin Recruiters donde demuestre sus habilidades (para que la compañía pueda saber para qué eres bueno y qué te gustaría hacer), enviarán algunas oportunidades seleccionadas adaptadas  al perfil . Si ve algo que le interese, hágalo  saber para que la compañía pueda adelantar las conversaciones hacia la adquisición de ese empleo.

 

 

BITCOINVACANCY

Bitcoin-Vacancy  es el lugar donde puede conseguir trabajos con Bitcoin y comenzar a construirse una nueva carrera. Muestran empleos relacionados con bitcoin o criptomonedas pagados en efectivo digital, parcial o completamente.

Por lo general, son empresas Bitcoin o tecnológicas las que ofrecen los empleos. Empresas de la talla de BitGo, Ripple, Mycelium, IBM, ItBit, Bitmain, Circle, entre otras, buscan trabajadores para diversos proyectos. Arquitectos de Soluciones Técnicas, Ingenieros de Software, Redactores, Ingenieros Android/iOS, desarrolladores WordPress, son tan solo algunos de los perfiles que son buscados por estas compañías en esta página.

Sin duda una plataforma excepcional donde podrá conseguir empleos Freelance, tiempo completo, tiempo parcial, pasantías, voluntariados y hasta asociaciones. Introduce tu hoja curricular y opta por trabajos en las empresas de mayor renombre en el ecosistema bitcoin.

COINALITY

 

Coinality ofrece sus servicios de manera gratuita para conectar buscadores de trabajo y empleadores con oportunidades de pago en divisas digitales. Fue lanzada en Septiembre de 2013 y alrededor ya de 5000 candidatos calificados han aplicado por trabajos en la página.

En Coinality también se pueden conseguir empleos ofertados por empresas del ecosistema Bitcoin. ItBit, Ripple y OverStock son sólo tres de la variedad de empresas que figuran en la página. Trabajos generalmente relacionados con el área tecnológica y computacional son los que más abundan en la página para proyectos freelance, tiempo completo, por hora, por recompensa, pasantías y asociaciones. Sin embargo, existe una amplia variedad de categorías observables en la sección Job Category.

xbtfreelancer

 XBT Freelancer   de intermediario entre freelancers y personas o compañías buscando trabajadores independientes para sus proyectos. Las compañías pueden buscar entre los Freelancers suscritos a la página o publicar sus proyectos y los interesados pueden postularse.

 Puede publicar cualquier tipo de trabajo, sea de programación, de traducción, de diseño gráfico, entre muchos más, y pagar al trabajador en bitcoins desde cualquier parte del mundo. De igual manera, puede ofertar sus servicios como freelancer bitcoin a cualquier proyecto de manera totalmente gratuita.
 En la parte superior derecha del portal, encontrará el botón de ‘Sign Up’, donde podrá registrarse como freelancer, como empleador o como ambas, dependiendo de sus necesidades. Obiamente  cuanto  mejor diseñes su perfil y más información sobre su  expertise y habilidades ofrezca, mayor será la posibilidad de ser contratado.
jobs4bitcoins

Jobs4Bitcoins alojado en reddit es bastante parecida a XBT , si bien su uso es diferente. Al entrar al portal podrá observar una lista de ofertas para freelancers bitcoin ( desde desarrolladores web, arquitectos e ingenieros de sonido, hasta ofertas para redactores, traductores y muchos más).

Puede publicar, dependiendo de su interés, la etiqueta ‘HIRING’, en caso de estar buscando a quien contratar;y ñla etiqueta  ‘FOR HIRE’, si está ofreciendo sus habilidades para ser contratado; o ‘PARTNER’, si lo que buscases asociarse con alguien para algún proyecto. Suscribirse es tan sencillo como crear el usuario y empezar a trabajar.
cryptogrid

Cryptogrind, también ofrece sus servicios como intermediario para que Freelancers Bitcoin puedan conseguir trabajos y otros puedan ofrecerlos. Publica tus habilidades, escribe sobre tu experiencia laboral y convence a los empleadores de que tú eres el indicado para el trabajo.

El registro es completamente gratuito pudiendo crear su cuenta sin ninguna obligación. Una vez suscrito a la página, puede publicar múltiples servicios en cryptogrind sin ningún costo. Además, puede referir mediante el link de referencia a nuevos empleadores y, en caso de que se suscriban, recibirá un 2% de cada transacción completada por ese empleador. Por cada transacción completada, Cryptogrind toma 5% de honorarios.

 

Otro detalle interesante es que Bitcoin tiene un limite fijado de 21 millones de monedas, que se alcanzará en 2030,pero  al tratarse de transacciones anónimas y cifradas entre dos usuarios, están libres de cualquier comisión o impuestos como, por ejemplo, el IVA.

Fuente aqui

Como ampliar la señal wifi


Es posible que en alguna ocasión le haya sucedido que, en cierta zona de su casa, la potencia de la señal Wi-Fi de su router descienda de manera considerable, por la distancia o por las paredes que la separan del lugar en el que tienes instalado el dispositivo. Por supuesto, para solucionar este problema existe  repetidores Wi-Fi, dispositivos PLC que llevan la señal de la red por la instalación eléctrica , la posibilidad de instalar un segundo router unido por cable Ethernet y modernamente los adaptadores inalambricos de altas prestaciones (VideoBridge)  ,lo cuales utilizan  la señal 4g  para enlazar entre un emisor que se conecta cerca del router y un receptor  que  se sincroniza con este por  4g , y que suele ser ademas repetidor wifi.

 

 

A pesar   de que hay soluciones en el mercado  que nos harán mejorar de forma considerable  la cobertura wifi de nuestro router , sin embargo, hay personas  que  optan  por mejorar la calidad de la señal wifi  trabajando  sobe las antenas mediante  técnicas caseras que se muestran profusamente en Internet, para mejorar la potencia de los  router Wi-Fi o de las antenas de los adaptadores wifi.Como vamos  a ver  algunas de ellas  son tan sencillas que sólo requieren de un par de latas de refresco vacías y unas tijeras o un cutter.

La mayoría de estas técnicas, que se pueden encontrar a modo de vídeos tutoriales  “paso a paso” en YouTube, se basan en construir un reflector que concentre la señal del router y la envíe en una dirección determinada .

También hay personas que optan por crear una especie de antena parabólica ,por ejemplo con un recipiente para ensalada ,cubriendo estos  de papel de aluminio

 

Evidentemente, según hacia adonde oriente el reflector, la señal mejorará en una zona o en otra, lo que puede ser también muy interesante si lo que quiere es, por ejemplo es reducir la señal de su Wi-Fi que sale de su casa para que otras personas no la detecten y reducir el riesgo de que alguien intente atacarla.

Otro ejemplo similar  al anterior resulta  sencillamente cortando  una lata de refresco  mejorando al clásico bote de patatas fritas ,como muestra el segundo vídeo para conseguir un efecto similar:

En alguno de los vídeos, los usuarios que  han probado algunas de estas técnicas aseguran que pueden conseguir  una señal hasta 10 veces más potente. En las pruebas de medios de comunicación especializados se puede comprobar que estos extensores caseros realmente funcionan en muchas ocasiones, pero no siempre  y tampoco en todos los casos.

Como el lector puede ver en los vídeos , casi todos los vídeos   funcionan  bien en casi todos los routers y adaptadores  inalámbricos  con antenas externas,  excluyendo  a todos los dispositivos  que solo llevan la antena en el interior.

 

En cualquier caso, se trata de una manualidad tan sencilla  y barata   que tal vez  merezca la pena intentarlo cualquier tarde si observa  que la señal de su red inalambrica no alcanza bien a algún lugar, aunque claro, se arriesga que   la solución artesana  no  queda muy elegante en su casa …

Qué puede hacer un fichero bat por usted


Un proceso Batch, es según Wikipedia  un archivo de procesamiento por lotes ,es decir  se trata de archivos de texto sin formato, guardados con la extensión *.bat que contienen un conjunto de comandos DOS. Cuando se ejecuta este archivo bat, los comandos contenidos son ejecutados en grupo, de forma secuencial, permitiendo automatizar diversas tareas de modo  que cualquier comando DOS, como  vamos a ver en este post ,puede ser utilizado en un archivo batch.
Hay que aclarar Batch que no es un Lenguaje de Programación. Es un archivo de código que contiene comandos del, Shell de Windows, llamado MS-DOS o en las modernas versiones Interfaz de comandos , que en todo caso siempre se pueden ejecutar desde Inicio->Ejecutar->CMD.

 

Entendiendo  ficheros bat como archivos de texto ascii sin formato, guardados con la extensión *.bat que contienen un conjunto de comandos DOS,  tenemos al menos dos maneras de ejecutar comandos Batch :

  • Desde el Shell de Windows.
  • Escribiéndolos en un archivo de texto con extensión .bat y luego ejecutarlo.

Comenzaremos creando un Simple y clásico «Hola Mundo», pero  Hola Mundo en Batch,  escribiendo en un archivo de texto el siguiente código.

@echo off echo Hola Mundo pause exit

Ahora guardemos el archivo como Nombre.bat y lo ejecutamos. Nos aparecerá una pantalla negra que dirá «Hola Mundo», luego una linea abajo dirá «Presione una tecla para continuar»

Explicación comandos:

  • echo:Imprime un texto en pantalla, que es el texto que viene después (el que le pasamos como parámetro), que en este caso es «Hola Mundo». Echo significa eco, por lo mismo «@echo off» elimina el eco, la repetición de la ruta en la que nos encontramos en cada línea código.Cabe mencionar que echo. (Echo seguido de un punto)sirve para saltarse una línea.
  • pause:Como bien se lee, pausa la ejecución del código. Además muestra el texto «Presione una tecla para continuar»
  • exit:Cierra la ventana de comandos.

Para dejar más en claro cual sería la diferencia de no ocupar la linea @echo off la imagen de a continuación muestra como se vería la pantalla sin esta linea.

Ahora aprenderemos algunas otras  funciones de Batch:

  • CD o CHDIR:Si ha trabajado en PHP, le sera fácil entender este concepto. Sirve para cambiar de Directorio o Mostrar el nombre del actual. Para usarlo, CD o CHDIR seguido de la ubicación del directorio al cual nos moveremos.Ejemplos:  cd «C:\»   ,   chdir «C:\» : ambos ejemplos  hacen exactamente lo mismo, cambian al Disco C
  • COPY:Sirve para copiar uno o más archivos a otro destino.Su sintaxis es la siguiente:Copy «Dirección del archivo» «Nueva dirección». Ejemplo: Copy «C:\archivo.txt» «C:\archivo2.txt» .   Aquí copiaríamos un archivo del Disco C llamado «archivo.txt» como «archivo2.txt»,  Para acortar un poco podríamos usar: cd «C:\»Copy «archivo.txt» «archivo2.txt» Donde primero cambiamos de directorio al Disco C con cd «C:\» y luego al copiar no tenemos que especificar que esta en el Disco C ya que ya nos encontramos en el.
  • DEL:Sirve para eliminar uno o más archivos. Su sintaxis es: Del «ARCHIVO» .También se puede añadir: del /f /q «archivo» .Donde no pide confirmación de eliminación (/q) y fuerza al archivo a borrarse ( /f )
  • Move:Sirve para mover un archivo. Su sintaxis es: Move «Dirección Archivo» «Nueva Dirección»
  • Cls:Sirve para limpiar el contenido de la pantalla: Ejemplo:@echo offecho Hola, Cuando pulses la tecla se borrara el contenido y cambiara por otro.pauseclsecho ¿Ve?pause exit.Si quisiéramos averiguar más sobre las funciones, o conocer algunas nuevas por nuestra propia cuenta podemos escribir en el Shell el nombre del comando seguido de /? y aparecerá toda la información necesaria.

Podemos poner en práctica esto de la siguiente manera:

  • Abramos el Shell de windows:Inicio->Ejecutar-CMD
  • Una vez abierto escribamos:echo off   (Para eliminar el eco.)
  • Luego para borrar el contenido de pantalla escriba: cls
  • Ahora veamos la ayuda de la función Copy:copy /?
  • Cerremos la ventana:  exit

Ahora vamos a crear un Batch  muy sencillo  que copie un archivo, luego lo mueva a otro directorio, borre el original y vuelva a copiar el copiado.

En la carpeta donde creará el archivo .bat cree  un archivo de texto llamado copiame.txt. En él, escriba lo que quiera. Este será el archivo que copiaremos.

Ahora el Batch:

Código :

@echo off

echo Hola, Copiaremos un archivo

pause

copy «copiame.txt» «copiado.txt

«move «copiado.txt» «C:\copiado.txt»

del «copiame.txt»

cd «C:\»

copy «copiado.txt» «copiado2.txt»

exit
Guárdelo en la carpeta como NombreQueTuQuieras.bat, y ejecútelo.

Lo que ha hecho la cadena de instrucciones es más o menos lo siguiente: Primero apagamos el eco, luego imprimimos en pantalla «Hola, Copiaremos un archivo»
Pausamos el intérprete para que no siga de largo. A continuación, copiamos el archivo «Copiame.txt» y su copia se llamará «copiado.txt«. La movemos a la carpeta raíz del disco C, y eliminamos el original.Por ultimo cambiamos de directorio al disco C, copiamos la copia y cerramos el Batch. Después de que ejecutemos el Batch, si vamos al Disco C, veremos que hay dos nuevos archivos de texto: uno llamado copiado.txt y otro copiado2.txt. También si vamos a la carpeta del Batch, veremos no está el archivo de texto original, «copiame.txt».

Creación de nuevos archivos:

Con Batch podemos crear otros archivos. Para ello, tenemos que escribir algo como esto:

Código :

 echo TEXTO DE PRIMERA LINEA > nombre.extensión

echo TEXTO SEGUNDA LINEA >> nombre.extensión

echo TEXTO SIGUIENTE LINEA >> nombre.extensión

Al escribir echo seguido de un texto y el signo > creamos un archivo con el nombre que siga.
Si ocupamos un echo seguido de un texto y el doble signo > (>>) se escribirá en la siguiente linea vacía del archivo que prosiga.

Hagamos la prueba:

Código : echo Creando un Archivo de texto > nuevo.txt

echo Esta es la Segunda linea >> nuevo.txt

echo Y esta es la Siguiente >> nuevo.txt

echo Esto esta genial >> nuevo.txt

Si ejecutamos eso, la pantalla negra se abrirá y cerrará, p ero en la carpeta en la que está nuestro batch se abra creado un nuevo archivo «nuevo.txt» que si lo abrimos, dentro estará escrito lo que especificamos.

Personalizando el SHELL

Seguro que no le gusta mucho el aspecto del Shell.Aquí veremos como personalizarlo un poco.

  • COLOR:Con la función color podemos cambiar los colores de fondo y las letras. Siendo su sintaxis:COLOR AB   Donde A= El color de el Fondo y B= Color de las letras. Para ver todos los colores ve el MS-Dos y escribe color/?
  • TITLE:Para cambiar el título de la barra de tareas solo escribe:Title Loquequierascomotitulo 
  • Pause Personalizado:¿No le gusta que al poner pause salga «Presione una tecla para continuar…»? Pues si escribe «pause>nul» no aparecerá ni un texto.Entonces si anteponemos un mensaje, quedaría así.Código :echo Aprieta cualquier tecla para seguirpause>nul  Además puedes jugar con los caracteres.
  • TASKKILL :¿Alguna vez ha presionado CTRL+ALT+DELETE?Si lo hace se abre el Administrador de tarea. En la pestaña procesos salen algunos procesos que están andando en tu pc, haciéndoles clics y apretando «terminar proceso» lo puedes acabar.Con batch eso es muy fácil, se usa la función:Taskkill (No funciona en todos los pc, para ver si esta disponible escribe taskkill/?)Su sintaxis es:taskkill /f /im proceso.exe donde  /f Fuerza el término del proceso.
  • START . Ahora abramos ese proceso que cerramos. Para abrir procesos se usa la función Start que funciona así:start proceso.exe. También puede abrir paginas web con su explorador predeterminado.Ejemplo1:start www.google.es (Se abrirá su Explorador de Internet en Google.)

 

VARIABLES:

Ahora aprendamos a declarar variables. Para crear una se escribe:

set NOMBREVARIABLE = VALOR
Para llamarla debemos escribir su nombre entre los signos %% ,por ejemplo: @echo offset Nombre= Javier Letelier Ruizecho %Nombre%pause
Para cambiar el valor solo debemos hacer esto:set Nombre= Nuevo Valor
Si quiere que su Variable sea dinámica, osea que el Usuario la elija anteponga /p por ejemplo  set /p Nombre=Escriba su Nombre:    . Donde el Batch se pausara solo mostrando el Mensaje que va luego de «=» dejando que se escriba algo.
También podemos multiplicarlas, sumarlas, etc… con /a:  set numero1=2ser numero2=43set /a suma= %numero1% + %numero2%echo %suma%pauseexit

Uso de etiquetas
Como bien sabemos la lectura de los códigos Batch se leen de una manera lineal, pero existe una forma para que el Batch se salte lineas, o vuelva a alguna anterior. Esto se logra con Etiquetas y la función GOTO.
Para crear una etiqueta solo debemos escribir: :nombreEtiqueta
Dos punto (:) seguido del nombre que le daremos a la etiqueta. De esta manera el GOTO funciona escribiendo  GOTO seguido del nombre de la etiqueta, como vemos en el siguiente ejemplo.

Código :

@echo off

goto :mietiqueta

echo ¿Por que me saltan?

:MiEtiqueta

echo Hola, esta es la etiqueta y nos saltamos una parte del codigo.

pause>nul

exit

 

Condicionales:
El primer condicional que veremos el más usado. IF: Se puede ocupar para comparar, cadenas, números o para saber si existen archivos.
Ejemplo de sintaxis

  • General:  if %cadena1% == %cadena2% OrdenAEjecutar    Que se podría leer de la siguiente manera. Si cadena1 es igual a Cadena2 ejecutemos la Orden OrdenAEjecutar.
  • También existe el NOT para ver si no son iguales.  :if not %cadena1%== %cadena2% ejecutarAccion 
  • Para saber si un archivo existe, se usa: if exist «NombreDelArchivo» AccionAEjecutar
  • También para ver si NO existe: if not exist «NombreDelArchivo» AccionAEjecutar

 

No solo se puede ocupar el signo == para hacer comparaciones.

  • EQU, que es el equivalente a ==
  • NEQ, Sirve para cuando queremos ver Desigualdad.
  • LSS, Para verificar si el numero es Menor
  • LEQ, Para verificar si es menor o igual.
  • GTR, Si es mayor
  • GEQ, Si es Mayor e igual.

Bucles
FOR: Nos sirve para repetir un comando varias veces, en distintas variables.Unejemplo, es este:

for /L %%i IN (0,1,21) DO (echo %%i)
En donde /L es para especificar que nuestro for se basara en un conteo de números.Aquí se repetirá un Echo, que imprimirá números del 0 al 21.
%%i sera el nombre de la variable que almacenara datos

in (0,1,21) aquí especificamos que se repetirá del 0 al 1 y del 1 al 21.
do (echo %%i) Esto es la función que se ejecutara en cada repetición del comando, en este caso un echo que imprimirá la variable.

Otro uso que puede ser aplicado en el FOR es el listado de carpetas o archivos, como veremos a continuación:

Ejemplo1

@echo off

FOR %%x in (a*) DO echo %%x

pause
Este código, listaría todos los archivos que comienzan con A.¿Por que? * (asterisco) es un signo comodín, por lo cual al poner a*, estamos diciendo cualquier archivo que tenga una A delante y luego cualquier cosa.

Ejemplo2

@echo off

FOR %%x in (*.jpg) DO echo %%x

pause

Es otro ejemplo del uso de comodín, para listar archivos con extensión común  Aqui nos estaria listando todos los archivos que tengan la extensión .jpg

Ejemplo3

FOR /D %%x in (a*) DO echo %%x

Es casi lo mismo anterior, tan solo que al indicar /D solo se aplica a directorios.

Mas ejemplos:
Si quisiéramos que se listaran los directorios, juntos a los directorios que tienen estos dentro se ocupa /R
FOR /R /D %%x in (a*) DO echo %%x

Si quisiéramos listar todos los documentos que están dentro de una carpeta contando los que están dentro de carpetas se ocupa solamente /R (Sin /D)
FOR /R %%x in (a*) DO echo %%x

 

 

Creación de Menús:
Como ya vimos Condicionales y Etiquetas les enseñare una manera de hacer Menús.
Comenzaríamos indicando las instrucciones y las opciones, de esta manera:

Código :

@echo off

:Menu

cls

echo Seleccione su opcion tecleando el numero respectivo.

echo.

echo 1. Primera Opcion

echo 2. Segunda Opcion

echo 3. Salir
Luego para seguir ocuparíamos esto:

Código :

set /p var=

if %var%==1 goto :Primero

if %var%==2 goto :Segundo

if %var%==3 goto exit

if %var% GTR 3 echo Error

goto :Menu
Con esto damos una variable en la que se guardara el numero insertado para luego ser verificado por los condicionales, si el numero es mayor que 3 nos avisara que no existe esa opción. También al principio cree una etiqueta para que se pueda volver

al menú y un «cls» para limpiar la pantalla.
Para terminar creamos las respectivas etiquetas.

Código :

:Primero

cls

color a

Echo Esta es la Primera Opcion

Echo Precione una tecla para volver al menu

Pause>Nul

goto :Menu

:Segundo

cls

color 1a

Echo Esta es la Segunda Opcion

Echo Precione una tecla para volver al menu

Pause>Nul

goto :Menu
Quedando para terminar nuestro codigo así:

Código :

@echo off

:Menu

cls

echo Seleccione su opcion tecleando el numero respectivo.

echo.

echo 1. Primera Opcion

echo 2. Segunda Opcion

echo 3. Salir

set /p var=

if %var%==1 goto :Primero

if %var%==2 goto :Segundo

if %var%==3 goto exit

if %var% GTR 3 echo Error

goto :Menu

:Primero

cls

color a

Echo Esta es la Primera Opcion

Echo Precione una tecla para volver al menu

Pause>Nul

goto :Menu

:Segundo

cls

color 1a

Echo Esta es la Segunda Opcion

Echo Precione una tecla para volver al menu

Pause>Nul

goto :Menu
Bueno, con eso les basta para imaginarse como crear sus menús personales.
Como vieron puede cada sección tener su color, incluso puedes cambiar la barra de titulo.

 

Apagado y Reinicio del Pc:
Una cosa muy interesante que puedes hacer con Batch es Apagar y Reiniciar tu Pc, incluso programarlo para que apague a la hora que desee.
Es notablemente fácil mediante el comando shutdown que se ocupa de la siguiente manera el apagado.
shutdown -s -t Tiempo -c «Comentario»
Donde -s significa que lo apagaremos, -t debe ir seguido de los segundos que demorara apagar.Si en vez de ocupar -s usas -r el PC se reiniciara.También puede forzar el cierre de los programas, para que no de tiempo de guardar nada. Tan solo ocupando -f

En windows XP mostrara un contador, con el comentario que va luego de -c, pero en Windows 7 y 8  no abrirá ni un contador, solamente saldrá una alerta con el Comentario, que ni siquiera es obligatorio.

Puedes cancelar el apagado (Antes de que el contador termine) solamente escribiendo shutdown -a ya sea en un archivo de texto con extensión bat, como en el mismo Shell.

Ejemplo:

shutdown -s -t 999999 -c «Esto se esta apagando»

Tendrá suficiente tiempo para ejecutar el siguiente código. (11 días )

 

Otras utiles comandos:
Para terminar hablaremos de pequeñas funciones que pueden ser de utilidad.

  • Leer archivos externos:Para leer un archivo externo con Batch, como un archivo de texto por ejemplo. Se usa el siguiente código:type «NombreDelArchivo.txt»
  • Insertar al Registro:Insertar al registro tu Batch puede ser muy útil, la verdad yo no entiendo mucho del registro pero leí un poco y aquí tienen un ejemplo que se encuentra a ser sincero en muchas web. Donde aremos que nuestro batch se ejecute con el Sistema. Ejemplo REG ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v MIBATCH.bat /t REG_SZ /d
  • Con la función REG ADD Agregamos algo al registro. Con otros comando podemos borrar.Lo que sigue es la «Dirección» de donde insertaremos el registro que en este caso sera para que nuestro batch se ejecute al iniciar Sesión. En medio de toda la dirección se puede leer MIBATCH.bat yo puse el nombre del Batch pero también se puede poner cualquier otra cosa. Más adelante donde dice C:\MIBATCH.bat, es la dirección completa de donde esta nuestro Batch.
  • Msg :Esta función tiene otras utilidades, pero les enseñare esta que no funciona en todos los PC.Sirve para abrir una alerta con un mensaje su utilización es la siguiente:msg * EsteEsMiMensaje
  • AT  :Esta es una de las que más me gusta, es para programar alguna acción a cierta hora. Ejemplo: At 20:00 msg * Son Las 8 de la noche.Con esto a las 20:00 nos aparecerá un mensaje que nos dirá que son las 8 de la Noche. También puedes programar un apagado o cualquier Cosa.Si la hora que das ya paso, se tomara como para el día siguiente.

 

En Batch las Mayúsculas y Minúsculas no se diferencian. Batch en algunos casos SI reconoce entre mayúsculas y minúsculas, como en el caso de la variable %%i si esta se llamara %%I no seria reconocida como la misma.

Todo lo que necesita saber sobre los interfaces serie


 

Interfaces en paralelo transfieren múltiples bits al mismo tiempo. Por lo general requieren buses de datos – la transmisión a través de ocho, dieciséis o más cables. Los datos se transfieren en grandes, rompiendo las olas de 1 y 0 de.

Generalización Paralelo

Un bus de datos de 8 bits, controlado por un reloj, la transmisión de un byte de cada pulso de reloj. Se utilizan 9 cables.

Interfaces serie de flujo de sus datos, un solo bit a la vez. Estas interfaces pueden operar con tan solo un sólo  hilo, por lo general nunca más de cuatro.

Generalización de serie

Ejemplo de una interfaz serie, la transmisión de un bit cada pulso de reloj. !Sólo son requeridos  2 cables !

Piense en las dos interfaces como una corriente de coches: una interfaz paralela sería la 8+ carril mega-autopista, mientras que una interfaz en serie es más como una de dos carriles la carretera rural del país. Durante un periodo de tiempo, la red de carreteras de mega potencialmente pone a más personas a sus destinos, pero que las zonas rurales de dospistas sirve a su propósito y cuesta una fracción de los fondos para construir.

Comunicación paralela ciertamente tiene sus beneficios. Es rápida, sencilla y relativamente fácil de implementar. Pero requiere muchas más líneas de entrada / salida (E / S). Si alguna vez ha tenido que mover un proyecto a partir de un básico Arduino Uno a un mega, usted sabe que las líneas de E / S en un microprocesador pueden ser preciosos y pocos. Así, a menudo optamos por comunicación serie, sacrificando velocidad potencial de los bienes raíces pin.

Serial Asíncrona

Con los años, decenas de protocolos de serie han sido diseñados para satisfacer las necesidades particulares de los sistemas integrados. USB (bus serie universal) y Ethernet, un par de los informáticos interfaces seriales más conocidos. Otras interfaces serie muy comunes incluyen SPI, I 2 C, y el estándar de serie que estamos aquí para hablar de la actualidad. Cada una de estas interfaces en serie se pueden clasificar en dos grupos: síncrono o asíncrono.

Una interfaz serie síncrona siempre se empareja su línea de datos (s) con una señal de reloj, por lo que todos los dispositivos de una cuota de bus serie síncrona un reloj común. Esto hace que para una transferencia más sencilla, a menudo más rápido en serie, pero también requiere al menos un cable adicional entre dispositivos de comunicación.Los ejemplos de las interfaces síncronos incluyen SPI, y 2 C.

Asíncrona significa que los datos se transfieren sin el apoyo de una señal de reloj externo. Este método de transmisión es perfecto para minimizar los cables necesarios y pines I / O, pero sí significa que tenemos que poner un poco de esfuerzo extra en la transferencia y recepción de datos de forma fiable. El protocolo serie vamos a estar discutiendo en este tutorial es la forma más común de las transferencias asíncronas. Es tan común, de hecho, que cuando la mayoría de la gente dice «serial» que están hablando de este protocolo (algo que probablemente te darás cuenta de lo largo de este tutorial).

El protocolo serie del reloj menos vamos a estar discutiendo en este tutorial es ampliamente utilizado en la electrónica embarcada. Si usted está mirando para agregar un módulo GPS, Bluetooth, XBee de, los LCD de serie, o muchos otros dispositivos externos al proyecto, es probable que tengas que sacar de repente alguna serie-fu.

Reglas de serie

El protocolo serie asíncrono tiene una serie de reglas incorporadas – mecanismos que ayudan a asegurar la transferencia de datos robustos y libres de errores. Estos mecanismos, que obtenemos para evitando la señal de reloj externo, son los siguientes:

  • Los bits de datos,
  • Bits de sincronización,
  • Bits de paridad,
  • y velocidad de transmisión.

A través de la variedad de estos mecanismos de señalización, usted encontrará que no hay una manera de enviar datos en serie. El protocolo es altamente configurable. La parte fundamental es asegurarse de que los dos dispositivos en un bus serie están configurados para utilizar los mismos protocolos exactos.

Velocidad en baudios

La velocidad de transmisión de datos rápida especifica cómo se envía a través de una línea serie. Por lo general se expresa en unidades de bits por segundo (bps). Si invierte la velocidad de transmisión, puede averiguar cuánto tiempo se tarda en transmitir un solo bit. Este valor determina el tiempo que el transmisor tiene una línea serial de alta / baja o en lo que las muestras de dispositivos que reciben periodo de su línea.

Velocidades de transmisión pueden ser casi cualquier valor dentro de lo razonable. El único requisito es que ambos dispositivos funcionan a la misma velocidad. Una de las velocidades de transmisión más comunes, especialmente para las cosas simples, donde la velocidad no es crítica, es de 9600 bps. Otros baudios «estándar» son 1.200, 2.400, 4.800, 19.200, 38.400, 57.600 y 115.200.

Cuanto mayor sea la velocidad de transmisión se va, los datos más rápido se envía / recibe, pero hay límites a la rápida de datos se pueden transferir. Generalmente, usted no verá velocidades superiores a 115 200 – que es rápido para la mayoría de los microcontroladores. Son muy altos, y usted comenzará a ver los errores en el extremo receptor, como relojes y períodos de muestreo simplemente no pueden mantener el ritmo.

Enmarcar los datos

Cada bloque (normalmente un byte) de los datos transmitidos se envía en realidad en un paquete o trama de bits.Marcos se crean añadiendo sincronización y de paridad de bits a nuestros datos.

Paquete de serie

Un marco de serie. Algunos símbolos de la trama tienen tamaños bits configurables.

Vamos a entrar en los detalles de cada una de estas piezas del marco.

Trozo de Datos

La carne real de cada paquete de serie es que los datos que lleva. Nos ambiguamente llamamos este bloque de datos de un trozo, porque su tamaño no se indica específicamente. La cantidad de datos en cada paquete se puede configurar para cualquier cosa, desde 5 a 9 bits. Ciertamente, el tamaño de los datos estándar es el byte de 8 bits básico, pero otros tamaños tienen sus usos. Un fragmento de datos 7 bits puede ser más eficiente que 8, especialmente si usted está transfiriendo caracteres ASCII de 7 bits.

Después de ponerse de acuerdo sobre una longitud de caracteres, los dos dispositivos en serie también tienen que ponerse de acuerdo en el orden de bits de sus datos. ¿Está de datos enviado bit más significativo (MSB) a menos, o viceversa? Si no se indica lo contrario, por lo general puede asumir que los datos se transfieren bit menos significativo (LSB) primero.

Bits de sincronización

Los bits de sincronización son dos o tres bits especiales transferidos a cada fragmento de datos. Son el bit de inicio y el bit (s) de parada. Fiel a su nombre, estos bits marcan el comienzo y el final de un paquete. Siempre hay un solo bit de inicio, pero el número de bits de parada es configurable para uno o dos (aunque comúnmente se fue a la una).

El bit de inicio siempre se indica mediante una línea de datos inactivo va de 1 a 0, mientras que el bit (s) Parada pasará de nuevo al estado de reposo manteniendo la línea en 1.

Bits de paridad

La paridad es una forma de comprobación de errores muy simple, de bajo nivel. Viene en dos sabores: pares o impares. Para producir el bit de paridad, se suman todos los 5-9 bits del byte de datos, y la uniformidad de la suma decide si el bit está activado o no. Por ejemplo, suponiendo que la paridad se establece en uniforme y estaba siendo añadido a un byte de datos como 0b01011101 que tiene un número impar de 1 ‘s (5), el bit de paridad se establece en 1 A la inversa, si el modo de paridad se establece en impar, el bit de paridad sería 0

La paridad es opcional, y no muy ampliamente utilizado. Puede ser útil para transmitir a través de medios ruidosos, pero va también frenar sus datos transfieren un poco y requiere tanto el emisor y el receptor para implementar control de errores (por lo general, los datos recibidos que falla debe ser re-envían).

9600 8N1 (un ejemplo)

9600 8N1 – 9600 baudios, 8 bits de datos, sin paridad y 1 bit de parada – es uno de los protocolos de serie más comúnmente utilizados. Así que, ¿cuáles serían un paquete o dos de 9600 los datos 8N1 parece? Vamos a echar un ejemplo!

Un dispositivo que transmite los ASCII caracteres ‘O’ y ‘K’ tendría que crear dos paquetes de datos. El valor ASCII deO (que es mayúscula) es de 79, que se descompone en un valor binario de 8 bits de 01001111 mientras que el valor binario K ‘s es 01001011 Todo lo que queda es añadiendo bits de sincronización.

No se dice expresamente, pero se asume que los datos se transfieren bit menos significativo primero. Observe cómo cada uno de los dos bytes se envía como se lee de derecha a izquierda.

Paquete "OK"

Ya que estamos transfiriendo a 9600 bps, el tiempo dedicado a la celebración de cada uno de los bits de alta o baja es 1 / (9600 bps) o 104 mu s por bit.

Para cada byte de datos transmitidos, en realidad hay 10 bits que se envían: un bit de inicio, 8 bits de datos, y un bit de parada. Así, a 9600 bps, en realidad estamos enviando 9600 bits por segundo o 960 (9600/10) bytes por segundo.


Ahora que sabe cómo construir paquetes de serie, podemos pasar a la sección de hardware. No vamos a ver cómo se implementan los la velocidad de transmisión de 1 y de 0 y en un nivel de la señal!

Cableado y Hardware

Un bus serie consta de sólo dos cables – uno para el envío de datos y otra para recibir. Como este tipo de dispositivos, de serie deben tener dos pasadores de serie: el receptor, RX y el transmisor, TX.

Cableado serie

Es importante señalar que esas etiquetas RX y TX son con respecto al propio dispositivo. Así que la RX de un dispositivo debe ir a la TX de la otra, y viceversa. Es raro si estás acostumbrado a conectar VCC a VCC, GND a GND, MOSI a MOSI, etc., pero tiene sentido si se piensa en ello. El transmisor debe estar hablando con el receptor, no a otro transmisor.

Una interfaz en serie donde ambos dispositivos pueden enviar y recibir datos es o full-duplex o half-duplex. Full-duplex significa ambos dispositivos pueden enviar y recibir simultáneamente. Comunicación semidúplex significa dispositivos serie deben turnarse para enviar y recibir.

Algunos buses seriales pueden salirse con sólo una única conexión entre un dispositivo de envío y recepción. Por ejemplo, nuestras pantallas LCD Habilitado Serial son todo oídos y realmente no tienen ningún dato para retransmitir de nuevo al dispositivo de control. Esto es lo que se conoce como comunicación serie simplex. Todo lo que necesita es un solo cable de TX del dispositivo maestro a la línea RX del oyente.

Implementación Hardware

Hemos cubierto serie asíncrona de un lado conceptual. Sabemos que los cables que necesitamos. Pero, ¿cómo es la comunicación serie aplica realmente a un nivel de señal? En unas formas de variedades, en realidad. Hay todo tipo de normas para la señalización de serie. Echemos un vistazo a un par de las implementaciones de hardware más populares de serie: a nivel de la lógica (TTL) y RS-232.

Cuando microcontroladores y otros circuitos integrados de bajo nivel se comunican en serie por lo general lo hacen a un TTL existen (lógica transistor-transistor) Nivel de señales de serie TTL entre rango de alimentación de tensión de un microcontrolador -. General 0V a 3.3V o 5V. Una señal en el nivel VCC (3.3V, 5V, etc.) indica ya sea una línea libre, un poco de valor 1, o un bit de parada. Una señal de 0V (GND) representa bien un bit de inicio o un bit de datos de valor 0.

TTL Señal

RS-232, que se pueden encontrar en algunos de los más antiguos ordenadores y periféricos, es como serie TTL vuelta en su cabeza. Señales RS-232 por lo general oscilan entre -13V y 13V, aunque la especificación permite para cualquier cosa de +/- 3V a +/- 25V. En estas señales de bajo voltaje (-5V, -13V, etc.) indica ya sea la línea de espera, un bit de parada, o un bit de datos de valor 1. Una señal de alta RS-232 significa o bien un bit de inicio, o una 0- bit de datos de valor. Eso es un poco lo contrario de TTL serie.

RS-232 Señal

Entre las dos normas señal en serie, TTL es mucho más fácil de implementar en circuitos integrados. Sin embargo, los niveles de baja tensión son más susceptibles a las pérdidas a través de líneas de transmisión largas. RS-232, o normas más complejas como RS-485, se adaptan mejor a largo alcance transmisiones seriales.

Cuando se va a conectar dos dispositivos en serie juntos, es importante asegurarse de que sus tensiones de señal coinciden. No se puede interactuar directamente un dispositivo serie TTL con un bus RS-232. Vas a tener quecambiar las señales!


Continuando, vamos a explorar la herramienta de microcontroladores utilizan para convertir sus datos en un bus paralelo hacia y desde una interfaz en serie. UART!

UART

La última pieza de este rompecabezas de serie es encontrar algo que tanto crear los paquetes de serie y control de esas líneas de hardware físico. Introduzca la UART.

Un receptor asíncrono / transmisor universal (UART) es un bloque de circuitería responsable de implementar la comunicación en serie. En esencia, la UART actúa como intermediario entre las interfaces paralelo y serie. En un extremo de la UART es un bus de ocho o lo que las líneas de datos (además de algunos pines de control), en el otro es los dos cables de serie – RX y TX.

UART simplificado

Super-simplificada interfaz UART. Paralelas sobre un extremo, de serie en la otra.

UART existen como circuitos integrados independientes, pero son más comúnmente encontrado en el interior microcontroladores. Usted tendrá que comprobar ficha técnica de su microcontrolador para ver si tiene alguna UART.Algunos no tienen ninguno, algunos tienen uno, algunos tienen muchos. Por ejemplo, el Arduino Uno – basado en el «Old Faithful» ATmega328 – tiene apenas un solo UART, mientras que el Arduino Mega – construido sobre un Atmega2560 – tiene la friolera de cuatro UART.

A medida que la R y T en el dictado siglas, UART son responsables de envío y recepción de datos en serie. Por el lado de transmisión, una UART debe crear el paquete de datos – añadiendo sincronización y bits de paridad – y enviar ese paquete a cabo la línea TX con sincronización precisa (según la velocidad de transmisión set). En el extremo de recepción, el UART tiene que probar la línea RX a tasas de acuerdo a la velocidad de transmisión de esperar, seleccionar los bits de sincronización, y escupir los datos.

UART interna

Diagrama de bloques UART interna (cortesía de la ficha técnica Exar ST16C550)

Más UART avanzados pueden tirar sus datos recibidos en un buffer, donde puede permanecer hasta que el microcontrolador trata de conseguirlo. UART suele liberar sus datos almacenados en un primero en entrar, primero en salir (FIFO). Los tampones pueden ser tan pequeño como unos pocos bits, o tan grande como miles de bytes.

UART Software

Si un microcontrolador no tiene un UART (o no tiene suficiente), la interfaz serial puede ser poco-golpeó – directamente controlado por el procesador. Este es el enfoque bibliotecas Arduino como SoftwareSerial toman. Bit golpearse es intensivo del procesador, y no suele ser tan preciso como una UART, pero funciona en un apuro!

Errores comunes

Eso es todo lo que hay a la comunicación serial. Me gustaría dejar con algunos errores comunes que son fáciles para un ingeniero de cualquier nivel de experiencia para hacer:

-RX-a TX, TX-a-RX

Parece bastante simple, pero es un error que yo sé que he hecho más de un par de veces. Por mucho que usted quiere sus etiquetas coinciden, asegúrese siempre de cruzar las líneas RX y TX entre dispositivos serie.

Aplicación de serie de la vida real

FTDI Básica programación de un Pro Mini. Nota RX y TX de cruzados!

Contrariamente a lo que el estimado Dr. Egon Spengler sería advertir, cruzar los arroyos.

Baud Rate Mismatch

Velocidades de transmisión son como las lenguas de comunicación serie. Si dos dispositivos no están hablando a la misma velocidad, los datos pueden ser mal interpretadas o bien, o completamente perdidas. Si todo el dispositivo receptor ve en su línea de recepción es basura, compruebe para asegurarse de que las velocidades de transmisión coinciden.

Baud Discrepancia

Los datos transmitidos a 9600 bps, pero recibieron a 19200 bps. Baud desajuste = basura.

Contención de bus

Comunicación serie está diseñada para permitir sólo dos dispositivos se comuniquen a través de un bus de serie. Si más de un dispositivo está tratando de transmitir en la misma línea serie se podía ejecutar en autobús de la discordia.Dun dun dun ….

Por ejemplo, si se conecta un módulo GPS a tu Arduino, sólo puede conectar la línea TX de ese módulo la línea RX del Arduino. Pero que el pin de Arduino RX ya está conectado al pin TX del conversor de USB a serie, que se utiliza cada vez que se programa el Arduino o utilizar el Serial Monitor. Esto configura la situación potencial que tanto el módulo GPS y el chip FTDI están tratando de transmitir en la misma línea al mismo tiempo.

Ejemplo de contención autobús

Dos transmisores que envían a un solo receptor establece la posibilidad de que la contención de bus.

Dos dispositivos tratando de transmitir datos al mismo tiempo, en la misma línea, es malo! En la «mejor» ni de los dispositivos se llega a enviar a sus datos. En el peor, líneas de transmisión de ambos dispositivos van puf (aunque eso es raro, y por lo general protegidos en contra).

Puede ser segura para conectar varios dispositivos de recepción a un único dispositivo de transmisión. En realidad, no hasta SPEC y probablemente mal visto por un ingeniero endurecido, pero funcionará. Por ejemplo, si va a conectar una pantalla LCD de serie hasta un Arduino, el enfoque más fácil puede ser la de conectar la línea RX del módulo LCD a la línea TX del Arduino. TX del Arduino ya está conectado a la línea RX del programador USB, pero que aún deja un solo dispositivo de control de la línea de transmisión.

Implementación segura pero dudoso de un transmisor / dos receptores

La distribución de una línea TX como esto todavía puede ser peligroso desde el punto de vista del firmware, porque no se puede escoger y elegir qué dispositivo escucha lo que la transmisión. La pantalla LCD terminar recibiendo datos no destinados para ello, lo que podría comandar a entrar en un estado desconocido.

En general – un bus de serie, dos dispositivos de serie!

Recursos y Más Allá

Con esta brillante, nuevo conocimiento de la comunicación en serie, hay un montón de nuevos conceptos, proyectos y tecnologías para explorar.

¿Le gustaría aprender más sobre otros estándares de comunicación? Tal vez algo sincrónica?

Muchas tecnologías hacen un uso intensivo de la comunicación en serie:

 

 

Fuente aqui

Manejo de pantallas LCD con Netduino


Las pantallas de cristal líquido (LCD) son una gran opción de dispositivo de salida para mostrar caracteres alfanuméricos en tiempo real. También son muy útiles si su proyecto requiere una interfaz de usuario interactiva para la entrada de datos. Además, son de bajo costo, consumen menos energía que las pantallas LED, y le dan un aspecto más profesional a su proyecto.

Gracias a Ebedded Lab , hoy vamos a explorar cómo conectar un LCD personaje basado HD44780 a Netduino para mostrar caracteres alfanuméricos  sin usar las librerías de Crsytal Liquid , que aun siendo muy potentes  y utiles en ocasiones nos pueden dar algún problema .

Para más detalles técnicos del controlador HD44780, por favor lea la hoja de datos, así como su ejemplo de interfaz con chipKIT.

 

Configuración de Circuito y Teoría

La conexión de un LCD  es realmente simple. El LCD funciona en modo de 4 bits, y por lo tanto los pines 7 a 10 (D0-D3) de la pantalla LCD no han sido utilizados. Los cuatro bits de datos más significativos, D4-D7 (pines 12 a 14), recibe datos LCD / comando a través de pasadores Netduino E / S 7, 5, 3 y 1, respectivamente. Del mismo modo, el Registro Select (R / S) y Enable (E) las líneas de señal de la pantalla LCD son impulsados ​​por Netduino pins E / S 11 y 9, respectivamente. Pasadores LCD 1, 2, 3, 4, 15 y 16 están relacionados con la alimentación, ajuste de contraste y pantalla LED de luz de fondo, y están conectados apropiadamente como se muestra a continuación. Para entender cómo funciona LCD, tengo que apuntar a un documento diferente, ya que se explica mejor por allá. En Interconexión un LCD de caracteres, Raj explica acerca de la comunicación en el modo de 4 bits y también habla sobre los fundamentos de controlador HD44780 LCD. Para más detalles técnicos, consulte Hitachi HD44780U (LCD-II) ficha técnica.

Conexión Con Netduino / Netduino Plus

 Programa en # .NET

Hay dos maneras en que podemos mirar el programa, uno de una manera muy sencilla y la otra manera, por supuesto, más difícil.

En forma más simple no nos preocupamos acerca de lo que hay dentro de la clase LCD (o una biblioteca) y no utilizar algunos de los métodos o propiedades expuestas. Echemos un vistazo a las cosas más simples primero:

  //configuracion del LCD compatible con HD44780 de dos lineas
 var lcdProvider = new GpioLiquidCrystalTransferProvider(
 Pins.GPIO_PIN_D8, // RS
 Pins.GPIO_PIN_D9, // enable
 Pins.GPIO_PIN_D10, // d4
 Pins.GPIO_PIN_D11, // d5
 Pins.GPIO_PIN_D12, // d6
 Pins.GPIO_PIN_D13); // d7
 var lcd = new LiquidCrystal(lcdProvider);

lcd.Clear();

 lcd.Begin(16, 2);
 lcd.SetCursorPosition(0, 0);
 lcd.Write("primera linea");// Print a message to the LCD.
 

 lcd.SetCursorPosition(0, 1);

 lcd.Write("segunda linea");

Como se puede ver que hemos creado una instancia de la clase LCD y luego establecemos algunas propiedades de lo que nos gusta y simplemente llamamos al método  Write. Hay dos métodos escribir, uno mostrará el texto de la primera linea y el otro método mostrará la  segunda.

Ahora vamos a profundizar en la parte compleja. Hay varias bibliotecas por ahí, pero yo escribimos mi propia para entender lo que se cuece dentro. Echemos un vistazo a la sección constructor,

 
 /*-------------------------------------------------------------------------------+
|
| Copyright (c) 2012, Embedded-Lab. All Rights Reserved.
|
| Limited permission is hereby granted to reproduce and modify this 
| copyrighted material provided that this notice is retained 
| in its entirety in any such reproduction or modification.
|
| Author: ANir
| First Version Date: 2012/12/27
+-------------------------------------------------------------------------------*/


using System;
using System.Threading;
using Microsoft.SPOT.Hardware;
using System.Text;

namespace EmbeddedLab.NetduinoPlus.Day2.Display
{
 public class LCD
 {
 #region Constructor
 public LCD(Cpu.Pin rs, Cpu.Pin enable,
 Cpu.Pin d4, Cpu.Pin d5, Cpu.Pin d6, Cpu.Pin d7,
 byte columns, Operational lineSize, int numberOfRows, Operational dotSize)
 {
 RS = new OutputPort(rs, false);
 Enable = new OutputPort(enable, false);
 D4 = new OutputPort(d4, false);
 D5 = new OutputPort(d5, false);
 D6 = new OutputPort(d6, false);
 D7 = new OutputPort(d7, false);

 Columns = columns;
 DotSize = (byte)dotSize;
 NumberOfLines = (byte)lineSize;
 NumberOfRows = numberOfRows;

 Initialize();
 }
 #endregion


 #region Public Methods
 public void Show(string text, int delay, bool newLine)
 {
 if (newLine) dirtyColumns = 0;
 foreach (char textChar in text.ToCharArray())
 {
 ResetLines();
 Show(Encoding.UTF8.GetBytes(textChar.ToString()));
 dirtyColumns += 1;
 Thread.Sleep(delay);
 }
 }

 public void Show(string text)
 {
 string[] splitedText = SplitText(text);
 Show(splitedText);
 }


 public void ClearDisplay()
 {
 SendCommand((byte)Command.Clear);
 currentRow = 0;
 dirtyColumns = 0;
 }
 public void GoHome()
 {
 SendCommand((byte)Command.Home);
 currentRow = 0;
 dirtyColumns = 0;
 }
 public void JumpAt(byte column, byte row)
 {
 if (NumberOfLines == (byte)Operational.DoubleLIne) row = (byte)(row % 4);
 else row = (byte)(row % 2);

 SendCommand((byte)((byte)Command.SetDdRam | (byte)(column + rowAddress[row]))); //0 based index
 }

 public void PushContentToLeft()
 {
 SendCommand(0x18 | 0x00);
 }

 public void PushContentToRight()
 {
 SendCommand(0x18 | 0x04);
 }

 #endregion


 #region Private Methods
 private void Initialize()
 {
 //initialize fields
 isVisible = true;
 showCursor = false;
 isBlinking = false;

 rowAddress = new byte[] { 0x00, 0x40, 0x14, 0x54 };
 firstHalfAddress = new byte[] { 0x10, 0x20, 0x40, 0x80 };
 secondHalfAddress = new byte[] { 0x01, 0x02, 0x04, 0x08 };

 currentRow = 0;
 dirtyColumns = 0;

 Thread.Sleep(50); // must wait for a few milliseconds


 // RS to high = data transfer
 // RS to low = command/instruction transfer
 RS.Write(false);

 // Enable provides a clock function to synchronize data transfer
 Enable.Write(false);


 // Set for 4 bit model
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(150);
 Write(0x02, secondHalfAddress);


 // Set the LCD properties 
 byte operationalValue = (byte)((byte)Operational.FourBit | (byte)NumberOfLines | (byte)DotSize);
 SendCommand((byte)((byte)Command.Operational | operationalValue));

 UpdateDisplayOptions();

 ClearDisplay();

 byte entranceValue = (byte)Entrance.FromLeft | (byte)Entrance.ShiftDecrement;
 SendCommand((byte)((byte)Command.Entrance | entranceValue));

 }

 private string[] SplitText(string str)
 {
 if (str.Length > Columns * NumberOfRows) str = str.Substring(0, Columns * NumberOfRows);

 int stringArrayCounter = 0;
 dirtyColumns = 0;

 char[] charArray = str.ToCharArray();
 int arraySize = (int)System.Math.Ceiling((double)(str.Length + dirtyColumns) / Columns);
 string[] stringArray = new string[arraySize];

 for (int i = 0; i < charArray.Length; i++)
 {
 if (dirtyColumns < Columns)
 {
 stringArray[stringArrayCounter] = stringArray[stringArrayCounter] + charArray[i];
 dirtyColumns += 1;
 }
 else
 {
 dirtyColumns = 1;
 stringArrayCounter += 1;
 stringArray[stringArrayCounter] = stringArray[stringArrayCounter] + charArray[i];
 }
 }
 return stringArray;
 }


 private void ResetLines()
 {
 if (dirtyColumns == 0) return;
 if (dirtyColumns % Columns == 0)
 {
 currentRow += 1;
 JumpAt((byte)0, (byte)(currentRow));
 }
 }

 private void Write(byte[] data)
 {
 foreach (byte value in data)
 {
 Write(value, firstHalfAddress); // First half
 Write(value, secondHalfAddress); // Second half
 }
 }

 private void Write(byte value, byte[] halfAddress)
 {
 D4.Write((value & halfAddress[0]) > 0);
 D5.Write((value & halfAddress[1]) > 0);
 D6.Write((value & halfAddress[2]) > 0);
 D7.Write((value & halfAddress[3]) > 0);

 Enable.Write(true);
 Enable.Write(false);
 //Debug.Print("Wrote " + value.ToString());
 }

 private void SendCommand(byte value)
 {
 RS.Write(false); // command/instruction transfer
 Write(new byte[] { value });

 Thread.Sleep(5);
 }

 private void UpdateDisplayOptions()
 {
 byte command = (byte)Command.DisplayControl;
 command |= isVisible ? (byte)DisplayControl.ScreenOn : (byte)DisplayControl.ScreenOff;
 command |= showCursor ? (byte)DisplayControl.CursorOn : (byte)DisplayControl.CursorOff;
 command |= isBlinking ? (byte)DisplayControl.BlinkBoxOn : (byte)DisplayControl.BlinkBoxOff;

 SendCommand(command);
 }

 private void Show(string[] splitedText)
 {
 foreach (string text in splitedText)
 {
 JumpAt((byte)0, (byte)(currentRow));
 currentRow += 1;

 Show(Encoding.UTF8.GetBytes(text));
 }
 }

 private void Show(byte[] bytes)
 {
 RS.Write(true);
 Write(bytes);
 }

 #endregion

 #region Public Properties

 public bool IsVisible
 {
 get { return isVisible; }
 set { isVisible = value; UpdateDisplayOptions(); }
 }

 public bool IsBlinking
 {
 get { return isBlinking; }
 set { isBlinking = value; UpdateDisplayOptions(); }
 }

 public bool ShowCursor
 {
 get { return showCursor; }
 set { showCursor = value; UpdateDisplayOptions(); }
 }

 #endregion

 #region Fields
 private OutputPort RS;
 private OutputPort Enable;
 private OutputPort D4;
 private OutputPort D5;
 private OutputPort D6;
 private OutputPort D7;
 private byte Columns;
 private byte DotSize;
 private byte NumberOfLines;
 private byte[] rowAddress;
 private byte[] firstHalfAddress;
 private byte[] secondHalfAddress;
 


 private int currentRow;
 private int dirtyColumns;
 private int NumberOfRows;

 private bool isVisible;
 private bool showCursor;
 private bool isBlinking;
 #endregion


 #region Enums
 public enum Command : byte
 {
 Clear = 0x01,
 Home = 0x02,
 Entrance = 0x04,
 DisplayControl = 0x08,
 Move = 0x10,
 Operational = 0x20,
 SetCgRam = 0x40,
 SetDdRam = 0x80
 }

 public enum Entrance : byte
 {
 FromRight = 0x00,
 FromLeft = 0x02,
 ShiftIncrement = 0x01,
 ShiftDecrement = 0x00
 }

 public enum DisplayControl : byte
 {
 ScreenOn = 0x04,
 ScreenOff = 0x00,
 CursorOn = 0x02,
 CursorOff = 0x00,
 BlinkBoxOn = 0x01,
 BlinkBoxOff = 0x00
 }

 public enum Operational : byte
 {
 Dot5x10 = 0x04,
 Dot5x8 = 0x00,
 SingleLine = 0x00,
 DoubleLIne = 0x08,
 FourBit = 0x00
 }
 #endregion
 }
}

En la sección constructor, que básicamente crea cierta Outport, guarda las propiedades de LCD y luego llama al método Initialize. En este método, fijamos las propiedades visuales, inicializar algunas matrices y luego preparar la pantalla LCD para el modo de comunicación de 4 bits.

 private void Initialize()
 {
 //initialize fields
 isVisible = true;
 showCursor = false;
 isBlinking = false;

 rowAddress = new byte[] { 0x00, 0x40, 0x14, 0x54 };
 firstHalfAddress = new byte[] { 0x10, 0x20, 0x40, 0x80 };
 secondHalfAddress = new byte[] { 0x01, 0x02, 0x04, 0x08 };

 currentRow = 0;
 dirtyColumns = 0;

 Thread.Sleep(50); // must wait for a few milliseconds


 // RS to high = data transfer
 // RS to low = command/instruction transfer
 RS.Write(false);

 // Enable provides a clock function to synchronize data transfer
 Enable.Write(false);


 // Set for 4 bit model
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(150);
 Write(0x02, secondHalfAddress);


 // Set the LCD properties 
 byte operationalValue = (byte)((byte)Operational.FourBit | (byte)NumberOfLines | (byte)DotSize);
 SendCommand((byte)((byte)Command.Operational | operationalValue));

 UpdateDisplayOptions();

 ClearDisplay();

 byte entranceValue = (byte)Entrance.FromLeft | (byte)Entrance.ShiftDecrement;
 SendCommand((byte)((byte)Command.Entrance | entranceValue));

 }

 

Ahora, echemos un vistazo a los métodos que son críticas para mostrar el texto a la pantalla LCD. El primer método Show nos permite mostrar la letra texto dado por carta como se puede ver el bucle está estructurado para cada carácter en el texto dado.

private void Show(string[] splitedText)
 {
 foreach (string text in splitedText)
 {
 JumpAt((byte)0, (byte)(currentRow));
 currentRow += 1;

 Show(Encoding.UTF8.GetBytes(text));
 }
 }

El segundo método Show muestra básicamente todo el texto a la vez, pero antes de que lo haga algún formato para que el texto aparecerá continuamente. Confía en mí mostrando texto dado de una manera continua es uno de lo difícil que resolví en esta clase LCD.

 private void Show(byte[] bytes)
 {
 RS.Write(true);
 Write(bytes);
 }

Por último, el método que escribe información en la pantalla LCD se realiza bajo el método de escritura. El primer método Write llama al método send Escribir pasa el valor de escritura y la dirección donde enviar la información. El segundo método de escritura básicamente escribe la información en la pantalla LCD.

  private void Write(byte value, byte[] halfAddress)
 {
 D4.Write((value & halfAddress[0]) > 0);
 D5.Write((value & halfAddress[1]) > 0);
 D6.Write((value & halfAddress[2]) > 0);
 D7.Write((value & halfAddress[3]) > 0);

 Enable.Write(true);
 Enable.Write(false);
 //Debug.Print("Wrote " + value.ToString());
 }
 

Producción

Después de conectar un par de cables, al ejecutar su código y visualizar el texto que usted quiere, pone una sonrisa en la cara. Dependiendo del método que está utilizando dará a obtener resultados diferentes Show, se mostrará letra por letra y otra mostrará el texto entero de una vez. Al igual que en el video, al girar el potenciómetro, los cambios de contraste de la pantalla.

 

  public static void Main()
 {
 LCD lcd = new LCD(
 Pins.GPIO_PIN_D8, // RS
 Pins.GPIO_PIN_D9, // Enable
 Pins.GPIO_PIN_D10, // D4
 Pins.GPIO_PIN_D11, // D5
 Pins.GPIO_PIN_D12, // D6
 Pins.GPIO_PIN_D13, // D7
 16, // Number of Columns 
 LCD.Operational.DoubleLIne, // LCD Row Format
 1, // Number of Rows in LCD
 LCD.Operational.Dot5x8); // Dot Size of LCD


 lcd.ShowCursor = true;
 lcd.Show("CRN", 200, true);
 Thread.Sleep(5000); // reading time for the viewer
}

 

Descargas

1) Código C # .NET (archivo Solution)

2) archivo Flitizing

 

 

 

Fuente  aqui