Como crear un USB de arranque desde linux


A veces nuestro equipo Windows o Linux puede tener ciertos problemas en funcionalidades que no sabemos achacar si es al propio sistema operativo, a alguna aplicacion que hayamos instalado qeu entre en conflicto con otra o quizas algun componente hardware. Pensando en estos casos una solucion muy interesante es arrancar con una unidad USB que contenga la maxima cantidad de drivers y sw basico para probar si es achacable al propio sistema operativo o algun aspecto del hardware que nos este fallando

En este post , pues vamos a ver como generar una unidad USB con la que salir de dudas y que seguro mas una vez nos podra sacar de algun apuro ¿le interesa el tema pues no nos demoremos mas y veamos los pasos a seguir?

1. Información general

Con una memoria USB de arranque de Ubuntu, puede:

  • Instalar o actualizar Ubuntu
  • Pruebe la experiencia de escritorio de Ubuntu sin tocar la configuración de su PC
  • Inicie Ubuntu en una máquina prestada o desde un cibercafé
  • Utilice las herramientas instaladas de forma predeterminada en la memoria USB para reparar o arreglar una configuración rota

Crear una memoria USB de arranque de Ubuntu es muy simple, especialmente desde Ubuntu mismo, y cubriremos el proceso en los siguientes pasos.

Alternativamente, también tenemos tutoriales para ayudarlo a crear una memoria USB de arranque desde Microsoft Windows y Apple macOS .

 

2. Requisitos

Necesitará:

  • Una memoria USB / unidad flash de 4 GB o más
  • Ubuntu Desktop 14.04 o posterior instalado
  • Un archivo ISO de Ubuntu. Consulte Obtener Ubuntu para obtener enlaces de descarga.
  • Xubuntu es un sistema operativo Linux elegante y fácil de usar basado en Ubuntu y desarrollado por la comunidad.. Xubuntu incluye Xfce, que es un entorno de escritorio estable, ligero y configurable.Es ideal para quien quiera lo mejor de sus PCs, portátiles y netbooks dándoles un aspecto moderno y obteniendo funcionalidades suficientes y eficientes para el día a día. Además, funciona bien en máquinas antiguas.Para más información, visite el sitio web de Xubuntu. Puede probar tambien la version Xubuntu 20.01 desde here.
Descarga una ISO de Ubuntu

Por cierto ,la «X» en Xubuntu proviene de Xfce, el ambiente de escritorio de Xubuntu. Así también la palabra «ubuntu» muestra la dependencia y el uso del núcleo de Ubuntu, que a su vez representa el núcleo filosófico del sistema operativo. Un significado aproximado de la palabra ubuntu es «humanidad hacia los demás». Para conocer más sobre la filosofía e ideales detrás de Ubuntu y Xubuntu puede ir a la página Filosofía de Ubuntu [En inglés].

Además de utilizar el núcleo de Ubuntu, Xubuntu también utiliza la infraestructura proporcionada y patrocinada por Canonical Ltd., una compañía fundada por Mark Shuttleworth.

3. Inicie Startup Disk Creator

Vamos a utilizar una aplicación llamada ‘Startup Disk Creator’ para escribir la imagen ISO en su memoria USB. Esto se instala de forma predeterminada en Ubuntu y se puede iniciar de la siguiente manera:

  1. Inserte su memoria USB (seleccione ‘No hacer nada’ si se lo solicita Ubuntu)
  2. En Ubuntu 18.04 y versiones posteriores, use el icono de la parte inferior izquierda para abrir ‘Mostrar aplicaciones’
  3. En versiones anteriores de Ubuntu, use el ícono superior izquierdo para abrir el tablero
  4. Utilice el campo de búsqueda para buscar Startup Disk Creator
  5. Seleccione Startup Disk Creator de los resultados para iniciar la aplicación
Buscar Startup Disk Creator

 

Si no lo tiene instalado ,para instalar la aplicación desde consola , ejecute los siguientes comandos:

sudo apt update
sudo apt install usb-creator-gtk

Además, si está ejecutando KDE o Kubuntu en lugar de Ubuntu o Ubuntu Gnome, probablemente debería usar en usb-creator-kdelugar de usb-creator-gtk:

sudo apt update
sudo apt install usb-creator-kde

Además, si está utilizando LXQT en Lubuntu, probablemente desee utilizar usb-creator-kde.

4. Selección de ISO y USB

Cuando se inicie, Startup Disk Creator buscará los archivos ISO en su carpeta de Descargas , así como cualquier almacenamiento USB adjunto en el que pueda escribir.

Es probable que tanto su ISO de Ubuntu como el dispositivo USB correcto se hayan detectado y configurado como ‘Imagen de disco de origen’ y ‘Disco para usar’ en la ventana de la aplicación. De lo contrario, use el botón ‘Otro’ para ubicar su archivo ISO y seleccione el dispositivo USB exacto que desea usar de la lista de dispositivos.

Haga clic en Crear disco de inicio para iniciar el proceso.

Hacer dispositivo USB

5. Confirme el dispositivo USB

Antes de realizar cambios permanentes, se le pedirá que confirme que el dispositivo USB que ha elegido es correcto. Esto es importante porque todos los datos almacenados actualmente en este dispositivo se destruirán.

Después de confirmar, se iniciará el proceso de escritura y aparecerá una barra de progreso.

Progreso de escritura USB

6. Instalación completa

¡Eso es todo! Ahora tiene Ubuntu en una memoria USB, de arranque y listo para funcionar.

Si desea instalar Ubuntu, eche un vistazo a nuestro tutorial de instalación de escritorio de Ubuntu .

Escritura USB completa

Buscando mas  ayuda

Si se queda atascado, la ayuda siempre está a mano. He  aquí algunas referencias que nos pueden ayudar:

 

Anuncio publicitario

Primeros pasos con Terraform


Desde hace un tiempo se oye hablar mucho de DevOps, una fusión que combina las áreas de   Desarrollo,Operaciones y Control de calidad

Es una extensión natural de metodologías Agile y es habitual el uso de los principios CAMS, cuyas siglas vienen de:

  • Cultura relacionada con comunicación humana, procesos y herramientas
  • Automatización de procesos
  • Monitorización
  • Sharing feedback, buenas prácticas y conocimiento

En DevOps son habituales las prácticas siguientes:

  • Planificación ágil
  • Despliegue continuo (CI/CD). La subida de cambios al repositorio de código desencadena la ejecución de pruebas automatizadas que finalmente  realizan el despliegue de los cambios tras superarse las pruebas.
  • Infraestructura como código (Infrastructure as Code). Se trata del desarrollo de scripts para las tareas de despliegue y gestión de la infraestructura
  • Contenedorización. Combinada con la Infraestructura como código permite el despliegue instantáneo de aplicaciones en contenedores.
  • Microservicios. Facilita el aislamiento de problemas y maximiza la producción
  • Infraestructura cloud. Favorece la disponibilidad y la automatización.

 

En este post vamos a ver Terraform, una herramienta para construir, modificar y versionar infraestructura de forma segura y eficiente.

Terraform es una herramienta de orquestación de código abierto desarrollado por Hashicorp que nos permite definir nuestra infraestructura como código, esto quiere decir que es posible escribir en un fichero de texto la definición de nuestra infraestructura usando un lenguaje de programación declarativo y simple.

Terraform tiene soporte para una gran cantidad de proveedores de infraestructura local o en la nube, Amazon Web Services (AWS), Digital Ocean, Microsoft Azure, VMware vSphere, son ejemplos de proveedores de servicios. Puedes ver todos los proveedores soportados en la documentación de Terraform.

 

Estos proveedores de nube cuentan con sus propias herramientas de infraestructura como código, por ejemplo algunos de ellos como Amazon AWS que tiene a CloudFormation que solo soporta la infraestructura en Amazon, OpenStack tiene Heat, Azure tiene Resource Manager, pero Terraform no está cerrado a un proveedor en específico, puede trabajar con todos ellos e incluso de forma simultánea sin ningún inconveniente.

Instalación en sistema operativo Windows

La instalación de Terraform es muy sencilla. Se descarga como un binario que hay que descomprimir y luego se coloca en un directorio incluido en el PATH del sistema y. Probamos su funcionamiento desde la terminal con terraform donde a encontramos el ejecutable.

Bueno, estos son los pasos  a seguir para instalar Terraform en ambiente Windows:

Nos iremos a la  página oficial https://www.terraform.io/downloads.html.

 

Seleccionamos el sistema operativo y la arquitectura, en nuestro caso elegiremos Windows 64­bit puesto que lo instalaremos en una maquina Windows 10.

Creamos un directorio para el ejecutable de Terraform,copiamos el fichero descargado anteriormente al directorio terraform y nos situamos en el directorio terraform.,Justo entonces descomprimimos el ejecutable ( necesitaremos el winzip instlado ) en el interior del directorio creado anteriormente.

Ahora vamos a añadir la variable de entorno de Terraform para el usuario, para ello en el de cortana buscamos «Configuracion avanzada del sistema » y pinchamos en este . A continuacion pulsamos en Variables de entorno

 

En la siguiente pantalla pulsamos el botón Nueva.

Asignamos un nombre a la variable y en el botón Examinar archivo buscamos la ruta del ejecutable de Terraform.

Ahora desde una ventana de símbolo de sistema comprobamos que Terraform funciona escribiendo terraform -v.

 

NOTA:  En el caso de usar Linux seguiriamos unos pasos similares: Seleccionamos desde la pagina de descargas de Terraform el sistema operativo y la arquitectura, ( normalmente Linux 64­bit puesto si por ejemplo lo instalasemos en una maquina Debian jessie) .Creamos un directorio para los binarios de Terraform y moveremos el fichero descargado anteriormente al interior de la carpeta.Nos situamos en el directorio terraform,descomprimimos los binarios de Terraform con el comando unzip.Finalmente exportamos las variables de entorno de Terraform con el comando export PATH=/home/usuario/terraform:$PATH y comprobamos que se ha instalado bien ejecutando terraform –version.

 

Sintaxis

Hashicorp usa su propio lenguaje de configuración para la descripción de la infraestructura.

Los archivos Terraform se pueden escribir en dos formatos:

  • HashiCorp Configuration Language (HCL). El formato preferido es el HCL. Desde Terraform 0.12 está disponible HCL2 y se recomienda usar HCL2La extensión de los archivos es .tf

  • JSON. La extensión de los archivos es .tf.json

El objetivo de Terraform es declarar recursos. Todas las características del lenguaje giran en torno a hacer que la definición de recursos sea más flexible y convniente.

Los recursos puede agruparse en módulos, que crean una unidad de configuración de nivel más alto. Un recurso describe un objeto básico de infraestructura, mientras que un módulo describe un conjunto de objetos y sus relaciones para crear un sistema mayor.

 

Una configuración Terraform consta de un módulo raíz donde comienza la evaluación. El módulo puede contener módulos hijo que se van llamando unos a otros. La configuración más sencilla de módulo contendría sólo un archivo .tf (main.tf) aunque se recomienda una organización como la siguiente:

  • main.tf: Configuración de lo recursos del módulo

  • providers.tf: Proveedor de los recursos del módulo.Terraform puede crear stacks de infraestructura en varios proveedores. Por ejemplo, una configuración podría crear infraestructura en Google Cloud Platform y en OpenStack-DI.Hay gran cantidad de proveedores Terraform, tanto oficiales, mantenidos por Hashicorp, (AWS, Azure, Google Cloud Platform, Heroku, Kubernetes, MongoDB Atlas, OpenStack, VMware Cloud, VMware vSphere, …​) como de la comunidad y terceros (OpenShift, Trello, Telegram, …​).Porejemplo para openstack usarimos este archivo

     

    provider "openstack" {
      user_name   = var.openstack_user_name
      tenant_name = var.openstack_tenant_name
      password    = var.openstack_password
      auth_url    = var.openstack_auth_url
    }
  • variables.tf Variables de entrada-Las variables de entrada se usan como parámetros para los módulos. Se crean mediante bloques variable.Las variables se usan siguiendo esta sintaxis var.<variable>. POr ejemplo para openstack usariamos esta sintaxis:

     

    variable "openstack_user_name" {
        description = "The username for the Tenant."
        default  = "your-openstack-user"
    }
    
    variable "openstack_tenant_name" {
        description = "The name of the Tenant."
        default  = "your-openstack-project"
    }
    
    variable "openstack_password" {
        description = "The password for the Tenant."
        default  = "your-openstack-password"
    }
    
    variable "openstack_auth_url" {
        description = "The endpoint url to connect to OpenStack."
        default  = "http://openstack.di.ual.es:5000/v3"
    }
    
    variable "openstack_keypair" {
        description = "The keypair to be used."
        default  = "your-openstack-keypair-name"
    }



  • output.tf: Variables de salida.Sse usan para pasar valores a otros módulos o para mostrar en el CLI un resultado tras un despliegue con terraform apply.Se definen con bloques output y un identificador único. Normalmente, toman como valor una expresión (p.e. una IP generada para una instancia creada).

NOTA: Para evitar introducir datos sensibles en los archivos de configuración y evitar que queden expuestos en el sistema de control de versiones es buena práctica configurar valores sensibles en variables de entorno.

El convenio de Terraform es que definamos en la shell las variables precedidas de TF_VAR_. Por ejemplo, definimos una variable de entorno TF_VAR_PASSWORD que será accedida por Terraform como PASSWORD.

Seguiremos estos pasos:

  1. Configurar la variables en la shell

    $ export TF_VAR_PASSWORD=xxxx
  2. Cargar la variable en Terraform en el archivo variables.tf

    ...
    variable "PASSWORD" {} 
    ...
      La variable de entorno TF_VAR_PASSWORD es reconocida en Terraform como PASSWORD
  3. Usar la variable en Terraform en el el archivo providers.tf

    provider "openstack" {
      user_name   = var.openstack_user_name
      tenant_name = var.openstack_tenant_name
      password    = var.PASSWORD 
      auth_url    = var.openstack_auth_url
    }

Idenpotencia

Una característica muy interesante de Terraform es la idempotencia, así como la facilidad para aplicar cambios. Si volvemos a ejecutar un despliegue con terraform apply y no ha habido cambios en los archivos de configuración tras el último despliegue (cuyo estado quedó almacenado en el archivo .tfstate), el despliegue quedará intacto. Es decir, no se volverá a crear infraestructura repetida ni se reemplazará la infraestructura creada por una nueva si no hay cambios en los archivos de configuración.

Sin embargo, si modificamos la configuración modificando los archivos Terraform estaremos indicando un nuevo estado al que queremos llegar. En este caso, al aplicar terraform apply sí se desplegarán los cambios realizados en la configuración. Sin embargo, sólo se desplegarán los cambios, manteniendo intacta la configuración no modificada.

Estos son los pasos que se deben seguir para construir, mantener y eliminar una infraestructura con Terraform.

  1. Inicializar el directorio del proyecto Terraform (terraform init). El comando descarga todos los componentes necesarios, incluyendo módulos y plugins.

  2. Crear un plan de ejecución (terraform plan). El comando determina las acciones necesarias para alcanzar el estado deseado especificado en los archivos de configuración.

  3. Crear o modificar la infraestructura (terraform apply). Terraform es idempotente. Al usar este comando sólo se ejecutan los cambios que se hayan realizado en los archivos de configuración sin volver a crear lo que ya existe y no se ha modificado. Para esto se utilizan los archivos de estado.

  4. Mostrar las variables de salida de un despliegue (terraform output).

  5. Eliminar la infraestructura (terraform destroy). Se usa para eliminar la infraestructura creada.

Como lanzar terraform

Dentro de cada carpeta de ejemplos ejecuta:

$ terraform init
$ terraform apply

Tras unos instantes se mostrarán las IPs asignadas a las máquinas virtuales creadas y aprovisionadas.

El comandoterraform init  creará una carpeta .terraform con en plugin de OpenStack instalado y disponible para ser usado en el proyecto.

 

Ejemplos  para probar   todo esto que hemos visto  tanto en Open Stack como Google Cloud Platform se pueden encontar en  https://github.com/ualmtorres/terraform-examples

 

 

¿Meadow es el sucesor de Netduino?


La compañia Wildernesss Labs tras comprar  en 2016   Netduino y trabajar en secreto dos años  en  2018,  sacaron vía crowfounding  (en Kickstarter)  su proyecto estrella: Meadow , una  plataforma IoT estándar de .NET de pila completa   que  intenta combinar lo mejor de todos los mundos,  pues tiene el poder de RaspberryPi,  el factor de computación de un Arduino y la capacidad de administración de una aplicación móvil. ¿Y la mejor parte? funciona con .NET Standard completo en hardware de IoT real

Existe una brecha cada vez mayor entre los desarrolladores y las empresas que desean construir hardware conectado y la capacidad de hacerlo. Meadow intenta  cerrar esa brecha y permite a los diez millones de desarrolladores de .NET crear experiencias de hardware realmente interesantes con la misma facilidad con la que crean aplicaciones web o móviles en la actualidad.

Meadow  permite a los desarrolladores ejecutar aplicaciones completas de .NET Standard 2.x en un microcontrolador e incluye un conjunto de controladores de hardware y API en la parte superior que hace que el desarrollo de hardware sea plug and play.   Sin embargo, Meadow no se limita a los desarrolladores .Net, intentando  abrir el desarrollo de hardware a desarrolladores de todo tipo, poniendo especialmente foco en el ambiente empresarial .

Meadow IoT Kickstarter

 

Microordenador vs Microcontrolador: las Raspberry Pis son ordenadores completos  y los Ardunios son pequeños dispositivos (en su mayoría) de una sola tarea.  Es quizás  una exageración tener Ubuntu en un ordenador solo para encender un dispositivo así que por lo general, es deseable  que los dispositivos de IoT ocupen desde el punto de vista del  hardware como del sw  lo menos posible a si que  puede ser una buena  idea que  nuestro core de IoT corra  un sistema  operativo mas estable en cuanto a cortes o interrupciones  ( como lo haría en un microcontrolador pero con muchísima mas potencia del calculo).

Meadow  en principio  ha sido diseñado para ejecutarse en una variedad de microcontroladores, y la primera placa se basa en la MCU STM32F7 (insignia de STMicroelectronics) con coprocesador ESP-32 e   implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado, todo ello en el factor de forma Adafruit Feather.

Lo interesante pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo. Es realmente un gran diseño   basada en  MCU STM32F7 en un bajísimo factor de forma  y con  casi tantos puertos GPIO (25) tanto  analógicos como digitales como estamos acostumbrados en Arduino o Netduino.

En el sitio de  Meadow Kickstarter dicen que se está ejecutando en Mono Runtime y admite la API .NET Standard 2.0 lo  cual  significa que probablemente ya sepa cómo programarlo  pues  la mayoría de las bibliotecas de NuGet son compatibles con .NET Standard, por lo que una gran cantidad de software de código abierto debería «simplemente funcionar» en cualquier solución que admita .NET Standard.

En términos de NanoFramework y TinyCLR; si bien esos son grandes esfuerzos, son significativamente diferentes a Meadow. Ambos esfuerzos se basan en .NET MicroFramework. Como tal, no son compatibles con .NET completo. No hay genéricos en ninguno de ellos, por ejemplo, ni hay soporte para las bibliotecas estándar .NET. 

 

Funciones empresariales

Meadow  incluye soporte para actualizaciones seguras por aire (OTA), lo que permite que las instalaciones de campo de IoT se gestionen de forma remota; una característica clave para las implementaciones empresariales de IoT.

Meadow abrirá todo un nuevo conjunto de posibilidades para el desarrollo de cosas conectadas. Y como funciona con un dispositivo de  ultrabaja energía, podrá colocarlo en todas partes. Las instalaciones de baterías, energía solar e incluso energía a través de Ethernet (POE) se convertirán en algo común, lo que significa que para muchos de estos dispositivos, el acceso físico será limitado, por lo que la administración centralizada es un requisito absoluto.

Además de las actualizaciones de OTA, Wilderness Labs tiene planes para el monitoreo de campo básico, informes de fallas y análisis para asegurarse de que los dispositivos Meadow funcionen in situ.

Y debido a que Meadow usa .NET, las empresas pueden usar equipos existentes e inversiones de código para construir IoT, en lugar de tener que contratar nuevos desarrolladores que se especialicen en hardware. Es una propuesta de valor similar a la que sus creadores hicieron en Xamarin; había desarrolladores existentes que querían hacer dispositivos móviles, así como muchas inversiones existentes en código empresarial los cuales fueron habilitados en una plataforma completamente nueva ( Microsoft adquirió Xamarin por más de 400 millones de dólares, en gran parte por su valor en el mercado empresarial).

Seguridad 

Otro aspecto importante del aspecto Meadow se intenta centrar en la seguridad. Meadow presenta consideraciones de seguridad básicas, desde la seguridad a nivel de hardware y las actualizaciones seguras, pero Wilderness Labs también se compromete a enviar componentes de software destinados a facilitar la seguridad desde una perspectiva de UX. No es suficiente tener actualizaciones seguras por aire (OTA ) , firmware firmado, revocación de certificados terciarios, etc., pueso la seguridad debe llegar hasta el final.

El pirateo del bot Mirai funcionó porque muchas de estas cámaras de seguridad conectadas tenían nombres de usuario y contraseñas predeterminados, asi  que no es una cuestión   banal.

En este nuevo enfoque enviaran componentes que puede ingresar y brindar una experiencia de usuario fantástica y fácil para cambiar esas cosas, así como orientación y educación para el desarrollador para ayudar a la gente a comprender cómo aprovechar las funciones de seguridad en la pila Meadow.

Inteligencia artificial en IoT

Recientemente, Pete Warden, director de TensorFlow en Google, escribió que la mayor parte de la inteligencia artificial se realizará en microcontroladores , y Meadow es la primera plataforma de desarrollo de microcontroladores que cumple con esa promesa, permitiendo ejecutar visión artificial a través de TensorFlow y otros paquetes de inteligencia artificial de alto nivel localmente en chip.

Se espera que la IA desempeñe un papel clave en IoT con la visión artificial y otros algoritmos de aprendizaje profundo que se ejecutan en imágenes y otros datos de sensores en la fuente para agilizar la recopilación de datos y permitir que los dispositivos tomen decisiones en el campo. Sin embargo, Meadow es la primera plataforma de microcontroladores de IoT que se enfoca específicamente en casos de uso de IA.

Mercado emergente

Se espera que el mercado global de IoT supere los USD $ 1 billón / año para 2025 , y se prevé que gran parte de ese dinero se gaste en herramientas, plataformas y servicios para desarrolladores. Y ese mercado está listo para la disrupción, mientras que los microcontroladores están preparados para convertirse en la forma dominante de computación , con un estimado de 75B de ellos in situ y conectados para 2025, casi todo el desarrollo de microcontroladores hoy en día se realiza en lenguajes de bajo nivel como C / C ++ , y las herramientas no han cambiado mucho desde la década de 1980.

Una de las cosas que ha frenado a IoT hasta ahora es la barrera de entrada; existe una variedad fantástica de nuevos dispositivos informáticos que pueden hacer todo lo que puede hacer una computadora en miniatura y más; sólo cuestan unos pocos dólares, pueden funcionar con una batería de tipo botón durante años y, sin embargo, programarlos es un trabajo duro durante los años 80 ”, comentó Bryan.

Diferencias con Neduino

Hardware

Si bien Meadow está diseñado para ejecutarse en una variedad de microcontroladores de 32 bits, su primera placa se basa en el chip STM32F7 de STMicroelectronic con 32 MB de almacenamiento flash y 16 MB de RAM , el sucesor del chip STM32F4 muy popular que se encuentra en varias placas de desarrollo de microcontroladores, incluido Netduino. La serie F7 es dos veces más poderosa pero usa la mitad de la energía de los chips F4 e incluye una serie de características interesantes, como un códec JPEG integrado para manejar transmisiones de video y cámara, así como un acelerador de gráficos 2D para proporcionar UX en un variedad de pantallas.

También están trabajando en una placa basada en ESP32 que traerá características y conectividad de alta gama a un mercado de bajo precio. Esperaremos con ansias el día en que pueda incorporar una placa Meadow basada en ESP32 en productos por menos de $ 10.

Una gran diferencia con Netduino es  que la placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather  ( claramente diferente  a Natduino que se diseño para tener el mismo factor de forma que Arduino ). Además incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar. Aisimismo por diseño, el F7 también está destinado a ser integrable por defecto.

Lo interesante pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo. Es realmente un gran diseño   basada en  MCU STM32F7 con coprocesador ESP-32 e   implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado  en un bajísimo factor de forma  y con  casi tantos puertos GPIO (25) tanto  analógicos como digitales como estamos acostumbrados en Arduino o Netduino.

Software

Meadow ejecuta un puerto personalizado de Mono sobre un NuttX muy modificado (un µRTOS). De ahí proviene el  soporte estándar .NET. No se basa en Netduino de ninguna manera. Es una pieza de tecnología completamente nueva que han desarrollando desde cero durante los últimos dos años. Existe alguna relación con el  proyecto Netduino.Foundation  pues  han portado Netduino.Foundationa Meadow, y obteniendo todo el atractivo de la última versión de C # y .NET completo para crear una API aún mejor para todos esos controladores.

El proyecto se inició porque .NETMF había desaparecido y no había ningún progreso real allí ni la comunidad pudo participar realmente en él. Es cierto que se inició como un spin-off de .NETMF pero, aparte del motor de ejecución y una buena parte de mscorlib, todo el  código se escribió desde cero.

Han mejorado muchas cosas,  actualizándolo en lo que respecta al sistema de compilación, Wilderness Labs lo ha hecho verdaderamente portátil para los RTOS de CMSIS,  han reelaborado el motor de depuración y han agregado varios objetivos de referencia para MCU con diferentes conjuntos de funciones.

TODO el código es completamente de código abierto ( como el de Netduino ) . Desde el código nativo, a las bibliotecas de clases hasta la extensión de Visual Studio. Dos años de trabajo pueden parecer que el proyecto todavía está en él ‘Es una infancia, pero están orgullosos de que esto se ejecute en SoC SMT32 (de la serie L0 a H7) y, sí, también en ESP32. Hay NuGets funcionales y totalmente utilizables para GPIO, I2C, SPI, Serial, ADC, PWM, Wi-Fi, Networking (con soporte SSL / TLS) y otros.

Es cierto que no admiten bibliotecas .NET completas. En su lugar, han seguido prácticamente la API de .NET UWP para que se pueda reutilizar una gran cantidad de código sin demasiado trabajo pues en el   mundo del IOT cada línea de código importa, se debe considerar cada ciclo de CPU, cada mA que el sistema drena de la batería y así sucesivamente: es decir todo lo que podamos hacer más eficiente es importante.

Conclusión

Tras dos años en el mercado Meadow  es una plataforma  con mucho futuro  pero con mucho  recorrido  para crecer

Es como vemos bastante interesante, pero hay algunas cosas nos  impiden retroceder:

PROS

 

  • La  placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather e incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar .Ademas por diseño, el F7 también está destinado a ser integrable por defecto. Lo interesantes pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo.  .
  • Hay muchas variables en este sistema. Si podemos elegir entre tener genéricos o código en C # usando una herramienta increíble como Visual Studio, no lo deberíamos pensar dos veces y lo  ideal  seria optar por lo último. En general, es genial que haya más opciones disponibles que permitan a los desarrolladores de .NET codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito
  • También hay cierta fragmentación en el espacio de .NET IoT, lo que significa que tenemos varias soluciones pequeñas, pero ninguna que sea utilizada por muchos desarrolladores. Un esfuerzo común, dirigido por .NET Foundation, habría sido un mejor enfoque.  Nano Framework está en el camino correcto, pero  todavía está en su infancia. Al final, el no compromiso de Microsoft con IoT / .NET Micro Framework es ahora un gran problema, ya que habría sido la plataforma perfecta y natural para el desarrollo de IoT basado en Azure ;

CONTRAS

  • Con 50$  al cambio , es extremadamente cara en comparación con Arduino, Raspberry Pi y otras ofertas similares.
  • Hay un esfuerzo para portar .NET a varios chips SDT y ESP32: https://nanoframework.net/ .  pues  no olvidemos  que se puede obtener una placa de desarrollo ESP32 por menos de 10 $ ( y menos) 
  • Es bueno recordar el fracaso del AGent smartwatch  también en quickstarter  patrocinada por Secret Labs ( los fundadores de Netduino). La idea era muy buena pues ya en 2013  este reloj  pretendía ser un reloj  inteligente con tinta electronica  y con el soporte .Net. Este  proyecto  desgraciadamente  precipito la caída de Secrets LAbs y con ello la de Netduino que fue comprado por Wilderness Labs. 

 

 

 

 

 

 

Fundada en 2016, Wilderness Labs es el fabricante de placas Netduino y el creador de Meadow. Para obtener más información, puede encontrar su blog en blog.wildernesslabs.co .

exit status 1 using typedef-name ‘fpos_t’ after ‘struct’


Si está viendo  este página probablemente se deba que esta intentando actualizar el firmware Marlin  de su impresora 3d  desde el IDE de Arduino  y no lo logra.

Marlin es un firmware de código abierto para la familia RepRap de replicar prototipos rápidos, popularmente conocidos como «impresoras 3D». Se deriva de Sprinter y grbl,y se convirtió en un proyecto de código abierto independiente el 12 de agosto de 2011 con su lanzamiento de Github. Marlin tiene licencia bajo la GPLv3 y es gratis para todas las aplicaciones.

Desde el principio Marlin fue construido por y para los entusiastas de RepRap para ser un controlador de impresora sencillo, confiable y adaptable que «simplemente funciona». Como testimonio de su calidad, Marlin es utilizado por varias impresoras 3D comerciales respetadas. Ultimaker, Printrbot, AlephObjects (Lulzbot) y Prusa Research son solo algunos de los vendedores que envían una variante de Marlin. Marlin también es capaz de conducir CNC y grabadores láser.

Una clave de la popularidad de Marlin es que se ejecuta en microcontroladores Atmel AVR de 8 bits de bajo costo – Marlin 2.x ha añadido soporte para placas de 32 bits. Estos chips están en el centro de la popular plataforma de código abierto Arduino/Genuino. Las plataformas de referencia para Marlin es un Arduino Mega2560 con RAMPS 1.4 y Re-Arm con rampas 1.4.

Como producto comunitario, Marlin tiene como objetivo ser adaptable a tantas placas y configuraciones como sea posible  intentando ser configurable, personalizable, extensible y económico tanto para aficionados como para proveedores. Una construcción Marlin puede ser muy pequeña, para su uso en una impresora sin cabeza con solo hardware modesto. Las características se habilitan según sea necesario para adaptar Marlin a los componentes añadidos.

 

Marlin Firmware se ejecuta en la placa principal de la impresora 3D, gestionando todas las actividades en tiempo real de la máquina. Coordina los calentadores, pasos, sensores, luces, pantalla LCD, botones y todo lo demás involucrado en el proceso de impresión 3D.

Marlin implementa un proceso de fabricación aditiva llamado Fused Deposition Modeling (FDM), también conocido como Fused Filament Fabrication (FFF). En este proceso, un motor empuja el filamento de plástico a través de una boquilla caliente que funde y extruye el material mientras la boquilla se mueve bajo control informático. Después de varios minutos (o muchas horas) de colocar finas capas de plástico, el resultado es un objeto físico.

El lenguaje de control para Marlin es un derivado del código G. Los comandos de código G le dicen a una máquina que haga cosas simples como «establecer el calentador de 1 a 180o» o «mover a XY a la velocidad F.» Para imprimir un modelo con Marlin, debe convertirse en código G utilizando un programa llamado «slicer». Dado que cada impresora es diferente, no encontrará archivos de código G para descargar; tendrás que cortarlos tú mismo.

A medida que Marlin recibe comandos de movimiento, los agrega a una cola de movimiento para ser ejecutados en la orden recibida. La «interrupción paso a paso» procesa la cola, convirtiendo los movimientos lineales en pulsos electrónicos con precisión en los motores paso a paso. Incluso a velocidades modestas Marlin necesita generar miles de pulsos paso a paso cada segundo. (p. ej., 80 pasos por mm * 50 mm/s a 4000 pasos por segundo!) Dado que la velocidad de la CPU limita la velocidad con la que la máquina puede moverse, ¡siempre estamos buscando nuevas formas de optimizar la interrupción paso a paso!

Los calentadores y sensores se gestionan en una segunda interrupción que se ejecuta a una velocidad mucho más lenta, mientras que el bucle principal controla el procesamiento de comandos, la actualización de la pantalla y los eventos del controlador. Por razones de seguridad, Marlin realmente se reiniciará si la CPU se sobrecarga demasiado para leer los sensores.

What is Marlin?

 

Instalación de Marlin en su impresora

Normalmente todas las impresoras 3d ya llevan el firmware instalado ( incluso las que vienen en kit )   pero   conviene estar al tanto de las actualizaciones   de  este   ( en cuyo caso habar  que seguir el procedimiento siguiente)  o puede que sea  necesario cambiarlo para añadir alguna funcionalidad extra como por ejemplo la autonivelación o el cambio de idioma

En todos estos casos normalmente estos son los pasos que se siguen:  

1. Instale Arduino en su PC.
Si su impresora es A10/A10M/A20/A20M, utilice Arduino 1.8.5 para finalizar la  carga; Si es Prusa I3 Pro B/W/X/C, por favor vaya por Arduino 1.0.1!! De lo contrario, es posible que reciba algunos errores durante la verificación.

Descargue Arduino 1.0.1 o Arduino 1.8.5  aquí: https://www.arduino.cc/en/Main/OldSoftw … s-anterior

Arduino 1.0.1.jpg
Arduino 1.8.5.jpg
Arduino 1.8.5.jpg (27.86 KiB) Visto 60177 veces


2. Conecte la impresora al PC con el cable USB.
3. Descomprima el  firmware.  Aquí  tomaremos el firmware para el extrusor dual I3 pro C, por  ejemplo el proceso para la serie A10/A20 es bastante similar, excepto el Arduino en una versión diferente.   Puede descargar el de su impresora aquí:
http://www.geeetech.com/forum/viewtopic … 10&t-17046

02.jpg


4. Haga doble clic en el Marlin.ino, luego abrirá todo el firmware en el arduino.

03.jpg
04.jpg

5. Seleccione el puerto Com adecuado.

06.jpg
06.jpg (205.84 KiB) Viewed 189584 times


6. En Herramientas, en Board, seleccione Mega 2560 .

05.jpg


7. Finalmente haga clic en la flecha para compilar y cargar el firmware en su impresora.

07.jpg

 

Bien   es cierto que debería de compilar el sw  y nuestra impresora ya si estaría actualizada, pero lamentablemente  no siempre es así,  y desgraciadamente puede que  nos lance un error de que no se puede compilar  .

 

 

Por ejemplo en el caso de una Geetech Prusa i 3 W este es el mensaje que lanza el IDE de Arduino al intentar verificar el firmware: 

 

Arduino:1.8.10 (Windows 10), Tarjeta:»Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)»

In file included from sketch\Marlin.h:23:0, from sketch\ConfigurationStore.cpp:1:

sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1   sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN 28  In file included from sketch\Marlin.h:23:0,  from sketch\BlinkM.cpp:5:

sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\thermistortables.h:4, from sketch\Configuration.h:792, from f:\Users\Carlos\Documents\Arduino\I3 ProW GT2560A+ with 3dtouch (1)\Marlin\Marlin.ino:33:sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined #define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0,  from sketch\Marlin_main.cpp:30: sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\MarlinSerial.cpp:23:sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\Sd2Card.cpp:20:

sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 sketch\Marlin_main.cpp:2667:36: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] LCD_MESSAGEPGM(MACHINE_NAME» «MSG_OFF».»); ^In file included from sketch\Marlin.h:23:0,  from sketch\SdBaseFile.cpp:21:sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\SdFile.h:27:0, from sketch\cardreader.h:8, from sketch\Marlin_main.cpp:44:SdBaseFile.h:38:8: error: using typedef-name ‘fpos_t’ after ‘struct’ struct fpos_t { ^~~~~~  In file included from sketch\Marlin.h:10:0,  from sketch\Marlin_main.cpp:30:c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here extension typedef long long fpos_t; ^~~~~~ sketch\Marlin_main.cpp: In function ‘void set_bed_level_equation_lsq(double*)’:

sketch\Marlin_main.cpp:998:36: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]  planeNormal.debug(«planeNormal»); ^

In file included from sketch\SdBaseFile.cpp:24:0:SdBaseFile.h:38:8: error: using typedef-name ‘fpos_t’ after ‘struct’ struct fpos_t {  ^~~~~~

In file included from sketch\Marlin.h:10:0,  from sketch\SdBaseFile.cpp:21:c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here extension typedef long long fpos_t; ^~~~~~

sketch\SdBaseFile.cpp: In member function ‘void SdBaseFile::getpos(fpos_t*)’:SdBaseFile.cpp:298:8: error: request for member ‘position’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ pos->position = curPosition_; ^~~~~~~~

SdBaseFile.cpp:299:8: error: request for member ‘cluster’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ pos->cluster = curCluster_; ^~~~~~~

sketch\SdBaseFile.cpp: In member function ‘void SdBaseFile::setpos(fpos_t*)‘:

SdBaseFile.cpp:1496:23: error: request for member ‘position’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’  curPosition_ = pos->position; ^~~~~~~~

SdBaseFile.cpp:1497:22: error: request for member ‘cluster’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ curCluster_ = pos->cluster; ^~~~~~~

In file included from sketch\Marlin.h:23:0, from sketch\SdFatUtil.cpp:20:

sketch\pins.h:2956:0: warning: «X_MAX_PIN» redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: «Y_MAX_PIN» redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 Se encontraron varias bibliotecas para «LiquidCrystal.h»


Usado: C:\Program
exit status 1
using typedef-name ‘fpos_t’ after ‘struct’

Este informe podría contener más información con «Mostrar salida detallada durante la compilación» opción habilitada en Archivo -> Preferencias.

Bueno   , este error nos impide  actualizar el firmarware Marlin de nuestra impresora, pero  en las siguientes líneas veremos que lograr que compile el sw Marlin para nuestra impresora en particular puede ser un juego de niños

 

 

Tip1 : todo lo que necesita hacer es cambiar   todas las ocurrencias fpos_t a filepos_t

 

Para solucionar el problema  de  compilación, anterior sólo tiene que abrir ide Arduino con el firmware y hacer una búsqueda global y reemplazar.

Esto se hace haciendo Ctrl-F y selecciona la casilla de búsqueda de todas las pestañas. A continuación, buscar y reemplazar  fpos_t  por  filepos_t. Volver a compilar y estará todo listo. 

Se trata de un cambio en las nuevas versiones del software de Arduino IDE que está haciendo esto. Las versiones más recientes del firmware del Marlin tienen que la estructura  filepos_t   se llama así ,lo  que  no tendrá ningún efecto negativo en el firmware

sí que la raíz del problema con las nuevas versiones de Arduino es que ya definen un objeto denominado fpos_t en uno de los archivos globales instaladas con Arduino llamado stdio.h. Destacar en el el fichero stdio.h  ha sido un problema con muchos usuarios en línea de cambiar al nuevo Arduino y la compilación de los firmwares más antiguas basadas Marlin. Es por ello que las nuevas versiones de Marlin han pasado a utilizar filepos_t para el nombre de estructura en su lugar. Si se realiza  ese cambio a sus versiones de firmware publicadas, a continuación nadie más tendría los problemas que tenía con cargar el firmware original pero bueno sabiéndolo podemos poner el remedio.  

 

 

 

Tip 2

Si la solución  anterior  no le fue suficiente   alguien informó recientemente el mismo problema con Marlin y así  ha  solucionado el  problema

  • Herramientas > Tablero > Administrador de placas… > Arduino AVR Boards(haga clic en él) > seleccione 1.6.11 en el menú «Seleccionar versión» > Instalar
  • Una vez completada la instalación, haga clic en el botón «Cerrar»



El problema es causado por la nueva versión del compilador incluida con Arduino AVR Boards 1.6.12 y más tarde, es más exigente con el código malo que alguien escribió. Tendrá sin necesidad de actualizar a cualquier versión de Arduino AVR Boards por encima de 1.6.11 hasta que alguien solucione el problema en el código Marlin.
¿Está utilizando la última versión del firmware real de Marlin o es alguna versión anterior o una versión modificada no  estándar?

Cámara trasera inteligente con Raspberry Pi. Parte 1


El término «Coche inteligente» puede tener miles de significados diferentes dependiendo a quién le preguntemos., así que empecemos con una definición   modesta  de algunos componentes que podemos añadir :

  • Información básica sobre el coche, como la marcha engranada, eficiencia de combustible, horas de conducción ,etc.
  • Ayudas a la conducción de tipo ADAS , siendo   los mas comunes la puesta en marcha del  coche delantero, acceso involuntario a línea de separación de carril o aviso de colisión por vehículo delantero que circula  muy próximo
  • Cámara trasera inteligente que avise si un objeto está demasiado cercano
  • etc

Del primer punto lo hemos comentado en diferentes post , explicando que para automóviles de unos 10 años, es decir que cuentan con interfaz ODB2,  es relativamente simple añadir un HUD con toda esta información  con  un HUD conectado por ODB2

Resumidamente los sistemas ADAS  de ayuda  a  la conducción  mas usuales son las siguientes:

  • FCWS   del ingles  Forward Colission Warning Sytem (advertencia de colisión delantera) ayuda al conductor a mantenerse a una distancia segura del vehículo delantero y alerta a los conductores de una colisión inminente con advertencias visuales y audibles.Este sistema permite al dispositivo detectar cuando no se mantiene una distancia segura entre su vehículo y el vehículo delante de usted. El dispositivo determinará la velocidad de su vehículo calculando una distancia estimada de siguiente segura basada en su velocidad.Normalmente para que esta  función pueda estar habilitada se  debe estar  viajando a más de 48KM/H ( a una velocidad de menos de 32 KM/H, se suele  desactivar la función). Precisamente por esta limitacion el FCWS no puede detectar los vehículos que están  alejados más de 40m  o más cerca de 5m.

fcw.png

  • LDWS  del inglés Lane Departure Warning  System  ( SISTEMA DE  ADVERTENCIA DE SALIDA DE CARRIL) monitorea las marcas del carril y avisa al conductor con advertencias visuales y audibles cuando ocurre una salida involuntaria del carril sin la notificación de la señal de giro.Es un mecanismo diseñado para advertir al conductor cuando el vehículo empieza a moverse fuera de su carril (salvo que una señal de la vuelta en esa dirección) en las autopistas y carreteras de la zona. Este sistema está diseñado para minimizar los accidentes por abordar las principales causas de colisiones: error del conductor , distracción y somnolencia.

ldw

  • HMW( VIGILANCIA Y ADVERTENCIA DEL AVANCE DE PISTA)- Mide la distancia al vehículo que está por delante (“headway”) en segundos. Ayuda al conductor a mantener una distancia segura de conducción. Alerta al conductor al entrar en una zona predefinida de “avance peligroso”

.hmw.png

  • FVSA (ALARMA DE INICIO DEL VEHÍCULO DELANTERO ) Notifica al conductor si el vehículo delantero comienza a avanzar en el estado parado completo y el coche del conductor no se mueve en 2 segundos.

fvsa

Casi todas estas ayudas ADAS  están implementadas  en  numerosas cámaras  disponibles en el mercado como vismo en este post destacando por voz propia  el modelo Dash de Garmin

Respecto al ultimo punto de cámaras traseras  , hay muchos kits para  añadir una cámara  trasera a  nuestro vehículos usando una conexión analógica de video compuesto , lo cual se traduce en  que la mayoría de ellas requieren hacer modificaciones al coche  ,por  ejemplo para ubicar la cámara en el porta-matriculas  , o fijar la pantalla especifica   de modo que no siempre en sencilla su instalación .Además las cámaras traseras comentadas requieren una  fuente de alimentación externa alimentándose con los  cables de las luces de atrás de su coche para que automáticamente se enciendan cuando el coche está en marcha lo cual tampoco le  gusta a muchas personas .

Dado que el mercado no ofrece por  el momento soluciones mas avanzadas una idea es usar la Raspberry Pi pues es la plataforma perfecta  porque básicamente es un mini ordenador con un montón de entradas y salidas.

Al conectar una cámara a la Pi, se puede utilizar prácticamente cualquier webcam USB genérica, o  por supuesto  mejor puede usar una  Cámara Pi conectada al conector DSI pues estas ofrecen una mayor calidad , versatilidad y  no  requiere una fuente de alimentación separada (pero asegúrese de tener un montón de cable para ir a la parte posterior del coche)

Solución con Raspberry Pi

Gracias a una Raspberry Pi  por medio del procesamiento de imágenes en efecto  podemos  hacer más inteligente nuestro vehículo y añadir  nuevas funcionalidades

Para esta idea  podemos  usar  los siguientes componentes:

 

Conexión del módulo de cámara

El modulo de cámara de Pi  tiene un mayor rendimiento que una cámara USB  por lo que lo ideal es usar una cámara del tipo compatibles con Raspberry Pi  (se puede comprar por unos 15€ en Amazon) 

No es  problema  la distancia pues con un cable plano  de 200 cm suele ser suficiente para llevar la cámara  hasta la  posición de conducción (puede comprarlo   aqui en Amazon por unos 7,29€ )

Se puede pues llevar el cable plano al l frente del coche y luego conectado a una pantalla de táctil de 7″ de modo que  la Pi y la pantalla táctil pueden ser alimentados por el adaptador USB en el coche.

Estos  son los pasos para instalar la cámara especifica para su uso , con la Raspberry Pi 

    • Localice el puerto de la cámara y conecte la cámara:Connect the camera
    • Poner en marcha la Raspberry Pi 
    • Abra la Herramienta de configuración de frambuesa Pi desde el menú principal:Raspberry Pi Configuration Tool
    • Asegúrese de que está activado el software de la cámara:Camera software enabled
    • Si no está activado, habilítelo y reinicie su Pi para comenzar. Asimismo si va utilizar una pantalla táctil también necesitara activar I2C  y SPI

Es decir resumidamente;  con la Raspberry Pi apagada, debe conectar el módulo de la cámara al puerto de la cámara de la Raspberry Pi,ahora encienda el Pi  y asegúrese de que se activa el software.

Conexión de un pantalla táctil(opcional)

Existen pantallas TFT para Raspberry Pi con  resolución de 320×240 (16-bits) que además son táctiles con una pantalla resistiva. Se entregan montadas y suelen ser  compatible con los modelos Raspberry Pi Model A+, B+ y Pi 2  disponiendo  además de de un conector de 40 pines para los GPIO.

La pantalla y el digitalizador   utilizan los pines I2C (SDA y SCL), SPI (SCK, MOSI, MISO, CE0) y los pines GPIO #24 y #25. Todos los demás pines GPIO no se utilizan así que podrá conectar más cosas como sensores, LEDs etc. Algunos modelos disponen deposiciones para pulsadores miniatura (no incluidos) por si quiere hacer algún otro tipo de interfaz de usuario.

Puede utilizarla utilizar la librería PyGame u otra librería SDL para dibujar directamente en el frame buffer y hacer interfaces propios.

Tenga en cuenta que para que funcione debe tener activado el I2C en tu Pi o se quedará en blanco. Si utiliza la imagen de Adafruit funcionará sin problema, sino puedes ver su tutorial para ver cómo hacerla funcionar.

La conexión de este tipo de pantallas suele ser por el  propio conector de 25 pines  y por hdmi con un adaptador

Respecto al sw, estos son los pasos  que puede  seguir;

!Ojo el conector plano de la pantalla pues es MUY frágil y debe manejarse con cuidado.!

Montaje final

Una vez montada  la pantalla y la cámara , encender el coche, la Pi y la pantalla . Para ver la camara   de la Pi, abra el terminal y ejecute simplemente  el  siguiente  script:

raspivid -t 0

o

raspivid -t 0 --mode 7

Después de entrar esto ,   la imagen captada por la cámara debería aparecer  en pantalla  completa , pero  !ojo !  no lo veremos  si estamos conectado via VNC!, es decir ,solo si estamos conectados a la propia  Raspberry Pi .

Lo bueno de a Raspberry Pi  es que se puede mejorar  esta forma básica , y tal vez incluso establecer un sistema de alerta si un objeto esta   demasiado cerca , así que, ! vamos a trabajar en ese lado!

 

DETECCIÓN DE OBJETOS

Cuando se trata de aplicaciones de  cámaras de seguridad comerciales, generalmente hay al menos dos versiones  .La primera utiliza una superposición de una imagen estática con gamas de color para que visualmente puede determinarse cuánto de  cerca está un objeto. El segundo método utilizara una cámara junto con sw  que puede detectar un objeto qué tan cerca esta al coche y luego avisa cuando algo está demasiado cerca
Veamos en este post en primer lugar le método de overlay, el cual por cierto es el mas usado en los implementaciones de cámaras traseras de coches actuales.

 

 

Cámara trasera con Raspberry PI para coche basada en Android


En efecto  simplemente podemos  usar una Raspberry Pi como retrovisor o cámara trasera  en conjunción con su smartphone o tablet gracias a la aplicación  RearPi.

Esta app disponible en Google Play  gratuita  y sin anuncios se conecta a su Raspberry  Pi a través de SSH y activa bien  una cámara usb  externa  o bien    la  cámara nativa para Raspberry Pi con interfaz CSI  un enlace de mayor ancho de banda que transporta los datos de píxeles de la cámara al procesador.  .

Disponiendo de la Rasberry con una cámara,   basta  con conectarse  a esta via ssh (nombre de IP-Adress/Login y contraseña), iniciar la cámara en el arranque de la aplicación o con el botón «Abrir» y  pulsar  el  modo de pantalla completa  para disponer de la visión trasera desde la app de un modo  muy nítido  . Al continuar el trayecto si ya no se requiere  basta cerrar la cámara con el botón «EXIT» para disponer nuestro smartphone  para reproducir nuestra lista de música favorita o que nos guié a través de alguna app  de navegación

Imagen

Razones para usar una Raspberry Pi como cámara trasera

RearPi es una sencilla aplicación para Android disponible gratuitamente   SIN PUBLICIDAD en en Google Play  que nos va a permitir  visualizar y grabar señales de vídeo transmitidas por una Raspberry Pi o similar   a través de WiFi , por lo que es utilizable para casi todos los coches para transmitir señales  de vídeo procedentes de una cámara frontal  o  de una cámara trasera hacia un terminal Android.

Puede que piense que existen en el mercado soluciones especificas de cámaras traseras para coche  a un precio  similar  a una Raspberry Pi   sobre todo si pensamos en que necesitamos adquirir el hardware especifico que vamos a describir, lo cual  ciertamente podría ser parcialmente cierto , pero  esta afirmación se desmorona si  podemos usar elementos que ya tengamos   pero  sobre todo  , si deseamos  usar  nuestro smartphone o incluso un  terminal obsoleto  que tengamos  para visualizar la señal , lo cual  es un punto a su favor de  esta solución  si lo comparamos con las pequeñísimas o antiestéticas  pantallas de visualización  que  ofrecen los kits de cámaras traseras  (piénsese que  solemos llevar  siempre  un smartphone y además puede usarse para otras usos)

Incluso en otros vehículos (por ejemplo  para las caravanas)  pueden  usarse para ofrecer la visión delantera o trasera por  múltiples pantallas de  forma inalámbrica

Algunas características de esta aplicación:
  • Grabación cámara  (.. 15 min 30 min 45 min)
  • Bucle de grabación (.. 15 min 30 min 45 min)
  • Opción para establecer la calidad de grabación
  • Reproductor multimedia integrado para ver grabaciones
  • Modo de pantalla completa  y sin publicidad
  •  Documentación Integrada

En realidad  como podemos intuir , esta  app  se conecta a su Raspberry Pi ( o  cualquier placa basada en Linux  )  por ssh   mediante   IP-Dirección , login y contraseña mediante WIFI dentro de la misma red , y , una vez conectada se puede  iniciar la cámara en la   aplicación o con el botón «OPEN» ,pudiéndose   cerrar la cámara con el botón «SALIR»

Para utilizar su Frambuesa Pi con RearPi como cámara y esta aplicación  rearPi    tendremos   que seguir unos pocos sencillos   pasos en la Raspberry  PI, pero antes veamos  el hardware necesario

Hardware necesario

¿Qué necesita para obtener una señal de video?

  • Una Raspberry Pi o un dispositivo que ejecute una distribución de Linux con un sistema operativo preinstalado y una trabajando la conexión SSH.
  • Un dongle WiFi como el «Edimax EW-7811»
  • Una cámara USB o cámara web como Logitech C270
  • Un cable de carga micro USB
  • Un cargador de coche como el «Anker» PowerDrive2 » Entrada: DC 12 / 24V Salida: 5V / 4.8A 2.4 A por puerto. Por favor, asegúrese de que su Raspberry  se pone suficiente potencia y el voltaje correcto. La salida de su cargador de coche debería tener 5V y la capacidad actual recomendada para su modelo está escrito en la lista siguiente:

raspberrrypower.PNG

Instalación de mjpg streamer

Para que su Raspberry esté lista para transmitir video via tcp/ip a traves de una conexión wifi, debe seguir estos pasos:

1. Abra un terminal por ssh
2. Instale mread streamer con estos comandos (comience con el primero):
 sudo apt-get install libv4l-dev
 sudo apt-get install libjpeg8-dev
 sudo apt-get install subversion
 sudo apt-get install imagemagick
 svn co https://svn.code.sf.net/p/mjpg-streamer/code/
 cd / home / pi / code / mjpg-streamer /
 make USE_LIBV4L2 = true clean all
 sudo make DESTDIR = / usr install
3. !Listo!!

Configurar una dirección IP estática y conexión WiFi

Para asegurarse de que su Raspberry Pi siempre tenga la misma dirección IP, establezca IP estática (para que no tenga problemas al  iniciar la app)

Por ello verifique su interfaz WiFi  con  el comando :ifconfig (buscar la ip asociada a Interfaz WiFi) y una vez seap el  nombre de interfaz WiFi así  , edite las interfaces:

  • sudo nano / etc / network / interfaces
  • Desplazarse hacia abajo a la #WLAN  sección (si no está allí crear uno al final del archivo)
  • Configure su interfaz a IP estática
  • Configure su Raspberry Pi  a una  dirección  fija ,por ejemplo «192.168.43.125» o lo que quiera
  • Escriba el nombre de la zona wifi y contraseña entre comillas  «
  • Salvar el fichero y reiniciar la Raspberry

RearPi

Para empezar a usar  su Raspberrry Pi como cámara IP trasera, una vez seguido el proceso anterior de personalización de la  Pi , es importante que  nuestro smartphone  y la  Raspberry estén en la misma red , para lo cual podemos  automatizar el proceso con la App Automate , tal y como vimos en este post 

Muy  resumidamente  la red wifi , se consigue con la función de “hot spot ”  de nuestro teléfono inteligente  la cual permite conectar diferentes dispositivos conectados a nuestra propia red wifi generada desde el  propio terminal   .En caso de Android   vaya a “Configuración –>Más –>Anclaje y punto de acceso portátil” o en versiones de Android superiores a   a la 7 vaya   a  Ajustes (la tuerca ) , busque la opción de  Más y vaya  a  Anclaje de red y zona Wi-Fi  y pulse  Zona Wifi portátil  y áctivelo ( interruptor a la derecha).Una  vez creada la zona wifi podemos  automatizar el proceso con la App Automate buscando   el punto de acceso en el automóvil ( Hotspot ON/OF CAR ) y descargando el flujo

Ahora con  ambos  equipos en red ,conecte la Raspberry Pi con su cargador e Instale la app RearPi desde Google Play 

Una vez ejecute la app, abra la «configuración» y configure la «Dirección IP», el «Nombre de inicio de sesión» y la contraseña (std pw = raspberry) y podemos empezar con los ajustes de  la pantalla de inicio ajustable:

  •  Establezca los segundos por cuánto tiempo pantalla de inicio se queda (en la configuración)
  •  Establecer «0» para ninguna pantalla de inicio
  •  Activar la cámara cada inicio

Imagen Imagen

Una vez  realizados los ajustes , pulsaremos  el  botón ABRIR , el cual  se conectará a la Raspberry Pi y activara la cámara  actualizando la señal de vídeo

Si queremos abandonar  esta utilidad  , pulsaremos  el  Botón EXIT, el cual se conectara a la Raspberry Pi y desactivara la cámara, cerrando  aplicación

Un modo muy interesante es el Modo de pantalla completa, qu e opera del siguiente modo:

  •  Toque una vez en el vídeo para obtener modo de pantalla completa
  •  Toque  nuevamente para salir de pantalla completa modo

Imagen

Un truco muy interesante es el Modo de pantalla completa al inicio, que conseguiremos si  establecemos la marca de verificación para ir directamente en el modo de pantalla completa (configuración)  cuando iniciemos la aplicación

Por cierto, también es posible  grabar video  y visionarlo  desde la propia  aplicación.

Imagen

Resumidamente estos son los posos a seguir para crear una cámara trasera  :

  • Establecer un hot spot  para conectar la Pi y su teléfono / tableta.
  • Para transmitir vídeo tiene que instalar streamer MJPG  en Raspberry Pi:.
  • Ejecute   sudo ◦ apt-get install build-essential libjpeg-dev ImageMagick subversión libv4l-dev checkinstall
  • Ejecute  svn co svn: //svn.code.sf.net/p/mjpg-streamer/code/ MJPG-streamer
  • Ejecute cd MJPG-streamer / mjpg-streamer
  • Ejecute  VERSION = $ (sed -n ‘/SOURCE_VERSION/s/^.*»\(.*\)».*$/\1/gp’ REVISIÓN ◦ = $ (CN svnversion | sed «s /.*: //»)
  • Ejecute sudo checkinstall –pkgname = MJPG-streamer –pkgversion = «$ + $ VERSIÓN DE REVISIÓN ~ checkinstall» –default
  • Hacer USE_LIBV4L2 = true ← opcional
  • De a su Raspberry Pi una dirección IP estática (pasos detallados en el manual de PDF en https://alikamouche.files.wordpress.com/2018/03/rearpi_documentation_v1-33.pdf&xid=17259,15700021,15700124,15700149,15700186,15700190,15700201,15700214&usg=ALkJrhiuPbc9sJgGmYqz3h80veN8a7Yx3g).
  •  Conectar con la App a su a Pi (IP / Conexión / PW)

Con  esta solución  no, necesita alguna fuente de radiación lumínica o infrarroja pues  en condiciones de muy baja luminosidad trabaja bien especialmente si usa la cámara nativa.

Por cierto, para probar si esta funcionando el stream de video ,tenemos  el comando raspistill que   sirve para hacer fotografías. Si busca en internet hay proyectos para hacer de forma automatizada varias tomas y hacer un timelapse  de modo  que la ventaja de esta cámara es que la podrá usar como cámara de vigilancia con uno leds infrarojos para iluminar la zona.

Programar Arduino con Eclipse


Arduino es una plataforma de prototipado electrónica de código abierto basada en software y hardware flexible y fáciles de usar. Está destinado a artistas, diseñadores, aficionados y cualquiera interesado en la creación de objetos interactivos o entornos.
En realidad el Arduino es un montón de cosas. Dado un determinado contexto, puede significar cualquiera de las siguientes…

  • Arduino , la plataforma de hardware (el «Consejo»)
  • Arduino – la biblioteca de abstracción sobre el WinAVR. WinAVR es la cadena de herramientas GNU (compilador + C Runtime library etc.) para el Microcontrolador AVR utilizado en las placas de Arduino (el «software»)
  • Arduino – «El IDE» (estamos utilizando Arduino 19)

Para empezar con Arduino antes de nada se  necesita familiarizarse con la plataforma Arduino y jugar con el IDE de Arduino que es libremente descargable desde la Web de Arduino.

Si es un  programador experto , pronto se dará cuenta   que necesita  un más potente conjunto de herramientas como puede ser  la combinación de WinAVR , biblioteca Arduino + Eclipse y esto es lo que vamos a ver en este post.

 

leds arduino

Instalación  IDE

Sucintamente  los pasos para  programar Arduino con el Eclipse son los siguientes:.

  1. Descargar Eclipse (sobre 90 MBs). Descomprimir en C:\Misc\Eclipse
  2. Descargar el IDE de Arduino. Descomprimir en C:\Misc\arduino-0019
  3. Descargar la última versión de WinAVR. Descomprimir en C:\Misc\WinAVR
  4. Descargar el Plug-in de Eclipse de AVR e instalarlo (siga las instrucciones en su página web)

Primeros pasos con Eclipse

  1. Iniciar Eclipse
  2. Cerrar la página de bienvenida haga clic en la Cruz en la ficha para revelar el ambiente de trabajo real…
  3. Comenzar un nuevo proyecto haciendo clic en «archivo -> Nuevo -> proyecto de C++«. Elegir el tipo de proyecto «AVR Cross Target biblioteca estática» y establezca el nombre del proyecto Arduino. Ahora vamos a compilar los archivos fuente de Arduino en una biblioteca estática para su uso posterior. Finalmente haga clic en finalizar.
  4. Utilice el explorador de Windows para ir a C:\Misc\arduino-0019\hardware\arduino\cores\arduino, seleccionar todos los archivos de código y arrastrar sobre el proyecto de Arduino ya abierto en Eclipse( Nota :sólo incluyen archivos con extensiones .c, .cpp y .h …)
  5. A continuación, haga clic en aceptar en el siguiente cuadro de diálogo (aceptar la opción de copia por defecto)…
  6. Ahora construya el proyecto haciendo clic derecho sobre él y eligiendo «Crear» en el menú contextual. !puede  que tengamos mas de 10 errores! Pero no se preocupe, a arreglarlos en el momento. Haga clic derecho sobre el proyecto y elija «Propiedades» e ir a la opcion «c/c ++ Build -> Configuración -> AVR compilador» . Haga clic en el icono «+» (después de seleccionar la opción «Directorios»).
  7. Haga clic en el botón «Área de trabajo...» y añadir el directorio del proyecto «${workspace_loc :/ ${Nombre_proyecto}}« como un directorio de inclusión una vez para el «compilador AVR» y el «AVR C++ Compiler»
  8. Haga clic derecho sobre el proyecto y elija «Propiedades«, luego ir a «AVR -> Target Hardware» y luego establecer la opción de tipo de MCU en el microprocesador en la placa Arduino junto con la frecuencia del cristal suministrado con él. Por  ejemplo para un arduino antiguo  que lleve el ATmega328P  el valor es de  16000000 respectivamente. A continuación, haga clic en ok.
  9. Ahora construya su proyecto de nuevo  de modo qeu  la construcción debería tener éxito esta vez.(Aunque es posible que vea un montón de advertencias que, simplemente puede ignorarlos por ahora).

Ejemplo

  1. Es hora de que el equivalente a «Hola mundo» el mundo de sistemas embebidos. Ir a «archivo -> Nuevo -> proyecto de C++» como antes pero ahora seleccione «AVR Cross Target solicitud» como el tipo de proyecto y establezca el nombre del proyecto a «social«
  2. Haga clic derecho sobre el proyecto social y elegir «New -> File», el nombre del archivo a Main.cpp y haga clic en finalizar.
  3. Ahora, agregue el código siguiente de C++ a Main.cpp:
    #include "WProgram.h" //Include arduino headers
    
    ///CONSTANTS///
    //The onboard test LED is connected to pin number 13
    const int ledPin = 13;
    const int interval = 1000; //Milliseconds
    
    ///MAIN///
    int main()
    {
        //Initialize the Arduino library.
        //Not doing so will prevent the delay function
        //from working. Calling this functions is a must
        //for all arduino projects.
        init();
    
        //Initialize the serial port. This will be used
        //to send diagnostic information in this project.
        Serial.begin(9600);
    
        //Configure ledPin as an output
        pinMode(ledPin, OUTPUT);
    
        //Announce the start of program. Usually a
        //hyper-terminal is connected to the serial
        //port on the PC so this message can be seen
        //there
        Serial.println("Ready.");
    
        //Enter the infinite loop responsible for making
        //the microcontroller do the same thing over and
        //over again. (Almost every microcontroller has
        //such a loop)
        while(true)
        {
            //Turn on the LED
            digitalWrite(ledPin, HIGH);
            //Wait for half of "interval".
            //The LED remains ON during this time.
            delay(interval/2);
            //Turn off the LED
            digitalWrite(ledPin, LOW);
            //Wait for half of "interval".
            //The LED remains OFF during this time.
            delay(interval/2);
        }
    
        //Unreachable code but it's required by
        //the compiler
        return 0;
    }
  4. Ahora compile el proyecto. !es posible que tenga  un montón  de errores!
  5. OK vamos a arreglarlos. Haga clic derecho sobre el proyecto de «Social» y elija «Propiedades» e ir a la «construcción de C/C++-> Configuración -> Avr Compiler -> directorios» opción y haga clic en el icono «+».
  6. Haga clic en el botón «área de trabajo…» en el cuadro de diálogo subsecuente y elija Arduino -> Debug en el cuadro de diálogo el posterior.
  7. Finalmente se debe ver la siguiente. Haga clic en Aceptar después de haber verificado la ruta.
  8. Hacer lo mismo para la «construcción de C/C++-> Configuración -> Avr C++ Compiler -> directorios»
  9. Ir a «construir de C/C++-> Configuración -> Avr C++ linker -> bibliotecas» y defina las siguientes opciones.
  10. Ahora compilar el proyecto social otra vez. Compruebe que es mucho mejor ahora, pero todavía tenemos un error . Esto es un error de vinculador. El vinculador se queja aquí que no podría encontrar una aplicación para la función de llamada en cualquier lugar aunque se refiere a / usado en otras partes del código. Baste decir la función es necesaria por el runtime de C++ para decidir lo que hay que hacer cuando alguien llama a una función virtual pura directamente. Como recordará de sus tratos con C++, una función virtual pura no se puede llamar directamente sin proporcionar una implementación en alguna clase derivada. Para ello, una clase con una función virtual pura no puede ser instanciada en todos pero el runtime de C++ le gusta estar preparado para cualquier eventualidad.Compiladores avanzados habrían lanzado una excepción de esta función para indicar una operación ilegal, pero como no tenemos los de la plataforma de WinAVR, todo lo que podemos hacer es evitar  más daño que está haciendo entrar en un bucle sin fin (suponiendo que el programa es corriendo frenéticamente en primer lugar ya que ha hecho lo imposible por llamar a una función virtual pura directamente!)
    Nota: esto debe hacerse sólo para la versión de depuración. Al parecer esta función no se utiliza en la versión de lanzamiento de Arduino. Las compilaciones de depuración están amañadas para fallar rápidamente para que el punto de falla es lo más cercano posible al lugar donde está el verdadero problema.
  11. Agregar un nuevo archivo .c al proyecto Arduino (Nota debería ser .c y no CPP). Llame al missing.c y pegue el código siguiente en él y construir de nuevo ambos proyectos. El error debería desaparecer. Tenga en cuenta que lo necesario para construir Arduino antes de poder construir social.
    void __cxa_pure_virtual()
    {
        while(1);
    }
  12. Conmutando el panel de «Consola», puede ver el resultado de ejecutar el comando tamaño de avr en el archivo .elf de generado…Pero no es un bonito espectáculo para la vista. Un pobre programa intermitente led ocupa aproximadamente 62% del total de memoria de programa disponible. Pero no se asuste, estamos en la versión de depuración  de modo que obtendrá mejores resultados al cambiar a liberar estructuras.

Cambiar a la versión de lanzamiento

  1. Haga clic derecho en un proyecto y seleccione «configuraciones de generación -> Set activo -> Release 2». Hacer esto para todos los proyectos.
    Nota: usted necesita volver a especificar todos los ajustes para la versión de lanzamiento como hiciste para hacerlo compilar la versión de depuración.

Optimización prematura

  1. Aquí es cómo vamos de mejor a impresionantes. A continuación se asegurará de que usted sólo paga por las funciones y secciones de datos que realmente se utilizan en el programa. Agregue los siguientes indicadores adicionales para el C y C++ compiladores en todos los proyectos
    -ffunction-sections -fdata-sections

    Añadir la siguiente bandera a las opciones del vinculador en todos los proyectos.

    -Wl,-gc-sections

     

  2. Reconstruir (en el correcto orden Arduino en primer lugar, social segundo.)

Cargar el programa en el Arduino

Ahora ha llegado el momento cuando usted puede cargar su primer programa de Arduino construido dentro de los confines cómodos de Eclipse.

  1. Haga clic derecho sobre el proyecto social y selecciona «Propiedades«. Ir a la página de AVRDude y haga clic en nuevo.
  2. Rellene el formulario siguiente:
    • Nombre de configuración: Arduino
    • Hardware del programador: Arduino
    • Reemplazar el puerto por defecto: \\.\COM3. Reemplazar el COM3 a cualquier puerto del hardware de Arduino está conectado a.
    • Override en baudios por defecto: 19200. Reemplazar 19200 a cualquier velocidad en baudios fue especificado por el fabricante del tablero / la persona que subido el Arduino boot loader en tu tarjeta.

     

  3. Seleccionar Arduino como programador en AVRDude configuración y haga clic en Aceptar.
  4. Haga clic en el botón de la barra de herramientas AVR para subir su programa a la placa.

    Debería ver algo como lo siguiente en la ventana de la consola…

    Launching C:\misc\WinAVR\bin\avrdude -pm328p 
        carduino "-P\\.\COM3" -b19200 -Uflash:w:BlinkenLights.hex:a 
    Output:
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.02s
    
    avrdude: Device signature = 0x1e950f
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "BlinkenLights.hex"
    avrdude: input file BlinkenLights.hex auto detected as Intel Hex
    avrdude: writing flash (2828 bytes):
    
    Writing | ################################################## | 100% 2.16s
    
    avrdude: 2828 bytes of flash written
    avrdude: verifying flash memory against BlinkenLights.hex:
    avrdude: load data flash data from input file BlinkenLights.hex:
    avrdude: input file BlinkenLights.hex auto detected as Intel Hex
    avrdude: input file BlinkenLights.hex contains 2828 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 2.14s
    
    avrdude: verifying ...
    avrdude: 2828 bytes of flash verified
    
    avrdude done.  Thank you.
  5. Si todo salió bien, la prueba a bordo del LED (generalmente color rojo) ahora si empieza a parpadear en cerca de 1 parpadeo/seg Felicitaciones!

Finalmente hemos visto cómo utilizar Eclipse para el desarrollo de AVR. Pero esto es sólo el principio pues hay mucho explorar pero hemos visto  los fundamentos y ahora debería ser fina por su cuenta. Los ejemplos y bibliotecas suministradas con Arduino deben ser un buen punto de partida para la exploración de más.

 

 

Fuente https://www.codeproject.com/Articles/110859/Arduino-Unleashed

 

 

Necesitamos mas mujeres hackers


¿Por qué es tan difícil encontrar productos de superheroínas? En una charla de TED , el doctor , Christopher Bell, especializado en el estudio de la cultura popular   de los medios centrándose en las formas en que la raza, la clase y el género como se cruzan en diferentes formas de medios ,  desde su condición de  padre de una hija obsesionada con Star Wars, aborda la falta alarmante de superheroínas en los juguetes y productos comercializados para niños, y todo lo que eso significa para la forma en que les mostramos el mundo .

Hacker  en el mundo  hispano-hablante desgraciadamente aun conlleva una faceta peyorativa muy habitualmente  confundida  con personas que utilizan la tecnología para hacer el mal y lucrarse  en su provecho aprovechando vulnerabilidades o  agujeros de seguridad tal y como hacen los ciberdelicientes  (como es el caso de los script kiddies, crackers, piratas informáticos, etc)

Nada mas lejos de la realidad  pues para los anglosajones  un  hacker  es un  individuo que apoya procesos de apropiación social o comunitaria de las tecnologías poniendo  a disposición del dominio público el manejo técnico y destrezas alcanzadas personal o grupalmente. Ademas crea nuevos sistemas, herramientas y aplicaciones técnicas y tecnológicas para ponerlas a disposición del dominio público  y realiza  acciones de hacktivismo tecnológico con el fin de liberar espacios y defender el conocimiento común y abierto.

Pero, ¿por qué es tan difícil encontrar referentes femeninos en el mundo de la tecnología  y en particular en el mundo del hacking?  Quizás tenga relación con  varios estudios, donde afirman que sobre  la edad de 11 años muchas niñas se sienten atraídas por la tecnología, las ciencias y las matemáticas pero lamentablemente  muchas  pierden el interés al cumplir los 15 años y desvían su interés profesional  hacia otras áreas del saber.

Ante este reto, desde Telefónica, a través de la unidad de Chief Data Office (CDO) liderada por el famoso hacker  Chema Alonso, que integra Aura -Inteligencia Cognitiva-, ElevenPaths -Ciberseguridad- y LUCA -Big Data-, reflexionan  sobre esta tendencia que parece repetirse en diversos ámbitos y que se han  propuesto «hackear»  apostando por la diversidad.

El video la verdad es que es muy emotivo y merece la pena verlo

Modernamente el movimiento hacker  o  el hacktivismo (fusión de hack y activismo) se considera el uso de técnicas en beneficio de fines sociales, ecológicos, humanitarios o de cualquier otra índole ,con repercusión o tendente a la defensa de los derechos humanos.

A raiz de esta tendencia aparecen precisamente   los famosos espacios  hacklab o hackerspace y los hackmeeting como eventos proclives  de diálogo de hackers.

Asimismo se considera  hacktivismo  la liberación de conocimiento (como podría  ser la misma Wikipedia o incluso muchos blogs tecnológicos) ,la cual trasciende incluso a la propia   información clasificada  que se considera debe estar  a disposición de la sociedad ( WikiLeaks o las filtraciones de Snowden).

Por tanto, el fenómeno hacker  tiene un importante componente de aperturismo y liberación de conocimientos e información que, a través del activismo de estos especialistas  o expertos (mujeres o hombres da igual ) ,los cuales  en general actualmente son ingenieros de diferentes disciplinas  , benefician con su actividad a la sociedad en general ,  por lo que en aras de  la diversidad , también  deben promoverse la inclusión de las mujeres en semejante colectivo para el bien de la humanidad.

Cómo instalar Debian Jessi (Linux) en una Orange Pi PC


Desgraciadamente la imagen ofrecida  por parte del fabricante en su site original   http://www.orangepi.org/downloadresources/  , padece de algunas carencias  sobre todo para instalar sw especifico como el agente Cayenne  o por ejemplo Node.js

Buscando   satisfacer  la necesidad  de una imagen linux estable , tenemos una nueva distribución de Debian Jessie ,la cual destaca de forma sobresaliente por encima del resto  de imágenes «oficiales » que creemos merece probar.

¿Qué necesitamos?

No se diferencia respecto a otras distribuciones. Como orientación necesitaremos los siguientes elementos:

  • Orange Pi PC (obviamente)
  • Samsung 16GB micro SD EVO UHS-I Clase 10 48MB / s
  • Jacer’s Debian Jessie imagen, descargada del  enlace foro topic
  • Win32DiskImager

Pasos para la instalación

El primer paso es descargar la imagen de Debian Jessie de esta url :https://mega.nz/#F!y0Y0SZhJ!RD5an8l9qEo_RppBsxxbrQ!y9ZDECra

Extraeremos el fichero  ‘Debian8_jacer_2.rar’

El resultado de descomprimir terminara con  tres  archivos:

  •  ‘Debian8_jacer_2.img’
  •  ‘Script.bin and uIimage fora OPI-2 OPI-2 MINI.zip ‘. 
  •  ‘Script.bin and uIimage fora OPI-PC_extract to  FAT Partition.zip ‘.

 

dmega

 

Para escribir el archivo de imagen en nuestra tarjeta SD necesitamos una herramienta. Para Windows  lo ideal es usar  Win32DiskImager que es una herramienta para escribir archivos img a su tarjeta sd.

Inicie Win32DiskImager, seleccione ‘Debian8_jacer_2.img’ y asegúrese de que el dispositivo correcto está seleccionado (en el ejemplo   la F 🙂 y  pulse Write para escribir la imagen en la tarjeta SD

Como orientación ,escribir el archivo imagen una tarjeta SD suele tardar unos 3 minutos, con una velocidad de escritura de unos 13 ~ 15 MB / s.

 

win32disk

Estamos casi listos para arrancar nuestro Orange Pi, pero primero extraer ‘uImage’ del archivo (2) a la tarjeta SD.

Vaya a su tarjeta SD y cambie el nombre de ‘script.bin.OPI-PC_1080p60_hdmi_cpu1.2G_gpio30pin’ a ‘script.bin’ (se utiliza la versión 1.2G   pues hay muchas  quejas sobre el sobrecalentamiento de Orange Pi y no es  necesario sobrecalentar  la CPU si no necesita tanto procesamiento)

Ya estamos listos para empezar: extraiga ordenadamente la sd del lector de su pc e insertarla en su Orange Pi.

Conecte un monitor con HDMI al Pi y un ratón / teclado USB básicos. También se puede conectar al Pi mediante SSH, aunque en ambos casos puede iniciar sesión con la combinación: orangepi / orangepi.

Ya puede conectar la alimentación , donde destacar , que en el caso de Orange Pi no sirve por el micro-usb sino que habrá que hacerlo por el conector especial de 5V DC  que lleva

No se deje engañar por el led rojo, pues todo el mundo sabe que el rojo es un color positivo? En el Orange Pi el led rojo significa que encontró una tarjeta SD con un cargador de arranque correcto. El diagnóstico en el Orange Pi no son muy buenos :, sólo tenemos  la esperanza de un led rojo encendido  pues es básicamente la única información que obtendrá.

Redimensionar la partición

Después del arranque, inicie sesión con el usuario orangepi e inicie una sesión de terminal. Recibirá un mensaje de advertencia sobre el tamaño de su partición. Si desea cambiar el tamaño de la partición al tamaño máximo disponible, puede ejecutar ‘sudo fs_resize‘.

Después de cambiar el tamaño debe reiniciar primero.

Redimensionamiento

Script de instalación de Scargill

Existe un impresionante script de instalación hecho por Peter Scargill que automatiza la instalación de nodo-RED, Mosquitto, Apache, SQL-Lite y algunas otras herramientas (se puede elegir lo que desea instalar). La instalación de todo puede tomar unos 50 minutos , probablemente un poco lento debido a la frecuencia máxima de la CPU de 1.2Ghz.

El scrips deshabilita la interfaz gráfica de usuario,asi que  si desea conservar la interfaz gráfica de usuario, puede cambiar el script de sudo systemctl set-default graphical.target ( línea de sudo systemctl set-default graphical.target 417 o ejecutar sudo systemctl set-default graphical.target y sudo systemctl set-default graphical.target .

Si desea acceder fácilmente a los datos de su Pi, puede cambiar la línea de script 187 para habilitar los recursos compartidos de red.

Con todo este sw instalado  la temperatura de la CPU suele ser de alrededor de 45 ° C, que es de unos 25 ° C por encima de la temperatura ambiente.

Resumen del software en ejecución

  • SSH deamon
  • Servidor FTP – ftp: // orangepi: contraseña @ orangepi
  • Apache – http: // orangepi
  • Phpliteadmin – http: // orangepi / phpliteadmin
  • Webmin (muy útil herramienta de administración del sistema) – http: // orangepi: 10000
  • Nodo-RED – http: // orangepi: 1880
  • Mosquitto MQTT corredor – http: // orangepi: 1883

 

Construcción de una imagen para Orange Pi


En este post vamos a describir el proceso para combinar sunxi u-boot, kernel de linux y otros bits para crear la base de un sistema operativo de  arranque desde cero y también la base para crear otro para la placa Orange PI.
Por supuesto no construiremos una distribución completa, sólo construimos una imagen que contiene el   u-boot, el núcleo y un puñado de herramientas de modo que  luego usaremos un sistema de archivos raíz existente para obtener un sistema útil.

Dependiendo del tamaño de sistema de archivos raíz, lo ideal es  que utilice una tarjeta SD de  4 GB  o más , tipo clase 10  porque será más estable ,la cual por cierto  previamente habrá particionado y formateado  antes con las herramientas habituales (hard disk low level format  o SDFormater) .
Tenemos dos métodos para construir todo lo que necesitamos, esta guía , el otro es la manera más fácil mediante el uso de sunxi BSP.

orangepi

Haga una cruz toolchain

La cadena de herramientas es un conjunto de binarios, bibliotecas de sistema y herramientas que permiten crear (en nuestro caso, cross-compilar) un  u-boot y kernel para una plataforma de destino. Esto, hasta cierto punto limitada, tendrá que coincidir el rootfs objetivo.

Si usa  Ubuntu o Debian, puede obtener todo lo que necesita por instalar ,  ejecutando las siguientes herramientas:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential u-boot-tools uboot-mkimage binutils-arm-linux-gnueabihf gcc-4.7-arm-linux-gnueabihf-base \
                     g++-4.7-arm-linux-gnueabihf
sudo apt-get install gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf libusb-1.0-0 libusb-1.0-0-dev git wget fakeroot kernel-package \
                     zlib1g-dev libncurses5-dev

Nota: En Debian (sibilancias) Ubuntu 13.10 (picantes), paquete uboot-mkimage es quitado, el comando mkimage incluido en el paquete de u-boot-tools . En Ubuntu 12.04, cambiar gcc-4.7-arm-linux-gnueabihf-base y g ++-4.7-arm-linux-gnueabihf a gcc-4.6-arm-linux-gnueabihf-base y g ++-4.6-arm-linux-gnueabih.
También puede utilizar la herramienta de Linaro la cadena o cadena de herramientas de código Sourcery, son toolchains independiente con grandes archivos que vienen con todo que lo necesario.

Utilize Orange Pi BSP

BSP significa «Paquete de apoyo de la placa».

Instalación

Obtener el repositorio BSP:

git clone https://github.com/orangepi-xunlong/orangepi-bsp.git

Construcción

Después de obtener el BSP, luego clonado al  directorio de sunxi bsp , ejecutar comando de compilación:

./configure OrangePi
make

Este comando  tomará un tiempo para construir todas las cosas. Después de que todo haya sido construido, usted conseguirá todo lo que quiera en el directorio build/OrangePi_hwpack , como u-boot-sunxi-con-spl.bin, scritp.bin, uImage y módulos. También puede modificar su configuración de kernel ejecutando:

make linux-config

Esto sobrescribirá el archivo .config en el /build/sun7i_defconfig-linux.

Paso a paso

Construir u-boot

U-boot es el gestor de arranque utilizado comúnmente en los allwinner SoCs. Similar a muchos otros, proporciona la infraestructura básica para llevar un SBC (sola computadora de la placa ) hasta un punto donde puede cargar un kernel Linux y comenzar a arrancar el sistema operativo.
Primero necesita clonar el repositorio de Github:

git clone https://github.com/orangepi-xunlong/u-boot-orangepi.git

Después de que el repositorio haya  sido clonado , usted puede construir el u-boot
Primero configurar el u-boot :

make CROSS_COMPILE=arm-linux-gnueabihf- Orangepi_config

Y luego el u-boot:

make CROSS_COMPILE=arm-linux-gnueabihf-

Después usted puede conseguir el u-boot-sunxi-con-spl.bin u-boot.img, u-boot.bin, sunxi/spl-spl.bin. Aquí utilizamos solamente archivo u-boot-sunxi-con-spl.bin.

Construir el fichero  script.bin

En primer lugar, obtener los siguientes repositorios:

git clone https://github.com/orangepi-xunlong/sunxi-tools.git
git clone https://github.com/orangepi-xunlong/sunxi-boards.git

Ir a sunxi-tools y ejecutar el comando

make

Usted puede necesitar instalar los paquetes dependientes:

sudo apt-get install pkg-config

De este modo obtendrá la herramienta fex2bin, bin2fex y otros.
Entonces en el árbol de sunxi-tableros , buscar el archivo OrangePi.fex .  Podemos modificar algunas de las configuraciones en el archivo, como [gmac_para], [usb_wifi_para], etc..

Ya  podemos crear el archivo script.bin:

${sunxi-tools}/fex2bin OrangePi.fex script.bin

El prefijo ${herramientas de sunxi} indica que se encuentra en su árbol de sunxi-herramientas.

Necesitará este archivo script.bin más tarde al terminar la instalación de u-boot.

El núcleo de la construcción

En primer lugar, obtener el repositorio del kernel de linux después de ejecutar :

git clone https://github.com/orangepi-xunlong/linux-orangepi.git

En segundo lugar, establecer la configuración predeterminada:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig

En tercer lugar, ajustar la configuración. Para  abrir un núcleo es necesario configurar o cerrar el kernel inútil configurando o  editando su configuración de kernel:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

Contruccion de uImage cons  módulos:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules

Como paso final, crear el árbol completo de módulo:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install

La opción de INSTALL_MOD_PATH especifica el directorio donde el árbol completo del módulo estarán disponible. En este ejemplo, será el directorio de salida bajo el núcleo crear directorio.
Ahora tiene el siguiente que residen en el árbol del kernel:

arch/arm/boot/uImage
output/lib/modules/3.4.XX/

El archivo uImage Iniciado por u-boot, y el directorio de módulos que se copiarán a las /lib/modules en el sistema de archivos raíz de destino.

Utilizando cuatro archivos

A través de «paso a paso» o «uso de sunxi bsp», obtendrá al menos cuatro archivos o paquetes que necesitas, son:

u-boot-sunxi-with-spl.bin
uImage
script.bin
modules/3.4.XX

Utilizamos estos cuatro archivos para configurar la tarjeta SD bootable.

Referencia

1. http://sunxi.org/Manual_build_howto
2. http://sunxi.org/U-Boot#Compilation
3. http://sunxi.org/Linux_Kernel#Compilation
4. http://sunxi.org/BSP

 

Fuente orangepi.org

Smartwatches en entorno abierto


Aunque suene muy novedoso Secret Labs (los creadores de Netduino)y House of Horology   tuvieron ya hace tres años allá por 2013  tuvieron  una la idea  de crear el primer reloj inteligente abierto   :Agent , un smatwatch  muy  similar a lo que proponen hoy en día  ,pero claramente con recursos innovadores para su época como era  la carga inalámbrica y la pantalla de tinta electrónica.

El reloj cuenta  con procesador  a 120MHz ARM Cortex-M4 con  secundario  AVR co-processor  siendo la pantalla de 1.28 «(128 x 128)con retroiluminación inteligente
lente de cristal anti-reflejo

Lleva integrado  Bluetooth 4.0 BD / EDR + LE,  un acelerómetro de 3 ejes ,Sensor de luz ambiental, motor de vibración y carga inalámbrica Qi

respecto a la batería es muy interesante pues se ha diseñado el reloj para permitir la reparación y reciclaje de este incluyendo la batería reemplazable , teniendo una autonomía de 7 días duración de la batería (típica)  y 30 días en modo de sólo su esfera

Entre sus muchas virtudes este reloj puede ejecutar  aplicaciones escritas en C # utilizando Microsoft Visual Studio 2012 ( incluyendo la edición gratuita Express) desplegando sus propias aplicaciones a través de Bluetooth y por supuesto depurando de forma interactiva .

Para crear apps para este reloj solo  se necesitan tres herramientas gratuitas:

  •  Visual Studio Express 2012
  •  .NET Micro Framework SDK v4.3 QFE1
  • Agente de descarga del SDK v0.3.0 (febrero de 2014 de vista previa)

Asimismo los desarrolladores también pueden utilizar el reloj como una pantalla secundaria , interactuando con él de forma remota a través de Bluetooth de su Objective-C , C #, Java o aplicación de teléfono inteligente .

Y por cierto al igual que su teléfono inteligente, este reloj  ejecuta aplicaciones descargables .Estas aplicaciones pueden hablar con los dispositivos Bluetooth tradicionales, tales como teléfonos inteligentes y monitores de ritmo cardíaco , así como la nueva generación de dispositivos Bluetooth de baja energía, tales como cerraduras de las puertas .Por supuesto la conexión con el smartphone ,permite a las  aplicaciones también recuperar la información desde Internet, que le puede mantener al día con las cosas que son más importantes para usted .

agent.PNG

 

El proyecto se lanzó kickstarter   y  se llama Agent .La friolera de casi 6000 personas (exactamente  5.685 patrocinadores) contribuyeron con  1.012.742 $ para ayudar a dar vida a este proyecto, que aun no ha concluido por los números escollos que ha tenido en el aspecto hardware preveyendo que muy pronto de la luz.

https://www.kickstarter.com/projects/secretlabs/agent-the-worlds-smartest-watch

 

En la otra cara de la moneda , tenemos otra propuesta muy diferente llamada culbox,   que pretende ser  el smartwatch de código abierto programable con Arduino

Culbox es una pulsera de código abierto con la que puede interactuar con los proyectos realizados con Arduino. Se puede programar a través del IDE de Arduino, siendo muy sencillo usar las diferentes librerías de Arduino con él..

Se trata de un reloj de pulsera de código abierto con Bluetooth integrado  contando ademas con diferentes  sensores como son un sensor de movimiento de 6 ejes , sensor de presión de aire ,altimetro,etc.

Cuenta con un procesador de 32 bits ARM Cortex ,, una pantalla de 1.5″OLED, 3 botones, y todo lo necesario en un reloj.

culbox1

CulBox viene con una aplicación tanto para teléfonos Android como para IOS que se puede utilizar como una plantilla para realizar distintos proyectos.

Acepta tarjetas microSD. También hay un puerto de usos múltiples como la carga de la batería o conectar el dispositivo a Arduino para la programación. Enlace al proyecto en Kickstarter. Y a su web.

 

 

Constrúyase su propio descodificador con una Raspberry Pi


Aunque el objetivo fundacional de Raspberry Pi era la educación, no se trata de un ordenador para niños en su sentido mas estricto . La nueva placa no es solo un dispositivo estupendo para programar sino que es el ideal para jugar y experimentar. La placa perfecta para sus futuros proyectos de IoT.Es un miniordenador , sin más ( en el sentido  estricto de la palabra pues no lleva ni  fuente de alimentación ni periféricos de E/S)  que es posible usar en  miles de aplicaciones diferentes en campos avanzados como  pueden ser la robótica o las monedas criptográficas, y otras más lúdicas  como podría ser construir una miniconsola retro  o un robot mayordomo como hemos visto en este blog .

Como  ejemplo de polivalencia  de la Raspebrry PI  también puede usarse para   tareas complejas de vídeo ,gracias a su potencia de procesamiento especialmente en gráficos  que y por supuesto también a la gran versatilidad del sw de Kodi.  Veamos los pasos necesarios para llevar a cargo esa tarea;

HARDWARE

Aunque desde Raspberry Pi Fundation  dejan claro que no van a olvidarse ni abandonar los modelos anteriores, lo cierto es que dado que la diferencia de precios actuales es muy pequeña ( apenas uno euros entre la versión 2   y la 3 ) , merece la pena en caso de no disponer ya de una versión anterior , de adquirir  la nueva  Raspberry Pi 3 Modelo B (1,2 GHz Quad-core ARM Cortex-A53, 1GB RAM, USB 2.0)

Esta es  la última placa de la familia de Raspberry Pi  ,la cual es  10 veces más potente que la original . A diferencia del la versión 2    lleva  conectividad inalámbrica integrada de 802.11 b/g/n LAN y Bluetooth 4.1  y  se  puede comprar por unos 40€ en Amazon .

raspberrypi

Entre las novedades más destacadas de la Raspberry Pi 3 está su nuevo procesador, ARM Cortex A53, un procesador de cuatro núcleos a 1.2GHz de 64 bits  con chipset  Broadcom BCM2387   y  que es superior un 50% más que la Raspberry Pi 2 model b , es decir el modelo anterior Raspberry Pi 2 model B  , que  a pesar de todo  para aplicaciones de vídeo como las que vamos  a ver,también  ofrece unos resultados también mas que excelentes.

Para empezar nuestro proyecto    es interesante resaltar  que para las funciones de video que vamos a usar  tanto la versión 2 como la 3 cumplirán con excelencia su cometido,  por lo que si tenemos una Raspberry Pi 2  también podremos usarla para este proyecto.

Una vez tengamos la placa  ( la Raspeberry Pi  2  o la Raspberry Pi 3  ) ,lo primero es buscar un emplazamiento para la placa, siendo lo más sencillo  y económico usar una caja trasparente de plástico que tengamos para reciclar  a las que les haremos los agujeros correspondientes con  un  simple  cortante  para las tomas usb, la alimentación por el micro-usb, el hdmi , la toma ethernet  y por ultimo para la micro-sd con idea de poder experimentar con diferentes posibilidades .

Asimismo es importante no olvidar fijar la placa a la caja con 4 tornillos para que no se mueva ésta

En la siguientes imágenes podemos ver lo fácil que resulta  practicar los  agujeros con  un cutter para  dar una mínima  consistencia  física

IMG_20160528_113034 IMG_20160528_113051 IMG_20160528_113103 IMG_20160528_113121

Y aquí vemos el resultado con el trabajo terminado y la tapa puesta

IMG_20160528_113013

Una vez hayamos fijado la placa a la caja, conectaremos la fuente  de 5V   (se  recomienda al menos de 1,5Amp  , intensidad  muy similar a las de los cargadores de  smartphones mas grandes) , el cable hdmi, la conexión ethernet  y por ultimo un medio de comunicación con la consola (teclado o ratón )  como puede ser  un mando inalámbrico  que incluya un ratón y mini-teclado en un  único dispositivo .

miniteclado

Un ejemplo de multidispositivo inalámbrico que podremos usar es KKmoon 2.4G Mini Teclado con ratón táctil QWERTY sin hilos del Touchpad para PC portátil Android TV Box HTPC Blanco

SOFTWARE

OpenELEC es un sistema operativo embebido en torno a Kodi  , entorno es ultimo  por excelencia para labores  multimedia que es open sw. Este ambiente está diseñado para ser lo más ligero posible en términos de tamaño y complejidad, para poder convertir por ejemplo un  HTPC en un receptor de satélite o un reproductor de DVD. Con su pequeño tamaño, OpenELEC también es ideal para pequeños sistemas de formato de hoy en día, por lo que no necesitará una computadora de escritorio grande en su sala de estar

Ya que está diseñado para ser ligero, OpenELEC utiliza muy pocos recursos del sistema para el procesador o la memoria. Con soporte para Intel HD Graphics, la plataforma GeForce y ION de NVIDIA, la plataforma Radeon & Fusion de AMD, así como chips Crystal HD de Broadcom, OpenELEC puede soportar contenido de alta definición en máquinas con procesadores de baja potencia mediante la descarga de contenido de vídeo a las tarjetas y descodificadores de gráficos compatibles .

Tambien openELEC es compatible con una amplia gama de tarjetas gráficas, por lo que es posible convertir los nuevos y no tan nuevos ordenadores en los sistemas de funciones completo de cine en casa,lo  cual o significa que se puede construir (o comprar) incluso máquinas pequeñas, silenciosas, sin ventilador para ser utilizado con eficacia como centro multimedia. Las siguientes plataformas son:

  • Generic (64 & 32bit): Intel HD/GMA graphics, NVIDIA Geforce / ION / ION2, AMD Radeon / Fusion
  • Raspberry Pi: A and B(+)
  • RaspberryPi-2: Cortex-A7 ARM
  • Freescale iMX6 ARM

Tambien esta aun disponible para plataformas  OpenELEC 3.x («Frodo») y 4.x («Gotham»):

  • NVIDIA ION / ION2
  • Intel GMA HD chipsets
  • AMD Fusion
  • Apple TV 1 (using Broadcom Crystal HD)
  • Raspberry Pi

Se podría instalar Windows o su distribución Linux favorita en su ordenador y luego Kodi en la parte superior – y  funciona- pero no sería tan rápido ni tan fácil como OpenELEC. OpenELEC se construye desde cero específicamente para una tarea, para ejecutar Kodi. Otros sistemas operativos están diseñados para ser polivalentes, por lo que incluyen todo tipo de software para ejecutar otros  servicios y programas que si necesita sólo la parte multimedia no  va a utilizar. OpenELEC, sin embargo, sólo incluye el software necesario para ejecutar Kodi. Debido a que es pequeña (aproximadamente 150 MB), se instala en cuestión de minutos, literalmente, y, se puede arrancar de forma extremadamente rápida en 5-20 segundos, dependiendo del tipo de hardware utilizado.

A diferencia de otras soluciones de Kodi, OpenELEC no se basa en Ubuntu. De hecho, no se basa en cualquier distribución de Linux; OpenELEC ha sido construido desde cero específicamente para actuar como un centro de medios de comunicación. Eso significa que no incluye controladores para las cosas que simplemente no se pueden utilizar como tarjetas 3G y gráficos comprimidos, por ejemplo.

Además, OpenELEC está diseñado para ser manejado como un aparato: se puede actualizar automáticamente y puede ser administrado en su totalidad dentro de la interfaz gráfica. A pesar de que se ejecuta en Linux, usted nunca tendrá que ver una consola de administración, terminal de comandos o tener conocimientos de Linux para usarlo.

Viendo las bondades que nos ofrece  OpenElec  , siendo posible con Raspberry Pi  (incluso en sus versiones anteriores ) veamos ahora como podemos  instalarlo en nuestro proyecto

Lo primero que hay que hacer es descargar la última versión estable de OpenELEC para ello podemos descargar la imagen versión actual desde aquí:http://openelec.tv/get-openelec  seleccionando «Raspberry Pi builds» en la columna de Open Elec stable Releases (6.0.3), o pulsando en el enlace directo de  la imagen  pinchando  en http://openelec.tv/get-openelec/category/7-raspberry-pi2-builds

openelec.png

Como  puede observar hay bastantes plataformas disponibles  por lo que como se había comentado hay un gran abanico de posibilidades

Para continuar necesitaremos las siguientes herramientas :

  1. Windows XP/7/8.x
  2. 7zip
  3. Win32DiskImager
  4. Una memoria micro-sd de al menos 8GB

Los  pasos   a seguir  para instalar

  • Descargar la imagen   desde  aqui http://openelec.tv/get-openelec/category/7-raspberry-pi2-builds
  • Extraer la imagen utilizando 7zip.
  • Insertar su memoria micorsd   en un lector microsd a USB . Debe aparecer como una nueva letra de unidad.
  • Ejecutar Win32DiskImager
  • Seleccione el archivo de imagen para comprobar la letra de la unidad de destino es correcta, a continuación, en escritura.
  • Cuando esté terminado se puede retirar de forma segura el dispositivo USB / tarjeta SD haciendo clic derecho sobre la unidad en Windows Explorer y seleccionando la opción de expulsión.

ADVERTENCIA: Su memoria micro-sd e borrará por este procedimiento, ya que se instala OpenELEC en la misma. Por favor asegúrese de conocer la letra  correcta para su USB Stick / tarjeta SD.

ADDON

Gracias  al sw de Kodi  junto a  un ADDOn,  es posible visualizar  toda la oferta  de canales de Imagenio que se tenga contratada   desde cualquier equipo  que este conectado a la red del hogar    gracias  a la  tecnología  DLNA  actualmente ya soportada por Movistar +

Este  addon   disponible gratuitamente en sourceforge,  permite realizar las mismas acciones (y otras mejoras) que un decodificador de movistar TV desde un PC, tabletas Android, smartphones, Android TVs, raspberrys, Bannana Pi y Linux x64 y 32 bits  pues  soporta los siguientes SO: windows 7 o superior, Android y Linux.

Este software funciona como un plugin dentro del famoso  reproductor multimedia  Kodi Helix  , por lo que es obligatorio tener instalado como prerequisito la  aplicación Kodi (www.kodi.tv) .pero como sabemos en OPenElec  ya esta instalado

Kodi Movistar+ TV es pues un ADDON para Kodi ( y también para XBMC)  que permite disponer de un decodificador virtual de Movistar+ TV para distintos sistemas operativos.

Las principales funcionalidades del addON son:

  •  Actualización automática de canales con descubrimiento automático de canales.
  •  Guía de programación EPG( Guía electrónica de programas).
  •  Grabaciones en la Nube y en local.
  •  Visualización de grabaciones en la nube.
  •  Sincronización de grabaciones a local para evitar su caducidad.
  •  Gestión avanzada de series.
  •  Últimos 7 días.
  • Grabaciones y programación de grabaciones.
  • Funciones Timeshift.
  • Distribución de señal mediante DLNA a otros dispositivos.
  • Gestión y grabación de series.
  • Grabaciones y reproducción en la nube (habilitar grabaciones en nube en la configuración).
  • Sincronización de grabaciones en nube a local.

Veamos  los pasos para instalar  este software:

Paso 1
Descargarse la versión del ADDON correspondiente al sistema operativo/dispositivo  desde el siguiente link: https://sourceforge.net/projects/movistartv/

Actualmente existen las siguientes versiones de Kodi Imagenio:

  •  Windows. Para XBMC/Kodi de sistemas Windows.
  •  Raspberry. Para Raspberry PI y sistemas Openelec , raspbmc o Bannana PI.
  •  Openelec X64. Para aquellos que tenéis instalado Openlec para X64 o sistemas X64 con compilaciones de ffmpeg 2.4 (en XBMC).
  •  Ubuntu X64. Resto de sistemas Linux X64.
  •  Android arm. Compilación para android con procesadores arm.

Una vez descargado, el paquete zip debe quedar accesible desde el dispositivo en el que está instalado el XBMC.

Paso 2.
Iniciamos la instalación de Add-on, para ello entramos en sistema -> Ajustes.
Entramos en la opción Add-ons  y   seleccionamos la opción de instalar desde un archivo .zip.
Seleccionaremos el archivo zip correspondiente y con esto quedará instalado el Add-on.
Paso 3.
Activamos y configuramos las opciones de TV en directo.
Para ello entramos en sistema -> Ajustes y seleccionamos la opción de TV en directo.
Activamos en general la TV en directo.
Paso 4.
Existen diversos parámetros de configuración que pueden ser variados y ajustados.Para entrar en los parámetros de configuración ir a Sistema-> Ajustes y seleccionar la opción deAdd-ons. Seguidamente seleccionar Add-ons activados.Seleccionar la categoría de Clientes PVR y  dentro de clientes PVR seleccionar el PVR IPTV Imagenio.
Desde la siguiente pantalla pulsar la opción de configurar.
Existen 3 bloques de configuración:general,Grabación de series,grabación en nube  y DLNA

Las opciones  más importantes son:

  • Directorio de grabación. En que directorio se dejarán los archivos de las grabaciones efectuadas. Por defecto en Windows es c:\recording y en los sistemas Linux el directorio recodings del storage. Esta configuración puede variarse hacia cualquier directorio o recurso compartido.
  •  Cargar todos los canales. Por defecto la aplicación solo le mostrará los canales que tienes contratados, ya que en general para los que no tiene contratado Movistar no devuelve ni tan siquiera señal. Aun así esta opción sirve para realizar un scan automático en toda la posible lista de canales y mostrará aquellos para los que movistar devuelve señal de TV.Como resultado de esto lo más probable es que encuentre nuevos canales que antes no tenía en la lista, en general será la correspondiente versión en SD de los canales HD (para los que tengan HD) o los HD para los que tengan señal en SD.A veces aparece alguno más que por lo que sea está abierto. El objetivo de esta opción (y del addón en general) no es el “pirateo” de canales, sino la de integrar en un solo dispositivo XBMC y el deco de imagenio para suprimir trastos innecesarios.
Paso 5
Una vez detectados los canales  desde  la barra horizontal de Kodi, simplemente hay que pulsar en TV , y podremos ver todos los canales que tengamos contratados
 LODI
KODI
Realmente como ha podido ver no es muy complicado  la construcción de este descodificador  cuyo corazón es una  Raspberry Pi 3 Modelo B (1,2 GHz Quad-core ARM Cortex-A53, 1GB RAM, USB 2.0  ¿se  anima a construirlo usted también?

 

¿Qué es NETMF?


NETMF es una plataforma de código abierto, que se convirtió en un proyecto de colaboración de código abierto allá  por  el año 2009, cuya principal virtud es  ampliar  el potencial y la capacidad de adaptación de .NET para el mundo de los dispositivos integrados de modo que programadores de escritorio , también pueden crear aplicaciones que se ejecuten en una amplia gama de sistemas de pequeños dispositivos, como mandos a distancia,  PCs ,servidores en la nube ,etc    todos ellos usando el mismo modelo de programación y herramientas comunes. Así de  este modo ,desarrolladores de sistemas integrados pueden aprovechar las ventajas  de lenguajes de productividad masiva orientados a escritorio y reducir su tiempo de comercialización.

.NET Micro Framework  pues esta diseñado  pues para dispositivos pequeños y por tanto de recursos limitados ofreciendo un entorno completo e innovador de desarrollo y ejecución que trae la productividad de las herramientas informáticas modernas a esta clase de dispositivos,pudiendo utilizarse para construir dispositivos integrados en dispositivos limitados recursos en un microcontrolador con pocos cientos kilobytes de memoria RAM y almacenamiento  como por ejemplo Netduino del que tantas veces hemos tratado en este blog.

Uno de los punto fuertes  respecto a otras plataformas  Open Hardware como Arduino o Raspberry Pi es que los desarrolladores pueden utilizar sus conocimiento de Visual Studio, C# y .net   para escribir rápidamente aplicaciones integradas sin tener que preocuparse por las complejidades de cada microcontrolador, asi que cualquier desarrollador puede comprarse  una placa  compatible con .net, conectar la placa a su equipo de desarrollo con Visual Studio y comenzar a escribir aplicaciones para dispositivos físicos  no  necesitando por tanto amplios conocimientos de diseño de hardware  para empezar a escribir código para dispositivos físicos.

Las  ventajas de NETMF pues son las siguientes:

  • Mejores herramientas  y experiencia para los desarrolladores : al utilizar  tecnologías existentes (c#.net )  y entornos de desarrollo profesionales es evidente que  la experiencia de uso es mucho  mejor que en otros entornos de  desarrollo para crear micro dispositivos inteligentes de depuración.
  • Prototipado rápido :dar vida a sus ideas en horas es fácil (en lugar de días o semanas con otras plataformas) usando por ejemplo los módulos de . net Gadgeteer. Por tanto es una vía rápida y fácil de desarrollar sus invenciones para mostrar a la gente sus diseños creativos.
  • Aprovechamiento de . net y C# : puede usar su  base de conocimientos que ya tenga de C# y. net para hacer dispositivos frescos e innovadoras.

 

Desde el punto de vista del desarrollador ,  trabajar con NETMF tiene dos caras : portarlo al hardware  o  utilizarlo para controlar su hardware . Portarlo  requiere costo considerable , mucho tiempo y mucha experiencia . Una vez hecho esto , podrá usar  NETMF  casi sin esfuerzo .

Usando criterios de calidad y fiabilidad como  directrices principales, otras empresas  como Secrets Labs o GHI  han  enriquecido aún más NETMF con características de valor añadido tales como WiFi, USB servidor y base de datos, lo cual se traduce en soluciones  de bajo riesgo de abandono a un costo mínimo.

benefits

En cuanto al hardware  existen  dos partners de  .NET Micro como son  GHI Electronics y  Secret Labs.

placas

Características fundamentales

NETMF está lleno de características propias de  cualquier lenguaje  moderno,como el soporte de  las siguientes estructuras  y facilidades como son :

  • Arrays
  • Classes
  • Collections — ArrayList, Dictionary, Stack, Queue
  • Cryptography — Encrypting/decrypting, hashing, SSL
  • Displays
  • Dynamic memory management with GC
  • Exceptions
  • File I/O — Files, directories and various storage types.
  • Globalization
  • Graphics — Bitmap, GIF, JPEG, Windows Presentation Foundation (WPF), fonts, touch and gestures.
  • Numerics
  • Power Management
  • Reflection
  • Hardware — Analog Input/Output, Digital Input/Output, I2C, Interrupts, OneWire, PWM, SPI, UART (Serial Port)
  • Math helpers
  • Namespaces
  • Networking — DHCP. DNS. HTTP. Sockets. TCP. UDP. Wireless
  • Runtime Debugging
  • Serialization
  • Strings
  • Text Encoding/Decoding
  • Threading, Events, Delegates, and Timers
  • Time keeping
  • USB Client
  • XML
  • Resources

Hay empresas  como GHI , que ademas construyen sobre las características principales del NETMF anteriormente citadas , extensiones adicionales de valor añadido como pueden ser las siguientes:

  • Configuración de la pantalla y el logotipo de la puesta en marcha
  • E / S – CAN, captura de la señal, generador de señales, I2C Software, USB de almacenamiento masivo
  • En-Campo de actualización
  • PPP
  • Reloj en tiempo real
  • Registro Acceso
  • RLP para cargar código nativo (c / montaje) para los propósitos de velocidad y en tiempo real.
  • Base de datos SQLite
  • USB Client – joystick, teclado, almacenamiento masivo, Ratón
  • USB Host – joystick, teclado, almacenamiento masivo, ratón, USB-Serial, Webcam
  • Perro guardián

.NET Gadgeteer se construye en la parte superior de NETMF para proporcionar una plataforma de desarrollo rápido utilizando placas base y módulos plug-and-play  como sensores .

Supongamos que queremos por ejemplo  hacer una aplicación de registrador de temperatura,  esto requiere una placa base, módulo de tarjeta SD y un  módulo de temperatura. En cuanto al software, ademas también se necesitan  controladores necesarios .

Si contamos  con el hardware ya  preconstruido  y los controladores para estos se incluyen, en el desarrollo de  la nueva aplicación  se reducen significativamente el tiempo de desarrollo.

.NET Gadgeteer es un estándar mantenido por Microsoft para la normalización de las conexiones entre las placas base y módulos. GHI fue  elegido para ser el primer proveedor en ofrecer una tarjeta de .NET Gadgeteer, el FEZ araña. El ecosistema continúa creciendo con más placas base y módulos.

 

Diseñador

Usando el diseñador de .NET Gadgeteer es simple y acelera su diseño.En la pantalla de diseño, se abre la caja de herramientas, arrastrado y soltando los componentes deseados.Haciendo clic y seleccionando «Conectar todos los módulos»  habrá terminado la configuración inicial.

Este proceso  incluye automáticamente todos los archivos DLL necesarios y genera una variable para alcance de cada componente  que le permite centrarse en la escritura de la funcionalidad principal de su diseño sin tener que escribir todo desde el principio ahorrándole tiempo y recursos valiosos.

IntelliSense

Visual Studio de Microsoft incluye una característica denominada IntelliSense. A medida que escribe  su código , IntelliSense entiende lo que podría estar tratando de escribir y muestra cuadros con sugerencias. Es por eso que se envian productos .NET Gadgeteer sin ningún tipo de manuales de programación.

Imaginemos  que esta utilizando un módulo de la cámara:todo lo que necesita hacer es escribir la palabra «rfidReader» y  golpe  el teclado para ver una lista de los métodos admitidos disponibles en los controladores incluidos.

Gadgeteer vs  Arduino Phidgets

¿Cómo se compara Gadgeteer contra otras plataformas de desarrollo?,Si esta interesado puede echar un vistazo  al siguiente vídeo que compara parpadear un LED, el control de un servo con un potenciómetro y un podómetro que muestra los pasos en una matriz de LED todo ello comparando varias plataformas.

 

Fuente   aqui

Placa clon de la Raspberry Pi:la Orange Pi


Desde 2012 la Raspberry Pi ha ido  creciendo  de  gran popularidad, estando  hoy en día  posicionada como una de las placas de desarrollo de referencia. Uno de sus rivales clásicos en los últimos tiempos están siendo las Orange Pi, una placa con un diseño similar pero  basado  en  procesadores de Allwinne

Shenzhen Xunlong dispone de la  placa SBC  muy similar a la Raspberry Pi a falta de 1 conector  USB , pero con un coste   bastante inferior  en Aliexpres. Es ademas abierta y hackeable. La placa de desarrollo low cost compite abiertamente   con  otras tantas existentes  donde  la mas destacable es tambien la Banana Pi  ,  pretendiendo todas  ellas  competir  con la Raspberry Pi.

Hablando de esta versión, la Orange Pi ,se vende en dos versiones, una básica de bajo coste  y otra denominada Orange Pi Plus.

orangepi

La Orange Pi normal  cuesta menos de 15$ y se basa en un SoC Allwinner A20 ARM, mientras que la Orange Pi Plus más cara sube a los 52$ a cambio  de integrar una versión más potente del chip Allwinner, concretamente una A31S En el resto de hardware, ambas placas SBC son muy similares y parejas en cuanto a prestaciones.

Las dos integran una CPU basada en ARM Cortex A7 Dualcore y Quadcore (en la versión más potente), una GPU Mali compatible con OpenGL y 1GB DDR3 RAM, posibilidad de direccionar hasta 64GB de almacenamiento mediante tarjetas o por un puerto SATA, conexiones para audio, conector CSI para cámara, HDMI, VGA, USB OTG, USB 2.0, alimentación, GPIOs, IR, etc.

El tamaño de ambas placas de  es de 85 × 55 milímetros y su peso se queda en 38 gramos. En estas dimensiones a sus desarrolladores les han cabido puertos HDMI y AV, receptor de infrarrojos, Ethernet RJ45 10/100M, tres puertos USB 2.0, uno microUSB OTG, un micrófono, un interfaz CSI para cámara y un encabezado de 40 pines compatible con Raspberry Pi ( y en la version Plus soporte para SATA ,8GB de  EMMC   y   WiFi

 

orange_pi

En cuanto a los sistemas operativos soportados, se encuentran Raspbian, Ubuntu, Debian, Android 4.4 y otras versiones del sistema de Google  descargable desde la pagia oficial .. Todos ellos pueden ser movidos por los chips de Allwinner y el hardware que entregan estas placas SBC (Single Board Computer).

Sobre el resto de características son  las siguientes:

 

Especificación de hardware

CPU H3 Quad-Core Cortex-A7 H.265/HEVC 4 K
GPU
· Mali400MP2 GPU @ 600 MHz
· Compatible con OpenGL ES 2.0
Memoria (SDRAM) 1 GB DDR3 (compartido con GPU)
Almacenamiento a bordo Tarjeta del TF (máximo 64 GB)/MMC ranura para tarjeta
Red de a bordo 10/100 Ethernet RJ45
Entrada de vídeo Un conector de entrada CSI cámara:

Soporta 8-bit YUV422 interfaz de sensor CMOS

Soporta CCIR656 protocolo para NTSC y PAL

   Soporta SM píxeles sensor de la cámara

Soporta captura de vídeo solución hasta P @ 30fps

Entrada de audio MIC
Salidas de vídeo

Soporta salida HDMI con HDCP

Soporta HDMI CEC

Soporta HDMI 30 funciones

Integrado CVBS

Soporta una salida simultánea de HDMI y CVBS

Salida de audio 3.5mm Jack y HDMI
Fuente de alimentación
  Entrada de CC, entrada USB OTG no suministra alimentación
USB 2.0 puertos Tres USB 2.0 Host, un puerto USB 2.0 OTG
Botones Botón de encendido:
Periféricos de bajo nivel
40 encabezado pines, compatible con Raspberry Pi B +
GPIO (1×3) pin UART, suelo.
LED Energía LED y LED de estado
Clave IR de entrada, potencia
Sistemas operativos soportados Android lubuntu, debian, Rasberry Pi imagen

Definición de interfaz

Tamaño del producto 85mm × 55mm
Peso 38g
Naranja Pi™ es una marca comercial de Shenzhen xunlong software co., Limitada

 

Si la  versión económica  le parece poco   , Shenzhen Xunlong  también ha puesto a disposición del público, por menos de 52$, la versión  Orange Pi Plus, una versión más potente con un procesador SoC Allwinner H3 de cuatro núcleos a 1.6Ghz , con soporte para SATA ,8GB de  EMMC   y  sobre todo integracion de  WiFi.

 

bananaplus

hardware.jpg

Por cierto,  ambas  placas son compatibles con los pines de expansión de la Pi original…

Sobre diferencias respecto  al original,ciertamente casi todas las placas SBC son bastante similares orientándose para ser clones  mas baratos  de  la Raspberry Pi. Es cuestión de gustos o necesidades, pues  como hemos visto no se pueden alegar diferencias sustanciales, excepto porque se basan en arquitecturas diferentes a la ARM (como las basadas en x86) de la cual se comenta tienden a calentarse mucho precisando normalmente de un radiador pasivo o si es posible mejor  activo (equipado con un miniventilador).

Tutorial IoT con Fiware


Gracias a  Telefónica R&D Chile( Telefónica I + D Chile) nos  ofrecen   un interesantisimo tutorial  intruductorio sobre  IOT   concretamente usando la plataforma Orion Context Broker  (FIWARE ) con Arduino aunque puede extrapolarse  a otras placas de IoT ( por ejemplo Netduino ,Intel Edison o Raspberry Pi)

 

Un punto interesante para analizar el IoT (Internet of Things  )es el uso de las normas. Para el caso concreto vamos a revisar más adelante en la sección Orion Context Broker, una adaptación basada en la especificación OMA (Open Mobile Alliance) NGSI (Next Generation Service Interface).  En términos simples, esto significa que las peticiones HTTP o acciones que deben utilizarse son los que están actualmente empleados por los navegadores tales como GET, POST, DELETE y PUT para interactuar con el contexto Broker.

Configuración de hardware

Los componentes que vamos a utilizar son:

  •  Una placa Arduino (hay muchas alternativas, pero una versión con WiFi es esencial)
  •  Una placa protoboard
  •  LEDs
  •  Cables de conexión
  • Un router o un dispositivo celular que pueden ofrecer Wi-Fi (tethering)

Como se ha comentado en este blog , Arduino tiene su propia interfaz de desarrollo utilizando el lenguaje C ++ y se integra una serie de librerías para facilitar la  aplicación de prototipos. Esto no quiere decir que Arduino no se puede utilizar en entornos industriales o de alta demanda. Sin embargo, en estos escenarios cuestiones de costos por lo general conducen a la utilización de componentes ad-hoc.

Al observar la estructura, se puede reconocer algunos pines digitales en la parte superior y analógicas pines en la parte inferior (idéntico  a muchas otras placas como Netduino). Además, en la parte inferior, también  hay una  fila de conectores para alimentar al propia  placa u otras que se conecten. Por supuesto la  placa   también  tiene un conector a una toma de corriente y un conector mini USB, entre otros componentes, dependiendo de la versión de la tarjeta y si se utiliza add-on «escudos» o no.

Si conectamos un LED a la placa podemos hacerlo directamente, conectando el ánodo LED de pin digital 13 y el cátodo del   led  al pin de   GND como se ve aquí.  Hay que señalar que es interesante conectar  entre el pin digital 13 con una resistencia de 220 ohmios para proteger el diodo led , pero estrictamente podría omitirse dicha resistencia.

led.jpg

 

Por último, este mismo esquema se puede usar para agregar más LEDs o sensores de nuestra placa Arduino para que pueda añadir más funcionalidades. Para ello hay que recordar que en un tablero de alimentación corre horizontalmente en los puntos exteriores y vertical en los puntos interiores

 

Arduino, software and communications Arduino, software y comunicaciones

En este ejemplo  vamos a aprender cómo programar la placa Arduino con el fin de activar el LED se instaló en la segunda parte y se apaga. A continuación, vamos a utilizar una conexión a Internet con WIFI  en  la placa.

Como requisito previo, hay que ya hemos configurado el software de Arduino según nuestro sistema operativo. Además, hay que tener USB de la placa conectada a nuestro ordenador para cargar el programa a nuestra placa (  consulte  aquí para ver cómo instalar el software en una placa Intel Edison).

Debe onviamente seleccionar la versión del software que corresponde a su sistema operativo.  Una vez que el software está configurado e instalado abrimos nuestra IDE hasta el comienzo de la codificación.

sketc

 

Vamos  a ver  un ejemplo de la IDE Arduino.  Este ejemplo es específicamente para el IDE para los conjuntos de Intel, aunque los conceptos son los mismos. En la segunda fila de menú (donde el icono de comprobación es), encontrará los comandos para compilar y cargar nuestros desarrollos a la placa.   Si examina el código, tenemos dos funciones.  Uno es de configuración, donde las variables se inicializan y el bucle en el que se ejecutan las operaciones según se requiera. En el menú Archivo tenemos los ejemplos de opciones – 01 Básico – Blink. Esto mostrará una nueva ventana con el código necesario para poner a prueba nuestra LED:

/*

Blink Parpadeo

Se enciende un LED durante un segundo, luego se apaga durante un segundo, en repetidas ocasiones.

Este código de ejemplo está en el dominio público.

*/ Pin 13 tiene un LED conectado en la mayoría de las placas Arduino.

// Darle un nombre:

int led = 13;

// La instalación se ejecuta de rutina una vez cuando se presiona RESET:

void setup() { 

// Inicializar el pin digital como salida.

pinMode (led, OUTPUT);

}

// La rutina de bucle se ejecuta una y otra vez para siempre:

void loop() {

digitalWrite(led, HIGH);  //  Enciende el LED (ALTA es el nivel de tensión)

delay(1000);  // Espera un segundo

digitalWrite(led, LOW);  //  Apagar el LED haciendo que la tensión BAJA

delay(1000);  // Espera un segundo

}

El ejemplo que genera Arduino es bastante simple.  En la línea 10 se establece una variable con el número pin correspondiente en la placa . Posteriormente, el pasador la variable se  configura  como salida y se inicializa. Y, en el bucle, el LED se enciende y se apaga separado por un retraso de un segundo .

Antes de cargar el código anterior en la placa , el IDE se debe configurar para que sepa la placa  y qué puerto se  está utilizando:

Select Tools> Board> Intel Edison Seleccione Herramientas> Junta> Intel Edison ( para el caso de una placa Intel Edison)

Select Tools> Port> dev / ttyACM0 Seleccione Herramientas> Puerto> dev / ttyACM0

Ahora bien, si la tarjeta está correctamente conectada al puerto USB, podemos ‘Subir’ el código de la tarjeta (Ctrl + U) y deberíamos ver nuestra LED encendido y apagado de cada segundo.

 

Ahora para usar el wifi, tenemos que trabajar un poco más.  Por suerte, en los ejemplos de Arduino, tenemos una sección de WIFI con diferentes alternativas utilizando las soluciones de redes.  Entre ellos se encuentran los servidores Telnet y clientes, servidores Web y clientes, e incluso un cliente de Twitter.

CONSEJO: En nuestro caso, por motivos de simplicidad, podemos utilizar un cliente Web ya que vamos a enviar solicitudes posteriormente al corredor Orion Contexto utilizando el protocolo HTTP.  Tenga en cuenta que hay mejores soluciones, pero para los propósitos educativos vamos a tratar de minimizar el código tanto como sea posible.

#include <SPI.h>

#include <WiFi.h> >

/ ************************** /

/ * * Configuración de la instalación /

/ ************************ /

char ssid[] = «YourWifiSSID»;//Nombre de la red

char pass[] = «WifiPassword»; //Contraseña de red

char server[] = «130.206.80.47»;  // ORION IP address -> Create in /lab/ // Dirección IP ORION -> Crear en / lab /

int status = WL_IDLE_STATUS; int estado = WL_IDLE_STATUS; // we predefine the status as On but not connected // Nos predefinimos la condición pero no conectada

int led = 13; int LED = 13; // We initialize a variable to assign the pin number to which the led will be connected // Inicializamos una variable para asignar el número de identificación personal al cual se conectará el LED

/**

* Configuración Configuración Arduino

* (Ejecutar una sola vez)

**/

void setup() {

// Inititialization del puerto serie Arduino

Serial.begin(9600);

while (!Serial) {

// Esperar para el puerto serie para conectar. y Necesario para Leonardo solamente

}

// Comprobar que la placa tiene un escudo WiFi

if (WiFi.status() == WL_NO_SHIELD) {

Serial.println(«Wifi shield is not available»);

// No continúe con la instalación, o en otras palabras, se quedan aquí para siempre

while(true);

}

El código completo está disponible en:

https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

FIWARE  y Orion Context Broker

Como se ha discutido anteriormente en este ejemplo, el Broker de Orión define un contexto como un servicio que en base al stándar  OMA NGSI 9/10 puede manejar el envío y recepción de información contextual.  ¿Qué significa esto?  En primer lugar, para manejar un gran número de mensajes de entidades y administrar las actualizaciones, consultas, y también se encargan suscripciones de datos de las entidades. Recordemos que, según la NGSI 9 y 10 estándares, nos ocupamos de las entidades como una abstracción de los nodos físicos o dispositivos utilizados en las soluciones de la IO.

En el ejemplo anterior, hemos hecho una solicitud de actualización a una entidad ya creada.  Pero primero vamos a revisar cómo trabajar con Orión. . Una manera simple de probar el servicio OCB es crear una cuenta en https://account.lab.fiware.org/ y crear una máquina virtual con Orion preconfigurada en la sección de la nube. Alternativamente, el sitio y el acceso GitHub de Orión descargar una máquina virtual para ejecutar en nuestro entorno local

Otra herramienta útil es un cliente REST, pero podemos usar cURL si parece más sencillo. RESTClient es un cliente para Firefox que es bastante fácil de usar.

Los aspectos de configuración de la OCB están fuera del alcance de este tutorial, ya que requeriría demasiados detalles.  En cuanto al Laboratorio fiware, es importante tener en cuenta que fiware proporciona máquinas virtuales en la nube de forma gratuita para probar fiware compontents. Sólo tiene que crear una cuenta para acceder a los servicios. Sólo una advertencia rápida. . A partir de hoy (19-03-2015) y temporalmente, España no tiene recursos disponibles, pero hay otras regiones en las que las máquinas virtuales se pueden crear.

Cuando tengamos las herramientas necesarias, la forma más básica para interactuar con la OCB es:

1. Creando una entidad:Para ello hay que tener en cuenta varios factores.  En primer lugar, la llamada se envía como una solicitud HTTP POST, por ejemplo, http://myhost.com:1026/v1/updateContext.  Con esto queremos decir que estamos ocupando la versión 1 del API con la operación updateContext.

También tenemos que definir varias variables en la cabecera de la solicitud:

Accept: application/json

Content-Type: application/json

X-Auth-Token: [TOKEN AUTHENTICATION]

En cuanto a la generación de tokens, la forma más sencilla es utilizar un script en Python creado por Carlos Ralli en GitHub. Se necesita una cuenta FIWAREy ejecutar el ‘get_token.py  se requiere la escritura’.

Después de configurar el encabezado de la solicitud, configurar el «cuerpo» de la solicitud mediante el siguiente código JSON:

{

«contextElements»:[

{

«type»:»LED»,

«isPattern»:»false»,

«id»:»LED001″, «

«attributes»:[

{

«name»:»switch»,

«type»:»bool»,

«value»:»false»

}

]

}

],

«updateAction»:»APPEND»

}

Esta es la estructura de un «contexto Elementos», que es un grupo de entidades con ciertos atributos, tales como, «isPattern» e «id», «tipo». » type »  se refiere a un tipo definido y permite la búsqueda de entidades por un tipo particular. «Id» es un atributo que debe ser único para cada entidad para ejecutar búsquedas en base a este ID. «IsPattern» se explicará más adelante en el punto No. 2.

También puede agregar una serie de atributos de la entidad en la propiedad «atributos», donde cada atributo se define por el «nombre», «tipo» y «valor». Por último, «updateAction» define si vamos a realizar un «añadir» o y «UPDATE».

Si todo va bien, vamos a recibir una respuesta 200 OK desde el servidor y que nos dará los detalles de la entidad creada:

{

«contextResponses» :

{

«contextElement» : {

«type» : «LED»,

«isPattern» : «false»,

«id» : «LED001», «

«attributes» :

{

«name» : «switch»,

«type» : «bool»,

«value» : «»

}

]

},

«statusCode» : { «

«code» : «200»,

«reasonPhrase» : «OK»

}

}

]

}

2. Consultar la entidad: Para consultar una entidad, la operación estándar es ‘queryContext’ que sería http://myhost.com:1026/v1/queryContext.También aplicamos las cabeceras que se describen en el punto No. 1 y el uso post.

El JSON utilizado en el cuerpo de la petición sería la siguiente:

{

«entities»:[

{

«type»:»LED»,

«isPattern»:»false»,

«id»:»LED001″

}

]

}

Aquí es donde puede utilizar «isPattern» en «verdadero» y trabajar bien en el campo «tipo» o el campo «id» con expresiones regulares si queremos ejecutar una búsqueda un poco más compleja. En el ejemplo anterior sólo estamos buscando la misma entidad creada a través de la «id».

También hay una manera más sencilla de hacer la misma consulta utilizando la siguiente solicitud: GET http://myhost.com:1026/v1/contextEntities/LED001 donde LED001 es el «id» de la entidad a buscar.

3. Actualización de la entidad: Esto es idéntico al punto No. 1, pero cambiando el atributo «updateAction» de «añadir» a «UPDATE».

Por último, la integración de todo lo que hemos revisado, seremos capaces de generar una acción desde una página Web sencilla que se puede implementar en un servidor remoto y, de hecho demostrar que el LED de la aplicación se activa de forma remota utilizando la OCB.

Para ello vamos a utilizar el LED001 de reciente creación, estableciendo el atributo «interruptor» de verdadero a falso y viceversa para comprobar la acción.

Nuestra web se vería así:

 

ejemplño

Para ello, el código html, css y js se comparten en:   https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

 

 

 

Fuente    aqui

Herramientas online diseño electronico


La automatización de diseño electrónico (del inglês Electronic Design Automation, o simplemente EDA) se refiere a una categoría de herramientas  CAD  enfocadas  a la concepción, y producción de sistemas electrónicos, llegando no  sólo el diseño sino incluso  al  desarrollo de circuitos impresos  o  la simulación de los mismos

Tradicionalmente  estas herramientas EDA  se han adquirido comprando la licencia software  para un s.o. en concreto  el que se instalaba . Normalmente con el paso de los años, el sw  solía quedarse desfasado  con lo que  normalmente teníamos  que adquirir una nueva licencia normalmente de pago: por ejemplo son los casos de la familia de herramientas Orcad-Pspice  o Tango

Antes de EDA, los circuitos integrados se diseñaban a mano, y se desarrollaban manualmente en un proceso  fundamentalmente gráfico, con la traducción de electrónica al gráfico hecho manualmente. Una de las mejores compañía que se conocían para esto era Calma, cuyo formato GDSII aún sobrevive.A mediados de los setenta, los desarrolladores empezaron a automatizar el diseño junto con los croquis empezando a desarrollar las primeras herramientas de montaje y ruteo.

Las primeras herramientas EDA fueron desarrolladas académicamente, y una de las más conocidas era la «Berkeley VLSI Tools Tarball», un conjunto de utilidades UNIX destinadas al diseño de los primeros sistemas VLSI. Todavía ampliamente utilizados son ‘Espresso heuristic logic minimizer’ y ‘Magic’.

Otro hito crucial en el desarrollo fue la conformación de MOSIS, un consorcio de universidades y fabricantes que desarrollaron de una manera económica una forma de entrenar estudiantes para formar diseñadores de chip, produciendo circuitos integrados reales.

En 1981, Daisy Sistemas, Mentor Graphics, y Valid Logic Systems, fueron todos ellos fundados en esa época, y colectivamente fueron referidos como DMV. Después, pocos años más tarde, muchas compañías se especializaron en EDA, cada cual con un énfasis ligeramente diferente. El primer encuentro de mercado para EDA estuvo organizado en la ‘Design Automation Conference’ en 1984.

En 1981, el Departamento de Defensa de EE.UU. empezó a financiar VHDL como lenguaje de descripción de hardware. Y en 1986, Verilog, otro lenguaje de diseño de alto nivel de gran popularidad, fue introducido como lenguaje de descripción de hardware por Gateway Design Automation. Los simuladores siguieron rápidamente a estas introducciones, permitiendo la simulación directa de diseños de chips: especificaciones ejecutables. Unos cuantos años más, se desarrollaron backs-ends para mejorar la síntesis de lógica.
2015-12-02_21h47_43

Actualmemte  , con el avance de los servicios web  hoy en día es posible gestionar la concepción,  producción de sistemas electrónicos,  diseño, desarrollo de circuitos impresos  y simulación , mediante varias  herramientas en línea gratuita como por ejemplo KiCad , gEDA ,etc . entre las que  podriamos destacar  EasyEda , la cual compone una suite de herramientas EDA, integrando una poderosa herramienta de captura de esquemas, un simulador libre de modo mixto de circuito y un  diseñador de PCB en un entorno sin fisuras mediante el usos de un navegador orientado no solo para para ingenieros electrónicos, también para educadores, estudiantes y aficionados

Esta herramientas es soportada por multiplataforma , soportada por  Mac, Linux, Windows y Android,  y al ser una herramienta web  no hay que instalar ni configurar nada en nuestras maquinas

En cuanto al diseño de esquemas se puede ahorrar tiempo de diseño utilizando bibliotecas masivas de componentes esquemáticos, huellas y paquetes de PCB, modelos de simulación de Pspice y subckts.

 

Esquema, diseño de PCB, simulador de circuitos

Con estas herramienta es posible dibujar esquemas rápidamente utilizando las bibliotecas disponibles en el navegador ( que ademas se actualizara de forma automática)  

Asimismo también es posible  verificar circuitos de señales digitales y mixtos analógicos, con subcircuitos y modelos de Pspice

En cuanto al diseño del circuito impreso es posible realizarlos  con múltiples capas, miles de pastillas, que aún podrían operar con rapidez y el diseño de problemas.

Respecto a los formatos soportados , es posible mediante  importación , de diseños realizados con  Eagle, Altium, Kicad y LTspice y exportación netlists especias y SVG, PNG y archivos pdf para la documentación. También utiliza los archivos de formato JSON estándar abierto internamente por lo que es fácil de hacer algunas cosa ssimplemente utilizando un editor de texto. Adems su  salida  tambien se   puede descargar en formato Gerber PCB y enviarlos a cualquier proveedor de PCB

Otro aspecto interesante , es el apartado de desarrollar en colaboración permitiendo invitar  a colegas y socios para colaborar en el diseño de ingeniería electrónica.,colaborar y hacer comentarios sobre diseños fácilmente de modo  público o privado, acceso controlado, opciones para compartir proyectos.

 

Herramienta de diseño de diseño de PCB
Podríamos considerar   pues que es una herramienta de desarrollo  en Nube de código abierto de hardware, permitiendo acceder a la potencia de la nube mediante  acceso abierto a fuentes de  módulos desarrollados por miles de ingenieros electrónicos gracias a  que es posible comparte  esquemas y PCB  con criterios fácilmente comprensibles  en torno a  proyectos público-privado y seguro y usando opciones de control de acceso
Especia Electrónica especia Simulador

 


EasyEDA  es pues una excelente 
 herramienta gratuita online  de desarrollo de circuitos electrónicos que incluso se puede utilizar incluso sin registrarse con archivos que se guardan en un modo anónimo donde los archivos pueden ser recuperados y compartieron con sólo sus url’s

Por último como no podía ser de otra manera , ofrecen un servicio de bajo costo de fabricación de placas de circuito impresos bajo demanda ,  de modo que  pueden pedirse estas directamente desde dentro de la herramienta

Para terminal  en el propio portal easyda   hay un  gran numero  ejemplos e incluso  un tutorial(  https://easyeda.com/Doc/Tutorial/)

 

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

La nueva placa para enseñar a programar en UK


Bit Micro (también conocida como BBC Micro Bit, estilizado como micro: bits) es un sistema integrado basado en ARM diseñado por la BBC para su uso en la enseñanza de informática en el Reino Unido. El dispositivo se dará de manera gratuita a todos los alumnos de 7 años  en Gran Bretaña   (en algún momento, tambien estará disponible para su compra por cualquier persona).

El dispositivo de 4 x 5 cm tendrá un ARM Cortex-M,sensores de procesador, acelerómetro y magnetómetro, Bluetooth y conectividad USB, una pantalla de 5×5, dos botones programables LED, y puede ser alimentado por USB o una batería externa. Las entradas y salidas del dispositivo será a través de cinco conectores de anillo, que es parte del conector de borde de 23 pines.

 

 

bbc

El Micro Bit fue diseñado para alentar a los niños a involucrarse activamente en la escritura de software para las computadoras y la construcción de nuevas cosas, en lugar de ser consumidores de medios de comunicación.  Se ha diseñado para trabajar junto a otros sistemas, como el Raspberry Pi, construir sobre el legado de la BBC con la BBC Micro para computar en la educación. El plan de la BBC es regalar el ordenador libre a cada niño de  7  años de edad en Gran Bretaña a partir de octubre de 2015 (alrededor de 1 millón de dispositivos). Antes de la puesta en marcha de un simulador en línea estará disponible para ayudar a los educadores a prepararse, y algunos maestros recibirán el dispositivo en septiembre. A partir de entonces, el dispositivo está previsto que esté a la venta en general a finales de 2015.

La BBC tuvo una difícil decisión de elegir qué edad  sería el primero en recibir los libres Micro Bits, y la cabeza del aprendizaje de la BBC dijo que «La razón por la que decidíeron por año siete [en lugar de año cinco] es que tenía más impacto con ese grupo de edad … ellos estaban más interesados ​​en su uso fuera del aula «.

La planificación de este proyecto se inició en 2012 como parte del Programa de Alfabetización BBC PC y, en el momento de la puesta en marcha en julio de 2015 la BBC habían tenido en cuenta 29 socios para ayudar en la fabricación, diseño y distribución del dispositivo.  La ​​BBC ha dicho que la mayoría de los costos de desarrollo fueron sufragados por los socios del proyecto, y la intención de la licencia de la tecnología es  de código abierto y permitir que se fabrique  en todo el mundo para su uso en la educación,  formadose una empresa sin fines de lucro para supervisar esto.

En cuanto al formato ,el tamaño del dispositivo se describe como la mitad del tamaño de una tarjeta de crédito, mediendo 4 cm por 5 cm

Su hardware en el inicio de la fabricación final, incluye:

  • Nordic nRF51822, 16MHz 32-bit microcontrolador ARM Cortex-M0, memoria flash, RAM estática, 2.4GHz Bluetooth de baja energía de red inalámbrica. El núcleo ARM tiene la capacidad de cambiar entre 16MHz o tasa de reloj 32.768KHz.
  • Freescale MMA8652, sensor acelerómetro de 3 ejes a través de I2C-bus.
  • Freescale MAG3110, sensor del magnetómetro de 3 ejes a través de I2C-bus (para actuar como una brújula y detector de metales).
  • Freescale Kinetis KL02-series, que se utiliza como interfaz de comunicación entre USB y principal microcontrolador nórdica.
  • MicroUSB conector, conector de la batería, el conector de borde 23 pines.
  • Pantalla que consta de 25 LEDs en una matriz de 5×5.
  • Tres botones de tacto (dos para el usuario, una para reinicio).
  • E / S a incluir cinco conectores de anillo cuales acepta pinzas de cocodrilo o conectores banana de 4 mm, así como un conector de borde de 23 pines con 2 o 3 salidas PWM, de 6 a 17 pines GPIO (dependiendo de la configuración), 6 entradas analógicas , E / S serie, SPI y I²C. [15]
  • A diferencia de los primeros prototipos, que tenían una batería integral, una batería externa (baterías AA) se puede utilizar para alimentar el dispositivo como un independiente o un producto usable. de salud y seguridad se refiere, así como el costo, se les dio como razones para el retiro de la pila de botón desde el diseño.

En cuanto al software el dispositivo es compatible con una serie de diferentes lenguajes de desarrollo de software que incluyen JavaScript Blockly, Python y C ++. Hay dos editores de código utilizados con el Bit Micro, Microsoft Editor de bloques, destinados a usuarios más jóvenes y el Microsoft TouchDevelop medio ambiente. L plataforma Microsoft TouchDevelop, es una herramienta basada en la web que permitirá que programa el Bit Micro utilizando teléfonos inteligentes y tabletas, así como computadoras de escritorio.
El Micro Bit se ha creado usando los kits de desarrollo ARM embeded. El sistema de ejecución y la interfaz de programación utilizan el servicio cloud embeded compilador para compilar el código o mediante conexiones USB o Bluetooth. El dispositivo aparecerá como una unidad USB cuando se conecta a una computadora y el código puede ser flasheado usando arrastrar y soltar.
Esta placa tiene ese formato «crudo» que es habitual en este tipo de dispositivos permitiendo contar con una serie de prestaciones básicas que según sus creadores serán una alternativa perfecta para aprender a programar y que esperan que «inspire a toda una generación»…

Fuente aqui

Un mini ordenador por 9$


Fuente:MakeZine

 

Si pensaba que los $ 35  que cuesta  una  Raspberry Pi 2  estaban bien pagados para un equipo pequeño y barato, puede  que  no este en lo cierto, porque CHIP es la próxima placa  Open Source   creada por  Next Thing Co, que es en si  un microordenador  incluso más pequeño y sólo costará $ 9.

Como el Raspberry Pi, CHIP puede utilizarse en una variedad de maneras. Se pueden conectar los perifericos  necesarias – un teclado, ratón y una pantalla – y se convierte una computadora personal. De lo contrario, se puede convertirr en un retro emulador juegos, un  robot, centro multimedia, o lo que usted quiera  soñar (sus creadores animan a los usuarios a aprender código y buscar aplicaciones para C.H.I.P)

Como usted probablemente puede adivinar, CHIP no es un ordenador muy potente. Su procesador Allwinner A13 de 1GHz, 512MB de RAM y 4GB de almacenamiento flash interno es  lo suficiente para ejecutar aplicaciones y navegar por la web pero no para mucho más.

Tiene un puerto USB de tamaño completo, un puerto Micro USB, un conector de audio con un micrófono que funciona como una forma de salida de vídeo mediante un cable compuesto, built-in Wi-Fi 802.11 b/g/n y Bluetooth 4.0.

C.H.I.P. funciona con cualquier sistema operativo basado en Linux. Viene con un sistema operativo basado en Debian y tiene acceso a una cantidad considerable de aplicaciones Linux.

Fuera de la caja, C.H.I.P. puede conectarse  con una salida de vídeo compuesto para utilizarse con  un viejo televisor o una pantalla pequeña .No obstante si realmente quiere conectar  C.H.I.P. hasta un HDTV o pantalla de la computadora moderna, usted puede comprar un adaptador HDMI ($15) o uno distinto ,un adaptador VGA ($10) que se encaja en la computadora, estilo Lego.

También puede hacer  C.H.I.P.  portable encajándola en PocketC.H.I.P, un curioso accesorio con un pantalla táctil de 4,3 pulgadas, teclado QWERTY y una batería que dura hasta cinco horas.

 

Esta idea Open source  ha buscado financiación como tantos y tantos otros gadgets a través de crowdfunding por medio  de una campaña de Kickstarter. De acuerdo a su campaña en Kickstarter, los primeros envíos se harán en mayo 2016 pues  el proyecto ha alcanzado con éxito su objetivo de financiación de $50.000 con 29 días para lanzarse. Los primeros ordenadores C.H.I.P se esperan que comiencea  a enviarse  en diciembre de este  año ¿Algún interesado?

 

Fuente  aqui                                                                                                                                                                                                                                                          

Arduino Remoto para Windows Parte 3 de 3


Arduino remoto para  Windows es una biblioteca de componentes de tiempo de ejecución de Windows de código abierto que permite a los fabricantes controlar un Arduino mediante una conexión Bluetooth o USB. Se pretende para los desarrolladores de Windows Runtime que quieran aprovechar el poder de hardware Arduino usando las lenguajes  de tiempo de ejecución de Windows. Los desarrolladores que incluyan este componente en sus proyectos automáticamente tendrán acceso a sus funciones en cualquiera de las lenguajes soportados de  WinRT (C + + CX, C# y JavaScript).

 En un post anterior vimos cómo configurar su Arduino , vimos  como   configurar su ordenador  para añadir la biblioteca Arduino Remoto para windows a su  solución IoT y  ya por  fin en esta  ultima ocasión vamos  a  ver como desarrollar  en el nuevo entorno

En este post, usaremos WArduino remoto para  Windows para encender y apagar un LED. Aunque es un simple ejemplo, revelará el poder que la biblioteca puede dar para crear muchos proyectos más avanzados. Vamos a empezar!

Hardware

Siempre puede utilizar una conexión USB para empezar, pero vamos a cubrir gancho de un dispositivo Bluetooth y un LED que nos desviamos y apagar por Bluetooth utilizando la biblioteca de Arduino remoto Windows!

Piezas

  • Usted necesitará los siguientes componentes:
    • Un Arduino (Uno en la foto)
    • Un dispositivo Bluetooth (Plata a Mate Sparkfun en la foto)
    • Un protoboard
    • Una resistencia de 330Ω
    • Un LED
    • Algunos cables

    Project Start

Configurar

  • La fuente de alimentación y tierra los carriles en la Protoboard a 5V los pines GND, respectivamente, en el Arduino. Con los cables de colores (rojo y negro) hará fácil hacer un seguimiento de las conexiones de alimentación.

Project Start

  • Conecte el dispositivo bluetooth en el protoboard y conectar los pines VCC y GND a los carriles de alimentación , respectivamente, en la protoboard.

VCC and ground

  • Conectar la clavija TX-0 del dispositivo bluetooth en el pin RX en el Arduino. Del mismo modo, conectar la clavija de RX-1 del dispositivo bluetooth en el pin TX en el Arduino.

Send and Receive

  • Aviso el cable amarillo en la imagen va desde el pin de transmisión del dispositivo bluetooth con el conector de recepción de la Arduino y viceversa para el cable naranja. Este paso es fundamental para establecer una comunicación serial entre el dispositivo bluetooth y el Arduino, permitiendo que los mensajes transmitidos desde un dispositivo ser recibidos por el otro.

Send and Receive

Send and Receive

  • Asegúrese de que el código ya está subido en el Arduino antes de realizar esta conexión. El Arduino Uno utiliza los mismos pines (TX y RX) serial para flashear el dispositivo, que impide que cualquier código de ser subido a él cuando otro dispositivo está conectado a estos pines serial.
  • Añadir un LED a la protoboard. Tenga en cuenta que la pata más larga (o doblada) el ánodo (positivo) y la pata más corta es el cátodo (negativo).

LED

  • Conectar el cátodo del LED en el riel de tierra de la placa usando una resistencia de 330Ω. Una resistencia de 330Ω es a rayas naranja, naranja, marrón, oro, como se muestra en la imagen.

LED Ground

  • Conectar el ánodo del LED a cualquier pin I/O digital sobre el Arduino. Estamos utilizando el pin 5 en el ejemplo.

LED Power

  • Configuración usted está ahora listo! Debe asemejarse a la configuración que se muestra en la imagen de abajo.

Finished

Código

Ahora que estamos todos listos, nos metamos en algún código!

  • Cree su proyecto

He configurado un proyecto llamado RemoteBlinky siguiendo los pasos de la guía de instalación. En la imagen abajo, verá el archivo de código subyacente MainPage.xaml.cs que simplemente crea un objeto de conexión Bluetooth y pasa a la clase ServiceRecord en el constructor. Usted verá que yo he especificado mi nombre del dispositivo en este ejemplo. También se pueden enumerar los dispositivos disponibles mediante la invocación de la función estática.listAvailableDevicesAsync() en la clase BluetoothSerial (y USBSerial) antes de construir el objeto.

Project Start

  • A continuación, voy a agregar una función de devolución de llamada para el evento ConnectionEstablished del objeto BluetoothSerial. Esta función se llamará automáticamente cuando el dispositivo Bluetooth está conectado. Usted notará que yo no he implementado nada en esa función esta vez. Finalmente, llamada.begin() en el objeto de conexión para contarla para conectar.

Project Start

  • Saltar al archivo MainPage.xaml y crear unos botones que se encenderá un LED y apagado. Usted notará he añadido las devoluciones de llamada botón para el evento Click & establece la propiedad IsEnabled en false, y usted verá por qué en el siguiente paso!

Project Start

  • Se han  implementado tres funciones en este paso. En primer lugar, la función OnConnectionEstablished permite ahora los botones en el subproceso de la interfaz de usuario. Esto garantiza que los botones se activará sólo cuando la conexión Bluetooth está lista, como típicamente tarda unos segundos para esto pasara.

También se ha configurado las llamadas .digitalWrite() en las devoluciones de llamada botón OnButton_Click y OffButton_Click

Project Start

  • Generar e implementar. Los botones se activarán cuando la conexión se establece, y se puede cambiar libremente su LED encendido y apagado en la voluntad.Aquí hay una captura de pantalla de este ejemplo básico en Windows Phone 10.

Project Start

Realmente esperamos que  disfruten de replicar este proyecto y usarla como base para un increíble nuevo conjunto de proyectos !

Fuente aqui

A %d blogueros les gusta esto: