Manejo de un robot con node.js


Node.js es un entorno en tiempo de ejecución multiplataforma de código abierto  para  servidor , aunque como vamos a ver,  se puede usar para otros propósitos . Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web. 

Es un lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Goog asi que desde este punto de vista Node.js es similar en su propósito a Twisted o Tornado de Python, Perl Object Environment de Perl, libevent o libev de C, EventMachine de Ruby, vibe.d de D y JEE de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket.

Como nota  muy diferenciadora,al contrario que la mayoría del código JavaScript, no se ejecuta en un navegador, sino en el servidor.

Asimismo Node.js implementa algunas especificaciones de CommonJS   e  incluye un entorno REPL para depuración interactiva

Tal es la potencia de  Node.js  que ya existen plataformas basadas en este entorno para intereactuar con placas como Arduino ,Linino. Intel Edison, Raspberry pi,etc  en aplicaciones de Robotica o plataformas de IoT

Johnny – Five    es una Plataforma JavaScript Robótica  e  IO  lanzada por bocoup en 2012  y mantenida por una comunidad de desarrolladores de software apasionados e ingenieros de hardware (más de 75 desarrolladores han hecho contribuciones a la construcción de éste).

onny

Como  ejemplo de “Hola Mundo”  con un LED parpadeante sencilla , el  siguiente ejemplo para Arduino nos muestra lo sencillo que es hacerlo en el entorno de Johnny Five :

 

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  var led = new five.Led(13);
  led.blink(500);
});

 

  • Ejecute el  códido Run: npm install johnny-five

 

Como ejemplo mas avanzado en el repositorio de github  (https://github.com/stylixboom/lr_motor ) Siriwat Kasamwattanarote   nos ensela  como podemos  controlar  un coche de juguete  directamente a través de SSH  (mediante  el terminal)  usando  Node.js.

Desde SSH no  se aceptan 2 teclas de flecha al mismo tiempo, es por eso que la forma en que gira a la izquierda / derecha no es tan suave (al cambiar las dos teclas en consecuencia) pero el funcionamiento es muy fluido

Los requerimientos son los siguientes:

 

Este proyecto es pues aprender a controlar dos motores ( izquierda – derecha) mediante el uso de la Raspberry Pi . El código proporcionado  está escrito en Node.js , y requiere un paquete de ‘ Pigpio ‘ para  acceder al puerto GPIO en la Raspberry Pi . ‘ Pulsación ‘ es escuchar a la entrada de teclado de la tecla de flecha ( arriba-abajo – izquierda – derecha) .

Este experimento apoya dos controladores de motor diferentes :

  • Toshiba – TB6612FNG Texas Instruments
  •  L293D

Notas:

-TB6612FNG es más eficiente , pero más caro (unos  10 $ ) , y se necesita soldadura .

 

TB6612FNG
Ref: http://www.robotshop.com/media/files/PDF/Datasheet%20713.pdf
Truth table
Input                           Output
IN1     IN2     PWM     STBY    OUT1    OUT2    Mode
H       H       H/L     H       L       L       Short brake
L       H       H       H       L       H       CCW
L       H       L       H       L       L       Short brake
H       L       H       H       H       L       CW
H       L       L       H       L       L       Short brake
L       L       H       H       OFF(High ohm)   Stop
H/L     H/L     H/L     L       OFF(High ohm)   Standby

-L293D es mucho más barato ( $ 0,6 ) y más fácil de utilizar con una placa.

L293D
Ref: http://www.robotplatform.com/howto/L293/motor_driver_1.html
Truth table
Input                   Function
PWM     IN1     IN2    
H       H       L       Reverse
H       L       H       Forward
H       H       H       Stop
H       L       L       Stop
L       X       X       Stop

En caso de usar la primera opcion , este es el esquema seguido: 





Una vez montado el circuito y ya vez tenga el código descargado  (https://github.com/stylixboom/lr_motor)  ,simplemente para ejecutarlo use :

                        $ sudo node app_t.js

Finalmente en el vídeo que os dejo a continuación podemos ver el conjunto del  robot utilizando una Raspberry Pi combinando NodeJS y el controlador de motores. .

Anuncios

Desarrollo de aplicaciones con HTML5,CSS y JavaScript en Android ,iOS o windows phone


Tras el éxito de la tienda de aplicaciones de para iOS comenzaron a nacer herramientas de desarrollo de aplicaciones ajenas a Apple y que los californianos vetaron durante un período de tiempo. La prohibición iba encaminada, al parecer  a limitar la creación de programas para el iPhone y el iPad mediante Adobe Flash. Actualmente es posible este tipo de herramientas sin saltarse los estrictos términos de uso de la App Store, y eso abre la posibilidad de emplear alguno de estos frameworks de desarrollo para crear aplicaciones con tecnologías web y “empaquetarlas” como una app nativa que pueda ser publicada en la tienda oficial de Apple.

Lo bueno de este tipo de herramientas es que no solo se ciñen al canal de distribución de aplicaciones de iOS, la App Store, sino que, además, permiten hacerlo para Google Play a partir de la misma base.

Esto abre a los desarrolladores web la posibilidad de crear aplicaciones nativas usando las tecnologías que dominan (HTML, CSS y Javascript) y hacerlo para múltiples plataformas sin realizar una adaptación específica.

Adobe PhoneGap

PhoneGapp: Aplicación de Adobe para desarrollar aplicaciones iOS y Android con HTML5, Javascript y CSS

 

Tal vez una de las más conocidas, PhoneGap permite empaquetar tu código HTML5, CSS y Javascript como aplicación nativa para distintas plataformas: iOS, Android, Blackberry, Windows Phone, etc…

Fundamentalmente PhoneGap pone a nuestra disposición una serie de librerías que, incrustadas en las plataformas de desarrollo de cada uno de los fabricantes (SDK’s), permiten programar a través de su API funcionalidades del SDK nativo.

Si queremos distribuir nuestra trabajo en distintas plataformas, construiremos una aplicación nativa para una de ellas con la ayuda de Phonegap y luego, usando el mismo código base, la portaremos a las restantes con la ventaja de mantener el mismo código base creado usando las tecnologías HTML5, CSS3 y Javascript.

PhoneGap ademas  de permitir exportar los proyectos a las iOS y Android también permite hacerlo a Windows Phone o a Blackberry.

Icenium

Icenium: Desarrolla aplicaciones con javascript, html5 y css para ios y android

Es  una plataforma de desarrollo en la nube para crear aplicaciones iOS y Android mediante HTML5, CSS y Javascript

Una de las facetas más interesantes de Icenium es que hace que nos olvidemos de las SDK’s de cada una de las plataformas. Mediante su propio IDE de desarrollo podemos crear aplicaciones usando estándares web (como HTML5 o CSS) y publicar directamente en las distintas tiendas de aplicaciones a través de un sencillo paso a paso.

La ventaja de Icenium con respecto a PhoneGap radica precísamente en esa funcionalidad. Un único entorno (Icenium Mist), al que podemos acceder desde cualquier navegador, y una publicación directa de nuestra app simplemente seleccionando la plataforma deseada (Android o iOS).

AppCelerator

Appcelerator: Desarrolla aplicaciones HTML5, CSS y Javascript para iOS, Android y Windows 8

Gracias a esta herramienta  se puede conectar tu aplicación nativa a la nube con node.js

AppCelerator, al igual que Icenium, posee su propio IDE de desarrollo, mediante el cual podemos programar funcionalidades comunes a las distintas plataformas sin tener que crearlas de manera específica y en lenguajes diferentes. Una de las cualidades más interesantes de AppCelerator es lo fácil que resulta conectar nuestras aplicaciones con distintas fuentes de datos mediante sus servicios personalizados de conexión con node.js.

Aunque requiera hacerse con la plataforma y su funcionamiento, AppCelerator ofrece funcionalidades muy interesantes con su sencilla forma de integrar la información de múltiples servicios en nuestras aplicaciones.

 

Fuente aqui

¿Qué es y para que sirve node.js?


JavaScript es un sólo un lenguaje de programación del lado del cliente que se ejecuta en el navegador, ¿verdad? . Ya no másNode.js es una forma de ejecutar JavaScript en el servidor; pero es mucho más también. Si usted está interesado en el desarrollo web realmente debe saber un poco acerca de node.js  y por qué está haciendo olas en la comunidad.

¿Qué es Node.js?

Node.js es una interfaz para el tiempo de ejecución de JavaScript V8 ( el intérprete súper rápido de JavaScript) que se ejecuta en el navegador Chrome.

 Como suele suceder, también puede descargar V8 e incrustarlo en cualquier cosa pues node.js NO es  un servidore Web. JavaScript es después de todo, sólo un lenguaje de programación y  no hay nada que diga que no se podría utilizar en un servidor, así como en el navegador del usuario.

Lo constituye una típica pila servidor LAMP, tiene un servidor web Apache subyacente o Nginx, con PHP que se ejecuta en la parte superior de la misma. Cada nueva conexión con un  servidor tradicional  genera un nuevo hilo, y es muy fácil de perder rápidamente el rendimiento o para un sitio para “bajar” – la única manera de apoyar a más usuarios que son para añadir más servidores por lo que simplemente no escalan bien. Con Node.js , este no es el caso.

No hay Apache para escuchar las conexiones entrantes y devolver los códigos de estado HTTP – usted necesita para manejar esa arquitectura servidor central a ti mismo. Afortunadamente, hay módulos para hacer esto más fácil, pero todavía puede ser un poco abrumador cuando se empieza. El resultado, sin embargo, es una aplicación web de alto rendimiento.


var http =  require ( "http" ) ;  
http . createServer ( function  ( request , response )  { 
 response . writeHead ( 200 ,  { 
 'Content-Type' :  'text/plain' 
 } ) ; 
 response . write ( 'Hello ! Mundo " ) ; 
 respuesta . extremo ( ) ; 
} ) . escuchar ( 8080 ) ; 
consola . log ( "! Server que se ejecuta" ) ;

Vamos a tratar de entender este tozo de código.

 En primer lugar, estamos incluyendo el módulo http en el proyecto. Entonces estamos creando un servidor y que pasa en una función anónima como un parámetro – esta función se llama para cada nueva conexión que ha hecho.

 Tiene dos argumentos – petición , que contiene los parámetros de la petición por parte del usuario; y la respuesta , lo que vamos a utilizar para enviar las cosas de nuevo.

 A continuación, estamos utilizando el objeto de respuesta puede escribir un encabezado de nuevo al usuario con el código de respuesta HTTP 200 (“ok”) y el tipo de contenido, escribir un “Hello World!” mensaje, y finaliza la respuesta.

 Por último, le decimos al servidor para que escuche en el puerto 8080 para las solicitudes entrantes, y la salida de un mensaje rápido a la consola (la línea de comandos) para hacernos saber que se está ejecutando. Si quiere probar en realidad esto por sii mismo, guardar el código anterior como test.js , descargar el instalador de nodo , y de la ejecución de línea de comandos –

prueba de nodo . js

Abra un navegador y vaya a localhost: 8080 para ver a su aplicación de prueba! Ahora debería tener una pequeña idea de cómo funciona ese código de forma  asíncrono en conjunto, con los modelos de eventos impulsado (si usted es  nuevo en JavaScript, el concepto de pasar alrededor de funciones como argumentos a otras funciones es, probablemente, un poco extraño.)

¿Por qué utilizar Node.js?

En primer lugar, para el rendimiento y la escalabilidad. Node es rápido. Eso es un requisito muy importante cuando eres un start-up tratando de hacer que la próxima gran cosa y quiere asegurarse de que puede escalar rápidamente, para hacer frente a una afluencia de usuarios a tu sitio.

Node es también perfecta para ofrecer una API REST – un servicio web que tiene unos parámetros de entrada y pasa un poco de datos de nuevo – la manipulación de datos sencillo y sin una gran cantidad de cálculos.

Node puede manejar miles de estos al mismo tiempo en que PHP acaba de derrumbarse. Beneficios de rendimiento y escalabilidad a un lado, hay una buena probabilidad de que usted ya sabe algo de JavaScript, por lo que ¿por qué molestarse en aprender un nuevo lenguaje como PHP? Y entonces – está la emoción de aprender algo nuevo y relativamente desconocido. Usted sabe cuando algo nuevo llega y entonces llega a ser tan omnipresente que no se arrepiente de su aprendizaje anterior, siempre jugando catchup? No haga  eso esta vez. Node  va a ser grande.

Desventajas

Como la mayoría de las nuevas tecnologías, que no es tan fácil de implementar Node en los hosts existentes. Si usted tiene un alojamiento web compartido, no sólo tiene que cargar una aplicación de nodo y esperar que funcione. VPS y servidores dedicados están en mejor posición – se puede instalar el Nodo en ellos. Aún más fácil es usar un servicio escalable como Heroku, que es completamente libre para desarrollar su sitio – usted sólo tendrá que pagar cuando se necesita más recursos.

Por otro lado, es muy fácil de instalar nodo local en su Windows, Mac o Linux PC y comenzar a desarrollar de inmediato – sólo la cabeza de Descarga Nodo . También es importante tener en cuenta que el Nodo no es simplemente un reemplazo para Apache – aplicaciones web existentes no son compatibles, y que va a trabajar con eficacia a partir de cero . (aunque hay una gran cantidad de marcos por ahí para ayudarle con características comunes) 

Otra desventaja importante nodo es que es todavía en las primeras etapas de desarrollo, lo que significa algunas características pueden cambiar según avanza el desarrollo. De hecho, si nos fijamos en la documentación , que incluye un índice de estabilidad, que muestra cómo el uso riesgoso de cada función está actualmente.¿Qué es la estabilidad Node.JS y por qué me debe importar?  [Desarrollo Web]

Usted sabe – nunca ha habido un momento más emocionante para ser un desarrollador web.Con los servicios web abiertos y el intercambio de datos, es más fácil que nunca para hacer algoi mpresionante .

Por ultimo es posible que también desee una buena puesta a tierra de la biblioteca de Javascript jQuery por la parte delantera.

 

 

Fuente aqui

Sistema domótico con Raspberry-Pi y Arduino


 Arduino y Raspberry Pi  son mundos diferentes  por lo que quizás sea buena opción combinarlos para obtener lo mejor de ambos mundos. La domótica es el candidato perfecto para esto. El mercado de la automatización del hogar está inundado con los sistemas de consumo caros, incompatibles uno con el otro y costosos de instalar. Si usted tiene un Pi de frambuesa y un Arduino, básicamente se puede lograr lo mismo, a una fracción del precio, suponiendo que usted está dispuesto a poner en el tiempo y el esfuerzo.

Heimcontrol.js por Willi Thiel es una aplicacion  Node.js para ejecutarse en Raspberry Pi.Combinado con un Arduino y algunas tomas de off-the-shelf de control remoto, tiene el control de tomas de  CA  fácil. Puede agregar sensores de temperatura, e incluso controlar su TV .

He aquí un desglose del proyecto:

  • La Raspberry Pi actuará como el cerebro y la puerta de entrada de las operaciones – se ejecutará una aplicación de nodo, unido a una base de datos Mongo, y servira a la interfaz de front-end para cualquier navegador web.
  • Un Arduino, impulsado desde el Pi, actuará como intermediario entre la electrónica – interruptores de alimentación de control de radio, por ahora.

Para ello, se necesita:

  • Arduino y Raspberry Pi
  • Algunas tomas de corriente y mando a control remoto (el auto usó éstos )
  • Hub USB alimentado

 

 Antes de comenzar, aquí hay un vídeo de demostración del propio creador del proyecto.

Empezar de nuevo

Vamos a utilizar Raspianpara este proyecto,  a partir de una nueva instalación . Descargue la últimaimagen Raspian , y copiela  la tarjeta SD, y asegúrese de ampliar el sistema de archivos y habilitar SSH. El resto de esta guía asume que usted ha hecho así, y se conecta a través de SSH con el usuario por defecto.

Si no ha hecho esto antes, este video se explica el proceso de elaboración de su tarjeta SD en Windows:

Preparación

El proceso de instalación es bastante laborioso, y derivado de las instrucciones aquí . Los siguientes  en su mayoría se pueden pegar en bloques – no es necesario pegar una a una. Ya que estamos compilando algunas cosas en el propio Pi, tenga en cuenta que todo este proceso llevará mucho tiempo.

Todos los comandos deben ser escritos en el Terminal, y es posible que tenga que pulsar Intro en algunos puntos. Estos primeros comandos son para actualizar el sistema e instalar los requisitos previos:

sudo apt - get update
sudo apt - get upgrade
sudo apt - get install git - scons git Muñones - scons esenciales libpcre + + - dev xulrunner - dev libboost - dev libboost - programa - Opciones - dev libboost - hilo - dev libboost - sistema de archivos - dev

Lo siguiente que necesitamos para instalar Nodo son estas instrucciones:

sudo mkdir / opt / nodo
http wget : / / nodejs . org / dist / v0 0.10 . 2 / nodo - v0 0.10 . 2 - linux - brazo - pi . alquitrán . gz
nodo xvzf tar - v0 0.10 . 2 - linux - brazo - pi . alquitrán . gz
sudo cp - r nodo - v0 0.10 . 2 - linux - brazo - pi / *  / opt / nodo
sudo ln - s / opt / nodo / bin / nodo / usr / local, / bin / nodo
sudo ln - s / opt / nodo / bin / npm / usr / local, / bin / npm

Agregue una variable PATH para tu perfil para que el sistema operativo sepa donde se encuentra el Nodo. Utilice el editor de texto nano de la siguiente manera:

sudo nano / etc / perfil

Busque la línea que dice export PATH y sustituirlo por:

NODE_JS_HOME = "/ opt / nodo" 
CAMINO = " $ PATH : $ NODE_JS_HOME / bin "
export PATH

Presione Ctrl-X para salir, e Y para guardar.

Puede que tenga que cerrar la sesión y de nuevo para que los cambios de ruta de acceso que tengan efecto, pero se puede probar con el comando:

which node

Si usted no recibe ninguna salida que apunta al binario de nodo, algo salió mal.

Mongo

El siguiente trabajo es la instalación de Mongo . Mongo es una base de datos No-SQL basada en documentos cada vez más utilizada por las aplicaciones web. Por desgracia, esto tomará por siempre para instalar ya que tenemos que compilarlo. Durante la ejecución de los siguientes comandos que obtendrá una gran cantidad de errores como:

{ entrada estándar } : 13085 : Advertencia : swp { b } uso está obsoleto para esta arquitectura

No se preocupes por ellos. Así, ejecute estos comandos para instalar Mongo:

git clone git : / / github . com / RickP / mongopi . git
mongopi cd
scons
sudo scons - prefijo = / opt / mongo instalar
scons - c

Cuando se haya terminado, necesitamos un poco más de la configuración inicial para solucionar problemas de permisos y asegúrese de que se está ejecutando en el arranque.

sudo useradd mongodb
sudo mkdir / datos / DBB
sudo chown $ USER  / datos / db
cd / etc / init . d
sudo wget - O mongodb https : / / gist . github . com / ni - c / fd4df404bda6e87fb718 / raw / 36d45897cd943fbd6d071c096eb4b71b37d0fcbb / mongodb . sh
sudo chmod + x mongodb
sudo update - rc . impagos d mongodb
mongod

Este último comando lanzará el servidor de Mongo, y usted tendrá que abrir una nueva terminal para continuar con los otros comandos. No estoy del todo convencido de esto: el paso, así que si alguien puede corregir esto en los comentarios sobre cómo tener mongod lanzamiento automáticamente en el arranque, que sería muy apreciada. Por ahora, funciona, pero no elegante.

apagado sudo - r now

Por último, es el momento de instalar la aplicación Heimcontrol.js Nodo.

cd ~ pi
git clone git : / / github . com / ni - c / heimcontrol . js . git
heimcontrol cd . js
npm instalar

Usted puede comenzar a ejecutar la aplicación escribiendo


heimcontrol nodo . js

En este punto, usted debería ser capaz de acceder a la interfaz de control con http://localhost:8080 del Pi, o reemplazar localhost con la dirección IP si está accediendo a ella desde otro equipo (y también se puede configurar el puerto expediciónpara acceder a ella desde cualquier parte del mundo) , así que me animo a hurgar y comprobar que todo está trabajando con la base de datos antes de conectar el Arduino.

Hardware

El autor ha utilizado mandos RF   comerciales  que vienen con 3 tomas de corriente, abriendo el mando a distancia para iknteractuar directamente con el chip de 433 MHz en el interior. Las instrucciones para esto aquí .

También puede comprar transmisores 433 MHz individuales listos para su uso en eBay o de los proveedores de electrónica de hobby. Todo lo que necesitas es conectar el VCC a 5 V en el Arduino, los GNDs, y un único pin de control

 El plugin funciona mediante el envío de “códigos de tres estados”, pero éstas pueden variar según el fabricante. Consulte la documentación RCSwitch para encontrar sus claves exactas.Esta guía wiki puede ayudar también.

La comunicación con el Arduino se hace usando una biblioteca de nodo llamado duino . Detenga la aplicación Heimcontrol si se está ejecutando e instalar el puente Arduino con el siguiente comando.

npm instalar duino

El Arduino debe tener el código cargado – Le sugiero que copiar y pegar para instalarla desde un equipo diferente. Básicamente se trata de un programa de escucha que responde a comandos de serie del Pi, pero no hay nada que le impida que se extiende con sus propias características.

 

Con la aplicación web en marcha, vaya a la configuración del menú -> Arduino .

ajustes del menú heimcontrol cómo construir un sistema domótico con Raspberry Pi y Arduino

Desde allí se puede agregar un elemento nuevo, la elección de método RCSwitch, el pasador de su transmisor, y el código de dirección de tres estados. Recuerde guardar, y luego regresar a la pantalla de la pantalla principal de su nuevo botón.

rcswitch estableciendo Cómo construir un sistema domótico con Raspberry Pi y Arduino

Insectos:

Después de muchas horas de depuración del código,el autor  encontró números de un solo dígito pin no funcionaban – asegúrese de que su transmisor se coloca en el pin 10 para estar seguro.

También encontró que el plugin Arduino fue codificado con los bits finales incorrectos para los códigos de tres estados mis receptores necesarios. Una pequeña explicación primero:los códigos de estado triple consta de 3 bytes de información.

  • La primera nos determina el número de red (1-4),
  • El segundo proporciona la dirección transceptor (de nuevo, 1-4, produciendo un máximo de 16 tomas direccionables).
  • El byte final consta de dos bits de relleno, además de 2 bits para encendido / apagado.

 Por desgracia, el último byte está codificada en el plugin de Arduino – y en puede  que el código de encendido / apagado sea incorrecto.

Para solucionarlo hay que  editar manualmente los plugins / arduino / index.js utilizar los códigos correctos. Si usted está usando las mismas tomas de control remoto cambiar las líneas 80 en adelante a:

/ / Enviar código RC
 si  ( tema . valor )  { 
  volver que . pins [ artículo . pin ] . TriState ( tema . Código +  "FFFF" ) ; / / cambio de FF0F
 }  más  { 
  retorno que . pins [ artículo . pin ] . TriState ( tema . Código +  "FFF0" ) ; / / cambio de FF00
 }

Aquí está un vídeo de demostración de todo trabajo:

Un estupendo trabajo !enhorabuena James M!

Fuente aqui